bunzip :: [(a,b)] -> ([a],[b])
bunzip []         = ([],[])
bunzip ((a,b):xs) = let (as,bs) = bunzip xs
                    in  (a:as,b:bs)

bmap :: (a -> b) -> [a] -> [b]
bmap f = foldr g []
    where g y ys = f y : ys

bunzip2 :: [(a, b)] -> ([a], [b])
bunzip2 = foldr g ([],[])
    where g (x,y) (xs,ys) = (x:xs, y:ys)

bmap2 :: (a -> b) -> [a] -> [b]
bmap2 f = foldr ((:) . f) []

