All Monads are Functors

Conor McBride ctm at Cs.Nott.AC.UK
Sat Sep 30 07:41:42 EDT 2006

Ashley Yakeley wrote:
> Jon Fairbairn wrote:
>>> I think "joining up the classes" is a good idea,
>> Definitely -- as is slicing them into finer layers (of which
>> this is also an example).
> I have added a ticket for "joined-up classes":

So, with this arrangement, quite a lot of library functionality is
potentially affected (good!), especially if Traversable is also kicking
around, allowing us

  crush :: (Monoid t, Traversable f) => (s -> t) -> f s -> t

(1) Which library functions should just be binned?
(2) Which library functions should be retained but generalised (eg,
working for Applicative rather than Monad, or any Traversable f rather
than just [])? In particular, what happens to mapM?

Of course, there's a danger that such moves will raise the level of
sophistication required to get to grips with the library (revisiting the
map versus fmap debate).

I'm very much in favour of "joined-up classes", but it does leave us
with quite a lot to work through. How to proceed? What are the guidelines?

Meanwhile, I don't suppose you'll let me have the 'idiom bracket'
notation, [| .. |] or some such, with

  [| f a1 .. an |]

expanding to the old Welsh program (ap is the Welsh patronymic prefix)

  return f `ap` a1 `ap` .. `ap` an

Thought I might be pushing my luck. I know, it's frivolous extra syntax
serving only to improve the signal-to-noise ratio of code by a constant
factor, and that ain't enough.

All the best


This message has been checked for viruses but the contents of an attachment
may still contain software viruses, which could damage your computer system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.

More information about the Haskell-prime mailing list