Подтвердить что ты не робот

Что такое хороший способ отладки кода haskell?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Да, интерфейсом для отладчика GHCi было бы хорошо. Возможно, мы сделаем что-то в следующем Хакатоне. Однако в среднем:

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

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

Ответ 3

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

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

Ответ 4

В моих собственных целях я нахожу, что это комбинация факторов.

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

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

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