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.

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.

Link to this macro

list_of(module, options \\ [])

View Source (macro)

An ad-hoc version of Croma.SubtypeOfList.

Options:

  • :define_default0? - Boolean value that indicates whether to define default/0 (which simply returns []). Defaults to true.
Link to this macro

nilable(module)

View Source (macro)

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}
Link to this macro

union(modules)

View Source (macro)

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.