これはthis questionへのフォローアップの質問ですHaskellの多型の機能評価エラー
Couldn't match type `Integer' with `Double'
Expected type: Either Integer Double
Actual type: Either Integer a
In the expression: Right $ f d
In a case alternative: Right d -> Right $ f d
を、問題がによって解決されますRankNTypesを使用して:
(forall a. Num a => a -> a)
しかし、答えは何も言わなかった。私は知りたいです:
このエラーの原因は何ですか? 最終的な結果は大文字小文字ブランチの1つに過ぎませんが、fは同時に2つの型には入力されません。
f
の型は、f :: Num a => (a -> a)
、Integer - > IntegerまたはDouble - > Doubleなぜ、これがエラーを引き起こすのかを誰かが詳しく調べることができますか?エラーを解決する他の方法はありますか? RankNTypesがエラーを解決する理由これは先日私が得たMonomorphism Restrictionエラーのようなものですが、これを修正するのに役立つものではなく、明示的な型の注釈も機能しません。
ちょうどそれがtypecheckを想像してください。 'foo(+ 1.5)(Left 5)'と呼ぶことができますか?そうでない場合は、どうしてですか?はいの場合、結果はどうなりますか? –
型の問題とは別に、 'foo f =(左.f)(右.f)'と書くことができます。 –