Sono abbastanza nuovo nell'apprendimento di haskell, quindi non capisco il sistema di battitura quando si tratta di vincoli. C'è questo strano simbolo =>
che non ha senso per me. In realtà è solo sintassi? O è un costruttore di tipi? Non ne sono sicuro. Di seguito sono i miei pensieri a riguardo. Qualcuno può chiarire che cosa esattamente =>
significa in haskell?
In haskell, (->)
è un costruttore di tipi, con il tipo * -> * -> *
. Questo è bello, perché chiarisce perché, ad esempio, Double -> Bool
ha tipo *
. Ma poi mi sono chiesto tipi come (Integral a) => a -> a
. Chiaramente, questo tipo ha *
, e a -> a
ha tipo *
(credo). Poiché Integral
ha tipo * -> Constraint
, Integral a
deve avere il tipo Constraint
. Quindi, concludo che (=>)
ha un vincolo di tipo - > * - > *. Tuttavia, quando digito :k (=>)
in GHCi, viene visualizzato un errore ("errore di analisi su input = >")! Questo sembra indicare che (=>)
non è un costruttore di tipi. Allora cos'è?
GHCi mi dice anche che (Show List, Read List)
ha tipo Constraint
, ma che (,)
ha tipo * -> * -> *
, il che mi rende molto confuso. (,)
ha due definizioni? I vincoli sono magici hocus-pocus che non capisco?
Qualsiasi aiuto è molto apprezzato.