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.\\是一个合格的中缀运算符; 它仍然作为中缀运算符.要将它用作值,请在整个事物周围加上括号.
请记住,我们导入符号包裹的parens.例如
import T ((<*>))
Run Code Online (Sandbox Code Playgroud)
所以导入合格是一样的:
import qualified T as Q
main = print (Q.<*>)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3029 次 |
| 最近记录: |