2016-04-11 11 views
4

StringStringを比較しようとしました.Trueと予想しています。平等のタイプを比較するには?

Idris> String == String 
Can't find implementation for Eq Type 

BoolStringを比較する際それから私はFalseを期待。

Idris> String /= Bool 
Can't find implementation for Eq Type 

私にはimportがありませんか?

答えて

6

私たちがIdrisに持っているparametricityを壊すことはできません。タイプのパターンマッチングはできません。しかし、これは例えば、Eq実装を作成する必要がある。また

{- Doesn't work! 
eqNat : Type -> Bool 
eqNat Nat = True 
eqNat _ = False -} 

、一つは種類のパターンマッチ、それらが実行時に必要とされるであろうことができれば。現在、コンパイル時に型が消去されます。

+0

コンパイラ/インターフェイスで自由な語句を派生させるためにパラメトリックにしたいですか? –

+1

'A == B'の' A'と 'B'が正規形で閉じた宇宙に属していれば、パラメトリックを壊す必要はありません。誘導 - 再帰を使った 'Type'全体と、Observational Type Theoryで行ったような一般的なプログラミングの何らかの形)。 [Here](https://github.com/effectfully/random-stuff/blob/master/EqType.agda)はいくつかのコードです。ただし、型の明示的なコードを提供するノンパラメトリックなユニバースを使用している場合は、標準形式の用語での操作はほとんど役に立ちません。 – user3237465

関連する問題