public
Created

  • Download Gist
unionAll-naive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
unionAll :: (Ord a) => [[a]] -> [a]
unionAll xs =
let
xs' = filter (not.null) xs -- | filter empty lists, if any
in
if null xs' -- | if nothing is left after filtering
then [] -- | return the empty list
else -- | otherwise
let
next = minimum (map head xs') -- | find the minimum of head elements
-- | they are minimum values in their respective lists
-- | so this is the minimum of every list
xs'' = map (dropWhile (next==)) xs' -- | remove that value from every list
-- | (no need to filter this time, since lists are ordered)
in next : unionAll xs'' -- | recursively call unionAll on xs''

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.