View Source Corsa.Declare (corsa v0.1.2)
Declare allows you to define variable contracts. In Corsa, these contracts restrict the values that may be assigned to a variable.
Example
iex> defmodule Elixir.Corsa.Declare.Example do
...> use Corsa.Assert
...> use Corsa.Declare
...> declare is_integer(n) && n > 0
...> def f() do
...> n = 10
...> n
...> end
...> def g(n) do
...> n
...> end
...> end
iex> Elixir.Corsa.Declare.Example.f()
10
iex> Elixir.Corsa.Declare.Example.g(-1)
** (Corsa.DeclareViolationError) @declare does not hold
iex> defmodule Elixir.Corsa.Declare.Example1 do
...> use Corsa.Assert
...> use Corsa.Declare
...> declare is_integer(n) && n > 0
...> def f() do
...> n = -1
...> n
...> end
...> end
iex> Elixir.Corsa.Declare.Example1.f()
** (Corsa.DeclareViolationError) @declare does not hold
iex> defmodule Elixir.Corsa.Declare.Example2 do
...> use Corsa.Assert
...> use Corsa.Declare
...> declare is_integer(n) && n > 0
...> def f() do
...> receive do
...> n -> n
...> end
...> end
...> end
iex> send(self(), -10)
iex> Elixir.Corsa.Declare.Example2.f()
** (Corsa.DeclareViolationError) @declare does not hold
iex> defmodule Elixir.Corsa.Declare.Example3 do
...> use Corsa.Assert
...> use Corsa.Declare
...> declare n > 0
...> def f() do
...> receive do
...> n when is_integer(n) -> n
...> end
...> end
...> end
iex> send(self(), -10)
iex> Elixir.Corsa.Declare.Example3.f()
** (Corsa.DeclareViolationError) @declare does not hold
Summary
Functions
Errors
iex> defmodule Elixir.Corsa.Declare.ExampleError do
...> use Corsa.Assert
...> use Corsa.Declare
...> declare is_integer(n) && m > 0
...> end
** (Corsa.DeclareError) The expression in @declare should contain just one free variable