초속으로 복사하려는 Haskell 디버깅 함수

4679 단어 디버깅하스켈
Elm의 Debug.trace 같은 거동의 프린터, 누군가 hackage에 언급하지 않았습니까? 그렇지 않으면 빨리 만들거야? #haskell — Yuji Yamamoto: 야마모토 유자 (@igrep) 2017년 1월 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." 라고 쓰여 있으므로 아마 copipe 하는 것이 빠르겠지요.

라고 하는 이유로 특히 편리한 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 모듈에 같은 이름의 함수가 있으므로 주의합시다. 그래서 의 코드는 hiding 하고 있습니다.
Elm과 같이 log 정도 짧은 이름으로 좋을지도.



이 기사의 끝에서도 언급하지만, 처음의 tweet의 "Elm의 Debug.trace 같은 거동의 프린터"부분은 바르게는 "Elm의 Debug.log 같은 거동의 프린터"입니다.

좋은 웹페이지 즐겨찾기