Proposal: Lifting to TExpQ

Simon Peyton Jones simonpj at microsoft.com
Mon Jan 15 09:00:22 UTC 2018


I agree too. I've created
https://ghc.haskell.org/trac/ghc/ticket/14671

Now all we need is someone to execute on it.

Simon

|  -----Original Message-----
|  From: Michael Sloan [mailto:mgsloan at gmail.com]
|  Sent: 14 January 2018 22:14
|  To: Dan Burton <danburton.email at gmail.com>
|  Cc: Simon Peyton Jones <simonpj at microsoft.com>; Haskell Libraries
|  <libraries at haskell.org>
|  Subject: Re: Proposal: Lifting to TExpQ
|  
|  Cool!  Yeah, the name bikeshedding on typedLift vs liftT is that
|  "lift" is already too transformer-ey for my taste, and liftT makes it
|  even moreso.
|  
|  Also, I realized I mistyped the type of 'lift', it should be 'Lift t
|  => t -> Q Exp'.
|  
|  -Michael
|  
|  On Sun, Jan 14, 2018 at 12:05 PM, Dan Burton
|  <danburton.email at gmail.com> wrote:
|  > +1 to Michael's suggestion; that's basically the same thing I would
|  > +have
|  > suggested, modulo bikeshedding.
|  >
|  > On Jan 13, 2018 15:03, "Michael Sloan" <mgsloan at gmail.com> wrote:
|  >
|  > Hmm, I'm not sure about changing the Lift class, there are good
|  > reasons to leave it the same and good reasons to change as well.
|  > There is a lot of precedent for providing safe functions which use
|  > unsafe functions (e.g. unsafeDupablePerformIO in bytestring / text).
|  > Also, not much of the TH API uses TExp, just typed splices.  On the
|  > other hand, it does make the method's type stronger and directly
|  > suggest more properties.  It may encourage people to use typed
|  splices
|  > to define manual instances, which I think is good.
|  >
|  > I propose a somewhat less breaking change, defining the following:
|  >
|  >     class Lift t where
|  >       typedLift :: t -> Q (TExp t)
|  >
|  >     lift :: Lift t => t -> Q t
|  >     lift = fmap unType . typedLift
|  >
|  > The advantage of this is that a lot more code depends on usage of
|  > 'lift' than defining instances of 'Lift'.  A lot of the code that
|  > defines instances of 'Lift' does it via the 'th-lift' package.  I
|  > believe that only a handful of packages would need to be updated as
|  a
|  > result of this change, vs the dozens that would need to be updated
|  by
|  > changing the type of 'lift'.
|  >
|  > Even after this change, I think that since 'TExp' is only useful
|  with
|  > typed splices, the 'lift' form would still find much more usage as
|  the
|  > more convenient function.
|  >
|  > -Michael
|  > _______________________________________________
|  > Libraries mailing list
|  > Libraries at haskell.org
|  >
|  https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.h
|  > askell.org%2Fcgi-
|  bin%2Fmailman%2Flistinfo%2Flibraries&data=02%7C01%7Cs
|  >
|  imonpj%40microsoft.com%7C1a64d01a0c6141a3e75808d55b9c27dc%7C72f988bf86
|  >
|  f141af91ab2d7cd011db47%7C1%7C0%7C636515648605968445&sdata=%2FsPADsgmpl
|  > J2zKS3q8oPC4HUwrU7P3VQrutIODMIjsY%3D&reserved=0
|  >
|  >


More information about the Libraries mailing list