Est-il possible de mettre en œuvre une classe de type comme suit:Puis-je différencier les instances de classe de type lors de l'exécution?
class SomeClass e where
isEq :: (SomeClass e') => e -> e' -> Bool
où isEq x y
reviendriez vrai quand x
et y
sont tous les deux la même instance de cette classe de type?
Contexte: Il s'agit d'une tentative à peine voilée d'obtenir des tests de type à l'exécution. Au début, j'ai lu que Haskell a un effacement de type, j'ai aussi lu cela avec des extensions récentes de GHC, des informations sur l'exécution.
edit: pour ceux qui s'interrogent sur mon utilisation ... J'ai utilisé la programmation au niveau du type pour assurer certaines propriétés de certains de mes ADT, à savoir l'utilisation des ressources. Ces ressources sont représentées par des types distincts (et les verrous de ressources sont implémentés en conséquence au niveau du type).
Je tente d'écrire une procédure d'optimisation qui nécessite l'identification de l'écriture/lecture des ressources. Mais puisque toutes mes ressources sont représentées par des singletons distincts, dont le seul facteur commun (à l'exception de toutes les valeurs qui sont en bas) est le type de classe qui les regroupe.
En un mot, je veux utiliser les résultats de ma programmation de niveau type à un niveau de valeur d'exécution.
Connaissez-vous [Data.Typeable] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Typeable.html)? Cela semble pertinent ... –
La question est trompeuse. Vous semblez vouloir, et les réponses fournir, un moyen de différencier les types lors de l'exécution. Je m'intéresse à l'autre question: peut-on énumérer les classes habitées par un type particulier à l'exécution. –
@ ThomasM.DuBuisson Il n'y a pas de quantification sur les typeclasses (c'est-à-dire qu'il n'y a pas de variables de type typeclass dans haskell), donc c'est peu probable. – permeakra