View Source Croma.TypeGen (croma v0.11.3)
Module that defines macros for ad-hoc (in other words "in-line") module definitions.
Link to this section Summary
Functions
Creates a new module that simply represents a type whose sole member is the given value.
An ad-hoc version of Croma.SubtypeOfList
.
Creates a new module that represents a nilable type, based on the given type module module
.
Creates a new module that represents a sum type of the given types.
Link to this section Functions
Creates a new module that simply represents a type whose sole member is the given value.
Only atoms and integers are supported.
An ad-hoc version of Croma.SubtypeOfList
.
Options:
:define_default0?
- Boolean value that indicates whether to definedefault/0
(which simply returns[]
). Defaults totrue
.
Creates a new module that represents a nilable type, based on the given type module module
.
Using the given type module nilable/1
generates a new module that defines:
@type t :: nil | module.t
@spec valid?(term) :: boolean
@spec default() :: nil
- If the given module exports
new/1
@spec new(term) :: Croma.Result.t(t)
@spec new!(term) :: t
This is useful in defining a struct with nilable fields using Croma.Struct
.
examples
Examples
iex> use Croma
...> defmodule I do
...> use Croma.SubtypeOfInt, min: 0
...> end
...> defmodule S do
...> use Croma.Struct, fields: [not_nilable_int: I, nilable_int: Croma.TypeGen.nilable(I)]
...> end
...> S.new(%{not_nilable_int: 0, nilable_int: nil})
%S{nilable_int: nil, not_nilable_int: 0}
Creates a new module that represents a sum type of the given types.
The argument must be a list of type modules.
Note that the specified types should be mutually disjoint;
otherwise new/1
can return unexpected results depending on the order of the type modules.