Current section

Files

Jump to
datastructures lib data enumerable.ex
Raw

lib/data/enumerable.ex

# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# Version 2, December 2004
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.
defmodule Data.Enumerable do
defmacro __using__(_opts) do
quote do
defdelegate member?(self, value), to: Data, as: :contains?
defdelegate count(self), to: Data, as: :count
def reduce(_, { :halt, acc }, _fun) do
{ :halted, acc }
end
def reduce(seq, { :suspend, acc }, fun) do
{ :suspended, acc, &reduce(seq, &1, fun) }
end
def reduce(nil, { :cont, acc }, _fun) do
{ :done, acc }
end
def reduce(seq, { :cont, acc }, fun) do
reduce(Data.Seq.next(seq), fun.(Data.Seq.first(seq), acc), fun)
end
end
end
end