我知道,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),瞭解您爲什麼更喜歡自定義數據聲明的一些討論。 –