Example.agda 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. module Example where
  2. open import Prelude
  3. import Typed
  4. data Data : Set where
  5. nat : Data
  6. bool : Data
  7. Datatype : Data -> List (List Data)
  8. Datatype nat = ε ◄ ε ◄ (ε ◄ nat)
  9. Datatype bool = ε ◄ ε ◄ ε
  10. data Effect : Set where
  11. data _⊆_ : Effect -> Effect -> Set where
  12. refl⊆ : forall {M} -> M ⊆ M
  13. Monad : Effect -> Set -> Set
  14. Monad e A = A
  15. return : forall {M A} -> A -> Monad M A
  16. return x = x
  17. map : forall {M A B} -> (A -> B) -> Monad M A -> Monad M B
  18. map f m = f m
  19. join : forall {M A} -> Monad M (Monad M A) -> Monad M A
  20. join m = m
  21. morph : forall {M N} -> M ⊆ N -> (A : Set) -> Monad M A -> Monad N A
  22. morph _ A x = x
  23. open module TT =
  24. Typed Data Datatype
  25. Effect _⊆_
  26. Monad
  27. (\{M A} -> return {M}{A})
  28. (\{M A B} -> map {M}{A}{B})
  29. (\{M A} -> join {M}{A})
  30. morph
  31. zero : forall {M Γ} -> InV M Γ (TyCon nat)
  32. zero = con (tl hd) ⟨⟩
  33. suc : forall {M Γ} -> InV M Γ (TyCon nat) -> InV M Γ (TyCon nat)
  34. suc n = con hd (⟨⟩ ◃ n)
  35. true : forall {M Γ} -> InV M Γ (TyCon bool)
  36. true = con hd ⟨⟩
  37. false : forall {M Γ} -> InV M Γ (TyCon bool)
  38. false = con (tl hd) ⟨⟩