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的另一個問題。
謝謝,工作! –