[Haskell-cafe] Functors [Comments from OCaml Hacker Brian Hurt]
jonathanccast at fastmail.fm
Sun Jan 18 00:41:11 EST 2009
On Sat, 2009-01-17 at 12:04 +0000, Andrew Coppin wrote:
> Eugene Kirpichov wrote:
> > No, a functor is a more wide notion than that, it has nothing to do
> > with collections.
> > An explanation more close to truth would be "A structure is a functor
> > if it provides a way to convert a structure over X to a structure over
> > Y, given a function X -> Y, while preserving the underlying
> > 'structure'", where preserving structure means being compatible with
> > composition and identity.
> As far as I'm aware, constraints like "while preserving the underlying
> structure" are not expressible in Haskell.
> > instance (Monad m) => Functor m where
> > fmap f ma = do a <- ma; return (f a)
> While that's quite interesting from a mathematical point of view, how is
> this "useful" for programming purposes?
Good Lord. fmap (as above) is *at least* useful enough to be in the
standard library! (Control.Monad.liftM). Contrary to what some people
seem to think, every single function in Haskell's standard library was
included because enough people found it actually *useful* enough to add.
Here's the first example I found, searching the source code for my macro
Macro-call interpolation has syntax §(expression), parsed by
lexParens $ Interpolation <$> parseExpr
lexParens $ fmap Interpolation $ parseExpr
= do 
fmap Interpolation $ lexParens $ parseExpr
 The only simplifications applied were (a) ignoring an interpolation
syntax substantially more complicated, and (b) re-naming the relevant
 Valid because lexParens is a natural transformation.
More information about the Haskell-Cafe