functor (S : Semigroup.S) ->
  sig type t = S.t option val append : t -> t -> t val zero : t end