Qui*_*mer 1 import haskell operators
我正在尝试编写一个 Haskell 模块,它使用 Data.List 中的设置差异运算符,但是当我尝试专门导入它parse error on input ‘\\’时,我在尝试导入我的模块时收到消息。
这是一个具有相同问题的示例模块:
module SetDiff (
setDiff
) where
-- import Data.List -- No error when this line is used
import Data.List (\\) -- Causes the parse error
setDiff l1 l2 = l1 \\ l2
Run Code Online (Sandbox Code Playgroud)
导入所有这些Data.List可以避免这个问题,但是有没有一种方法可以执行仅指定\\操作员的导入?
那么\\是一个operator,它将在窗帘后面调用相应的(\\) :: Eq a => [a] -> [a] -> [a]function,因此您需要导入函数名称,包括括号:
import Data.List ((\\))Run Code Online (Sandbox Code Playgroud)
毕竟,您导入了一个函数列表(以及其他元素,如类型、类型类等),而函数的“名称”是(\\),而不是\\。
所以在外括号之间,我们列出了我们想要导入的函数,而内括号,不充当“分组”或一些独立的语法元素,仅作为函数名称的一部分。
例如:
Prelude> import Data.List ((\\))
Prelude Data.List> [1, 4, 2, 5] \\ [1, 3, 0, 2]
[4,5]
Run Code Online (Sandbox Code Playgroud)
请注意,您可以将setDiff函数声明为:
setDiff :: Eq a => [a] -> [a] -> [a]
setDiff = (\\)
Run Code Online (Sandbox Code Playgroud)
所以没有参数。