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-188.8.131.52/docs/Control-Monad.html#v:-60--61--60-) in `Control.Monad` the "right-to-left Kleisli composition", named after the paper I cited.