concrete functor and monad transformers

## #69Alternative instance for ContT

```
instance (Monoid r, Applicative m) => Alternative (ContT r m) where
empty = ContT $ const (pure mempty)
(ContT f) <|> (ContT g) = ContT $ \c -> liftA2 (<>) (f c) (g c)
```

Some ways this can be useful:

You're using

`ContT`

to implement a backtracking search.`r`

is`Maybe (First Result))`

for some`Result :: *`

.`a <|> b`

then means "try`a`

then try`b`

".You have a function

`inferType :: Expr a -> (a -> Type) -> Type`

where`Expr a`

represents an AST containing free variables in`a`

, and`(a -> Type)`

is an environment which maps free variables to their type.`Type`

has a monoid instance where`mempty`

is the type of bottom and`(<>)`

is unification; you form a`Cont Type a`

by way of`cont (inferType e)`

. Then`(<|>)`

will lift`(<>)`

from working in the empty environment to working in arbitrary ones.