pat*_*pat 9 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)
Run Code Online (Sandbox Code Playgroud)
因此,类型检查器只允许FixedWidth添加或相加相同类型的s,但也确定结果的正确精度.
我知道你可以这样做:
data Nil = Nil
data Succ x = Succ
addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (Succ w)
Run Code Online (Sandbox Code Playgroud)
并代表数字4 Succ (Succ (Succ (Succ Nil)))),但这非常难看.我还需要弄清楚如何Succ为乘法结果类型附加两个s.
Don*_*art 10
您正在寻找的功能是类型级自然,被称为-XTypeNatsHaskell 的扩展.
目前,这可能仅在GHC 的实验部门.我认为很可能会将7.4合并到GHC中.
进一步阅读: