2016-06-20 14 views
1
data A = B | C Int 

implementation Semigroup A where 
    B <+> x = x 
    x <+> B = x 
    C m <+> C n = C (m + n) 

gibt mir einen Syntaxfehler vonWeird-Syntaxfehler

./Nodes/Test.idr:3:1: error: expected: ";", 
    "|", declaration, end of input 
implementation Semigroup A where 
^         
Type checking ./Nodes/Test.idr 

in Idris 0.11.2. Entfernen implementation gibt stattdessen diese Meldung:

./Nodes/Test.idr:3:13: error: expected: "@", 
    "with", argument expression, 
    constraint argument, 
    function right hand side, 
    implicit function argument, 
    with pattern 
Semigroup A where 
      ^ 
Type checking ./Nodes/Test.idr 

Sollte ich eine Fehlermeldung? Ich kann nichts falsch mit der Syntax sehen.

Danke.

Antwort

2

Sie können nicht Infix-Operatoren in Implementierungen verwenden (für jetzt, denke ich). Wickeln Sie sie stattdessen zu Präfixen:

data A = B | C Int 

implementation Semigroup A where 
    (<+>) B x = x 
    (<+>) x B = x 
    (<+>) (C m) (C n) = C (m + n) 
+0

Brilliant! Vielen Dank. – RhubarbAndC