导入 Data.List 时遇到问题。\\

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可以避免这个问题,但是有没有一种方法可以执行仅指定\\操作员的导入?

Wil*_*sem 5

那么\\是一个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)

所以没有参数。