私はDebug.Trace.trace
を使用して、私が知っているものをShow
として印刷したいと考えています。私はPythonで行うだろうと同じようになどHaskell:任意のdebugShow関数?
一つの解決策は、など、
しかし、それを、私はトレースを配置する機能の署名に「Show a =>
」を追加することであり、それを呼び出す任意の関数に値が1であればshow
を呼び出す関数debugShow
を使用することができればもっと良いでしょう。それ以外の場合は"--no show--"
などが返されます。
{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
class DebugShow a where
debugShow :: a -> String
instance Show a => DebugShow a where
debugShow = show
instance DebugShow a where
debugShow = const "--no show--"
「安全でないキャスト」のいくつかの種類にも私の問題を解決するだろう:
はここDebugShow
(GHCが"Duplicate instance declarations"
を拒否)を定義するために私の失敗した試みです。
アドバイスはありますか?
注 - これはデバッグの目的にのみ使用します。私は完成したコードでこれを使用していません。
@ephemient:ありがとうございます。この場合、特定の型に "unsafeCoerce"を "キャスト"することができますが、同じ未知の型に "キャスト"し、そのコンテキストに 'Show'を追加したいと思います。私は "debugShow = show。unsafeCoerce'を定義しようとしましたが、"あいまいな型変数 "のために失敗しました。 – yairchu