on master help sign in
Add Functor, Applicative, and Monad instances for Kleislimorphism
commit7c04687a9d5e73b66ca4eb93e89bd0fd8b68a56e authorhowtonotwin <rasheeqhere@gmail.com> dateMon 30 Apr 2018, 13:02 (8 years ago) parentcc54b7b
1 file changed+10
libs/base/Data/Morphisms.idr+10
libs/base/Data/Morphisms.idr+10
@@ -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