# Data.Combinators

Combinators that are thought to be at least situationally useful, mostly for
tacit (or point-free) programming. "To Mock a Mockingbird" refers to the book
"To Mock a Mockingbird and Other Logic Puzzles: Including an Amazing Adventure
in Combinatory Logic", by Raymond Smullyan (which the author of this module
hasn't actually read). See
http://www.angelfire.com/tx4/cus/combinator/birds.html and
https://hackage.haskell.org/package/data-aviary-0.4.0/docs/Data-Aviary-Birds.html
an (incomplete?) list of birds introduced.

reflex : (a -> a -> b) -> a -> b

  Warbler, as named in "To Mock a Mockingbird".
  See http://code.jsoftware.com/wiki/Vocabulary/tilde
  Equivalent to `join` on the Reader monad (`(->) e` in Haskell)

on : (b -> b -> c) -> (a -> b) -> a -> a -> c

  Psi combinator - psi bird (?) - Haskell on.

fork2 : (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d

  Phoenix, according to Data.Aviary.
  See http://code.jsoftware.com/wiki/Vocabulary/fork.
  Equivalent to `liftA2` on the Reader monad (`(->) e` in Haskell)

(...) : (c -> d) -> (a -> b -> c) -> a -> b -> d

  Blackbird, as named in "To Mock a Mockingbird". This is like
  function composition, but second function takes two arguments. See the talk
  "Point-Free or Die: Tacit Programming in Haskell and Beyond" by Amar Shah
  (https://youtu.be/seVSlKazsNk).

  Fixity
    Left associative, precedence 9