假设我有一个自定义的quasiquote,名为xpto:
[xtpo|data Something = Abc | Def deriving (Eq,Ord,Show,Enum,Bounded)|]
我想实际声明这个,但另外根据构造函数名称派生更多东西。最后一部分已完成(函数generateDataDefs,这里不相关),但我正在通过haskell-src-meta包含原始声明,这似乎是一个非常重的依赖。像这样:
xpto = QuasiQuoter { quoteDec = either (const . return $ []) generateDataDefs
. parseDecs }
我可以避免使用parseDecs而只使用模板Haskell吗?
PS:函数generateDataDefs接收[Dec],并将新代码附加到它:
generateDataDefs :: [Dec] -> Q [Dec]
generateDataDefs decData = let
(...)
in return $ decData ++ remainingStuff
答案 0 :(得分:1)
你不能使用quasiquoter,并让用户写
generateDataDefs =<< [d|data Something = Abc
| Def
deriving (Eq,Ord,Show,Enum,Bounded)|]