В качестве примера предположим, что я хочу реализовать функцию, которая суммирует список из Num
s. На полпути к написанию кода я хочу отладить его с помощью Debug.Trace
:
module T where
import Debug.Trace
dosum :: (Num a) => [a] -> a
dosum xs = dosum' 0 xs
where
dosum' n [] = n
dosum' n (x:xs) = trace (show n) $ dosum' (n+x) xs
. Проблема в том, что это не скомпилируется.:
Could not deduce (Show a) arising from a use of dosum'
from the context (Num a)
Я могу добавить (Show a)
к dosum
, а затем удалить его, когда закончу отладку (в реальной жизни., я хочу иметь тип, который не обязательно находится в Show
, но я буду отлаживать с целыми числами ). Это может стать громоздким, если задействовано несколько функций, и я продолжаю добавлять операторы удаления Show a
.
Я хочу иметь функцию unsafeShow
unsafeShow :: a -> String
, которая работает, если a
равна Show a
, и может давать сбой, если это не так. Это возможно?