必要に迫られて、Haskell でグローバル変数が欲しい理由のコメントで Otter_O さんに教えて頂いた「Global Variables in Haskel」を読んでみました。要点は、Otter_O さんが「Haskellとglobalに書かれています。
暗黙の引数は素晴らしいですね!これで unsafePerformIO を使わなくてもよくなります。
使っていて気付いたのですが、let で変数と暗黙の変数を定義する場合、同じ let で定義するとパースエラーになります。
{-# LANGUAGE ImplicitParams, NoMonomorphismRestriction #-} -- これは間違い foo = let a = 2 ?b = 4 in a + ?b
別の let を使わないといけないようです。
{-# LANGUAGE ImplicitParams, NoMonomorphismRestriction #-} foo = let a = 2 in let ?b = 4 in a + ?b