12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- {-
- Types Summer School 2007
- Bertinoro
- Aug 19 - 31, 2007
- Agda
- Ulf Norell
- -}
- {-
- Learn more about Agda on the Agda wiki:
- http://www.cs.chalmers.se/~ulfn/Agda
- This is where you find the exercises for the afternoon.
- -}
- -- Each Agda file contains a top-level module, whose
- -- name corresponds to the file name.
- module Basics where
- {-
- Expressions (types and terms)
- -}
- -- The expression language of Agda is your favorite dependently
- -- typed λ-calculus.
- -- For instance:
- id₁ : (A : Set) -> A -> A
- id₁ = \ A x -> x
- id₂ : (A : Set) -> A -> A
- id₂ = \ A x -> id₁ A (id₁ A x)
- -- Note: Agda likes white space. This is not correct:
- -- id:(A:Set)->A->A
- -- Why not? In Agda the following strings are valid identifiers:
- -- id:
- -- A:Set
- -- ->A->A
- -- Another useful function, featuring telescopes
- -- and typed λs.
- compose : (A B C : Set) -> (B -> C) -> (A -> B) -> A -> C
- compose = \(A B C : Set) f g x -> f (g x)
- compose' : (A B : Set)(C : B -> Set)
- (f : (x : B) -> C x)(g : A -> B) ->
- (x : A) -> C (g x)
- compose' = \A B C f g x -> f (g x)
- {-
- Implicit arguments
- -}
- -- Writing down type arguments explicitly soon gets old.
- -- Enter implicit arguments.
- -- Note the curlies in the telescope. And A mysteriously disappeares
- -- in the definition.
- id₃ : {A : Set} -> A -> A
- id₃ = \ x -> x
- -- And it's not there when applying the function.
- id₄ : {A : Set} -> A -> A
- id₄ = \ x -> (id₃ (id₃ x))
- -- If you think the type checker should figure out the value of
- -- something explicit, you write _.
- id₆ : {A : Set} -> A -> A
- id₆ x = id₁ _ x
- -- Interesting though it is, eventually you'll get bored
- -- with the λ-calculus...
- -- Move on to: Datatypes.agda
|