[Haskell-cafe] Re: what is inverse of mzero and return?
Keean Schupke
k.schupke at imperial.ac.uk
Sun Jan 23 07:21:43 EST 2005
Ashley Yakeley wrote:
> I think it would be helpful if all these classes came with their laws
>
>prominently attached in their Haddock documentation or wherever. The
>trouble with MonadPlus is that the precise set of associated laws is
>either unspecified or not the most useful (I assume there's a paper on
>the class somewhere). I think everyone can agree on these:
>
> mplus mzero a = a
> mplus a mzero = a
> mplus (mplus a b) c = mplus a (mplus b c)
>
>
I think it would be even better if the classes came with assertions
that 'enforced the laws'... I think this requires dependant types
though.
> mzero >>= a = mzero
>
>But what about this?
>
> a >> mzero = mzero
>
>
Well it was in the list I saw... I we consider the familar arithmetic
product
a * b * 0 -- it is clear that an mzero anywhere in a sequence should result
in mzero:
a >> b >> mzero >> c >> d = mzero
But that says nothing about the co-product... where mzero should be the
identity IE:
a `mplus` mzero = a
mzero `mplus` a = a
But I am not sure there are any requirements on commutivity or associativity
on the co-product operation?
>It's satisfied by [] and Maybe, but not IO (for instance, when a is
>'putStrLn "Hello"'), but IO has been declared an instance of MonadPlus.
>And then there are the two I gave:
>
>
> (mplus a b) >>= c = mplus (a >>= c) (b >>= c)
>
>
This was not on the list I saw - guess it could either be an omission,
or it has nothing to do with "MonadPlus" ... monads with identity and
co-product?
>...which is satisfied by [], but not Maybe or IO.
>
> mplus (return a) b = return a
>
>...which is satisfied by Maybe and IO, but not [], although your
>alternative declaration would make [] satisfy this and not the previous
>one.
>
>
But one could make up any arbitrary law that is satisfied by some
definition of a Monad and not others. Presumably there has to be
some sound category-theoretic reason for including the law?
Keean
More information about the Haskell-Cafe
mailing list