dav*_*k01 4 polymorphism haskell types list static-polymorphism
我不明白为什么我不能构建一个看起来像[1,"1",1.1]
haskell 的列表.我不认为它是静态类型阻碍因为我认为head
现在会有一个不明确的类型,但后来我想到了它并没有理由运行时系统不会实例化不同版本的head
任何时候list被输入到它中,因此head [1,"1",1.1]
将被输入List->Int
,head (tail [1,"1",1.1])
并将被输入为List->String
.由于运行时已经进行了大量的簿记,为什么它不提供各种前奏函数的更好的多态(或它是通用的)版本?我在这里错过了什么?
Sco*_*est 16
这确实是打字阻止了这一点.考虑列表的定义(注意类型参数a
,类型中缺少该参数):
data List a = Nil | Cons a (List a)
Run Code Online (Sandbox Code Playgroud)
在Cons a (List a)
您可以看到列表顶部的事物类型必须与其后面的元素类型相同.要回答你的问题,你不会错过很多:正如你所说运行时可以做到的那样,但是在Haskell中你想在编译时做出这些打字决定,而不是运行时.
如果你想要异构列表,你可以看到Oleg Kiselyov在他的HList(=异构列表)工作中的一些魔法.它可能不是你想要的,但它是在同一个粗略的方向.
归档时间: |
|
查看次数: |
2232 次 |
最近记录: |