{-| Module : Control.Flower.Compose Description : Directional composition combinators -} module Control.Flower.Compose ((<.), (.>)) where {- $setup >>> import Control.Flower.Apply.Lazy >>> let x = 3 >>> let y = 4 >>> let f = (+2) >>> let g = (*2) >>> let h = (+) -} {-| Right-flowing, left-associative composition Note that this is the opposite direction from typical composition >>> (f .> g) x == (g . f) x True Can be combined with application combinators >>> 5 |> (+1) .> (*10) :: Int 60 -} infixl 9 .> (.>) :: (a -> b) -> (b -> c) -> a -> c a .> b = b . a {-| Left-flowing, right-associative composition >>> (g <. f) x == (g . f) x True Can be combined with application combinators >>> (+1) <. (*10) <| 5 :: Int 51 -} infixr 9 <. (<.) :: (b -> c) -> (a -> b) -> a -> c b <. a = b . a