、それは言う:イドリスで'='を使用して異なるタイプ間で(厳密に)同等性を提案できますか?ドキュメントで
平等は、私たちも、さまざまな種類の値の間 の等式提案できることを意味し、異質である:特定の例は、コンパイルされること
idris_not_php : 2 = "2"
を、しかし、穴はタイプfromInteger 2 = "2"
のものとして提示されます。 fromInteger 2
がNum
のインスタンスであれば、おそらく2
の値がString
ではないと推測するのに十分なほど巧妙ではないでしょうか?比較すると、以下のわずかに異なるコードがコンパイルに失敗し
:
idris_not_php : S (S Z) = "2"
コンパイラはNat
とString
間の型の不一致を報告します。
Num String where
(+) x y = y
(*) x y = y
fromInteger n = "2"
idris_not_php : 2 = "2"
idris_not_php = the (the String 2 = "2") Refl
そして、これら二つのコンパイル:
また、以下では正常にコンパイルし
idris_not_php : S (S Z) ~=~ "2"
idris_not_php = ?hole
two_is_two : 2 ~=~ 2
two_is_two = Refl
が=
のタイプが異なるものとの間に使用することができる時期について、特定のルールがありますが、 =
が機能しない場合は、~=~
を使用するだけの問題ですか? ~=~
と=
は意味的に同じですか、そうであれば、なぜ~=~
も必要ですか?