GHCのTyped Holes機能で、式中の部分の型を推論させる

Posted by takenbu.hs

最近はあまり話題になってないかもしれませんが、 Typed holes 機能についての紹介です。

ghc7.8くらいの頃に導入された機能で、ソースコードの式の中に __ で始まる識別名を書くと、その部分の型を推論してくれます。

使い方

例えば、

main = print $ 1.0 + _

のようなコードを書いて、 runghcghcighcで実行すると、 _ 部の型をエラーメッセージで教えてくれます。

エラーメッセージの表示例

例えば、以下のようにエラーメッセージが表示されます。 以下の例では、_部が、Double型であることを示しています。

$ runghc test1.hs 

test1.hs:3:22: error:Found hole: _ :: DoubleIn the second argument of ‘(+)’, namely ‘_’
      In the second argument of ‘($)’, namely ‘1.0 + _’
      In the expression: print $ 1.0 + _
    • Relevant bindings include main :: IO () (bound at test1.hs:3:1)
  |
3 | main = print $ 1.0 + _
  |                      ^

補足1

_ の替りに、 _hoge のように名前付けしても構いません。

ghci で、 :t で型を調べるのと同じように気軽に使えます。 (最近はIDEがサポートしていて、明示的には使わなかったりするかもしれません。)

補足2

詳細情報は以下にあります。