如何在Haskell中编写符号的限定名称?

Nor*_*sey 20 syntax haskell identifier qualified-name

我想在两个不同的Haskell模块之间使用相同的中缀运算符(<*>)进行名称冲突.Haskell 98报告说

modid.varsym
Run Code Online (Sandbox Code Playgroud)

是允许的,但我不能让它工作.这里完整的是Test.hs:

module Test
where

import qualified Test2 as T

three = T.<*>
Run Code Online (Sandbox Code Playgroud)

并且Test2.hs:

module Test2
where
(<*>) = 3
Run Code Online (Sandbox Code Playgroud)

但是尝试编译结果会出现错误消息:

Test.hs:6:12: parse error on input `T.<*>'
Run Code Online (Sandbox Code Playgroud)

我尝试过,T.(<*>)但这也不起作用.

如何引用由导入的模块中定义的符号名称import qualified

new*_*cct 19

尝试

three = (T.<*>)
Run Code Online (Sandbox Code Playgroud)

将中缀运算符定义为整数是很奇怪的.让我们考虑\\(设置差异运算符):

import qualified Data.List as L

foo = [1..5] L.\\ [1..3] -- evaluates to [4,5]
diff = (L.\\)
Run Code Online (Sandbox Code Playgroud)

如您所见,L.\\是一个合格的中缀运算符; 它仍然作为中缀运算符.要将它用作值,请在整个事物周围加上括号.


Don*_*art 5

请记住,我们导入符号包裹的parens.例如

import T ((<*>))
Run Code Online (Sandbox Code Playgroud)

所以导入合格是一样的:

import qualified T as Q

main = print (Q.<*>)
Run Code Online (Sandbox Code Playgroud)