在Haskell数据类型中使用Data.Array

Toy*_*rii 3 haskell

我一直在开发一些使用Data.Array来使用多维数组的代码,现在我想将这些数组放入数据类型中,所以我有这样的东西

data MyType = MyType { a :: Int, b :: Int, c :: Array }
Run Code Online (Sandbox Code Playgroud)

Data.Array有类型:

(Ix i, Num i, Num e) => Array i e
Run Code Online (Sandbox Code Playgroud)

"e"可以是任何类型,而不仅仅是Num.

我确信我完全错过了一个概念.

我该如何做到这一点?与Int,Num,String等不同的Data.Array类型有什么特别之处?

谢谢您的帮助!

ham*_*mar 11

Array不是一种类型.它是一个类型构造函数.它有种类 * -> * -> *,这意味着你给它两种类型来获得一个类型.你可以把它想象成一个函数.类似Int的类型*.(Num是一个类型类,这是完全不同的东西).

你宣称c自己是一个记录的领域,即c是一个价值.价值观必须具有某种类型*.(实际上还有几种类型的未装箱值,但现在不用担心).

因此,您需要提供两个类型参数来为其创建类型c.您可以选择两种具体类型,也可以添加类型参数MyType以允许在其他位置进行选择.

data MyType1 = MyType { a, b :: Int, c :: Array Foo Bar }
data MyType2 i e = MyType { a, b :: Int, c :: Array i e }
Run Code Online (Sandbox Code Playgroud)

参考