Можно ли принудительно преобразовать тип в класс в Haskell?

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

14
задан luispedro 18 April 2012 в 14:34
поделиться