functor (Item : Item->
  functor (Desc : Desc->
    sig
      type item = Item.t
      type descriptor = Desc.descriptor
      type accumulator = Desc.accumulator
      type state
      val initial : state
      val representative : item -> state -> item
      val equivalent : item -> item -> state -> bool
      val descriptor : item -> state -> descriptor
      val set : item -> descriptor -> state -> state
      val union : item -> item -> state -> accumulator -> state * accumulator
      val domain : state -> item list
    end