Arithmetic raised into Or_error
monad
All binary integer operations are only well defined on operands with equal sizes.
Module Int
provides a set of integer operations that do not raise exceptions, but return values raised to an Or_error monad.
Example:
Z.(i16 v1 + i16 v2 / int 16 v3)
,
or just:
Z.(!$v1 + !$v2 / !$v3)
.
val (!$) : t -> t Core_kernel.Std.Or_error.t
!$v
lifts v
to an Or_error monad. It is, essentially, the same as Ok v
The following lifter will check that their operand has a corresponding width.
val i1 : t -> t Core_kernel.Std.Or_error.t
i1 x
is Ok x
iff bitwidth x = 1
val i4 : t -> t Core_kernel.Std.Or_error.t
i4 x
is Ok x
iff bitwidth x = 4
val i8 : t -> t Core_kernel.Std.Or_error.t
i8 x
is Ok x
iff bitwidth x = 8
val i16 : t -> t Core_kernel.Std.Or_error.t
i16 x
is Ok x
iff bitwidth x = 16
val i32 : t -> t Core_kernel.Std.Or_error.t
i32 x
is Ok x
iff bitwidth x = 32
val i64 : t -> t Core_kernel.Std.Or_error.t
i64 x
is Ok x
iff bitwidth x = 64
val int : int -> t -> t Core_kernel.Std.Or_error.t
int w v
will be Ok
if v
has width w
val of_word_size :
Core_kernel.Std.Word_size.t ->
t ->
t Core_kernel.Std.Or_error.t
of_word_size w
creates a lifter for a specified word size w
, i.e. either i64
or i32
include Integer.S with type t = t Core_kernel.Std.Or_error.t
type t = t Core_kernel.Std.Or_error.t
include Integer.Base with type t := t
element neutral to the addition
element neutral to the multiplication
pred n
is a predecessor of n
abs x
absolute value of x
lnot x
is a logical negation of x
(1-complement)
logand x y
is a conjunction of x
and y
logand x y
is a conjunction of x
and y
logor x y
is a disjunction of x
and y
logxor x y
is exclusive or between x
and y
lshift x y
shift x
by y
bits left
rshift x y
shift x
by y
bits to the right
val arshift : t -> t -> t
arshift x y
shift x
by y
bits to the right and fill with the sign bit.
A common set of infix operators
include Monad.Infix with type 'a t := 'a Core_kernel.Std.Or_error.t
val (>>=) :
'a Core_kernel.Std.Or_error.t ->
('a -> 'b Core_kernel.Std.Or_error.t) ->
'b Core_kernel.Std.Or_error.t
val (>>|) :
'a Core_kernel.Std.Or_error.t ->
('a -> 'b) ->
'b Core_kernel.Std.Or_error.t