如何在Haskell中定义数组类型

用户名

在大多数功能语言(包括Haskell)中,定义链接列表类型本身很简单:

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

但是,我在Haskell教程中找不到任何内容,这些教程显示了如何定义自己的数组类型。如何以一种定义自己的列表的方式定义数组数据类型?

注意:我的问题不是关于如何在Haskell中使用数组。从理论上讲,这仅仅是如何定义自己的数组类型,就像对进行的操作一样List,而无需使用任何类型的库或内置功能。

用户名

AFAIK,仅使用纯haskell不能实现具有O(1)键访问时间的容器。为此,需要进行原始内存分配和访问例程。当然可以使用纯函数结构(例如,映射)来模拟原始内存:

import Data.Map

type Ptr = Int
type StupidHeap = Map Ptr Byte

然后,可以使用此堆实现指针算术和类似c的数组。当然,这种容器的实际时间复杂度仍将保持对数。因此,像我的StupidHeap这样的仿真只是由编译器使用其自身的内置函数进行“优化”的。我相信,这可能是人们对ST monad的推理方式。如果您查看GHC的数组实现,将会看到大量的内建函数。

tl; dr:没有与编译器无关的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Go中遍历自定义类型的数组?

如何在Go中创建自定义类型元素的自定义类型数组?

Haskell中的数组用类型定义(不是数据)

如何在Raml中的外部文件中定义类型的数组?

如何在OpenAPI 2.0中定义混合类型的数组(具有不同的元素类型)?

如何在Haskell中触发类型错误?

如何在Dhall中定义和使用类似Haskell的求和类型

如何在Angular中定义Component的类型?

如何在Swift中的数组中存储2种类型的CGPath定义

如何在Swift中合并两个自定义类型数组并删除重复的自定义类型项?

如何在C ++中定义数组的数组

如何在Angular 5中定义数组数据类型

如何在类型定义中为GraphQL字段定义数组数据类型

如何在Elm中读取类型定义

如何在gitlab-ci中定义数组类型变量

如何在Haskell中得出构图类型

如何在Haskell中检查自定义数据类型列表的长度?

如何在打字稿中显式定义具有不同元组类型的元组数组?

如何在Julia中定义任何浮点类型的数组?

如何在Haskell中以多态的方式为多个类型编写多个函数定义?

Fortran 90,如何在子例程中使用派生类型中定义的数组

如何在Haskell中递归定义无限2D数组?

如何定义在SOAP中定义复杂类型数组的类型

如何在Java中将信息集(以用户定义的数据类型)添加到数组中

如何在Haskell中创建我的个人定义数据类型的值

如何在函数中定义对象类型?

如何在 React hooks-Typescript 中定义通用数组类型?

如何在 Haskell 中访问没有记录语法的自定义数据类型的字段?

如何在 Rust 中定义可以包含任何原始数据类型的数组或向量?