`include S`
`module Concrete (V : Sig.COMPARABLE) : Sig.P with type V.t = V.t and type V.label = V.t and type E.t = V.t * V.t and type E.label = unit`

Persistent Unlabeled Graphs.

`module Abstract (V : Sig.ANY_TYPE) : Sig.P with type V.label = V.t and type E.label = unit`

Abstract Persistent Unlabeled Graphs.

`module ConcreteLabeled (V : Sig.COMPARABLE) (E : Sig.ORDERED_TYPE_DFT) : Sig.P with type V.t = V.t and type V.label = V.t and type E.t = V.t * E.t * V.t and type E.label = E.t`

Persistent Labeled Graphs.

`module AbstractLabeled (V : Sig.ANY_TYPE) (E : Sig.ORDERED_TYPE_DFT) : Sig.P with type V.label = V.t and type E.label = E.t`

Abstract Persistent Labeled Graphs.

### Bidirectional graphs

Bidirectional graphs use more memory space (at worse the double) that standard concrete directional graphs. But accessing predecessors and removing a vertex are faster.

`module ConcreteBidirectional (V : Sig.COMPARABLE) : Sig.P with type V.t = V.t and type V.label = V.t and type E.t = V.t * V.t and type E.label = unit`

Imperative Unlabeled, bidirectional graph.

`module ConcreteBidirectionalLabeled (V : Sig.COMPARABLE) (E : Sig.ORDERED_TYPE_DFT) : Sig.P with type V.t = V.t and type V.label = V.t and type E.t = V.t * E.t * V.t and type E.label = E.t`

Imperative Labeled and bidirectional graph.