Credo che il titolo è già auto esplicativo, ma ecco un esempio in ogni caso per dimostrare il mio punto:Perché GHC avvisa solo sulle classi implementate parziali e non sull'errore?
class Foo a where
someFunction :: a -> a -> Bool
instance Foo Bool
Quando compilo questo il compilatore dà un avvertimento:
Warning:
No explicit method or default declaration for `someFunction'
in the instance declaration for `Foo Bool'
Chiamando la funzione sarà ora causare un errore di runtime. Perché questo è un avvertimento e non un errore in fase di compilazione? E c'è un modo per rendere questo un errore in fase di compilazione, invece?
Non sarebbe sufficiente nell'esempio precedente per specificare correttamente il pragma MINIMAL per correggere un avviso/errore? Cioè nell'esempio sopra aggiungendo '{- # MINIMAL _simpleFn | complexFn # -} 'renderebbe anche il compilatore felice, e quindi non fornisce ancora una ragione per i metodi mancanti per dare un avvertimento invece di un errore. – Tiddo
@ Tiddo: la vera ragione è probabilmente storica. Detto questo, si può applicare una patch ['warnMissingMethodOrAT'] (https://github.com/ghc/ghc/blob/33cfa5ff9db4e7886b3e7c2eed5ac1c75436bc4c/compiler/typecheck/TcInstDcls.hs#L1614-L1622) per creare il comportamento desiderato. È possibile presentare una richiesta di un problema/funzione. – Zeta