[Haskell-cafe] Monadic correctness
David Menendez
dave at zednenem.com
Sat Oct 17 15:37:01 EDT 2009
On Sat, Oct 17, 2009 at 3:21 PM, Andrew Coppin
<andrewcoppin at btinternet.com> wrote:
> Suppose we have
>
> newtype Foo x
> instance Monad Foo
> runFoo :: Foo x -> IO x
>
> What sort of things can I do to check that I actually implemented this
> correctly? I mean, ignoring what makes Foo special for a moment, how can I
> check that it works correctly as a monad.
Anything which satisfies the monad laws is a monad. In other words, do you have:
return a >>= f = f a
m >>= return = m
(m >>= f) >>= g = m >>= (\a -> f a >>= g)
When I bother, I usually just work out the proofs by hand.
--
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>
More information about the Haskell-Cafe
mailing list