git.iko.soy/typeable/openapi3
on master help sign in
Make MonadDeclare laws look cooler
2ee81a7Nickolay Kudasov
src/Data/Swagger/Declare.hs+13−7
@@ -42,16 +42,22 @@ instance Monoid d => MonadTrans (DeclareT d) where
42 lift m = DeclareT (\_ -> (,) mempty <$> m)
42 lift m = DeclareT (\_ -> (,) mempty <$> m)
43
43
44-- |
44-- |
45−-- Laws:
45+-- Definitions of @declare@ and @look@ must satisfy the following laws:
46--
46--
47−-- @
47+-- [/monoid homomorphism (mempty)/]
48−-- declare mempty == return ()
48+-- @'declare' mempty == return ()@
49−-- declare x >> declare y == declare (x <> y)
50--
49--
51−-- declare x >> look == fmap (<> x) look <* declare x
50+-- [/monoid homomorphism (mappend)/]
51+-- @'declare' x >> 'declare' y == 'declare' (x <> y)@
52+-- for every @x@, @y@
52--
53--
53−-- look >> m == m
54+-- [/@declare@-@look@/]
54−-- @
55+-- @'declare' x >> 'look' == 'fmap' (<> x) 'look' <* 'declare' x@
56+-- for every @x@
57+--
58+-- [/@look@ as left identity/]
59+-- @'look' >> m == m@
60+-- for every @m@
55class Monad m => MonadDeclare d m | m -> d where
61class Monad m => MonadDeclare d m | m -> d where
56 -- | @'declare' x@ is an action that produces the output @x@.
62 -- | @'declare' x@ is an action that produces the output @x@.
57 declare :: d -> m ()
63 declare :: d -> m ()