-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Write more understandable Haskell. -- -- Flow provides operators for writing more understandable Haskell. It is -- an alternative to some common idioms like ($) for function -- application and (.) for function composition. @package flow @version 1.0.2 -- | Flow provides operators for writing more understandable Haskell. It is -- an alternative to some common idioms like ($) for function -- application and (.) for function composition. -- -- Flow is designed to be imported unqualified. It does not export -- anything that conflicts with the base package. -- --
-- >>> import Flow ---- --
-- (x |> f) == f x ---- --
-- (x |> f |> g) == g (f x) ---- -- Left-associative apply operator. Read as "apply forward" or -- "pipe into". Use this to create long chains of computation that -- suggest which direction things move in. -- --
-- >>> 3 |> succ |> recip |> negate -- -0.25 ---- -- Or use it anywhere you would use (&). (|>) :: a -> (a -> b) -> b -- |
-- (f <| x) == f x ---- --
-- (g <| f <| x) == g (f x) ---- -- Right-associative apply operator. Read as "apply backward" or -- "pipe from". Use this to create long chains of computation that -- suggest which direction things move in. You may prefer this operator -- over (|>) for IO actions since it puts the last -- function first. -- --
-- >>> print <| negate <| recip <| succ <| 3 -- -0.25 ---- -- Or use it anywhere you would use ($). (<|) :: (a -> b) -> a -> b -- |
-- apply x f == f x ---- -- Function application. This function usually isn't necessary, but it -- can be more readable than some alternatives when used with -- higher-order functions like map. -- --
-- >>> map (apply 2) [succ, recip, negate] -- [3.0,0.5,-2.0] --apply :: a -> (a -> b) -> b -- |
-- (f .> g) x == g (f x) ---- --
-- (f .> g .> h) x == h (g (f x)) ---- -- Left-associative compose operator. Read as "compose forward" or -- "and then". Use this to create long chains of computation that suggest -- which direction things move in. -- --
-- >>> let f = succ .> recip .> negate -- -- >>> f 3 -- -0.25 ---- -- Or use it anywhere you would use (>>>). (.>) :: (a -> b) -> (b -> c) -> (a -> c) -- |
-- (g <. f) x == g (f x) ---- --
-- (h <. g <. f) x == h (g (f x)) ---- -- Right-associative compose operator. Read as "compose backward" -- or "but first". Use this to create long chains of computation that -- suggest which direction things move in. You may prefer this operator -- over (.>) for IO actions since it puts the last -- function first. -- --
-- >>> let f = print <. negate <. recip <. succ -- -- >>> f 3 -- -0.25 ---- -- Or use it anywhere you would use (.). (<.) :: (b -> c) -> (a -> b) -> (a -> c) -- |
-- compose f g x == g (f x) ---- -- Function composition. This function usually isn't necessary, but it -- can be more readable than some alternatives when used with -- higher-order functions like map. -- --
-- >>> let fs = map (compose succ) [recip, negate] -- -- >>> map (apply 3) fs -- [0.25,-4.0] --compose :: (a -> b) -> (b -> c) -> (a -> c) -- |
-- (x !> f) == seq x (f x) ---- --
-- (x !> f !> g) == let y = seq x (f x) in seq y (g y) ---- -- Left-associative apply' operator. Read as "strict apply -- forward" or "strict pipe info". Use this to create long chains of -- computation that suggest which direction things move in. -- --
-- >>> 3 !> succ !> recip !> negate -- -0.25 ---- -- The difference between this and (|>) is that this evaluates -- its argument before passing it to the function. -- --
-- >>> undefined |> const True -- True -- -- >>> undefined !> const True -- *** Exception: Prelude.undefined --(!>) :: a -> (a -> b) -> b -- |
-- (f <! x) == seq x (f x) ---- --
-- (g <! f <! x) == let y = seq x (f x) in seq y (g y) ---- -- Right-associative apply' operator. Read as "strict apply -- backward" or "strict pipe from". Use this to create long chains of -- computation that suggest which direction things move in. You may -- prefer this operator over (!>) for IO actions since -- it puts the last function first. -- --
-- >>> print <! negate <! recip <! succ <! 3 -- -0.25 ---- -- The difference between this and (<|) is that this evaluates -- its argument before passing it to the function. -- --
-- >>> const True <| undefined -- True -- -- >>> const True <! undefined -- *** Exception: Prelude.undefined --( b) -> a -> b -- |
-- apply' x f == seq x (f x) ---- -- Strict function application. This function usually isn't necessary, -- but it can be more readable than some alternatives when used with -- higher-order functions like map. -- --
-- >>> map (apply' 2) [succ, recip, negate] -- [3.0,0.5,-2.0] ---- -- The different between this and apply is that this evaluates its -- argument before passing it to the function. -- --
-- >>> apply undefined (const True) -- True -- -- >>> apply' undefined (const True) -- *** Exception: Prelude.undefined --apply' :: a -> (a -> b) -> b