Estoy tratando de aprender algo de Template Haskell. Como ejercicio, escribí una función que puede generar cosas como isLeft
y isRight
(inspirada en this question). Aquí es mi humilde intento:
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 |]) []
]
El problema es que tengo que escribir $(isA [| Left |])
en lugar de la más intuitiva isA Left
. ¿Es posible deshacerse de la sintaxis fea? Parece que no puedo encontrar la respuesta en la documentación.
La función solo funciona con constructores de un argumento, pero esto es para another question.
Thanks. Definitivamente puedo vivir con eso. Recuerdo leer en alguna parte que '$' ya no es necesario para los empalmes, pero no estoy seguro de en qué contexto se trataba, o si se puede aplicar aquí. –
@ n.m. Acabo de añadir eso a mi respuesta hace un momento :) Supongo que todavía estabas viendo mi respuesta original mientras escribía tu comentario. – hammar
aha, así que si quiero 'isA 'Left' para generar una declaración de una función llamada' isALeft' en lugar de la función real, puedo omitir $, ¿verdad? –