Use GHC's GeneralizedNewtypeDeriving
Implement mapIdentityT