3
我想学习一些模板哈斯克尔。作为练习,我写了一个函数,可以生成诸如isLeft
和isRight
(受this question启发)。这是我谦虚的尝试:如何检查模板Haskell中引用的数据构造函数名称?
isA connam = do
ConE nam <- connam
nn <- newName "p"
lamE [varP nn] $ caseE (varE nn) [
match (conP nam [wildP]) (normalB [| True |]) [],
match wildP (normalB [| False |]) []
]
的问题是,它只有一个参数的构造函数工作。罪魁祸首是conP nam [wildP]
模式。理想情况下,它应该看起来像conP nam (replicate (numArgs nam) wildP)
,其中numArgs
是一个函数,返回构造函数的参数个数。但是,我怎么写这样的功能呢?我想我需要访问相关的数据声明,但我不知道如何。
还有关于这个非常相同的功能here的另一个问题。
谢谢,工作! –