【发布时间】:2011-08-27 21:15:18
【问题描述】:
我正在尝试学习一些模板 Haskell。作为练习,我编写了一个函数,它可以生成像isLeft 和isRight 之类的东西(灵感来自this question)。这是我卑微的尝试:
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 |] ) []
]
问题是我必须写$(isA [| Left |]) 而不是更直观的isA Left。是否有可能摆脱丑陋的语法?我似乎无法在文档中找到答案。
该函数仅适用于单参数构造函数,但这是针对another question。
【问题讨论】: