okです:宣言種類Haskellでエラーが発生しますが、私は次のコード<code>runhaskell</code>すると宣言することはない
f :: Num a => a -> a -> a
f x y = x*x + y*y
x = 3
y = 2.3
main = print (f x y)
すべての罰金を。私は、xとyの割り当て上記の型宣言を追加する場合でも:
x :: Int
y :: Float
を私はエラーを取得:「期待タイプInt' with actual type
フロート 'と一致しませんでした」。
私はf
の型を宣言するとき、私はxとyが同じ型でなければならないことを誇張していることを理解しています。私が理解していないのは、最初のケースでうまくいく理由です。
は私が
Prelude> let x = 3
Prelude> :type x
x :: Integer
Prelude> let y = 2.3
Prelude> :type y
y :: Double
xとyを得るGHCiの中に割り当てを実行し、タイプを問い合わせる場合は、型が宣言されていない場合、異なる種類の数として解釈されます!なぜ、f
はエラーを投げないのですか?
これは、GHCiののかなり古いバージョンのように聞こえます。最近のバージョンでは、対話モード*でデフォルトで*の単相性制限が無効になり、動作が良くなりました。 – dfeuer
私は 'sudo apt-get install haskell-platform'を使ってhaskellプラットフォームをダウンロードしました... – Pigna
それはおそらく古いでしょう。しかし見る方法は '--version'です。 – dfeuer