4

の型が の場合、($)なぜ(a -> b) -> a -> bそれを としてカリー化できるの($2)でしょうか? 2 はタイプではありません(a -> b)。以下の例を参照してください。

map ($2)[(+1),(+2)]

これは合法で、素晴らしく、直感的に理にかなっています。型システムの規則とどのように一致しているか教えてください。

乾杯

4

1 に答える 1

11

観察している動作は、部分適用が中置演算子に対してどのように機能するかによるものです。これは「セクション申請」と呼ばれることが多く2、2 番目の引数となる「右側のセクション」として申請します。だからあなたは持っています:

($) :: (a -> b) -> a -> b
                   ^
                   |
                  This is the type variable for the argument '2'

これは次の方法で確認できます。

ghci
> :t ($2)
($2) :: Num a => (a -> b) -> b

この情報は、ほとんどの完全なチュートリアルのどこかに隠されている可能性があります。または、Haskell レポートセクションのセクションを参照できます。

于 2013-07-09T06:41:31.413 に答える