module Reduce where infixl 5 >>> -- Using >>> instead of >> to avoid problems with 1.3 Prelude type Reduce s s' = s -> s' unitR :: Reduce s s unitR = id (>>>) :: Reduce s s' -> Reduce s' s'' -> Reduce s s'' f >>> g = g . f mapR :: (a->Reduce s s) -> [a] -> Reduce s s mapR f [] = unitR mapR f (x:xs) = f x >>> mapR f xs