【问题标题】:Using Data.Array in a Haskell Data Type在 Haskell 数据类型中使用 Data.Array
【发布时间】:2011-07-31 01:06:46
【问题描述】:

我一直在开发一些使用 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 等有什么不同?

感谢您的帮助!

【问题讨论】:

  • 您从哪里获得Array 的上下文? Num i, Num e 我觉得不合适。

标签: haskell


【解决方案1】:

Array 不是类型。这是一个类型构造函数。它有 kind * -> * -> * 这意味着你给它两种类型来获取一个类型。你可以把它想象成一个函数。像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 }

参考文献

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多