0 | module Data.Category.Monad
3 | import Data.Category.NaturalTransformation
4 | import Data.Category.Functor
6 | %hide Prelude.Ops.infixl.(*>)
10 | record Monad (c : Category o) where
14 | μ : (endo *> endo) ==>> endo
24 | 0 square : (x : o) -> let
25 | top : endo.F (endo.F (endo.F x)) ~> endo.F (endo.F x)
26 | top = endo.F' _ _ (comp μ x)
27 | bot, right : endo.F (endo.F x) ~> endo.F x
30 | left : endo.F (endo.F (endo.F x)) ~> endo.F (endo.F x)
31 | left = comp μ (endo.F x)
32 | 0 arm2, arm1 : endo.F (endo.F (endo.F x)) ~> endo.F x
33 | arm1 = (top |> right) {cat = c}
47 | 0 identityLeft : (x : o) -> let
48 | 0 compose : endo.F x ~> endo.F x
49 | compose = (comp η (endo.F x) |> comp μ x) {cat = c}
50 | 0 straight : endo.F x ~> endo.F x
51 | straight = c.id (endo.F x)
52 | in compose === straight
54 | 0 identityRight : (x : o) -> let
55 | 0 compose : endo.F x ~> endo.F x
56 | compose = (endo.F' _ _ (comp η x) |> comp μ x) {cat = c}
57 | 0 straight : endo.F x ~> endo.F x
58 | straight = c.id (endo.F x)
59 | in compose === straight