数字类型签名

时间:2011-06-04 19:51:10

标签: haskell types type-systems type-level-computation

是否可以使用数字参数创建类型?

即。如果我想创建一个具有固定位宽的整数类型:

newtype FixedWidth w = FixedWidth Integer

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

因此,类型检查器只允许添加或相乘相同类型的FixedWidth,但也可以确定结果的正确精度。

我知道你可以这样做:

data Nil = Nil
data Succ x = Succ

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

并将数字4表示为Succ (Succ (Succ (Succ Nil)))),但这非常难看。我还需要弄清楚如何为乘法结果类型附加两个Succ

1 个答案:

答案 0 :(得分:10)

您正在寻找的功能是类型级自然,被称为Haskell的-XTypeNats扩展名。

目前这可能仅在GHC的实验分支中。我认为很可能会将7.4合并到GHC中。

进一步阅读: