Как избавиться от $ (…) и [| … |] Синтаксис при использовании функции Template Haskell?

Я пытаюсь изучить шаблонный 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 . Можно ли избавиться от уродливого синтаксиса? Кажется, я не могу найти ответ в документации.

Функция работает только с конструкторами с одним аргументом, но это для другого вопроса .

12
задан Community 23 May 2017 в 12:19
поделиться