[@Juan](https://forum.azimuthproject.org/profile/2083/Juan%20Manuel%20Gimeno) -

> the _boilerplate_ code in

[Kleisli puzzle](https://forum.azimuthproject.org/discussion/comment/17174/#Comment_17174) finishes abrupty with

`import Control.Monad ((`, so I think there are some lines missing.

> I've also needed to change`Applicative m` to `Monad m` because it is needed for `Keisli m` to be a 'Category'.

> Would you mind revising it?

Okay, I fixed it. It should read:

You figured it out without the hint of course... next time I promise to make a PR.

> I've also needed to change`Applicative m` to `Monad m` because it is needed for `Keisli m` to be a 'Category'.

For the `CatFunctor` instance for `LeftK`, all it needs it that `m` be an applicative, since it just calls `pure` and doesn't use bind in any way. But I see now that's confusing.

> The code I have is:

>

>

> And the error I get has to do with functional dependencies:

>

>

Okay, it's my bad again. There shouldn't be any functional dependencies in `CatAdjunction` (we are going to have to give types for everything like it's Java sadly).

--------------------------------------------

**You are very close**. You just need to fix the definition you gave for `catRightAdjunct`.

> the _boilerplate_ code in

[Kleisli puzzle](https://forum.azimuthproject.org/discussion/comment/17174/#Comment_17174) finishes abrupty with

`import Control.Monad ((`, so I think there are some lines missing.

> I've also needed to change`Applicative m` to `Monad m` because it is needed for `Keisli m` to be a 'Category'.

> Would you mind revising it?

Okay, I fixed it. It should read:

import Control.Category

import Control.Monad ((<=<)) -- Hint!

import Prelude hiding ((.))

You figured it out without the hint of course... next time I promise to make a PR.

> I've also needed to change`Applicative m` to `Monad m` because it is needed for `Keisli m` to be a 'Category'.

For the `CatFunctor` instance for `LeftK`, all it needs it that `m` be an applicative, since it just calls `pure` and doesn't use bind in any way. But I see now that's confusing.

> The code I have is:

>

>

instance Monad m => CatAdjunction (->) (Kleisli m) LeftK (RightK m) where

catLeftAdjunct f = RightK . f . LeftK

catRightAdjunct f = unRightK . f . unLeftK

> And the error I get has to do with functional dependencies:

>

>

• Illegal instance declaration for

‘CatAdjunction (->) (Kleisli m) LeftK (RightK m)’

The liberal coverage condition fails in class ‘CatAdjunction’

for functional dependency: ‘f -> g’

Reason: lhs type ‘LeftK’ does not determine rhs type ‘RightK m’

Un-determined variable: m

• In the instance declaration for

‘CatAdjunction (->) (Kleisli m) LeftK (RightK m)’

Okay, it's my bad again. There shouldn't be any functional dependencies in `CatAdjunction` (we are going to have to give types for everything like it's Java sadly).

class ( CatFunctor x f y

, CatFunctor y g x

) => CatAdjunction x y f g where

catLeftAdjunct :: (f a `y` b) -> (a `x` g b)

catRightAdjunct :: (a `x` g b) -> (f a `y` b)

--------------------------------------------

**You are very close**. You just need to fix the definition you gave for `catRightAdjunct`.