Packages
mazurka
1.0.7
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
hypermedia api toolkit
Current section
Files
Jump to
Current section
Files
lib/mazurka/utils.ex
defmodule Mazurka.Utils do
@moduledoc false
def eval(quoted, env) do
{out, []} = quoted
|> Macro.expand(env)
|> Code.eval_quoted([], env)
out
end
def prewalk(quoted, fun) do
Macro.prewalk(quoted, walk(fun, &prewalk(&1, fun)))
end
def postwalk(quoted, fun) do
Macro.postwalk(quoted, walk(fun, &postwalk(&1, fun)))
end
defp walk(fun, recurse) do
fn
({:__block__, meta, children}) ->
{:__block__, meta, Enum.map(children, recurse)}
([{:do, _} | _] = doblock) ->
Enum.map(doblock, fn({key, children}) ->
children = recurse.(children)
{key, children}
end)
|> fun.()
({name, children}) when is_atom(name) ->
children = recurse.(children)
{name, children}
|> fun.()
(other) ->
other
|> fun.()
end
end
end