Commit ed48bb66b9caeeb9c5bf50268b307726793330a5

Thomas de Grivel 2022-02-18T08:27:59

wip

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)}"