Я хочу использовать Debug.Trace.trace
, чтобы напечатать что-то, что, как я знаю, Show
. Так же, как я сделал бы в Python и т. Д.
Одним из решений является добавление "Show a =>
" к сигнатуре функции, в которую я хочу поместить трассировку, и к любой функции, вызывающей ее и т. Д.
Но было бы намного лучше, если бы я мог использовать некоторую функцию debugShow
, которая вызывает show
, если значение имеет единицу, в противном случае возвращает "--no show--"
или что-то еще.
Вот моя неудачная попытка определить DebugShow
(GHC отклоняет "Duplicate instance declarations"
):
{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
class DebugShow a where
debugShow :: a -> String
instance Show a => DebugShow a where
debugShow = show
instance DebugShow a where
debugShow = const "--no show--"
Какой-то «небезопасный бросок» также решил бы мою проблему.
Любой совет?
Примечание. Это только для целей отладки. Я не использую это ни в каком готовом коде.