git.iko.soy/typeable/swagger2
on master help sign in
Make MonadDeclare laws look cooler
commit2ee81a771b6ec219327064fa1ed3d68840a77382 authorNickolay Kudasov <nickolay.kudasov@gmail.com> dateSat 12 Dec 2015, 03:30 (11 years ago) parent9ed7c0f
1 file changed+13−7
src/Data/Swagger/Declare.hs+13−7
src/Data/Swagger/Declare.hs+13−7
@@ -42,16 +42,22 @@ instance Monoid d => MonadTrans (DeclareT d) where
4242 lift m = DeclareT (\_ -> (,) mempty <$> m)
4343
4444-- |
45−-- Laws:
45+-- Definitions of @declare@ and @look@ must satisfy the following laws:
4646--
47−-- @
48−-- declare mempty == return ()
49−-- declare x >> declare y == declare (x <> y)
47+-- [/monoid homomorphism (mempty)/]
48+-- @'declare' mempty == return ()@
5049--
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@
5253--
53−-- look >> m == m
54−-- @
54+-- [/@declare@-@look@/]
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@
5561class Monad m => MonadDeclare d m | m -> d where
5662 -- | @'declare' x@ is an action that produces the output @x@.
5763 declare :: d -> m ()