import "Prelude" main = do print $ [1,2] \\ [] print $ [1,2,3] \\ [1] print $ [1,2,3] \\ [2] print $ [1,2,3] \\ [2,3] -- [1, 2] [2, 3] [1, 3] [1] () -- import "Prelude" assertEquals :: Show a => a -> a -> () assertEquals a b = if a == b then () else fail "\(a) <> \(b)" testGrouping outVal f l = do kl = map (\v -> (f v, v)) l groups = group kl print groups assertEquals groups (groupBy f l) i1 = fromMaybe [] . index groups i2 = indexGroup kl i3 = indexGroupBy f l keys = map fst groups + [outVal] for keys $ \k -> do assertEquals (i1 k) (i2 k) assertEquals (i1 k) (i3 k) main = do testGrouping 4 (`mod` 3) [2,4,6,8,10] -- [(2, [2, 8]), (1, [4, 10]), (0, [6])] ()