-- | Functions module Data.Function where import Prelude -- | (*) `on` f = \x y -> f x * f y. on :: (b -> b -> c) -> (a -> b) -> a -> a -> c on f g x y = f (g x) (g y) -- | The \"f\" is for \"Fay\", not \"Functor\" ;) fmap :: (a -> b) -> Fay a -> Fay b fmap f a = a >>= return . f -- | See '<*>'. ap :: Fay (a -> b) -> Fay a -> Fay b ap m g = do f <- m x <- g return (f x) -- | A la Control.Applicative. (<*>) :: Fay (a -> b) -> Fay a -> Fay b (<*>) = ap