我想在两个不同的Haskell模块之间使用相同的中缀运算符(<*>
)进行名称冲突.Haskell 98报告说
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
?
尝试
three = (T.<*>)
将中缀运算符定义为整数是很奇怪的.让我们考虑\\
(设置差异运算符):
import qualified Data.List as L foo = [1..5] L.\\ [1..3] -- evaluates to [4,5] diff = (L.\\)
如您所见,L.\\
是一个合格的中缀运算符; 它仍然作为中缀运算符.要将它用作值,请在整个事物周围加上括号.
请记住,我们导入符号包裹的parens.例如
import T ((<*>))
所以导入合格是一样的:
import qualified T as Q main = print (Q.<*>)