Вывод отладочной информации

Haskell:
Вывод отладочной информации

Как:

Простой способ вывода отладочной информации в Haskell - это использование функции print, которая принимает значение, являющееся экземпляром типового класса Show, и выводит его в консоль.

main :: IO ()
main = do
  let number = 42
  print number
  putStrLn "Отладка в Haskell - это проще простого!"

-- Вывод:
-- 42
-- Отладка в Haskell - это проще простого!

Для более сложных структур данных убедитесь, что они выводят Show для включения красивой печати:

data Cake = Chocolate | Vanilla deriving Show

debugFlavor :: Cake -> IO ()
debugFlavor flavor = print flavor

main :: IO ()
main = debugFlavor Chocolate

-- Вывод:
-- Chocolate

Иногда нам нужна временная отладка, которую легко удалить позже. Введите модуль Debug.Trace.

import Debug.Trace (trace)

main :: IO ()
main = putStrLn $ trace "Это напечатается первым" "Это напечатается вторым"

-- Вывод:
-- Это напечатается первым
-- Это напечатается вторым

Функция trace печатает строку, когда значение оценивается, но это побочный эффект в чистой части кода. Это полезно, но используйте с осторожностью!

Глубже

В древние времена отладка, возможно, была старым добрым “трюком с печатью”. Haskell предлагает это с функциональным изворотом и инструментами для более чистых практик отладки. Введите print и модуль Debug.Trace, как мы уже рассмотрели.

Альтернативы print включают putStrLn для строк и putStr, если вам не нравится автоматический перевод строки. У Debug.Trace также есть варианты, такие как traceShow, которые работают напрямую с экземплярами Show, избавляя вас от вызова show.

Что касается деталей реализации, print по существу является putStrLn . show. Она печатает любые данные, которые можно показать (Show), в stdout. Функции Debug.Trace, с другой стороны, предназначены для временного использования во время разработки. Они украдкой встроены в чистый код и нарушают ссылочную прозрачность, что в долгосрочной перспективе является табу.

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

Смотрите также