Что такое хороший способ отладки кода на Haskell? - PullRequest
31 голосов
/ 23 марта 2009

Я использовал отладчик ghci, но действительно предпочел бы, чтобы он был несколько интегрирован с текстовым редактором, чтобы упростить процесс установки точек останова. Вероятно, он не должен строго оценивать каждую видимую переменную, но, по крайней мере, должен упростить процесс просмотра локального состояния.

Недавно я нашел функцию трассировки, которая была полезна, поскольку позволяла отлаживать распечатки из других трудных мест.

Ответы [ 4 ]

12 голосов
/ 24 марта 2009

Хороший способ отладки кода на Haskell - это написание и тестирование алгебраических законов с использованием QuickCheck и SmallCheck . Было несколько отладчиков Haskell, включая Hat, Hood и Freya, но ни один из них не был признан достаточно ценным, чтобы его можно было поддерживать в течение длительного времени.

Когда это Хаскелл, ты должен думать по-другому о том, как делать вещи. Документ ICFP на странице QuickCheck содержит несколько хороших примеров для начала. Если вы хотите, чтобы реальный пример xmonad был тщательно отлажен с использованием QuickCheck.

8 голосов
/ 23 марта 2009

Да, внешний интерфейс для отладчика GHCi был бы хорош. Может быть, мы сделаем что-нибудь во время следующего хакатона. Тем не менее, в то же время:

  • В Monad Reader, выпуск 10 (PDF) есть статья об использовании отладчика. Может быть, это может дать вам еще несколько советов.

В качестве альтернативы, Haskell прекрасно подходит для тестирования снизу вверх с использованием QuickCheck. То есть, проверьте свои компоненты индивидуально, затем соедините их. Если ваш код чистый, то это часто просто работает.

5 голосов
/ 26 марта 2009

Обратите внимание, что Debug.trace НЕ будет вашим другом при отладке многопоточных программ.

Тестирование - это путь в долгосрочной перспективе.

3 голосов
/ 01 апреля 2009

Для моих собственных целей я считаю, что это комбинация факторов.

  1. Пишите легкий для отладки функциональный код, это означает, что ваши функции относительно малы (5-20 строк) и что они выполняют только одну четко определенную вещь.
  2. Используйте HUnit для определения тестовых случаев, которые выявят ваши проблемы.

Как видно из других ответов, многие люди любят QuickCheck . Мне было трудно определить значимые тестовые сценарии QuickCheck по крайней мере для некоторого моего кода, поэтому обычно чаще используют стандартные модульные тесты. При этом есть отличное введение в использование QuickCheck в Глава 11 Реального мира Haskell.

Если вы обнаружите, что используете QuickCheck и HUnit, вы можете изучить test-framework .

...