An uninhabited type.
This is useful when interfaces require that a type be specified, but the implementer knows this type will not be used in their implementation of the interface.
For instance, Async.Std.Rpc.Pipe_rpc.t
is parameterized by an error type, but a user
may want to define a Pipe RPC that can't fail.
Because there are no values of type Nothing.t
, a piece of code that has a value of
type Nothing.t
must be unreachable. In such an unreachable piece of code, one can
use unreachable_code
to give the code whatever type one needs. For example:
let f (r : (int, Nothing.t) Result.t) : int =
match r with
| Ok i -> i
| Error n -> Nothing.unreachable_code n
;;