haskell での単位付き計算を味見

昔から計算ミスの多かった私は、高校時代に塾の先生に「次元の確認をするとよい」とアドバイスされて以来、必ず次元チェックをするようにしています。
市販ツールでは Mathcad が便利だと思うのですが、個人で購入するには少々高価です。どうにかならないかと常々思っていたのですが、haskell に dimensional というモジュールがあったので、味見してみました。

School of Haskell で使い方を確認しつつ、試してみます。ghci上でこんな感じ。

import Numeric.Units.Dimensional.Prelude
import qualified Prelude

l = 1.0 *~ kilo meter
speeds = [10,20,30] *~~ (kilo meter / hour)
putStrLn . show $ l / speeds

できた。でも、記法が長ったらしいので、もうちょっとなんとかならないかと以下のようにしてみました。

(#) val unit = val *~ unit
mV = milli volt
uA = micro ampere
kOhm = kilo ohm

演算子はシャープにしていますが、頻出するのでもうすこし存在感が薄い文字が使いたいところです。
で、たとえば

1#mV / 0.5#uA / 1#kOhm

とすれば概ね 2 がかえってきます。