LoginSignup
27
17

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-25

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

求めていたものは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 hiding (traceId)

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モジュールに同じ名前の関数があるので注意しましょう。なので :point_up: のコードでは hiding しています。
Elmと同様logぐらい短い名前でいいかも。


  1. この記事の最後でも触れますが、冒頭のtweetの「ElmのDebug.traceみたいな挙動のプリンター」の部分は正しくは「ElmのDebug.logみたいな挙動のプリンター」です。 

27
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
17