[ gitignore ] *.o *.hi *.tar.gz
[ refactor ] A more intentional `Renaming a b`

* We move away from `Renaming a b` being a mere alias to `a -> b`
  to defining a GADT constraining precisely the shape of a renaming
  to the kind of patterns we encounter in the procedure.
  The semantics of the new `Renaming a b` corresponds precisely to
  what the way we interacted with the function space `a -> b` before
  except that it is now factored out in the `rename` defintion thus
  making the code clearer.