Masahiro Sakai
-
2012-01-17T15:13:59+0000
- 更新日時:
2012-01-17T15:13:59+0000
デバッグモードの時だけ出力するprintfっぽい関数を、Text.Printfを使って定義したかったんだけど、以下のundefinedの所を書きようがなさげ。
debugPrintf :: HPrintfType r => String -> r
debugPrintf s = if debugMode then hPrintf stderr ("debug: " ++ s) else undefined
共有中: 一般公開,
Shiro Kawai
,
Keita ODA
Shiro Kawai
-
2012-01-17T20:00:52+0000
/dev/nullに相当するダミーシンクみたいなものは無いのですか?
Keita ODA
-
2012-01-18T01:33:15+0000
when みたいなことがしたいのですね。
hPrintf の実装にあたることをしないといけないように思います。
template haskell 使うとできると聞いたことがありますが。
Masahiro Sakai
-
2012-01-19T00:31:43+0000
- 更新日時:
2012-01-19T03:31:13+0000
>
+
Shiro Kawai
さん
少なくとも、System.IOには/dev/null的なものは無かったと思います。
最近のGHCなら、自分で入出力の関数を実装してHandleにラップできる機能があったはずなので、それを使えば自分で作れそうな気はしますが……
>
+
Keita ODA
さん
そうなんですよ。
型クラスを濫用して可変長引数を実現しているせいで、そういう事がやりにくくて、それで何か抜け穴はと思ったのでした。
HPrintfTypeの実装はexportされてないのですが、
class HPrintfType t where
hspr :: Handle -> String -> [UPrintf] -> t
となっていて、自分で1から実装するなら、Handleのところを String -> IO () に変更して、実際の出力処理を指定する感じにすれば良いと思います。
hPrintf の実装にあたることをしないといけないように思います。
template haskell 使うとできると聞いたことがありますが。
少なくとも、System.IOには/dev/null的なものは無かったと思います。
最近のGHCなら、自分で入出力の関数を実装してHandleにラップできる機能があったはずなので、それを使えば自分で作れそうな気はしますが……
> +Keita ODA さん
そうなんですよ。
型クラスを濫用して可変長引数を実現しているせいで、そういう事がやりにくくて、それで何か抜け穴はと思ったのでした。
HPrintfTypeの実装はexportされてないのですが、
class HPrintfType t where
hspr :: Handle -> String -> [UPrintf] -> t
となっていて、自分で1から実装するなら、Handleのところを String -> IO () に変更して、実際の出力処理を指定する感じにすれば良いと思います。