L Corbijn | 18 Feb 16:11 2013
Picon

Quasi quoting and global names (for haskell-src-exts-qq)

Hello,

In the haskell-src-exts quasi quoter there is some code to convert all names in `dataToQa` to global names. The reasoning is according to the source:

-- | The generic functions in 'Language.Haskell.TH.Quote' don't use global
-- names for syntax constructors. This has the unfortunate effect of breaking
-- quotation when the haskell-src-exts syntax module is imported qualified.
-- The solution is to set the flavour of all names to 'NameG'.
qualify :: Name -> Name
-- Need special cases for constructors used in string literals. Assume nearly
-- all else is a datatype defined in Syntax module of haskell-src-exts.
qualify n | ":" <- nameBase n = '(:)
{- snip: quite some excluded constructors -}
            | otherwise = Name (mkOccName (nameBase n)) flavour
{- snip: some code for the flavour -}

For the full source code see [1]. When fixing the pattern quasi quoter this qualification caused a long error (when using the quasi quoter). So in a simple attempt to fix it I replaced `qualify` with `id` and it all worked.

Now assuming that the qualification code was needed for some past version of GHC I would like to make the implementation dependent on the version of GHC. The only problem is that I haven't found the right version of GHC where this behaviour changed. Does somebody know at what version it was needed?

Greetings,
Lars Corbijn

[1] http://hackage.haskell.org/package/haskell-src-exts-qq-0.6.1
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users <at> haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
Geoffrey Mainland | 18 Feb 21:28 2013
Picon

Re: Quasi quoting and global names (for haskell-src-exts-qq)

I believe I fixed this problem in Language.Haskell.TH.Quote for the
7.4.1 release. The fix is in revision c4c250 of the template-haskell
library.

Geoff

On 02/18/2013 03:11 PM, L Corbijn wrote:
> Hello,
>
> In the haskell-src-exts quasi quoter there is some code to convert all
names in `dataToQa` to global names. The reasoning is according to the
source:
>
> -- | The generic functions in 'Language.Haskell.TH.Quote' don't use global
> -- names for syntax constructors. This has the unfortunate effect of
breaking
> -- quotation when the haskell-src-exts syntax module is imported
qualified.
> -- The solution is to set the flavour of all names to 'NameG'.
> qualify :: Name -> Name
> -- Need special cases for constructors used in string literals. Assume
nearly
> -- all else is a datatype defined in Syntax module of haskell-src-exts.
> qualify n | ":" <- nameBase n = '(:)
> {- snip: quite some excluded constructors -}
> | otherwise = Name (mkOccName (nameBase n)) flavour
> {- snip: some code for the flavour -}
>
> For the full source code see [1]. When fixing the pattern quasi quoter
this qualification caused a long error (when using the quasi quoter). So
in a simple attempt to fix it I replaced `qualify` with `id` and it all
worked.
>
> Now assuming that the qualification code was needed for some past
version of GHC I would like to make the implementation dependent on the
version of GHC. The only problem is that I haven't found the right
version of GHC where this behaviour changed. Does somebody know at what
version it was needed?
>
> Greetings,
> Lars Corbijn
>
> [1] http://hackage.haskell.org/package/haskell-src-exts-qq-0.6.1

Gmane