defmodule Dec.Pipeline do # of macros def split({:|>, _, _} = ppln) do split(ppln, []) end def split({:|>, opts, [first, second]}, result) do split(first, [{opts, second} | result]) end def split({:@, _, [{:dec, _, _} = dec]}, result) do {dec, result} end def combine([], result) do result end def combine(elements, result) do [{opts, value} | elements] = elements combine(elements, {:|>, opts, [result, value]}) end end