• ghc ? Haskell А кто-то натыкался на случай, когда изменение кода в одной топ-левел функции вызывало ошибки в других топ-левел функциях, которые до изменения прекрасно компилировались? При чём, изменение касается тела функции (опечатка), а не типа. Т.е. сообщения становятся бесполезными и запутывающими, и указывают вообще не на те декларации, в которых ошибка.

Replies (17)

  • @segfault, при аккуратно записанных типах — нет. без аккуратно записанных типов бесполезные и запутывающие бывают.
  • @qnikst,
    У всех топ-левел функций указаны типы, мономорфные. Т.е. выглядит так:
    1. Модуль компилируется и всё ок.
    2. Подправил тело одной функции.
    3. Компилятор выдаёт ошибки в соседних функциях.
  • @segfault, такого не встречал // show the code
  • @qnikst, Минимального примера пока нет, и тут не совсем ghc, а ghcjs, хотя тайпчек и дешугаринг всё равно производит ghc as a library, от ghcjs там только транслятор STG -> JS, если я правильно понял.
  • @segfault, а в ghcjs не шарю совсем
  • @segfault, Бывает, когда перемудришь с классами.
  • @rkit, Да, тут как раз случай с тайпклассом, с функциональной зависимостью, polyvariadic function на тайпклассах, короче.
  • @segfault, Не находил багу на трекере? Хз даже как искать.
  • @segfault, в смысле тип до и после изменения был тот же самый? Это интересно
  • @max630, Да, тип не менялся.
  • @segfault, а какое хоть сообщение?
  • @segfault, gist.github.com
    Вот функция, я в ней меняю `div_` на `div` в 14 строке (опечатка), и получаю ошибки вообще в других функциях того же модуля.
  • @rkit, я видел такое когда типы не прописаны и компилятор не выводит что-то. прочем везде где я подобное видел — проблема была не в компиляторе
  • @qnikst, Кроме типа декларации еще в теле бывает тысяча типов, которые никто не прописывает. И именно в том, что перемудрил.
  • @rkit, поидее они не должны меняться при изменении соседних функций?
  • @rkit, Тогда ошибка была бы внутри тела функции, а она вылезает в соседних аналогичных функциях вообще.
  • @segfault, бывает что выводится неправильно какое-то локальное определение по использованию, но тут я даже не знаю, вроде всё прибито гвоздями