# Macros using the <- operator

We currently use Elixir 1.7 and have the follow macro defined to simplify logic in `with-do` blocks:

``````defmacro ensure(condition, [fail: error]) do
quote do
:ok <- if unquote(condition), do: :ok, else: unquote(error)
end
end
``````

Usage is something like this:

``````with ensure(check_condition?(x), fail: {:error, :bad_condition}),
do: :ok
``````

In Elixir 1.8 and above, this macro no longer compiles. I get an error `undefined function <-/2`. Is there any way to define this macro such that it works with the current compiler? Or something similar I could do instead? We really like this syntactic sugar for `with-do` blocks.

1 Like