あどけない話

インターネットに関する技術的な話など

暗黙の引数

必要に迫られて、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