ekmett/bound — pull request #6 by Saizan (2013-08-02 01:18:03+00:00)
Title: removed unneeded uses of Lift2

The uses of `Lift2` were always for types of the form `Lift2 Var X Y`, so the instances obtained for them were the same as the ones for `Var X Y`.

In particular we keep the intended meaning for Scope equality:

```
*Bound.Scope> let xs = abstract1 'a' "ab" >>>= \x -> [x,x]
*Bound.Scope> xs == toScope (fromScope xs)
True
*Bound.Scope> xs
Scope [B (),F "bb"]
*Bound.Scope> toScope (fromScope xs)
Scope [B (),F "b",F "b"]
```
Lift1 can't be removed instead, because we need `C (f a)` instances with only `C1 f` in the context.