Проблемы с импортом Data.List. \\ - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь написать модуль 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 позволяет мне избежать этой проблемы, но есть ли способ выполнить импорт, указав только оператор \\?

1 Ответ

0 голосов
/ 10 июня 2018

Well \\ - это оператор , который вызовет за занавесом соответствующую (\\) :: Eq a => [a] -> [a] -> [a] функцию , поэтому вам необходимо импортироватьимя функции, включая скобки :

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

В конце концов, вы импортируете список функций (и других элементов, таких как типы, классы типов и т. д.),и " name " функции равно (\\), а не \\.

Итак, между внешними скобками мы перечисляем функции, которые мы хотим импортироватьи внутренние скобки не выступают в качестве «группировщиков» или какого-либо независимого синтаксического элемента, только как часть имени функции.

Например:

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 = (\\)

без параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...