|Portability||to be determined|
Plainly named combinators
Sometimes permuted to be generally useful...
Note the fixity of
(##) is not yet fixed.
Some experience needs to be gathered as to whether the
precendence levels are appropriate.
- (#) :: a -> (a -> b) -> b
- (##) :: (a -> b) -> (b -> c) -> a -> c
- subst :: (a -> b -> c) -> (a -> b) -> a -> c
- bigphi :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
- appro :: (c -> d -> e) -> (a -> c) -> (b -> d) -> a -> b -> e
- oo :: (c -> d) -> (a -> b -> c) -> a -> b -> d
- ooo :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
- oooo :: (e -> f) -> (a -> b -> c -> d -> e) -> a -> b -> c -> d -> f
The real stuff
T combinator - thrush
Reverse application - the T combinator. Found in Peter Thiemann's Wash and the paper 'Client-Side Web Scripting in Haskell' - Erik Meijer, Daan Leijen & James Hook.
S combinator - subst.
Familiar as Applicative's (
<*>) operator, which itself is
f (b -> c) -> f b -> f c where f = ((->) a)
The big Phi, or Turner's
Known to Haskell programmers as liftA2 and liftM2 for the
Applicative and Monad instances of (->).
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r where m = ((->) a)
Taste suggests you may prefer liftA2.
A variant of the
D2 or dovekie combinator - the argument
order has been changed to be more satisfying for Haskellers.
appro is similar to the function
prod from the Pair
appro applies the first argument
f :: (c -> d -> e) to the two intermediate results.
prod always forms a pair from the intermediate results.
on from Data.Function is similar but less general, where
the two intermediate results are formed by applying the same
function to the supplied arguments.
Compose an arity 1 function with an arity 2 function. B1 - blackbird
Compose an arity 1 function with an arity 3 function. B2 - bunting