2012-06-10 59 views
1

我想實現使用這裏找到矢量型射線數據類型:http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial#Importing_the_library如何使用Unboxed矢量?

的載體將只持有雙打,所以我想用矢量型無盒裝版本。

這裏是代碼我試圖編譯:

module Main where 

    import qualified Data.Vector.Unboxed as Vector 

    data Ray = Ray Data.Vector.Unboxed Data.Vector.Unboxed 

我得到的錯誤是

Not in scope: type constructor or class `Data.Vector.Unboxed' 
Failed, modules loaded: none. 

回答

6

模塊Data.Vector.Unboxed出口類型構造Vector這需要作爲參數,你想要的類型儲藏。由於您也將該模塊重命名爲Vector,因此此類型的限定名稱爲Vector.Vector。假設你要雙打的兩個向量,因此,應該用這樣的:

data Ray = Ray (Vector.Vector Double) (Vector.Vector Double) 
6

通常情況下,當你輸入的東西,你不喜歡這樣寫道:

import Data.Foo -- A module that contains "data Bar = Bar ..." 

myfunction = Bar 3 2 4 -- Use Bar 

正如你所看到的,你可以直接訪問Data.Foo模塊中的所有內容,就像在同一模塊中編寫代碼一樣。

可以替代進口的東西有資格,這意味着你必須指定完整模塊「路徑」來表示你是指每一次的事情你訪問它:

import qualified Data.Foo -- A module that contains "data Bar = Bar ..." 

myfunction = Data.Foo.Bar 3 2 4 -- Use Bar 

在這裏,你必須指定您正在訪問的數據類型的完整「路徑」,因爲該模塊已被導入爲合格。

還有另一種方式導入具有資格的東西;你可以指定模塊「路徑」像這樣一個別名:

import qualified Data.Foo as Foo -- A module that contains "data Bar = Bar ..." 

myfunction = Foo.Bar 3 2 4 -- Use Bar 

我們已經改名爲Data.Foo部分簡單地Foo。這樣,我們可以在引用數據構造函數時編寫Foo.Bar

您導入了模塊Data.Vector.Unboxed,其別名爲Vector。這意味着當您想要訪問Vector數據類型時,您必須使用Vector.Vector。我建議您導入矢量喜歡這個:

import Data.Vector.Unboxed (Vector) 
import qualified Data.Vector.Unboxed as Vector 

這樣,你直接導入Vector類型,這樣就可以在沒有任何模塊預選賽訪問它,但是當你想使用Vector功能,您需要添加前綴Vector(例如Vector.null ...)。