defmodule BankAcount do
  def f1(stack) do
    number = :rand.uniform(9) + 1
    case rem(number, 2) do
      0 -> ["ErrBankAccountEmpty", [:f1 | stack]]
      _ -> ["ErrInvestmentLost", [:f1 | stack]]
    end
  end

  def f2(stack) do
    f1([:f2 | stack])
  end

  def f3(stack) do
    f1([:f3 | stack])
  end

  def f4(stack) do
    number = :rand.uniform(9) + 1
    case rem(number, 2) do
      0 -> f2([:f4 | stack])
      _ -> f3([:f4 | stack])
    end
  end

  def main() do
      case f4([:main]) do
        [_err, [:f1, :f2, :f4, :main]] -> "Aand it's gone"
        [_err, [:f1, :f3, :f4, :main]] ->  "The money in your account didn't do well"
        _err -> "This line is for bank members only"
      end
      |> raise
  end
end

BankAcount.main()