Je suis conscient que Haskell a paramaterized types de données:Limiter les types que paramater Type peut prendre dans les données Déclarations
data Maybe a = Nothing | Just a
Mais est-il un moyen de limiter le genre de types qui a
peuvent désigner? En particulier, je voudrais créer un type
data Tag a = Tag a
tels que a
peut prendre soit le type TagPrimitive
ou le type TagComplex
(cependant, je ne veux pas qu'il soit possible que a
est de type, disons, Integer
ou String
ou quelque chose qui n'a aucun sens dans mon programme).
Est-ce possible?
Je suppose que je suis un peu confus: pourquoi avoir le type 'Tag' du tout? Cherchez-vous 'type Tag = Soit TagPrimitive TagComplex' (ou éventuellement' data Tag = Primitive TagPrimitive | Complex TagComplex') - c'est-à-dire, un type * single * qui peut contenir des valeurs de 'TagPrimitive' ou' TagComplex' types - à la place? –
Oui, j'étais confus, et vous avez raison. Est-ce que l'une de ces deux alternatives que vous avez mentionnées est plus idiomatique? – George
Cela dépend un peu de l'utilisation. Voir aussi [cette question] (http://stackoverflow.com/q/19072930/791604) pour une discussion sur les raisons pour lesquelles vous pourriez préférer la déclaration 'data' personnalisée. –