@@ -34,6 +34,16 @@ Semigroup (Endomorphism a) where
34Monoid (Endomorphism a) where
34Monoid (Endomorphism a) where
35 neutral = Endo id
35 neutral = Endo id
37+Functor f => Functor (Kleislimorphism f a) where
38+ map f (Kleisli g) = Kleisli (map f . g)
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
44+Monad f => Monad (Kleislimorphism f a) where
45+ (Kleisli f) >>= g = Kleisli $ \r => applyKleisli (g !(f r)) r
37Cast (Endomorphism a) (Morphism a a) where
47Cast (Endomorphism a) (Morphism a a) where
38 cast (Endo f) = Mor f
48 cast (Endo f) = Mor f