# #15: Simple Combinators

Tagged as challenge

Written on 2018-01-30

### Part 1

Implement the following combinators, high-order functions that are usually composed together. (Here we specify the type signatures in Haskell-like notation.)

1. (constantly x), a function which takes an argument x and produces a unary function which always returns x.
2. Using constantly, implement yes which always returns a true value, and no which always returns a false value.
3. (complement f), a function which takes a function returning a Boolean, and produces another function which does the same but with the Boolean inverted.
4. (conjunction f g) which returns a function which takes an argument and returns true iff both f and g are satisfied by x.
5. (disjunction f g) which is like conjunction but checks iff either f or g are satisfied by the input.

One should note the similarity between these functions and some of the basic unary and binary Boolean predicates.

### Part 2

Write out the type signature of each of the above functions.

### Part 3

Implement Fizz Buzz using these combinators.