È possibile utilizzare GHCI
per capirlo.
In GHCI
, inserire let recipe = (== "000001")
. Ora possiamo vedere come funziona. Prova :t recipe
per vedere di che tipo si tratta. Questo restituisce recipe :: [Char] -> Bool
, quindi sembra che questa sia una funzione che prende un elenco di Char
s (a String
) e restituisce un Bool
.
Se lo verificate, troverete che restituisce False
per qualsiasi input eccetto "000001"
.
Poiché ==
è un operatore, è possibile applicarlo parzialmente a un argomento e restituirà una funzione che accetta l'altro argomento e restituisce il risultato. Quindi, qui == "000001"
restituisce una funzione che accetta un argomento per riempire l'altro lato di ==
e restituisce il risultato.
Modifica: Se la definizione fosse recipe = ((==) "000001")
questa spiegazione sarebbe corretta.
Per capire questo, è necessario cercare partial application. Il tipo della funzione ==
è a -> a -> Bool
, una funzione che accetta due argomenti dello stesso tipo e restituisce uno Bool
.
Ma è anche una funzione di tipo a -> (a -> Bool)
, che accetta un argomento di tipo a
e restituisce una nuova funzione con la firma a -> Bool
. Questo è quello che sta succedendo qui. Abbiamo fornito un argomento a ==
, quindi ha restituito una nuova funzione di tipo a -> Bool
o [Char] -> Bool
in questo caso particolare.
fonte
2013-02-13 23:55:16
'questa domanda sarà un risultato la prossima volta che qualcuno Google "Haskell (=="' No, non lo farà.Google ignora le punteggiature, googling per "Haskell (==" è lo stesso di googling di "Haskell" .Questo spiega anche perché non ti è stato utile durante la ricerca di questo: – sepp2k
sta solo controllando l'uguaglianza di una stringa. > ricetta "000001" e restituirà True –
@ sepp2k È interessante ... puoi spiegare come farei a Google una cosa simile? – CodyBugstein