Proposal for template-haskell: Make Q an instance of Applicative

Edward Kmett ekmett at gmail.com
Mon Jul 11 23:57:58 CEST 2011


+1 to adding the Applicative and the constraint on Quasi.

On Fri, Jul 8, 2011 at 6:33 AM, Michael Snoyman <michael at snoyman.com> wrote:

> On Fri, Jul 8, 2011 at 12:56 PM, Bas van Dijk <v.dijk.bas at gmail.com>
> wrote:
> > Hello,
> >
> > The Q type:
> >
> > newtype Q a = Q { unQ :: forall m. Quasi m => m a }
> >
> > currently has an instance for Monad and Functor. I would like to
> > propose adding an instance for Applicative as well. Note that this
> > also means that the Quasi class needs to get an Applicative
> > superclass:
> >
> > class (Monad m, Applicative m, Functor m) => Quasi m where ...
> >
> > Discussion period: 2 weeks.
> >
> > Regards,
> >
> > Bas
> >
> > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org
> > http://www.haskell.org/mailman/listinfo/libraries
> >
> >
>
> +1. But wouldn't it be possible to do this without the Applicative
> superclass, using the Monad instance? Not saying we *should* do that,
> I'm in favor of your proposal exactly as-is.
>

Using the Monad constraint only, prevents you from working polymorphically
in the Quasi instance while using Applicative combinators. You wind up
having to carry around both instances. A burden would be borne by everyone
who uses TH, rather than the 2-3 people who write Quasi instances. ;)

-Edward
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20110711/d9d3d564/attachment.htm>


More information about the Libraries mailing list