Supponiamo che un progettista di librerie Haskell decida di utilizzare UndecidableInstances
per qualche motivo. La biblioteca si compila bene. Supponiamo ora che alcuni programmi utilizzino la libreria (come definisce alcune istanze delle sue classi di tipi), ma non usa l'estensione. Può accadere che la compilazione fallisca (non termina)?È possibile utilizzare localmente UndecidableInstances pragma ha conseguenze globali sulla conclusione della compilazione?
Se un tale scenario può accadere, sarei felice di vedere un esempio. Ad esempio, come mtl utilizza molto UndecidableInstances
, è possibile scrivere un programma che dipende da mtl (o qualsiasi altra libreria standard che utilizza l'estensione), non utilizza lo stesso UndecidableInstances
, ma non riesce a compilare a causa della indecidibilità?
Stavo giocando con la tua soluzione e sono riuscito a ridurlo a 'classe C a dove f :: a -> a' e' istanza C [[a]] => C [a] dove f = id' , che non ha bisogno di altre estensioni ma 'UndecidableInstances'. –
Dopo aver esaminato 'mtl', credo che non sia possibile causare il loop del compilatore usandolo. L'unica ragione per cui ha bisogno dell'estensione è perché alcune delle sue istanze non soddisfano la [Condizione di copertura] (http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/type-class-extensions.html# esempio-rules). Ma l'idea alla base della condizione è soddisfatta - tutte le variabili di tipo rhs possono essere desunte dalle dichiarazioni di istanza di 'mtl'. –
Huh, sono sorpreso 'C [[a]]' non richiede 'FlexibleContexts'. –