例として、s のリストを合計する関数を実装したいとしますNum
。コーディングの途中で、次の方法でデバッグしたいと思い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
し、そうでない場合は自由にクラッシュします。これは可能ですか?