Причудливость в Haskell 7.8.3

У меня есть 2 функции в простом файле, в котором нет ничего.

--This is FN1
helper :: Int -> Double -> Double
helper n x = (nu/d)
  where
    nu = x^n 
    d = product [1 .. n]

--This is FN2
filterOdd :: [a] -> [a] 
filterOdd ls = fi ls [1..]
  where
    fi [] _ = []
    fi (v:vs) (i:ix) = if even i
                        then v:(fi vs ix) 
                        else fi vs ix

Я использую GHC 7.8.3

Я знаю, что в FN1 есть ошибка типа. Я знаю об этом. Когда FN1 комментируется и запускается, GHCi не вызывает ошибок. Но когда FN1 раскоментирован и запуск GHCi показывает очевидную ошибку в FN1, но также ошибку на 2 страницы для FN2.

Я не понимаю этого. Между FN1 и FN2 нет явной связи. Ничто в FN1 не вызывает FN2 и наоборот. Но почему GHCi показывает ошибки для FN2, когда FN1 раскоментирован?

Точная ошибка достаточно длинная, и я решил поставить ее на lpaste

Может кто-нибудь, пожалуйста, скажите мне, что происходит? Скорее всего, я что-то не понял.

Ответы

Ответ 1

Это был билет GHC Trac # 9323, в котором был приведен пример

module Foo where

broken :: [Int]
broken = ()

ambiguous :: a -> String
ambiguous _ = show 0

"thomie" закрыл билет после того, как Саймон Пейтон Джонс оставил этот комментарий в июле:

Все в порядке с HEAD. (Я не знаю, какая из многих изменений между 7.8 и HEAD отвечает.)

Я добавлю регрессионный тест. Но я не предлагаю исправлять 7.8.

Саймон

Примечание: своеобразная, но теперь укоренившаяся конвенция в кругах разработки GHC относится к официальной ветке git master как HEAD.