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

时间:2011-07-30 16:22:32

标签: haskell

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

data MyType = MyType { a :: Int, b :: Int, c :: Array }

Data.Array的类型为:

(Ix i, Num i, Num e) => Array i e

“e”可以是任何类型,而不仅仅是Num。

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分: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 }

参考

答案 1 :(得分:4)

您需要将类型变量ie添加到MyType

data MyTYpe i e = MyType { a, b :: Int, c :: Array i e }