Thanks everyone for your thoughts.
I have currently this passing test case:
test "generators" do
defmodule MyGen do
use Snakeoil.Generators
gen "counter", x do
yield x
counter(x+1)
end
gen "two", {x, y} do
yield x + y
two({x+1, y + 1})
end
end
pid = spawn(fn -> MyGen.counter(0) end)
assert 0 == MyGen.next(pid)
assert 1 == MyGen.next(pid)
assert 2 == MyGen.next(pid)
pid = spawn(fn -> MyGen.two({2, 3}) end)
assert 5 == MyGen.next(pid)
assert 7 == MyGen.next(pid)
end
This is a toy, of course - mostly an exercise in metaprogramming. I have to admit that having optional parentheses makes things like that fun to write - but I’m not sure how fun it would be if someone did use that in their own code
If i’m not mistaken, Elixir also favors explicit over implicit, which is good from me, coming over from Python land.






















