Рассмотрим следующий код 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 присутствует?