Search code examples
agda

How to write a type signature with two parameters?


I try to learn agda and use the tutorial. I paste code for two mutally recursive sets

module MoreSets where 

data List₁ (A B : Set) : Set
data List₂ (A B : Set) : Set

data List₁ (A B : Set) where
  []  :                 List₁ A B
  _∷_ : A → List₂ A B → List₁ A B

data List₂ (A B : Set) where
  _∷_ : B → List₁ A B → List₂ A B

and get the error

MoreSets.agda:6,12-23
Unexpected type signature for parameters A B
when checking the definition of List₁

I assume a trivial error but cannot see it.

What is a simple tutorial to learn agda for a Haskell programmer which does not go deep into category theory?


Solution

  • You're not supposed to repeat the type annotations that you had in the declarations when you're defining the inductive type. So:

    module MoreSets where
    
    data List₁ (A B : Set) : Set
    data List₂ (A B : Set) : Set
    
    data List₁ A B where
      []  :                 List₁ A B
      _∷_ : A → List₂ A B → List₁ A B
    
    data List₂ A B where
      _∷_ : B → List₁ A B → List₂ A B