12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- module Example where
- open import Prelude
- import Typed
- data Data : Set where
- nat : Data
- bool : Data
- Datatype : Data -> List (List Data)
- Datatype nat = ε ◄ ε ◄ (ε ◄ nat)
- Datatype bool = ε ◄ ε ◄ ε
- data Effect : Set where
- data _⊆_ : Effect -> Effect -> Set where
- refl⊆ : forall {M} -> M ⊆ M
- Monad : Effect -> Set -> Set
- Monad e A = A
- return : forall {M A} -> A -> Monad M A
- return x = x
- map : forall {M A B} -> (A -> B) -> Monad M A -> Monad M B
- map f m = f m
- join : forall {M A} -> Monad M (Monad M A) -> Monad M A
- join m = m
- morph : forall {M N} -> M ⊆ N -> (A : Set) -> Monad M A -> Monad N A
- morph _ A x = x
- open module TT =
- Typed Data Datatype
- Effect _⊆_
- Monad
- (\{M A} -> return {M}{A})
- (\{M A B} -> map {M}{A}{B})
- (\{M A} -> join {M}{A})
- morph
- zero : forall {M Γ} -> InV M Γ (TyCon nat)
- zero = con (tl hd) ⟨⟩
- suc : forall {M Γ} -> InV M Γ (TyCon nat) -> InV M Γ (TyCon nat)
- suc n = con hd (⟨⟩ ◃ n)
- true : forall {M Γ} -> InV M Γ (TyCon bool)
- true = con hd ⟨⟩
- false : forall {M Γ} -> InV M Γ (TyCon bool)
- false = con (tl hd) ⟨⟩
|