5

次のコードで "15" を整数に変換して結果を出力することを期待していますが、エラーがスローされます。

main = print $ read "15" :: Integer

Couldn't match expected type `Integer' with actual type `IO ()'

しかし、使用するだけで問題なくmain = print (read "15" :: Integer)動作します。私は、$ が実質的に残りの行を括弧で囲んでいるという印象を受けました。この場合 $ が機能しないのはなぜですか?

4

1 に答える 1

12

$(現在の場所と)行末に置く構文糖ではありません。

Soprint $ read "15" :: Integerは のように解釈され(print (read "15")) :: Integerます。これは、$ :: (a -> b) -> a -> b(関数合成中置演算子) が 2 つの関数printを取りread "15"、それらを 1 つずつ «適用» するために発生します。:: Integerここでは関数ではないようです。キーワードに似ているため、$期待どおりに機能しません。

于 2013-07-28T09:51:55.133 に答える