packages feed

ghc-exactprint-1.9.0.0: tests/examples/pre-ghc910/overloadedrecfldsrun04.hs

-- Test that DuplicateRecordFields works with TemplateHaskell

{-# LANGUAGE DuplicateRecordFields, TemplateHaskell #-}

import Language.Haskell.TH
import Language.Haskell.TH.Syntax

-- Splice in a datatype with field...
$(return [DataD [] (mkName "R") [] [RecC (mkName "MkR") [(mkName "foo", NotStrict, ConT ''Int)]] []])

-- New TH story means reify only sees R if we do this:
$(return [])

-- ... and check that we can inspect it
main = do  putStrLn $(do { info <- reify ''R
                         ; case info of
                             TyConI (DataD _ _ _ [RecC _ [(n, _, _)]] _) ->
                                 do { info' <- reify n
                                    ; lift (pprint info ++ "\n" ++ pprint info')
                                    }
                             _ -> error "unexpected result of reify"
                         })
           putStrLn $(do { info <- reify 'foo
                         ; case info of
                             VarI n _ _ ->
                                 do { info' <- reify n
                                    ; lift (pprint info ++ "\n" ++ pprint info')
                                    }
                         })
           print (foo (MkR { foo = 42 }))