4

非常に単純な Haskell プログラムを作成しました。

main = print $ sum $ map read ["55", "99", "101"]

私の過去の経験から、「あいまいな型」エラーが発生することが予想されましsum $ map read [...](Read a, Num a) => aNumはクラスであるため、それ自体でクラスを実装することはできませんShow。しかし、プログラムは正しく「255」を出力しました。どのようにprintして出力を生成する方法を決定できましたか? (showエラーなしで正しい結果を生成することもできます。)

4

1 に答える 1

7

オプションを使用すると、次のようになり-fwarn-type-defaultsます。

$ ghc -O2 -fwarn-type-defaults ddd.hs
[1 of 1] Compiling Main             ( ddd.hs, ddd.o )

ddd.hs:2:8: Warning:
    Defaulting the following constraint(s) to type ‘Integer’
      (Show s0) arising from a use of ‘print’ at ddd.hs:2:8-12
      (Read s0) arising from a use of ‘read’ at ddd.hs:2:26-29
      (Num s0) arising from a use of ‘sum’ at ddd.hs:2:16-18
    In the expression: print
    In the expression: print $ sum $ map read ["55", "99", "101"]
    In an equation for ‘main’:
        main = print $ sum $ map read ["55", "99", "101"]

何が起こっているかを説明します。

于 2014-10-25T04:33:23.727 に答える