diff options
author | RyanGlScott <ryan.gl.scott@gmail.com> | 2015-10-13 00:43:32 -0500 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2015-10-13 00:43:42 -0500 |
commit | d2f9972a35ce05ceb8a78893e433ef1df06f73ef (patch) | |
tree | bc3cee0ec99aacd64298993fde590c017734c6e6 /testsuite/tests/th/T10796a.hs | |
parent | 94ef79a766a1f58a5daadcf7dbb342812cd1a9bd (diff) | |
download | haskell-d2f9972a35ce05ceb8a78893e433ef1df06f73ef.tar.gz |
Make dataToQa aware of Data instances which use functions to implement toConstr
Trac #10796 exposes a way to make `template-haskell`'s `dataToQa` function
freak out if using a `Data` instance that produces a `Constr` (by means of
`toConstr`) using a function name instead of a data constructor name. While
such `Data` instances are somewhat questionable, they are nevertheless present
in popular libraries (e.g., `containers`), so we can at least make `dataToQa`
aware of their existence.
In order to properly distinguish strings which represent variables (as opposed
to data constructors), it was necessary to move functionality from `Lexeme` (in
`ghc`) to `GHC.Lexeme` in a new `ghc-boot` library (which was previously named
`bin-package-db`).
Reviewed By: goldfire, thomie
Differential Revision: https://phabricator.haskell.org/D1313
GHC Trac Issues: #10796
Diffstat (limited to 'testsuite/tests/th/T10796a.hs')
-rw-r--r-- | testsuite/tests/th/T10796a.hs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/testsuite/tests/th/T10796a.hs b/testsuite/tests/th/T10796a.hs new file mode 100644 index 0000000000..6c1ac8c78c --- /dev/null +++ b/testsuite/tests/th/T10796a.hs @@ -0,0 +1,15 @@ +{-# LANGUAGE TemplateHaskell #-} +module T10796a where + +import Data.Ratio +import Data.Set (Set, fromList) +import Language.Haskell.TH.Syntax (liftData) + +-- Data instance with toConstr implemented using a variable, +-- not a data constructor +splicedSet :: Set Char +splicedSet = $(liftData (fromList "test")) + +-- Infix data constructor +splicedRatio :: Ratio Int +splicedRatio = $(liftData (1 % 2 :: Ratio Int)) |