Packages
croma
0.3.0
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/builtin_type.ex
import Croma.Defun
defmodule Croma.BuiltinType do
@moduledoc false
@type_infos [
{Croma.Atom , :atom , :is_atom },
{Croma.Boolean , :boolean , :is_boolean },
{Croma.Float , :float , :is_float },
{Croma.Integer , :integer , :is_integer },
{Croma.String , :"String.t", :is_binary },
{Croma.BitString, :bitstring , :is_bitstring},
{Croma.Function , :function , :is_function },
{Croma.Pid , :pid , :is_pid },
{Croma.Port , :port , :is_port },
{Croma.Reference, :reference , :is_reference},
{Croma.Tuple , :tuple , :is_tuple },
{Croma.List , :list , :is_list },
{Croma.Map , :map , :is_map },
]
def type_infos, do: @type_infos
def all do
Enum.map(@type_infos, fn {m, _, _} -> m end)
end
end
Croma.BuiltinType.type_infos |> Enum.each fn {mod, builtin_type, pred} ->
defmodule mod do
@moduledoc """
Module that represents the Elixir's built-in #{builtin_type} type.
Intended to be used with other parts of croma to express #{builtin_type} variables.
"""
@type t :: unquote(builtin_type)
@doc """
Simply checks the argument's type using `#{pred}/1` and returns a `Croma.Result`.
"""
defun validate(value :: term) :: Croma.Result.t(t) do
b when unquote(pred)(b) -> {:ok, b}
_ -> {:error, {:invalid_value, [__MODULE__]}}
end
end
end