2012-06-10 28 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 ...)。