Skip to content

Template Haskell reification with mkName doesn't work right

Marc Weber writes: this doesn't work:

-- packages: template-haskell
{-# OPTIONS_GHC -XTemplateHaskell #-}
module Main where
import Language.Haskell.TH

data A a = A a

type C = A Int

data ABC = ABC Int

$(do
  a <- reify $ mkName "C"
  report False $ show a
  return []
  )
main = print ""

Produces output

|| [1 of 1] Compiling Main             ( test.hs, test.o )
||
test.hs|1| `C' is not in scope at a reify

Using mkName "A" results in

test.hs|1 error|
||     DataConI Main.A (ForallT [a_1627391370] [] (AppT (AppT ArrowT (VarT a_1627391370)) (AppT (ConT Main.A) (VarT a_1627391370)))) Main.A (Fixity 9 InfixL)

as expected

Why do I need it? I'd like to implement kind of very basic relational data representation the way IxSet is doing it but without dynamics..

It will look like this:

type CDs = Table (Autoinc, Artist, Title, Year) -- col types
                 (Artist, Title, Year) -- keys
                 () -- is detail of
type Tracks = Table (Autoinc, Title, RecordingDate)
                    (Title, RecordingDate)
                    (CDs)
$(mkDB ["CDs","Tracks"])

To be able to automatically derive

insert{CDs,Tracks}
delete{CDs,Tracks}
update{CDs,Tracks}

functions I need to get information about those types.. Is this possible?

Thanks Marc Weber

Trac metadata
Trac field Value
Version 6.8.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Template Haskell
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown
Architecture Unknown
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information