normalize-languages 0.3.2

Tree-sitter language support and dynamic grammar loading
Documentation
defmodule MathUtils do
  alias Enum, as: E

  @doc "Classify a number as :negative, :zero, or :positive"
  def classify(n) do
    cond do
      n < 0 -> :negative
      n == 0 -> :zero
      true -> :positive
    end
  end

  @doc "Sum elements matching the predicate"
  def sum_if(list, predicate) do
    Enum.reduce(list, 0, fn x, acc ->
      if predicate.(x), do: acc + x, else: acc
    end)
  end

  def sum_evens(numbers) do
    sum_if(numbers, fn n -> rem(n, 2) == 0 end)
  end
end

defmodule Stack do
  import Enum, only: [reverse: 1]

  defstruct items: []

  def new(), do: %Stack{}

  def push(%Stack{items: items}, item) do
    %Stack{items: [item | items]}
  end

  def pop(%Stack{items: []}) do
    {:error, :empty}
  end

  def pop(%Stack{items: [head | tail]}) do
    {:ok, head, %Stack{items: tail}}
  end

  def peek(%Stack{items: []}), do: nil
  def peek(%Stack{items: [head | _]}), do: head

  def to_list(%Stack{items: items}), do: reverse(items)
end