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 がかえってきます。