2017-08-11 28 views
1

私はIdrisの構文と戦っているようです。普通の再帰的なデータ型のインターフェイスを実装する

module Test 

data Nat = Z | S Nat 

Eq Nat where 
    Z == Z = True 
    S n1 == S n2 = n1 == n2 
    _ == _ = False 

これは、次のエラー(V1.1.1)で文句を言う:

.\.\Test.idr:5:8: error: expected: "@", 
    "with", argument expression, 
    constraint argument, 
    function right hand side, 
    implicit function argument, 
    with pattern 
Eq Nat where 
    ^
Type checking .\.\Test.idr 

私は基本的にドキュメントと同じ構文を使用し、なぜ、私は理解していません。

のようなカスタム非再帰型のEq実装を書くと、うまくコンパイルされます。

答えて

2

括弧内にS nパターンを囲む必要があります。その後、Natが既にPreludeに定義されているため、コンパイラエラーが発生します。コードをコンパイルするには、NatNatural(または他のもの)に置き換えてください。しかし、ZSのコンストラクタもPreludeに定義されていますので、REPLで簡単にテストできるようにすべての名前を変更するか、%hide directiveを使用する必要があります。

しかし、少なくとも、このコードはコンパイルされます。

module Test 

data Natural = Z | S Natural 

Eq Natural where 
    Z == Z = True 
    (S n1) == (S n2) = n1 == n2 
    _ == _ = False 
+0

ああ、もちろん、私はHaskellで同じにしてください。 Idrisのように見えるのは、まだコンパイラエラーの点で長い道のりです:) –

+1

@SebastianGrafはい、Idrisのエラーメッセージはあまり大きくはありません。Idrisパーサと同様に、私は推測します。しかし、状況は改善しています。この言語のコミュニティが十分に大きくなり、生態系が劇的に改善されることを願っています:) – Shersh

関連する問題