Sto cercando di imparare Template Haskell. Come esercizio, ho scritto una funzione che può generare cose come isLeft
e isRight
(ispirato a this question). Qui è il mio umile tentativo:
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 |]) []
]
Il problema è che devo scrivere $(isA [| Left |])
al posto del più intuitivo isA Left
. È possibile sbarazzarsi della brutta sintassi? Non riesco a trovare la risposta nella documentazione.
La funzione funziona solo con costruttori a un argomento, ma questo è per another question.
Grazie. Posso sicuramente conviverci. Ricordo di aver letto da qualche parte che "$" non è più necessario per le giunzioni, ma non sono sicuro di quale contesto fosse, o se possa applicarsi qui. –
@ n.m. L'ho appena aggiunto alla mia risposta un attimo fa :) Immagino che stavi ancora visualizzando la mia risposta originale mentre scrivevo il tuo commento. – hammar
aha, quindi se voglio 'isA 'Left' per generare una dichiarazione di una funzione chiamata' isALeft' invece della funzione effettiva, posso omettere $, giusto? –