sig
  module TypeRep :
    sig
      type t
      type delayed = unit -> Typeable.TypeRep.t
      val compare : Typeable.TypeRep.t -> Typeable.TypeRep.t -> int
      val eq : Typeable.TypeRep.t -> Typeable.TypeRep.t -> bool
      val mkFresh :
        string -> Typeable.TypeRep.delayed list -> Typeable.TypeRep.delayed
      val mkTuple : Typeable.TypeRep.delayed list -> Typeable.TypeRep.delayed
      val mkPolyv :
        (string * Typeable.TypeRep.delayed option) list ->
        Typeable.TypeRep.delayed list -> Typeable.TypeRep.delayed
    end
  exception CastFailure of string
  type dynamic
  val tagOf : Typeable.dynamic -> Typeable.TypeRep.t
  module type Typeable =
    sig
      type a
      val type_rep : unit -> Typeable.TypeRep.t
      val has_type : Typeable.dynamic -> bool
      val cast : Typeable.dynamic -> Typeable.Typeable.a option
      val throwing_cast : Typeable.dynamic -> Typeable.Typeable.a
      val make_dynamic : Typeable.Typeable.a -> Typeable.dynamic
      val mk : Typeable.Typeable.a -> Typeable.dynamic
    end
  module Defaults :
    functor (T : sig type a val type_rep : unit -> Typeable.TypeRep.t end->
      sig
        type a = T.a
        val type_rep : unit -> TypeRep.t
        val has_type : dynamic -> bool
        val cast : dynamic -> a option
        val throwing_cast : dynamic -> a
        val make_dynamic : a -> dynamic
        val mk : a -> dynamic
      end
  module Typeable_list :
    functor (A : Typeable->
      sig
        type a = A.a list
        val type_rep : unit -> TypeRep.t
        val has_type : dynamic -> bool
        val cast : dynamic -> a option
        val throwing_cast : dynamic -> a
        val make_dynamic : a -> dynamic
        val mk : a -> dynamic
      end
  module Typeable_option :
    functor (A : Typeable->
      sig
        type a = A.a option
        val type_rep : unit -> TypeRep.t
        val has_type : dynamic -> bool
        val cast : dynamic -> a option
        val throwing_cast : dynamic -> a
        val make_dynamic : a -> dynamic
        val mk : a -> dynamic
      end
  module Typeable_ref :
    functor (A : Typeable->
      sig
        type a = A.a ref
        val type_rep : unit -> TypeRep.t
        val has_type : dynamic -> bool
        val cast : dynamic -> a option
        val throwing_cast : dynamic -> a
        val make_dynamic : a -> dynamic
        val mk : a -> dynamic
      end
  module Typeable_unit :
    sig
      type a = unit
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
  module Typeable_int :
    sig
      type a = int
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
  module Typeable_num :
    sig
      type a = Num.num
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
  module Typeable_float :
    sig
      type a = float
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
  module Typeable_bool :
    sig
      type a = bool
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
  module Typeable_string :
    sig
      type a = string
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
  module Typeable_char :
    sig
      type a = char
      val type_rep : unit -> TypeRep.t
      val has_type : dynamic -> bool
      val cast : dynamic -> a option
      val throwing_cast : dynamic -> a
      val make_dynamic : a -> dynamic
      val mk : a -> dynamic
    end
end