Discussion: Arities of <*> and *> for Monad instances
Edward Kmett
ekmett at gmail.com
Sun Nov 2 15:00:51 UTC 2014
It seems to me that lower arity definitions could be a good thing.
They'd permit the inliner to pull the definition in in more contexts.
There is a minor sublety around strictness in your example for Maybe.
There:
(<*>) undefined = undefined
whereas with the normal definition
(<*>) undefined = const undefined
But this is one of those rare cases where I don't think anyone can build up
a viable argument for where they've ever used that particular bit of
laziness, and in fact, the extra eta expansion wrapper has probably been a
source of subtle optimization pain for a long time.
Consider me a tentative +1 unless someone can come up with a deal breaker.
-Edward
On Sun, Nov 2, 2014 at 4:29 AM, David Feuer <david.feuer at gmail.com> wrote:
>
> http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Applicative.html
> says that
>
> The other methods have the following default definitions,
> which may be overridden with equivalent specialized
> implementations:
>
> u *> v = pure (const id) <*> u <*> v
>
>
> and
>
> If f is also a Monad, it should satisfy
>
> ...
> (<*>) = ap
>
>
> The (potential) trouble is that these have higher arities than is always
> natural. For example, it would seem reasonable to say
>
> (<*>) Just f = fmap f
> (<*>) Nothing = const Nothing
>
> and to replace the default definition of (*>) like so:
>
> (*>) a1 = (<*>) (id <$ a1)
>
> but these are not strictly equivalent because they have arity 1 instead of
> arity 2. Would such definitions be be better in some cases? If so, should
> we weaken the rules a bit?
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20141102/28468004/attachment.html>
More information about the Libraries
mailing list