1. Qiita
  2. 投稿
  3. Haskell

秒速でコピペしたいHaskellデバッグ用関数

  • 8
    いいね
  • 0
    コメント

いつも秒速で作ってる人もいるみたいだけど、やっぱり逐一書く時間が勿体ないと思うのでここにメモします。

求めていたものはTraceUtilsにありました。
気が向いたらcabalファイルに書けばよいでしょう。
ただ、どうやらstackageには登録されておらず、LTS 7.16の時点で存在しません。
ドキュメントにも "Feel free to copy&paste these functions into modules that need them, that may be easier to remove/clean up than adding a cabal dependency."と書かれているので多分コピペした方が速いでしょう。

と、いうわけで特に便利なtraceIdtraceIdViaを載せちゃいます。コピペの際邪魔になりそうなのでコメントは削除しました。
好きにコピペすればいいんじゃないかな。

import Debug.Trace (trace)

traceIdVia :: Show b => (a -> b) -> String -> a -> a
traceIdVia via prefix x = trace (prefix ++ ": " ++ show (via x)) x

traceId :: Show a => String -> a -> a
traceId = traceIdVia id

-- おまけ: show ではコードポイントに変えられてしまう日本語を扱う我々にはきっとこちらの方が便利
traceStringVia :: (a -> String) -> String -> a -> a
traceStringVia via prefix x = trace (prefix ++ ": " ++ via x) x

traceString :: String -> String -> String
traceString = traceStringVia id

ちなみに、traceIdについては標準のDebug.Traceモジュールに同じ名前の関数があるので注意しましょう。
Elmと同様logぐらい短い名前でいいかも。