[Matthew wrote](https://forum.azimuthproject.org/profile/1818/Matthew%20Doty)

> You skipped past puzzle #1 and answered #2!

I was suspecting that !! My _fault_ was not to arrive to page 27 and _feeling_ the right type for `l` ;-)

> Consider `flip (>>=) :: Monad m => (a -> m b) -> m a -> m b` ...

Yes, yesterday I also thought about flipping `>>=` parameters but I got distracted by monads and comonads :-D.

And yes, I think this works because then, if we interpret the type of `=<<` in the "preorder language", we get:

$$

p \le g(f(p\prime)) => g(f(p)) \le g(f(p\prime))

$$

And this can be proved by:

From \\(p \le g(f(p\prime)) \\); by monotonicity of both \\(f\\) and \\(g\\) we have \\( g(f(p)) \le g(f(g(f(p\prime)))) \\); and then the isomorphism \\( g(f(g(f(p\prime)))) \cong g(f(p\prime)) \\) gives us \\( g(f(p)) \le g(f(p\prime)) \\).

Thanks !!!!

> You skipped past puzzle #1 and answered #2!

I was suspecting that !! My _fault_ was not to arrive to page 27 and _feeling_ the right type for `l` ;-)

> Consider `flip (>>=) :: Monad m => (a -> m b) -> m a -> m b` ...

Yes, yesterday I also thought about flipping `>>=` parameters but I got distracted by monads and comonads :-D.

And yes, I think this works because then, if we interpret the type of `=<<` in the "preorder language", we get:

$$

p \le g(f(p\prime)) => g(f(p)) \le g(f(p\prime))

$$

And this can be proved by:

From \\(p \le g(f(p\prime)) \\); by monotonicity of both \\(f\\) and \\(g\\) we have \\( g(f(p)) \le g(f(g(f(p\prime)))) \\); and then the isomorphism \\( g(f(g(f(p\prime)))) \cong g(f(p\prime)) \\) gives us \\( g(f(p)) \le g(f(p\prime)) \\).

Thanks !!!!