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

Posted by takenbu.hs on August 8, 2017

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

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

Link to
here
使い方

例えば、

main = print $ 1.0 + _

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

Link to
here
エラーメッセージの表示例

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

$ runghc test1.hs 

test1.hs:3:22: error:
Found hole: _ :: Double
In 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 + _
  |                      ^

Link to
here
補足1

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

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

Link to
here
補足2

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