A protocol for generating values from templates.
All the types that implement this protocol.
Generate a value from the template.
Initialise the template, if required.
@type mapper() :: nil | (any() -> any())
@type t() :: term()
@spec generate(t(), map(), keyword()) :: any()
@spec init(t()) :: t()