functor (X : Comparable->
  sig
    exception InvalidArgument of string
    type feature = int
    exception BadContinuity of feature
    exception DiscreteFeatOutOfBounds of feature * int
    type category = int
    type contData = X.t
    type dataVal = Discrete of int | Continuous of contData
    type data = dataVal array
    type trainVal = { data : data; category : category; }
    type trainSet
    type decisionTree
    val c45 : trainSet -> decisionTree
    val classify : decisionTree -> data -> category
    val emptyTrainSet : int -> int -> bool array -> trainSet
    val addData : trainVal -> trainSet -> trainSet
    val addDataList : trainVal list -> trainSet -> trainSet
    val getSet : trainSet -> trainVal list
    val setFeatureMax : int -> int -> trainSet -> unit
    val getNbFeatures : trainSet -> int
    val getFeatureMax : trainSet -> int array
    val getFeatContinuity : trainSet -> bool array
    val getNbCategories : trainSet -> int
    val getSetSize : trainSet -> int
    val toDot :
      Format.formatter ->
      (Format.formatter -> contData -> unit) -> decisionTree -> unit
    val toDotStdout :
      (Format.formatter -> contData -> unit) -> decisionTree -> unit
  end