2009-04-12 6 views
15

同じ中置演算子(<*>)を使用する2つの異なるHaskellモジュール間で名前の衝突があります。 Haskell 98のレポートによると、Haskellでシンボルの修飾名を書くにはどうすればいいですか?

modid.varsym 

が許可されていますが、動作させることはできません。ここでは、それらの全体ではTest.hsです:

module Test 
where 

import qualified Test2 as T 

three = T.<*> 

Test2.hs

module Test2 
where 
(<*>) = 3 

しかし、エラーメッセージで結果をコンパイルしようとしている:

Test.hs:6:12: parse error on input `T.<*>' 

私はT.(<*>)を試してみましたが、それは動作しません。どちらか。

import qualifiedでインポートされたモジュールで定義されているシンボリック名を参照するにはどうすればよいですか?

答えて

15

は、それは整数として中置演算子を定義するために奇妙な

three = (T.<*>) 

を試してみてください。さんは\\を考えてみましょう(設定差オペレータ):

import qualified Data.List as L 

foo = [1..5] L.\\ [1..3] -- evaluates to [4,5] 
diff = (L.\\) 

あなたは上記を参照できるように、L.\\は、資格の中置演算子です。中置演算子としても機能します。値として使用するには、全体をかっこで囲みます。

+0

奇妙な、しかし、私は可能な例は、同じくらい簡単にするためにしようとしていた。その資格をインポートする

import T ((<*>)) 

は同じです。 –

5

ラップされた括弧のシンボルをインポートすることを忘れないでください。例えば。確かに

import qualified T as Q 

main = print (Q.<*>) 
+0

これは奇妙な説明です...最初の行は残りの部分と実際には関係ありません。確かに最初の行は、「完全に適用されていない演算子はカッコで囲む必要があることを忘れないでください」。そして、 'f =(<*>)'と 'f =(M. <*>)'を比較してください。 – porges

関連する問題