defmodule Witchcraft.Unit do
@moduledoc """
The `unit` or `Void` type. A stand in for "no added information here".
Why not encode unit as `{}`? Many protocols (Witchcraft and others)
convert tuples to lists, and thus will treat unit as `{}` and thus `[]`,
which we don't want. The struct removes this ambiguity.
"""
alias __MODULE__
@type t :: %Unit{}
defstruct []
@doc "Helper to summon the singleton `Unit` struct"
@spec new() :: t()
def new, do: %Unit{}
end
defimpl TypeClass.Property.Generator, for: Witchcraft.Unit do
def generate(_), do: %Witchcraft.Unit{}
end