Add voidM to Control.Monad

Jurriën Stutterheim j.stutterheim at me.com
Mon Jan 16 16:56:57 CET 2012


It is indeed intended for monads that have no Functor instance. While one could argue that every monad should have a Functor instance, this is not the case in practice. If, on the other hand, Monad was defined as

  class Functor m => Monad m

then all would be fine and we would be able to use the current implementation for `void`. A Functor constraint on Monad is an entirely different discussion though.


Jurriën

On 16 Jan 2012, at 16:22, Erik Hesselink wrote:

> 2012/1/16 Simon Hengel <sol at typeful.net>:
>>> voidM :: Monad m => m a -> m ()
>>> voidM m = m >> return ()
>> 
>> Is voidM meant to be used with instance of Monad that are no monads, and
>> hence have no Functor instance (like HtmlM[1])?
> 
> You could easily implement a Functor instance for this type, since it
> would mirror the instance for `Const a` [2], i.e. only change the type
> parameter, and otherwise be the identity function.
> 
> Erik
> 
> [1] http://hackage.haskell.org/packages/archive/blaze-html/0.4.3.1/doc/html/Text-Blaze-Internal.html#t:HtmlM
> [2] http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Applicative.html#v:Const




More information about the Libraries mailing list