Life Goes On

まあまあだけど楽しんでる方です

Haskell でグローバル変数

cut-sea さんが書いている グローバル変数が欲しい理由? について自分なりの見解を。
もとは Haskell でグローバル変数が欲しい理由 - あどけない話 の記事です。
Haskellグローバル変数を持ちまわす必要があるかどうかは、ひとえに関数の設計にかかっているのではないかと思っています。
cut-sea さんの main 関数はこんな感じ。(僕は let 式が苦手なので、ちょっと書き換えてます)

main :: IO ()
main = g =<< getArgs
    where
    g argv = (runProg $ genProg opts) . concat =<< getInputs opts
        where
        opts = parseOpt argv

コマンドラインオプション(ここでは opts)が随所で必要になる訳ですが、それらの関数(ここでは genProg や getInputs)を独立に定義して、(.) や (=<<) でつなげることで、必要最低限の箇所にだけ opts が出てくるようになるのだと思います。
逆に言うと、呼び出し元の main 関数がその辺の差配を一手に引き受けている感じ。
ちょっと単純に考え過ぎかもしれません。
ツッコミお願いします。