Formulæ and Lazy Combinators
Using macros and bare AST to implement lazy combinations and permutations.
l = for c <- ?a..?z, do: <<c>> # letters list
with {stream, :ok} <- Formulae.Combinators.Stream.permutations(l, 12),
do: stream |> Stream.take_every(26) |> Enum.take(2)
#⇒ [["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"],
# ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "l", "w"]]
http://rocket-science.ru/hacking/2019/09/06/formulae-and-lazy-combinators
Read next Smart Software: Shanti Chellaram on Pri-Queue and raft_erl