
On Wed, Mar 23, 2005 at 09:49:43AM -0000, Simon Marlow wrote:
Does anyone else have any comments on the suggestions from Iavor and Thomas in this thread? I'm happy to make changes, but only if there's a concensus. The proposals so far seems to be
1) add dist method 2a) make Functor a superclass of FunctorM 2b) make Functor a *sub*class of FunctorM 2c) make Functor a subclass of Monad 2d) make Functor a superclass of Monad 3) rename FunctorM class to ForEach 4) rename FunctorM module to Control.Monad.FunctorM(?)
(1) is easy and not controversial (but is 'dist' the best name?).
fsequence:sequence = fmapM:mapM = fmap:map ? As long as we remember that it's not always a distributive law (join law fails, e.g. for []), and fmapM doesn't always define a functor (doesn't preserve composition of Kleisli arrows). 2a) is needed to provide the default definition fmapM f = fsequence . fmap f 2b-d) will break Haskell 98 programs. The placement in the hierarchy is a bit wierd. Another possibility (that you suggested earlier) is Data.Functor.