Sto guardando un tutorial sui parser in haskell https://www.youtube.com/watch?v=9FGThag0Fqs. La lezione inizia con la definizione di alcuni parser veramente di base. Questi devono essere usati insieme per creare più parser più tardi. Uno dei parser di base è elemento. Questo è usato per estrarre un carattere dalla stringa che stiamo analizzando.Perché utilizzare lambda anziché la corrispondenza del modello?
Tutti i parser hanno il tipo seguente:
type Parser a = String -> [(a, String)]
Il parser voce è definita in questo modo:
item :: Parser Char
item = \inp -> case inp of
[] -> []
(x:xs) -> [(x,xs)]
io non sono così abituato a questa sintassi, così sembra strano per me . Avrei scritto:
item' :: Parser Char
item' [] = []
item' (x:xs) = [(x,xs)]
test in ghci indica che sono uguali:
*Main> item ""
[]
*Main> item "abc"
[('a',"bc")]
*Main> item' ""
[]
*Main> item' "abc"
[('a',"bc")]
Il professore fa un commento breve di pensare sembra più chiaro, ma non sono d'accordo. Quindi le mie domande sono:
Sono davvero completamente identici? Perché la versione lambda è più chiara?
Direi che è una questione di gusti. – augustss