Packages
croma
0.1.3
0.13.0
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir macro utilities to make type-based programming easier
Current section
Files
Jump to
Current section
Files
lib/croma/result.ex
defmodule Croma.Result do
use Croma.Monad
import Croma.Defun
@type t(a) :: {:ok, a} | {:error, any}
def pure(a), do: {:ok, a}
def bind({:ok, val} , f), do: f.(val)
def bind({:error, _} = e, _), do: e
defun get(result: t(a)) :: nil | a when a: any do
{:ok , val} -> val
{:error, _ } -> nil
end
defun get(result: t(a), default: a) :: a when a: any do
({:ok , val}, _ ) -> val
({:error, _ }, default) -> default
end
defun get!(result: t(a)) :: a when a: any do
{:ok , val} -> val
{:error, _ } -> raise "result is not :ok; element not present"
end
defun ok?(result: t(a)) :: boolean when a: any do
{:ok , _} -> true
{:error, _} -> false
end
defun error?(result: t(a)) :: boolean when a: any do
!ok?(result)
end
end