无法导入 Data.List。\\

Trouble importing Data.List.\\

我正在尝试编写一个 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

导入所有 Data.List 可以避免这个问题,但是有没有一种方法可以执行仅指定 \ 运算符的导入?

好吧 \ 是一个 运算符 ,它将在幕后调用相应的 (\) :: Eq a => [a] -> [a] -> [a] 函数, 所以需要导入函数名,包括括号:

import Data.List (<b>(</b>\<b>)</b>)

毕竟,您导入了一个 functions 列表(以及类型、类型类等其他元素),并且“name”的函数是(\),不是\.

所以在外括号之间,我们列出了我们要导入的函数,而内括号,不作为"groupers"或一些独立的语法元素,只作为函数名的一部分。

例如:

Prelude> import Data.List ((\))
Prelude Data.List> [1, 4, 2, 5] \ [1, 3, 0, 2]
[4,5]

请注意,您可以将 setDiff 函数声明为:

setDiff :: Eq a => [a] -> [a] -> [a]
setDiff = (\)

所以没有参数。