Secondo Harper (https://existentialtype.wordpress.com/2011/04/16/modules-matter-most/), sembra che le Classi di tipo semplicemente non offrano lo stesso livello di astrazione che i Moduli offrono e sto avendo difficoltà a capire esattamente perché. E non ci sono esempi in questo collegamento, quindi è difficile per me vedere le differenze chiave. Ci sono anche altri documenti su come tradurre tra i moduli e classi Tipo (http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf), ma questo in realtà non hanno nulla a che fare con l'implementazione in prospettiva del programmatore (si dice solo che non ci sia qualcosa che si può fare che la altro non può emulare).(ML) Moduli vs (Haskell) Tipo Classi
particolare, nel first link:
La prima è che insistono che un tipo può implementare una classe tipo esattamente un modo. Ad esempio, secondo la filosofia di classi tipo, gli interi possono essere ordinati in modo esattamente una (il solito ordine), ma ovviamente ci sono molti ordinamenti (diciamo, da divisibilità) di interesse. Il secondo è che confondono due problemi separati: specificando come un tipo implementa una classe di caratteri e specificando quando tale specifica dovrebbe essere usata durante l'inferenza di tipo.
Non capisco neanche. Un tipo può implementare una classe di tipo in più di 1 modo in ML? Come avresti gli interi ordinati per divisibilità per esempio senza creare un nuovo tipo? In Haskell, dovresti fare qualcosa come usare i dati e avere il instance Ord
per offrire un ordinamento alternativo.
E il secondo, non sono i due sono distinti in Haskell? specificando "quando una tale precisazione deve essere usato durante l'inferenza di tipo" può essere fatto qualcosa di simile:
blah :: BlahType b => ...
dove BlahType è la classe in uso durante l'inferenza di tipo e non la classe di attuazione. Considerando che "come un tipo implementa una classe di tipo" è fatto usando instance
.
qualcuno può spiegare ciò che il link è veramente cercando di dire? Semplicemente non sto capendo perché i moduli sarebbero meno restrittivi rispetto alle classi di tipo.
In che modo ML risolve questa ambiguità? Sì, in Haskell finirai per doverlo avvolgere in un altro tipo. Ma come si comporta ML? "Un tipo può implementare una classe di tipo in più di 1 modo in ML? Come faresti gli interi ordinati per divisibilità per esempio senza creare un nuovo tipo?" non è davvero la risposta da questo. –
@RahulManne Non un programmatore ML * affatto *, ma credo che in sostanza ti permetta di nominare "istanze" e in particolare scegliere quale portare in ambito (usando moduli di prima classe per questo scopo piuttosto che classi di tipi). – Ben
@ Ben se questo è il caso, mi chiedo, è possibile fare una cosa simile dove si definisce l'istanza in un file diverso, e l'importazione di quel file utilizzerà solo quell'istanza? Ci proverò. –