Is it possible to force a type to a class in Haskell? 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) unsafeShow :: a -> String class (Num a) => Number a instance (Num a) => Number a -- original function, should add NOINLINE to make sure your rule gets a chance to fire. {-# NOINLINE dosum #-} dosum :: (Num a) => [a] -> a -- a version with added debugging dosumShow :: (Num a, Show a) => [a] -> a {-# RULES "sub/dosum" forall x. dosum x = dosumShow x #-}