gpt4 book ai didi

list - 为什么haskell没有异构列表

转载 作者:行者123 更新时间:2023-12-02 02:48:52 26 4
gpt4 key购买 nike

我不明白为什么我不能构建一个看起来像 [1,"1",1.1] 的列表在 haskell 。我不认为这是静态类型的障碍,因为我认为 head现在会有一个定义错误的类型,但后来我考虑了一下,运行时系统没有理由不实例化 head 的不同版本。每当将列表输入其中时,head [1,"1",1.1]将输入为 List->Inthead (tail [1,"1",1.1])将输入为 List->String .既然运行时已经做了很多簿记,为什么它不提供各种 prelude 函数的更漂亮的多态(或者它是通用的)版本呢?我在这里缺少什么?

最佳答案

确实是打字阻止了这种情况。考虑列表的定义(注意类型参数 a ,它在您的类型中缺失):

data List a = Nil | Cons a (List a)

Cons a (List a)可以看到列表头部的事物类型必须与它后面的元素类型相同。要回答您的问题,您并没有遗漏很多:正如您所说的运行时可以做到,但是在 Haskell 中,您希望在编译时而不是运行时做出这些类型决定。

如果您想要异构列表,您可以在 Oleg Kiselyov 的著作 HList 中看到一些魔法。 (= 异构列表)。它可能不完全是您想要的,但它的方向大致相同。

关于list - 为什么haskell没有异构列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4601620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com