次のような純粋関数でトレースログを出力することはどういうわけか可能ですか?
pure :: Int -> Int
pure x = do
<trace log>
return x*x
「Haskellclean」ではありませんが、GHCに役立つハックはありませんか?
Debug.Trace
デバッグには、モジュールを使用できます。
import Debug.Trace
pure :: Int -> Int
pure x = trace "log" (x * x)
怠惰のために、出力が生成している他の出力と混ざり合う場合があることに注意してください。したがって、これは本番コードへのログインにはお勧めできませんが、単純なデバッグタスクの場合は通常は問題ありません。
もちろん、常にありunsafePerformIO
ます。ここで使用するのは良い考えではありません!
import System.IO.Unsafe
pure :: Int -> Int
pure x = unsafePerformIO $ do
print x
return $ x*x