Legend:
Library
Module
Module type
Parameter
Class
Class type
The main purpose of this module is to be used with parametric types such as ('a, Empty.t) result. Such type is actually isomorphic to 'a (see get_ok function). This is useful if a module signature expects a generic ('a,'b) result type, but for some instantiation, 'b is actually empty. Here is a small example how such module can be used:
module type S = sig
type error
type 'a t
val return : 'a -> 'a t
val fail : error -> 'a t
val bind : 'a t -> ('a -> 'a t) -> (error -> 'a t) -> 'a t end
module M : S with type error = Empty.t and type 'a t = ('a,
Empty.t) result = struct
type error = Empty.t
type 'a t = ('a, Empty.t) result
let return = fun x -> Ok x
let fail = Empty.absurd
let bind = fun data left _right -> match data with | Ok x ->
left x | Error err -> Empty.absurd err end
let _ = let data = M.bind (M.return 5) (fun x -> M.return (x +
2)) (Empty.absurd) in assert (data |> Empty.get_ok = 7)
type t = |
This type has no canonical inhabitant (there is no terminating OCaml value which inhabits this type).