Module Stdlib.Either
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt
:DkSDKProject_DeclareAvailable(ocaml CONSTRAINT "= 4.14.0" FINDLIBS str unix runtime_events threads dynlink) DkSDKProject_MakeAvailable(ocaml)
Add the
Findlib::ocaml
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::ocaml)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install ocaml.4.14.0
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (ocaml (>= 4.14.0))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file and add:depends: [ # ... existing dependencies ... "ocaml" {>= "4.14.0"} ]
Then run:
opam install . --deps-only
FINALLY, add the library to any desired
(library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
))
type
``('a, 'b) t`` =
|
Left
of
'a
|
Right
of
'b
A value of ('a, 'b) Either.t
contains either a value of 'a
or a
value of 'b
val
left :
'a
->
``(
'a
,
'b
)``
t
left v
is Left v
.
val
right :
'b
->
``(
'a
,
'b
)``
t
right v
is Right v
.
val
is_left : ``(
'a
,
'b
)``
t
->
bool
is_left (Left v)
is true
, is_left (Right v)
is false
.
val
is_right : ``(
'a
,
'b
)``
t
->
bool
is_right (Left v)
is false
, is_right (Right v)
is true
.
val
find_left : ``(
'a
,
'b
)``
t
->
'a
option
find_left (Left v)
is Some v
, find_left (Right _)
is None
val
find_right : ``(
'a
,
'b
)``
t
->
'b
option
find_right (Right v)
is Some v
, find_right (Left _)
is None
map_left f e
is Left (f v)
if e
is Left v
and e
if e
is
Right _
.
map_right f e
is Right (f v)
if e
is Right v
and e
if e
is
Left _
.
val
map : ``left:``(
'a1
->
'a2
)``
->
``right:``(
'b1
->
'b2
)``
->
``(
'a1
,
'b1
)``
t
->
``(
'a2
,
'b2
)``
t
map ~left ~right (Left v)
is Left (left v)
,
map ~left ~right (Right v)
is Right (right v)
.
val
fold : ``left:``(
'a
->
'c
)``
->
``right:``(
'b
->
'c
)``
->
``(
'a
,
'b
)``
t
->
'c
fold ~left ~right (Left v)
is left v
, and
fold ~left ~right (Right v)
is right v
.
val
iter : ``left:``(
'a
->
unit)``
->
``right:``(
'b
->
unit)``
->
``(
'a
,
'b
)``
t
->
unit
iter ~left ~right (Left v)
is left v
, and
iter ~left ~right (Right v)
is right v
.
val
for_all : ``left:``(
'a
->
bool)``
->
``right:``(
'b
->
bool)``
->
``(
'a
,
'b
)``
t
->
bool
for_all ~left ~right (Left v)
is left v
, and
for_all ~left ~right (Right v)
is right v
.
val
equal : ``left:``(
'a
->
'a
->
bool)``
->
``right:``(
'b
->
'b
->
bool)``
->
``(
'a
,
'b
)``
t
->
``(
'a
,
'b
)``
t
->
bool
equal ~left ~right e0 e1
tests equality of e0
and e1
using left
and right
to respectively compare values wrapped by Left _
and
Right _
.
val
compare : ``left:``(
'a
->
'a
->
int)``
->
``right:``(
'b
->
'b
->
int)``
->
``(
'a
,
'b
)``
t
->
``(
'a
,
'b
)``
t
->
int
compare ~left ~right e0 e1
totally orders e0
and e1
using left
and right
to respectively compare values wrapped by Left _
and
Right _
. Left _
values are smaller than Right _
values.