1

ここにある Vector タイプを使用してレイ データ タイプを実装しようとしています: http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial#Importing_the_library

Vector は double のみを保持するため、Vector タイプのボックス化されていないバージョンを使用したいと思います。

コンパイルしようとしているコードは次のとおりです。

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.
4

2 に答える 2

6

モジュールは、保存したい型を引数として取るData.Vector.Unboxed型コンストラクターをエクスポートします。VectorこのモジュールVectorの名前も に変更したため、この型の修飾名はVector.Vector. double の 2 つのベクトルが必要であると仮定すると、次のように使用する必要があります。

data Ray = Ray (Vector.Vector Double) (Vector.Vector Double)
于 2012-06-10T18:34:56.927 に答える
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を追加する必要があります (例: )。VectorVector.null ...

于 2012-06-10T18:38:01.803 に答える