sig
  type error = Corrupted of (string * string) | Version of int * int
  val pp_error : Stdlib.Format.formatter -> Topkg_codec.error -> unit
  exception Error of Topkg_codec.error
  val err : kind:string -> string -> 'a
  type 'a t
  val v :
    kind:string ->
    enc:('a -> string) -> dec:(string -> 'a) -> 'a Topkg_codec.t
  val kind : 'a Topkg_codec.t -> string
  val enc : 'a Topkg_codec.t -> 'a -> string
  val dec : 'a Topkg_codec.t -> string -> 'a
  val dec_result : 'a Topkg_codec.t -> string -> 'a Topkg_result.result
  val with_kind : string -> 'a Topkg_codec.t -> 'a Topkg_codec.t
  val write :
    Topkg_fpath.t -> 'a Topkg_codec.t -> 'a -> unit Topkg_result.result
  val read : Topkg_fpath.t -> 'a Topkg_codec.t -> 'a Topkg_result.result
  val unit : unit Topkg_codec.t
  val const : 'a -> 'a Topkg_codec.t
  val bool : bool Topkg_codec.t
  val int : int Topkg_codec.t
  val string : string Topkg_codec.t
  val option : 'a Topkg_codec.t -> 'a option Topkg_codec.t
  val result :
    ok:'a Topkg_codec.t ->
    error:'b Topkg_codec.t -> ('a, 'b) Topkg_result.r Topkg_codec.t
  val list : 'a Topkg_codec.t -> 'a list Topkg_codec.t
  val pair : 'a Topkg_codec.t -> 'b Topkg_codec.t -> ('a * 'b) Topkg_codec.t
  val t2 : 'a Topkg_codec.t -> 'b Topkg_codec.t -> ('a * 'b) Topkg_codec.t
  val t3 :
    'a Topkg_codec.t ->
    'b Topkg_codec.t -> 'c Topkg_codec.t -> ('a * 'b * 'c) Topkg_codec.t
  val t4 :
    'a Topkg_codec.t ->
    'b Topkg_codec.t ->
    'c Topkg_codec.t -> 'd Topkg_codec.t -> ('a * 'b * 'c * 'd) Topkg_codec.t
  val t5 :
    'a Topkg_codec.t ->
    'b Topkg_codec.t ->
    'c Topkg_codec.t ->
    'd Topkg_codec.t ->
    'e Topkg_codec.t -> ('a * 'b * 'c * 'd * 'e) Topkg_codec.t
  val alt :
    kind:string -> ('a -> int) -> 'a Topkg_codec.t array -> 'a Topkg_codec.t
  val version : int -> 'a Topkg_codec.t -> 'a Topkg_codec.t
  val view :
    ?kind:string ->
    ('a -> 'b) * ('b -> 'a) -> 'b Topkg_codec.t -> 'a Topkg_codec.t
  val msg : [ `Msg of string ] Topkg_codec.t
  val result_error_msg :
    'a Topkg_codec.t -> 'a Topkg_result.result Topkg_codec.t
  val fpath : Topkg_fpath.t Topkg_codec.t
  val cmd : Topkg_cmd.t Topkg_codec.t
end