Add liftData function.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Mon, 4 May 2015 22:24:34 +0000 (15:24 -0700)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Fri, 29 May 2015 00:37:03 +0000 (17:37 -0700)
Summary:
See https://mail.haskell.org/pipermail/libraries/2015-April/025480.html
for the proposal and discussion

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: austin

Subscribers: bgamari, thomie

Differential Revision: https://phabricator.haskell.org/D879

libraries/template-haskell/Language/Haskell/TH/Quote.hs

index 39cd2ba..66ee115 100644 (file)
@@ -16,6 +16,7 @@ that is up to you.
 module Language.Haskell.TH.Quote(
         QuasiQuoter(..),
         dataToQa, dataToExpQ, dataToPatQ,
+        liftData,
         quoteFile
     ) where
 
@@ -88,14 +89,19 @@ dataToQa mkCon mkLit appCon antiQ t =
 
 -- | 'dataToExpQ' converts a value to a 'Q Exp' representation of the
 -- same value, in the SYB style. It is generalized to take a function
--- override type-specific cases; a useful default is 'const Nothing'
--- for no overriding.
+-- override type-specific cases; see 'liftData' for a more commonly
+-- used variant.
 dataToExpQ  ::  Data a
             =>  (forall b . Data b => b -> Maybe (Q Exp))
             ->  a
             ->  Q Exp
 dataToExpQ = dataToQa conE litE (foldl appE)
 
+-- | 'liftData' is a variant of 'lift' in the 'Lift' type class which
+-- works for any type with a 'Data' instance.
+liftData :: Data a => a -> Q Exp
+liftData = dataToExpQ (const Nothing)
+
 -- | 'dataToPatQ' converts a value to a 'Q Pat' representation of the same
 -- value, in the SYB style. It takes a function to handle type-specific cases,
 -- alternatively, pass @const Nothing@ to get default behavior.