# croma v0.13.0 - Table of Contents

> Elixir macro utilities to make type-based programming easier

## Modules

- [Croma](Croma.md): Utility module to `import` croma macros.
- [Croma.Any](Croma.Any.md): Module that represents any Elixir term.

- [Croma.Atom](Croma.Atom.md): Module that represents the Elixir's built-in atom type.
Intended to be used with other parts of croma to express atom variables.

- [Croma.Binary](Croma.Binary.md): Module that represents the Elixir's built-in binary type.
Intended to be used with other parts of croma to express binary variables.

- [Croma.BitString](Croma.BitString.md): Module that represents the Elixir's built-in bitstring type.
Intended to be used with other parts of croma to express bitstring variables.

- [Croma.Boolean](Croma.Boolean.md): Module that represents the Elixir's built-in boolean type.
Intended to be used with other parts of croma to express boolean variables.

- [Croma.Byte](Croma.Byte.md): Module that represents the Elixir's built-in byte type.
Intended to be used with other parts of croma to express byte variables.

- [Croma.Char](Croma.Char.md): Module that represents the Elixir's built-in char type.
Intended to be used with other parts of croma to express char variables.

- [Croma.DebugAssert](Croma.DebugAssert.md)
- [Croma.Defpt](Croma.Defpt.md): Module that provides `Croma.Defpt.defpt/2` macro.

- [Croma.Defun](Croma.Defun.md): Module that provides `Croma.Defun.defun/2` macro.

- [Croma.Float](Croma.Float.md): Module that represents the Elixir's built-in float type.
Intended to be used with other parts of croma to express float variables.

- [Croma.Function](Croma.Function.md): Module that represents the Elixir's built-in function type.
Intended to be used with other parts of croma to express function variables.

- [Croma.Guard](Croma.Guard.md): Module to work with guard generation (see `Croma.Defun.defun/2`).
This module is intended for internal use.

- [Croma.Integer](Croma.Integer.md): Module that represents the Elixir's built-in integer type.
Intended to be used with other parts of croma to express integer variables.

- [Croma.List](Croma.List.md): Module that represents the Elixir's built-in list type.
Intended to be used with other parts of croma to express list variables.

- [Croma.ListMonad](Croma.ListMonad.md): Implementation of `Croma.Monad` interface for built-in lists.
- [Croma.Map](Croma.Map.md): Module that represents the Elixir's built-in map type.
Intended to be used with other parts of croma to express map variables.

- [Croma.Monad](Croma.Monad.md): This module defines an interface for [monad](https://en.wikipedia.org/wiki/Monad).
- [Croma.NegInteger](Croma.NegInteger.md): Module that represents the Elixir's built-in neg_integer type.
Intended to be used with other parts of croma to express neg_integer variables.

- [Croma.NonNegInteger](Croma.NonNegInteger.md): Module that represents the Elixir's built-in non_neg_integer type.
Intended to be used with other parts of croma to express non_neg_integer variables.

- [Croma.Number](Croma.Number.md): Module that represents the Elixir's built-in number type.
Intended to be used with other parts of croma to express number variables.

- [Croma.Pid](Croma.Pid.md): Module that represents the Elixir's built-in pid type.
Intended to be used with other parts of croma to express pid variables.

- [Croma.Port](Croma.Port.md): Module that represents the Elixir's built-in port type.
Intended to be used with other parts of croma to express port variables.

- [Croma.PosInteger](Croma.PosInteger.md): Module that represents the Elixir's built-in pos_integer type.
Intended to be used with other parts of croma to express pos_integer variables.

- [Croma.Reference](Croma.Reference.md): Module that represents the Elixir's built-in reference type.
Intended to be used with other parts of croma to express reference variables.

- [Croma.Result](Croma.Result.md): A simple data structure to represent a result of computation that can either succeed or fail,
in the form of `{:ok, any}` or `{:error, any}`.
- [Croma.String](Croma.String.md): Module that represents the Elixir's built-in String.t type.
Intended to be used with other parts of croma to express String.t variables.

- [Croma.Struct](Croma.Struct.md): Module to define structs with validation and conversion functions, based on its type information.
- [Croma.SubtypeOfAtom](Croma.SubtypeOfAtom.md): Helper module to define type whose members are a fixed set of atoms.
The following members are generated by `use Croma.SubtypeOfAtom`
- [Croma.SubtypeOfFloat](Croma.SubtypeOfFloat.md): Helper module to define float-based types.
The following members are generated by `use Croma.SubtypeOfFloat`
- [Croma.SubtypeOfFloatWithConversionFromInt](Croma.SubtypeOfFloatWithConversionFromInt.md): Helper module to define float-based types.
The following members are generated by `use Croma.SubtypeOfFloatWithConversionFromInt`
- [Croma.SubtypeOfInt](Croma.SubtypeOfInt.md): Helper module to define integer-based types.
The following members are generated by `use Croma.SubtypeOfInt`
- [Croma.SubtypeOfList](Croma.SubtypeOfList.md): Helper module to define list-based types.
The following members are generated by `use Croma.SubtypeOfList`
- [Croma.SubtypeOfMap](Croma.SubtypeOfMap.md): Helper module to define map-based types.
The following members are generated by `use Croma.SubtypeOfMap`
- [Croma.SubtypeOfNumber](Croma.SubtypeOfNumber.md): Helper module to define number-based (integer or float) types.
The following members are generated by `use Croma.SubtypeOfNumber`
- [Croma.SubtypeOfString](Croma.SubtypeOfString.md): Helper module to define string-based types.
The following members are generated by `use Croma.SubtypeOfString`
- [Croma.SubtypeOfTuple](Croma.SubtypeOfTuple.md): Helper module to define tuple-based types.
The following members are generated by `use Croma.SubtypeOfTuple`
- [Croma.TestCase](Croma.TestCase.md): Module to be `use`d by test modules to make tests a bit shorter.
- [Croma.Tuple](Croma.Tuple.md): Module that represents the Elixir's built-in tuple type.
Intended to be used with other parts of croma to express tuple variables.

- [Croma.TypeGen](Croma.TypeGen.md): Module that defines macros for ad-hoc (in other words "in-line") module definitions.

- [Croma.TypeUtil](Croma.TypeUtil.md): Utilities to work with internal representation of types.

- [Croma.Validation](Croma.Validation.md): Module for code generation of argument validation (see `Croma.Defun.defun/2`).
This module is intended for internal use.

- Exceptions
  - [Croma.DebugAssertError](Croma.DebugAssertError.md)

## Mix Tasks

- [mix compile.croma](Mix.Tasks.Compile.Croma.md): Custom compiler that checks if Croma consistently defines `new/1` functions.

