15

プログラムに次のようなラムダ式があるとします。

\x -> f $ x + 1

タイプ セーフのために、x は Integer でなければならないことを指定したいと思います。何かのようなもの:

-- WARNING: bad code
\x::Int -> f $ x + 1
4

2 に答える 2

17

\x -> f $ (x::Int) + 1代わりに書くことができます。または、おそらくもっと読みやすい\x -> f (x + 1 :: Int). 型シグニチャは一般に、構文的に意味がある限り左側にあるものすべてを包含することに注意してください。これは、ラムダが右側に拡張するのとは反対です。

ちなみに、 GHC 拡張機能ScopedTypeVariablesでは、署名をパターンに直接書き込むことができ\(x::Int) -> f $ x + 1ます。しかし、その拡張機能は、心配したくないかもしれない他の多くのものも追加します。構文上の問題のためだけにオンにするつもりはありません。

于 2013-01-26T19:34:56.633 に答える
13

必要がないことに注意して、CAMcCannの回答に追加したいと思います ScopedTypeVariables。変数を使用しない場合でも、いつでも次のことができます。

\x -> let _ = (x :: T) in someExpressionThatDoesNotUseX
于 2013-01-26T21:20:13.687 に答える