Проходя старые экзамены, я скопировал этот кусок кода и попытался заставить его работать.
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
Может кто-нибудь объяснить мне, почему это изменение, по-видимому, не влияет, исправляет ошибку и есть ли другие способы?