Ответ 1
Синтаксис существует по какой-то причине; чтобы сообщить читателю, что здесь происходит волшебство компиляции. Вы можете удалить только $(...)
, когда ваш сплайс находится на верхнем уровне.
Однако мы можем исключить [| ... |]
, а также сделать код более безопасным по типу, взяв Name
вместо Exp
:
isA nam = do
nn <- newName "p"
lamE [varP nn] $ caseE (varE nn) [
match (conP nam [wildP]) ( normalB [| True |] ) [],
match wildP ( normalB [| False |] ) []
]
Чтобы использовать это, напишите $(isA 'Left)
, что немного легче на глаза.
В качестве бонуса, если вы попытаетесь дать ему что-то иное, чем Name
, вы получите ошибку типа, а не ошибку неопровержимого соответствия шаблонов.
Смотрите также: Синтаксис шаблона Haskell