Section ParameterizedCombiner.
Existing Instance Join_combiner.
Variable S : Type.
Variable JS : Join S.
Variable pa_S : Perm_alg S.
Variable sa_S : Sep_alg S.
Variable ca_S : Canc_alg S.
Variable da_S : Disj_alg S.
Variable T1 : functor.
Variable J1: forall A, Join (T1 A).
Variable Perm1: forall A, Perm_alg (T1 A).
Variable Sep1: forall A, Sep_alg (T1 A).
Variable T2 : functor.
Definition fcombiner (A : Type) : Type :=
@combiner S JS (T1 A) (T2 A).
Definition fcombiner_fmap (A B : Type) (f: A -> B) (g: B -> A)
(fa : fcombiner A) : fcombiner B :=
match fa with
| CEmpty => CEmpty
| CPart sh rs => CPart sh (fmap T1 f g rs)
| CFull trs => CFull (fmap T2 f g trs)
end.
Arguments fcombiner_fmap [A B] _ _ _.

Lemma ff_combiner : functorFacts fcombiner fcombiner_fmap.