Причудливость в 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
.