[@Jim](https://forum.azimuthproject.org/profile/328/Jim%20Stuttard) -

For puzzle 1, the laws for `CatFunctor` should be the same as the laws for `Functor`. It needs to preserve `id` and `(.)`. In traditional Haskell, the laws are:


fmap id = id
fmap (f . g) = (fmap f) . (fmap g)


For puzzle 2, we always bump up against Haskell's lack of [*impredicative types*](https://wiki.haskell.org/Impredicative_types) when we want to do fancy stuff like this.

Morphisms in the Kleisli category for a monad `m` look like:

a -> m b


So if `\ a -> a :: a -> a` is the identity for `(->)`, what's the identity for `Kleisli m`?

Also, with regard to category composition `(.)`, I have a hint. They call [`(<=<)`](http://hackage.haskell.org/package/base-4.11.0.0/docs/Control-Monad.html#v:-60--61--60-) in `Control.Monad` the "right-to-left Kleisli composition", named after the paper I cited.