croma v0.8.0 Croma.TypeGen View Source

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. Options for Croma.SubtypeOfList are not available in list_of/1. Usage of list_of/1 macro is the same as nilable/1

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 for Croma.SubtypeOfList are not available in list_of/1. Usage of list_of/1 macro is the same as nilable/1.

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
  • (If the given module exports new/1) @spec new(term) :: Croma.Result.t(t)

This is useful in defining a struct with nilable fields using Croma.Struct.

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 modules each of which defines @type t and @spec valid?(term) :: boolean.