-- Agda Sample File
-- https://github.com/agda/agda/blob/master/examples/syntax/highlighting/Test.agda

-- This test file currently lacks module-related stuff.

{- Nested
{- comment. -} -}

module Test where

infix 12 _!
infixl 7 _+_ _-_
infixr 2 -_

postulate x : Set

f : (Set -> Set -> Set) -> Set
f _*_ = x * x

data: Set where
zero :
suc :->

_+_ :->->
zero + n = n
suc m + n = suc (m + n)

postulate _-_ :->->

-_ :->
- n = n

_! :->
zero ! = suc zero
suc n ! = n - n !

record Equiv {a : Set} (__ : a -> a -> Set) : Set where
field
refl : forall x -> x ≈ x
sym : {x y : a} -> x ≈ y -> y ≈ x
_`trans`_ : forall {x y z} -> x ≈ y -> y ≈ z -> x ≈ z

data __ {a : Set} (x : a) : a -> Set where
refl : x ≡ x

subst : forall {a x y} ->
(P : a -> Set) -> x ≡ y -> P x -> P y
subst {x = x} .{y = x} _ refl p = p

Equiv-≡ : forall {a} -> Equiv {a} __
Equiv-≡ {a} =
record { refl = \_ -> refl
; sym = sym
; _`trans`_ = _`trans`_
}
where
sym : {x y : a} -> x ≡ y -> y ≡ x
sym refl = refl

_`trans`_ : {x y z : a} -> x ≡ y -> y ≡ z -> x ≡ z
refl `trans` refl = refl

postulate
String : Set
Char : Set
Float : Set

data Int : Set where
pos : Int
negsuc : Int

{-# BUILTIN STRING String #-}
{-# BUILTIN CHAR Char #-}
{-# BUILTIN FLOAT Float #-}

{-# BUILTIN NATURAL ℕ #-}

{-# BUILTIN INTEGER Int #-}
{-# BUILTIN INTEGERPOS pos #-}
{-# BUILTIN INTEGERNEGSUC negsuc #-}

data [_] (a : Set) : Set where
[] : [ a ]
__ : a -> [ a ] -> [ a ]

{-# BUILTIN LIST [_] #-}
{-# BUILTIN NIL [] #-}
{-# BUILTIN CONS _∷_ #-}

primitive
primStringToList : String -> [ Char ]

string : [ Char ]
string = primStringToList "∃ apa"

char : Char
char = '∀'

anotherString : String
anotherString = "¬ be\
\pa"

nat :
nat = 45

float : Float
float = 45.0e-37

-- Testing qualified names.

open import Test
Eq = Test.Equiv {Test.}