1
有沒有什麼辦法讓單個TH功能,定義一個類型,並使用類型?下面的相關代碼。 PersonPoly2
由makeRecordSplice
定義,然後傳遞給makeAdaptorAndInstance
(來自Opalaye),這也是TH函數。如何在TemplateHaskell函數中定義一個類型並在同一個函數中使用它?
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Lib where
import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
import Language.Haskell.TH
makeRecordSplice :: Q [Dec]
makeRecordSplice = [d|
data PersonPoly2 a b = Person2
{ id :: a
, name :: b
}
|]
makeRecordAndAdapter :: Q [Dec]
makeRecordAndAdapter = do
record <- makeRecordSplice
adapter <- makeAdaptorAndInstance "pPerson2" (mkName "PersonPoly2")
return $ record ++ adapter
-------------
/home/Projects/scratch/app/Main.hs:26:1: error:
‘PersonPoly2’ is not in scope at a reify
Failed, modules loaded: Lib.
O.P.試圖調用monad中的TH函數。這是錯誤的:TH正在創建必須出現在程序頂層的聲明。所以你的回答是正確地把接頭放在頂層。 – AntC