module Opaque: sig end
int
and string
.
This module provides a convenient way to convert int
or string
types
to abstract types.
Motivation: type int
may be used for representing several kinds of
data. Confusion is easy, so we often need to make it abstract,
while keeping:
int
open Opaque
and then
use a type parameter to define
the specialized version of int
or string
.
We will write the type declarations as
type port = [`Port] int_t
or type date = [`Date] int_t
.
Data is converted with the int_t
and t_int
polymorphic
functions as in let port : port = int_t 0
.
Opaque
int s
|
type 'a
int_t
'a int_t
has the same internal representation
as type int
.val int_t : int -> 'a int_t
val t_int : 'a int_t -> int
val any_int : 'a int_t -> 'b int_t
int_t
, t_int
and any_int
are type conversion functions.val add : 'a int_t -> 'a int_t -> 'a int_t
val sub : 'a int_t -> 'a int_t -> 'a int_t
val mul : 'a int_t -> 'a int_t -> 'a int_t
val div : 'a int_t -> 'a int_t -> 'a int_t
val neg : 'a int_t -> 'a int_t
add
, sub
, mul
, div
and neg
are the equivalents
of ( + )
, ( - )
, ( * )
, ( / )
and ( ~- )
.val successor : 'a int_t -> 'a int_t
val predecessor : 'a int_t -> 'a int_t
val increment : 'a int_t Pervasives.ref -> unit
successor
, predecessor
and increment
are the equivalents
of ( + )
, ( - )
, ( * )
, ( / )
and ( ~- )
.val print_int_t : 'a int_t -> unit
Opaque
string s
|
type 'a
string_t
'a string_t
has the same internal representation
as type string
.val string_t : string -> 'a string_t
val t_string : 'a string_t -> string
val any_string : 'a string_t -> 'b string_t
int_string
, t_string
and any_string
are type conversion functions.val concat : 'a string_t -> 'a string_t -> 'a string_t
val concat_list : string -> 'a string_t list -> 'a string_t
concat
and concat_list
are equivalents of ( ^ )
and String.concat
.val print_string_t : 'a string_t -> unit