@@ -34,6 +34,16 @@ Semigroup (Endomorphism a) where
3434Monoid (Endomorphism a) where
3535 neutral = Endo id
3636
37+Functor f => Functor (Kleislimorphism f a) where
38+ map f (Kleisli g) = Kleisli (map f . g)
39+
40+Applicative f => Applicative (Kleislimorphism f a) where
41+ pure a = Kleisli $ const $ pure a
42+ (Kleisli f) <*> (Kleisli a) = Kleisli $ \r => f r <*> a r
43+
44+Monad f => Monad (Kleislimorphism f a) where
45+ (Kleisli f) >>= g = Kleisli $ \r => applyKleisli (g !(f r)) r
46+
3747Cast (Endomorphism a) (Morphism a a) where
3848 cast (Endo f) = Mor f
3949