je la classe de types suivants (méthodes non pertinentes omis):définition minimale avec des fonctions dépendant
class Initializable a where
initialize :: IO a
initialize = return initializePure
{# convenience method for implementations, not to be called from outside #}
initializePure :: a
data Foo = Foo
instance Initializable Foo where
initializePure = Foo
data Bar = Bar
instance Initializable Bar where
initialize = initializeBar
Certaines implémentations ont besoin IO
de s'initialiser, d'autres pas.
Ce code donne un avertissement:
No explicit implementation for
‘initializePure’
In the instance declaration for ‘Initializable Bar’
J'ai essayé d'ajouter un MINIMAL
pragma comme ceci:
{-# MINIMAL initializePure | initialize #-}
Mais je reçois un avertissement différent:
The MINIMAL pragma does not require:
‘initializePure’
but there is no default implementation.
In the class declaration for ‘Initializable’
Mon intention est d'avoir Initializable
en fournissant soitinitialize
ou initializePure
, mais en utilisant uniquement initialize
en dehors de la définition.
Comment compiler le code proprement?
Qu'espérez-vous 'initializePure :: bar' être, dans le dernier cas? Il n'y a pas de mise en œuvre pour cela: pas dans l'instance, et pas dans la classe. – chi
@chi Je ne m'attends pas à ce que 'initializePure' soit appelé sauf' initialize'. J'ai modifié la question pour inclure cela. – Koterpillar