doの乱用

メモ。

Haskell Reportによれば、(do a)という式の意味は(a)と同じなので、aがモナドな型を持っている必要はない。これを利用して、括弧を減らすためだけにdoを使うことができる。

import Data.Complex
import Data.Monoid
import Data.Text.Lazy.Builder
import Data.Text.Lazy.Builder.RealFloat

-- | 普通
complexInPolar :: Complex Double -> Builder
complexInPolar x
  =  fromString "("
  <> realFloat (magnitude x)
  <> fromString ":"
  <> realFloat (phase x)
  <> fromString ")"

-- | doの乱用
complexInPolar' :: Complex Double -> Builder
complexInPolar' x
  =  fromString "("
  <> do realFloat $ magnitude x
  <> fromString ":"
  <> do realFloat $ phase x
  <> fromString ")"