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

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