何の知識もなくHaskellでコードを書いていると大域変数を引き回してしまうことが多々あり、非常にイライラします。Haskellで大域変数を実現したいときはReaderモナドを使えば良いようです。微妙にリファレンスが少なくてヤキモキしたので知見を並べていきます。 まずは公式リファレンス。 Control.Monad.Reader - Hackage 続いて定義。 newtype Reader e a = Reader { runReader :: e -> a } instance Monad (Reader r) where return a = Reader $ \_ -> a m >>= f = Reader $ \r -> runReader (f (runReader m r)) r 上を見ればわかるとおり、Readerというのは環境変数(e)を受け取って値を返す関数のことなので