2017-06-21 4 views

答えて

5

それが原因mod機能(@AntonTrunov明確化のおかげで)の不公平に発生します。それは多相であり、デフォルトで数値定数はIntegerです。 Integerタイプmod機能について

Idris> :t mod 
mod : Integral ty => ty -> ty -> ty 
Idris> :t 3 
3 : Integer 
Idris> :t mod 3 2 
mod 3 2 : Integer 

合計はありません。

代わりにmodNatNZ機能を使用して、すべてのタイプのチェックが完璧で機能するようにします。

v1 : modNatNZ 3 2 SIsNotZ = 1 
v1 = Refl 
+3

"コンパイルステージでIdrisがタイプでパターンマッチングしか実行できません"という文句は正しくありません。たとえば、 '(the Int 3)-2 = 1'を取ると、 'Int'は帰納的データ型ではありませんが、' Refl'を使ってそれを証明できます。 'Refl'が' mod'で動作しないのは、あなたがすでに説明したように、偏見です。 –

関連する問題