Current section
Files
Jump to
Current section
Files
lib/data/parser.ex
defmodule Data.Parser do
alias FE.Result
@type t(a, b) :: (any -> Result.t(a, b))
@spec predicate((a -> boolean()), b | (a -> b)) :: t(a, b) when a: var, b: var
def predicate(p, default) when is_function(default, 1) do
fn x ->
case p.(x) do
true -> Result.ok(x)
false -> default.(x) |> Result.error()
end
end
end
def predicate(p, default), do: predicate(p, fn _ -> default end)
@spec one_of([a], b) :: t(a, b) when a: var, b: var
def one_of(elements, default) do
fn x ->
case Enum.member?(elements, x) do
true -> Result.ok(x)
false -> Result.error(default)
end
end
end
end