基本的に、問題は の内容に関する情報がないことですPair
。任意の型の値が含まれていることだけがわかっている場合、使用できる唯一の実際の関数は ですid
。これはかなり役に立ちません!
問題は、各値が any になる可能性があるため、それらについてまったく保証がないことです。したがって、使用することさえできませんでし==
た: 値が関数だったらどうなるでしょうか? 関数が等しいかどうかを比較することはできません!
仮定の型に作用する関数を書くことを想像してくださいPair
:
fn (Pair a b) = ...
a
と で他にどのような機能を使用できますb
か?
Int -> Int
が. _ a
_ が数値かどうかさえわからないため、Int
より複雑な型は機能しません。機能する唯一の関数は、またはのような型を持つ関数です。ただし、最初のタイプの唯一の合理的な機能は 2 番目のタイプの合理的な機能はまったくありません。Num n => n -> n
a
t1 -> t1
t1 -> t2
id
これで、「この関数を試してみます。型が機能しない場合は、エラーをスローします」と言うことができます。しかし、これは動的型付けになり、基本的に型システムを完全に捨てることになります。これはひどいように聞こえますが、場合によっては理にかなっている場合もあるため、 を使用Data.Dynamic
してそのようなことを行うことができます。ただし、初心者として心配する必要はありません。また、使用する必要がない可能性もあります。私は今のところ使用していません。完全を期すためにそれを含めています。