Result
is a data type for computations that might fail with an error. It
has two constructors, (Success <value>) and (Error <value>), and provides
many functions for working with, combining, and wrapping and unwrapping
values.
=
(Fn [(Ref (Result a b) c), (Ref (Result a b) c)] Bool)
(= a b)
equality is defined as the equality of both the constructor and the contained value, i.e. (Success 1) and (Success 1) are the same, but (Success 1) and (Success 2) are not.
and-then
(Fn [(Result a b), (Ref (Fn [a] (Result c b) d) e)] (Result c b))
(and-then a f)
takes a Result and applies a function f to it if it is a Success type. In the case that it is an Error, it is returned as is.
It is thus quite similar to map, but it will unwrap the value.
apply
(Fn [(Result a b), (Ref (Fn [a] c d) e), (Ref (Fn [b] f d) g)] (Result c f))
(apply a success-f error-f)
takes a Result a and applies functions to them, one in the case that it is an Error, one in the case that it is a Success.
delete
(Fn [(Result a b)] ())
deletes a Result. This should usually not be called manually.
error?
(Fn [(Ref (Result a b) c)] Bool)
(error? a)
checks whether the given value a is an Error.
It is the inverse of success?.
from-error
(Fn [(Result a b), b] b)
(from-error a dflt)
is an unwrapper that will get the value from an Error. If a is a Success, a default value will be returned.
from-success
(Fn [(Result a b), a] a)
(from-success a dflt)
is an unwrapper that will get the value from a Success. If a is an Error, a default value will be returned.
map
(Fn [(Result a b), (Ref (Fn [a] c d) e)] (Result c b))
(map a f)
takes a Result and applies a function f to it if it is a Success type, and wraps it back up. In the case that it is an Error, it is returned as is.
map-error
(Fn [(Result a b), (Ref (Fn [b] c d) e)] (Result a c))
(map-error a f)
takes a Result and applies a function f to it if it is an Error type, and wraps it back up. In the case that it is a Success, it is returned as is.
or-else
(Fn [(Result a b), (Ref (Fn [b] (Result a c) d) e)] (Result a c))
(or-else a f)
takes a Result and applies a function f to it if it is an Error type. In the case that it is a Success, it is returned as is.
It is the inverse of and-then.
success?
(Fn [(Ref (Result a b) c)] Bool)
(success? a)
checks whether the given value a is a Success.
It is the inverse of error?.
to-maybe
(Fn [(Result a b)] (Maybe a))
(to-maybe a)
is a function that will convert a Result to a Maybe, where a Success becomes a Just and an Error becomes a Nothing.
The error value is thrown away.
unsafe-from-error
(Fn [(Result a b)] b)
(unsafe-from-error a)
is an unsafe unwrapper that will get the value from an Error. If a is a Success, a runtime error will be generated.
unsafe-from-success
(Fn [(Result a b)] a)
(unsafe-from-success a)
is an unsafe unwrapper that will get the value from a Success. If a is an Error, a runtime error will be generated.
unwrap-or-else
(Fn [(Result a b), (Ref (Fn [b] a c) d)] a)
(unwrap-or-else a f)
takes a Result and either unwraps it if it is a Success, or calls a function f on the value contained in the Error.
unwrap-or-zero
(Fn [(Result a b)] a)
(unwrap-or-zero a)
takes a Result and either unwraps it if it is a Success, or calls zero. zero must be defined on the Success type.