2011-06-04 86 views
9

是否可以使用數字參數創建一個類型?數字類型簽名

也就是說,如果我想創建一個類型整數與一固定位寬:

newtype FixedWidth w = FixedWidth Integer 

addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (w+1) 
mulFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (2*w) 

這樣的類型檢查只允許FixedWidth S上的相同類型的被相加或相乘,也確定結果的正確精度。

我知道你可以做這樣的事情:

data Nil = Nil 
data Succ x = Succ 

addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (Succ w) 

和代表人數4爲,但是這是令人難以置信的醜陋。我還需要弄清楚如何爲乘法結果類型附加兩個Succ

回答