diff --git a/lib/pure.ex b/lib/pure.ex
index 6ded7e1..204457b 100644
--- a/lib/pure.ex
+++ b/lib/pure.ex
@@ -85,6 +85,10 @@ defmodule Pure do
end
end
+ def is_pure?(q) do
+ is_guard?(q, __ENV__) || is_match?(q, __ENV__)
+ end
+
defmacro eval(str) when is_binary(str) do
{:ok, q} = Code.string_to_quoted(str)
quote do
@@ -92,8 +96,15 @@ defmodule Pure do
Pure.eval(unquote(q))
end
end
+ defmacro eval(q = {:__block__, _, l}) when is_list(l) do
+ if Enum.all?(l, fn i ->
+ is_pure?(i)
+ end) do
+ q
+ end
+ end
defmacro eval(q) do
- if is_guard?(q, __ENV__) || is_match?(q, __ENV__) do
+ if is_pure?(q) do
q
else
raise ArgumentError, "not a pure expression: #{Macro.to_string(q)}"