1
0
forked from GitHub/gf-core

Transfer: added monad class. fixed Compos class types.

This commit is contained in:
bringert
2005-11-30 18:40:29 +00:00
parent a68cd282cb
commit 01d1715994

View File

@@ -299,17 +299,32 @@ Monoid = sig mzero : A
-- The Compos class
--
Compos : Type -> Type
Compos T = sig
C : Type
Compos : (C : Type) -> (C -> Type) -> Type
Compos C T = sig
composOp : (c : C) -> ((a : C) -> T a -> T a) -> T c -> T c
composFold : (B : Type) -> Monoid B -> (c : C) -> ((a : C) -> T a -> b) -> T c -> b
composOp : (T : Type) -> (d : Compos T)
-> (c : d.C) -> ((a : d.C) -> T a -> T a) -> T c -> T c
composOp _ d = d.composOp
composOp : (C : Type) -> (T : C -> Type) -> (d : Compos C T)
-> (c : C) -> ((a : C) -> T a -> T a) -> T c -> T c
composOp _ _ d = d.composOp
composFold : (T : Type) -> (d : Compos T) -> (B : Type) -> Monoid B
-> (c : d.C) -> ((a : d.C) -> T a -> b) -> T c -> b
composFold : (C : Type) -> (T : C -> Type) -> (d : Compos C T) -> (B : Type) -> Monoid B
-> (c : C) -> ((a : C) -> T a -> b) -> T c -> b
composFold _ _ d = d.composFold
--
-- The Monad class
--
Monad : (Type -> Type) -> Type
Monad M = sig return : (A : Type) -> M A
bind : (A : Type) -> (B : Type) -> M A -> (A -> M B) -> M B
return : (M : Type -> Type) -> Monad M -> M A
return _ d = d.return
bind : (M : Type -> Type) -> Monad M
-> (A : Type) -> (B : Type) -> M A -> (A -> M B) -> M B
bind _ d = d.bind