|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.
Q Combinator - the queer bitd.
Reverse composition - found in Peter Thiemann's WASH. You might perfer to use (<<<) from Control.Categoty.
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 especially as
not a great name (calling it s' would take a very useful
A variant of the
D2 or dovekie combinator - the argument
order has been changed to be more satisfying for Haskellers:
(appro comb f g) x y
(f x) `comb` (g y)
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:
on = (appro comb f f)
Compose an arity 1 function with an arity 2 function. B1 - blackbird
Compose an arity 1 function with an arity 3 function. B2 - bunting