В качестве примера, скажем, я хочу реализовать функцию, которая суммирует список 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
и может быть поврежден, если это не так. Возможно ли это?