Я пытаюсь изучить некоторые шаблоны Haskell. В качестве упражнения я написал функцию, которая может генерировать такие вещи, как isLeft
и isRight
(вдохновленные этим вопросом). Вот моя скромная попытка:
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
. Можно ли избавиться от уродливого синтаксиса? Я не могу найти ответ в документации.
Функция работает только с конструкторами с одним аргументом, но это для другого вопроса.