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.