Próbuję nauczyć się jakiegoś szablonu Haskella. Jako ćwiczenie napisałem funkcję, która może generować rzeczy takie jak isLeft
i isRight
(inspirowane przez this question). Oto moja skromna próba:
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 |]) []
]
Problemem jest to, że muszę napisać $(isA [| Left |])
zamiast bardziej intuicyjny isA Left
. Czy można pozbyć się brzydkiej składni? Nie mogę znaleźć odpowiedzi w dokumentacji.
Funkcja działa tylko z jednoargumentowymi konstruktorami, ale jest to dla another question.
Dzięki. Z pewnością mogę z tym żyć. Pamiętam, że przeczytałem gdzieś, że '$' nie jest już potrzebne do splotów, ale nie jestem pewien, w jakim kontekście był, ani czy może się tutaj zastosować. –
@ n.m. Właśnie dodałem to do mojej odpowiedzi przed chwilą :) Sądzę, że wciąż przeglądałeś moją oryginalną odpowiedź podczas pisania twojego komentarza. – hammar
aha, więc jeśli chcę, aby 'isA 'Left' wygenerował deklarację funkcji o nazwie' isALeft' zamiast rzeczywistej funkcji, mogę pominąć $, prawda? –