Sto leggendo Real World Haskell Pg 151, e ho fissò il seguente passaggio per più di un'ora:Qual è l'effetto dei sinonimi di tipo su istanze di classi di tipi? Che cosa fa il pragma di TypeSynonymInstances in GHC?
Ricordiamo che String è un sinonimo di [Char], che a sua volta è il tipo [a] dove Char è sostituito per il tipo parametro a. Secondo le norme Haskell 98, non c'è permesso di fornire un tipo in luogo di un parametro di tipo quando si scrive un'istanza. In altre parole, sarebbe legale per noi scrivere un'istanza per [a], ma non per [Char]. 16 commenti 5335
Semplicemente non sta affondando in. Fissando il the (free not pirated) copy of RWH chapter 6 vedo un sacco di altre persone sono davvero soffrendo con questo. Ancora non lo capisco dai commenti ...
In primo luogo, tutto ciò mi confonde, quindi per favore se senti di poter spiegare qualcosa su questo passaggio, o TypeSynonymInstances
per favore.
Ecco il mio problema:
Int
è un costruttore di datiString
è un costruttore di dati Etipo sinonimo
ora non posso rispondi a queste domande:
- Perché un sinonimo di tipo preclude la creazione del tipo di un membro di una classe di tipo (sto cercando una qualche ragione che probabilmente si riferisce alla compilazione o all'impianto di un sinonimo di tipo)?
- Perché i progettisti del linguaggio, non vogliono questa sintassi (sto chiedendo di ragionamento non molto ampio teoria o unicode matematica simboli).
- Vedo questa riga "il tipo [a] dove Char è sostituito per il parametro di tipo a", e voglio sapere perché non posso sostituirlo per questo "il tipo a dove Int è sostituito per il parametro di tipo a "".
Grazie!
Nel mio codice, ho trovato che usare le istanze di tipo sinonimo significa che voglio veramente usare 'newtype' (e forse derivato newtype generalizzato) invece di' type'. Se non hai familiarità con la differenza tra 'type' e' newtype', questo dovrebbe essere il tuo primo passo. – jrockway