2011-07-30 61 views
3

我一直在開發使用Data.Array使用多維數組的一些代碼, 現在我要把這些數組到一個數據類型,所以我有這樣的事情在Haskell的數據類型使用Data.Array

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

Data.Array的類型是:

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

其中, 「E」 可以是任何類型的不只是民的。

我相信我完全錯過了一個概念。

我該如何做到這一點? 與Int,Num,String等不同的Data.Array類型有什麼特別之處?

感謝您的幫助!

+2

你在哪裏獲得'Array'的上下文? 'Num i,Num e'對我來說並不合適。 –

回答

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 } 

參考

4

您需要的類型變量ie添加到您的MyType

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