<div dir="ltr">Cross-posted from StackOverflow: <a href="http://stackoverflow.com/questions/44107336/how-to-define-a-type-in-a-templatehaskell-function-and-use-it-in-the-same-functi">http://stackoverflow.com/questions/44107336/how-to-define-a-type-in-a-templatehaskell-function-and-use-it-in-the-same-functi</a><div><br></div><div><div>Is there any way to have as single TH function, define a type, and use the type, as well? Relevant code below. `PersonPoly2` is being defined by `makeRecordSplice` and then being passed to `makeAdaptorAndInstance` (provided by Opalaye), which is also a TH function.</div><div><br></div><div>Relevant code given below:</div><div><br></div><div><br></div><div><div>    {-# LANGUAGE FlexibleContexts       #-}</div><div>    {-# LANGUAGE FlexibleInstances      #-}</div><div>    {-# LANGUAGE FunctionalDependencies #-}</div><div>    {-# LANGUAGE MultiParamTypeClasses  #-}</div><div>    {-# LANGUAGE OverloadedStrings      #-}</div><div>    {-# LANGUAGE TemplateHaskell        #-}</div><div>    </div><div>    module Lib where</div><div>    </div><div>    import           <a href="http://Data.Profunctor.Product.TH">Data.Profunctor.Product.TH</a>             (makeAdaptorAndInstance)</div><div>    import <a href="http://Language.Haskell.TH">Language.Haskell.TH</a></div><div>    </div><div>    makeRecordSplice :: Q [Dec]</div><div>    makeRecordSplice = [d|</div><div>      data PersonPoly2 a b = Person2</div><div>        { id :: a </div><div>        , name :: b</div><div>        }</div><div>      |]</div><div>    </div><div>    makeRecordAndAdapter :: Q [Dec]</div><div>    makeRecordAndAdapter = do</div><div>      record <- makeRecordSplice</div><div>      adapter <- makeAdaptorAndInstance "pPerson2" (mkName "PersonPoly2")</div><div>      return $ record ++ adapter</div><div>    </div><div>    </div><div>    -------------</div><div>    </div><div>    /home/Projects/scratch/app/Main.hs:26:1: error:</div><div>        ‘PersonPoly2’ is not in scope at a reify</div><div>    Failed, modules loaded: Lib.</div></div><div><br></div><div><br></div><div><br></div><div>-- Saurabh.</div></div></div>