Skip to content

GHC sometimes ignores ' vs '' when quoting built-in names in TH

If I have

{-# LANGUAGE TemplateHaskell #-}

module Bug where

import Language.Haskell.TH

list = $( conE ''(:) `appE` litE (IntegerL 5) `appE` conE '[] )

this compiles, and evaluating list gives me [5].

But I would expect a failure, because no type exists named (:). (Important: I've used '' there, not ', which should work.)

I think that the problem is that isBuiltInOcc_maybe does not always check the namespace of the OccName it is looking up.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information