Почему компилятор Glasgow Haskell сообщает об ошибках нескольких типов здесь? - PullRequest
0 голосов
/ 01 мая 2018

Рассмотрим следующий код Haskell

module TypeErrors where
f xs = [True | _ <- repeat 0]
x = (x, x)

Компилятор Glasgow Haskell (версия 7.8.4) выдает три типа ошибок. Второе и третье возникают из бесконечного типа, подразумеваемого линией 3. Первый -

TypeErrors.hs:2:32:
    No instance for (Num t0) arising from the literal ‘0’
    The type variable ‘t0’ is ambiguous

После комментирования строки 3 модуль компилируется, как и ожидалось. Я хотел бы лучше понять, как GHC совершает свои чудеса. Итак, мой вопрос:

Почему GHC возражает против строки 2, если и только если строка 3 присутствует?

1 Ответ

0 голосов
/ 01 мая 2018

Похоже, ошибка для меня. Я могу подтвердить, что описанное вами поведение появляется в 7.8.4, но отсутствует в 7.10.3, 8.0.2, 8.2.2 или 8.4.2, где все имеют либо ноль, либо две ошибки, а не ноль или три.

...