I'm trying to write a quasiquoter for some type declarations.
I've written something along the lines of
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH as TH
import Language.Haskell.TH.Quote
sample :: QuasiQuoter
sample =
let tName = TH.mkName "GenType"
conName = TH.mkName "GetType"
nameName = TH.mkName "name"
creator _ = return [TH.DataD [] tName [] [TH.RecC conName [(nameName, TH.NotStrict,TH.ConT ''String)]] [''Show, ''Eq]]
in QuasiQuoter { quoteDec = creator
, quotePat = undefined
, quoteType = undefined
, quoteExp = undefined }
Now I have the issue of trying to make that type "GenType" available. I've taken a look at the yesod source code (where they do routes), but it's a little opaque for me. How does one make a type available from a quasiquoter?