我知道,Haskell有paramaterized数据类型类型:限制一个类型Paramater可以采取在数据声明
data Maybe a = Nothing | Just a
但是,有没有办法来限制排序是a
可以表示类型?特别是,我想创建一个类型
data Tag a = Tag a
这样a
可以采取要么TagPrimitive
或类型TagComplex
(但是,我不希望它是可能的,a
是类型类型,例如,Integer
或String
或在我的程序中没有意义的东西)。
这可能吗?
我想我有点困惑:为什么要有'Tag'类型呢?你是在寻找'type Tag = TagPrimitive TagComplex'(或者可能是'Tag Tag = Primitive TagPrimitive | Complex TagComplex') - 也就是一个* single *类型,它可以包含TagPrimitive或TagComplex的值类型 - 而不是? –
是的,我很困惑,你说得对。你提到的这两种选择中哪一种更具惯用性? – George
这取决于使用了一下。另请参阅[此问题](http://stackoverflow.com/q/19072930/791604),了解您为什么更喜欢自定义数据声明的一些讨论。 –