
On Sun, Mar 05, 2006 at 09:53:02PM -0800, Ashley Yakeley wrote:
In article <20060305233414.GA8685@soi.city.ac.uk>, Ross Paterson
wrote: so I would also need
instance Functor ((->) a)
but where should it go? (The same instance occurs in Control.Monad.Reader, but that could be removed.)
The Prelude is to obvious place, since that's where both Functor and (->) are introduced.
Yes, but that would break compatibility with Haskell 98.
There may also be a case for a class with ap (<*>) but not return (pure), which might better be called "Applicative".
Do you have both instances and clients for this interface?
Well, no, but ap gives you (>>) (I'd forgotten this earlier):
OK, one client but no instances.
And can an associativity law even be stated?
On second thought, yes it can: fmap (.) u <*> v <*> w = u <*> (v <*> w)
Traversable looks like my ExtractableFunctor? <http://hbase.sourceforge.net/haddock/Org.Org.Semantic.HBase.Category.Ext ractableFunctor.html>
Yes it does, and also Meertens's "pullable functors" (though the higher-order version is often more efficient, especially for non-regular types).