An open API service indexing awesome lists of open source software.

https://github.com/lpil/total

Basic exhaustiveness checking of unions in Elixir
https://github.com/lpil/total

elixir-lang exhaustiveness-checking macros

Last synced: 6 months ago
JSON representation

Basic exhaustiveness checking of unions in Elixir

Awesome Lists containing this project

README

          

# Total

Simple exhaustiveness checking of tuple + atom based unions.

```elixir
defmodule MyType do
require Total

# define a union
Total.defunion(method() :: :get | :post | {:other, term()})
end

defmodule Elsewhere do
require MyType

# This is OK, all variants are covered
def method_string(m) do
MyType.method_case m do
:get -> "GET"
:post -> "POST"
{:other, t} -> t
end
end

# This is a compile time error: missing `{:other, term()}`
def method_string(m) do
MyType.method_case m do
:get -> "GET"
:post -> "POST"
end
end
end
```

The exhaustiness checking is very basic: bare atoms are checked and tuples
have their tag and length checked, but their arguments are unchecked.

All other terms and guard clauses are ignored.

## Installation

```elixir
def deps do
[
{:total, "~> 0.1.0"}
]
end
```