Question

Essayer de créer une classe de base à partir de laquelle je peux tirer différents types. Quel est le problème avec ce qui suit?

class (Eq a) => MyClass a 

data Alpha = Alpha
instance MyClass Alpha where
    Alpha == Alpha = True

Je reçois l'erreur:

test.hs:5:10: `==' is not a (visible) method of class `MyClass'
Failed, modules loaded: none.
Était-ce utile?

La solution

Vous devez faire Alpha une instance de Eq explicitement. Cela fonctionne:

data Alpha = Alpha
instance Eq Alpha where
    Alpha == Alpha = True
instance MyClass Alpha

Autres conseils

La première ligne indique que vous devez déclarer Alpha une instance de l'équation, puis de MyClass.

Sur la base de la structure de la question, il semble que vous vous attendez à Haskell à se comporter de classes de types d'une manière similaire à des classes dans un langage orienté objet. Sont plus comme classes de types d'interfaces Java.

Il n'y a pas d'héritage. Une classe de types est simplement une description d'un ensemble de fonctions qui sont mises en œuvre pour un type. Contrairement à une interface Java, ces fonctions peuvent être définies en termes de l'autre, de sorte qu'une déclaration d'instance minimale complète ne peut être nécessaire de définir certaines des fonctions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top