This package defines julia implementations for the common types Option (aka Maybe), Either and Try, as well as one extra type ContextManager which mimics Python's with-ContextManager.
Here an example using Try to handle errors programmatically. Similar to Option, a Try is either a Const, denoting an error, or an Identity
value, which denotes success.
using DataTypesBasic # defines Try
@Try div(1, 0) # Const(Thrown(DivideError()))
@Try div(8, 3) # Identity(2)Using another helper package Monadic. We can combine these
into nice syntax.
using Monadic # defines @monadic
# flatmap is also defined in TypeClasses.jl
flatmap(f, x) = Iterators.flatten(map(f, x))
tryit = @monadic map flatmap begin
a = @Try div(8, 3)
b = @Try isodd(a) ? 100 + a : error("fail")
@pure a, b
end
# Const(Thrown(ErrorException("fail")))For more details check out the documentation.