Синтаксис существует по причине;сообщить читателю, что здесь происходит волшебство времени компиляции.Вы можете исключить $(...)
только тогда, когда ваше соединение находится на верхнем уровне.
Однако мы можем исключить [| ... |]
, а также сделать код более безопасным с помощью типа *, взяв 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