Ошибка типа списка в Haskell от минуса в определении диапазона - PullRequest
0 голосов
/ 03 марта 2019

Проходя старые экзамены, я скопировал этот кусок кода и попытался заставить его работать.

rems :: Integer -> [(Integer ,Integer )]
rems n = [(i, n `mod` i) | i <- [2 ..(n−1)]]

Теперь с объявлением типа или без него я получаю ошибку:

Variable not in scope: (−) :: Integer -> Integer -> Integer
ghc version 8.6.3

Я смог исправить это, выполнив вычисление n-1 в предложении where, но не понял, почему это исправление.Конечно, я знаю, что такое Integer в Haskell.

rems n = [(i, n `mod` i) | i <- [2 ..j] ]
        where j =  n-1

Может кто-нибудь объяснить мне, почему это изменение, по-видимому, не влияет, исправляет ошибку и есть ли другие способы?

1 Ответ

0 голосов
/ 03 марта 2019

Это простая опечатка.Ваш - это не дефис (который ожидает Хаскель) - это символ минуса со знаком Юникод, который отличается.Ваш источник должен автоматически преобразовать первое в последнее.Просто замените его дефисом (напечатанным на клавиатуре), и он будет работать.

...