 
   test "maps with generated variables in key" do
     assert %{"#{1}" => 1} == %{"1" => 1}
-    assert %{(for x <- 1..3, do: x) => 1} == %{[1, 2, 3] => 1}
-    assert %{(with x = 1, do: x) => 1} == %{1 => 1}
-    assert %{(with {:ok, x} <- {:ok, 1}, do: x) => 1} == %{1 => 1}
-    assert %{(try do raise "error" rescue _ -> 1 end) => 1} == %{1 => 1}
-    assert %{(try do throw 1 catch x -> x end) => 1} == %{1 => 1}
-    assert %{(try do a = 1; a rescue _ -> 2 end) => 1} == %{1 => 1}
-    assert %{(try do 1 else a -> a end) => 1} == %{1 => 1}
+    assert %{for(x <- 1..3, do: x) => 1} == %{[1, 2, 3] => 1}
+    assert %{with(x = 1, do: x) => 1} == %{1 => 1}
+    assert %{with({:ok, x} <- {:ok, 1}, do: x) => 1} == %{1 => 1}
+
+    assert %{
+             try do
+               raise "error"
+             rescue
+               _ -> 1
+             end => 1
+           } == %{1 => 1}
+
+    assert %{
+             try do
+               throw(1)
+             catch
+               x -> x
+             end => 1
+           } == %{1 => 1}
+
+    assert %{
+             try do
+               a = 1
+               a
+             rescue
+               _ -> 2
+             end => 1
+           } == %{1 => 1}
+
+    assert %{
+             try do
+               1
+             else
+               a -> a
+             end => 1
+           } == %{1 => 1}
   end
 
   test "matching with map as a key" do

    end

    def __struct__(kv) do
      Enum.reduce kv, __struct__(), fn {k, v}, acc -> :maps.update(k, v, acc) end
    end
  end

  test "structs" do
    assert %ExternalUser{} ==
           %{__struct__: ExternalUser, name: "john", age: 27}

    assert %ExternalUser{name: "meg"} ==
           %{__struct__: ExternalUser, name: "meg", age: 27}

    user = %ExternalUser{}
    assert %ExternalUser{user | name: "meg"} ==
           %{__struct__: ExternalUser, name: "meg", age: 27}

    %ExternalUser{name: name} = %ExternalUser{}
    assert name == "john"

    map = %{}
    assert_raise BadStructError, "expected a struct named MapTest.ExternalUser, got: %{}", fn ->
      %ExternalUser{map | name: "meg"}
    end

  test "merge/3" do
    # When first map is bigger
    assert Map.merge(%{a: 1, b: 2, c: 3}, %{c: 4, d: 5}, fn :c, 3, 4 -> :x end) ==
             %{a: 1, b: 2, c: :x, d: 5}

    # When second map is bigger
    assert Map.merge(%{b: 2, c: 3}, %{a: 1, c: 4, d: 5}, fn :c, 3, 4 -> :x end) ==
             %{a: 1, b: 2, c: :x, d: 5}
  end

  test "implements (almost) all functions in Keyword" do
    assert Keyword.__info__(:functions) -- Map.__info__(:functions) ==
             [delete: 3, delete_first: 2, get_values: 2, keyword?: 1, pop_first: 2, pop_first: 3]
  end

  test "variable keys" do
