defmodule Mal.Printer do
  def print_str(mal, print_readably \\ true)
  def print_str(mal, _) when is_atom(mal), do: Atom.to_string(mal)
  def print_str(mal, _) when is_integer(mal), do: Integer.to_string(mal)
  def print_str(mal, _) when is_function(mal), do: "#<function>"
  def print_str({:closure, _function}, _), do: "#<function>"
  def print_str({:symbol, value}, _), do: value
  def print_str(mal, false) when is_bitstring(mal), do: mal
  def print_str(mal, true) when is_bitstring(mal) do
    Inspect.Algebra.to_doc(mal, %Inspect.Opts{})
  end

  def print_str(mal, _print_readably) when is_list(mal) do
    output = mal
      |> Enum.map(fn(x) -> print_str(x) end)
      |> Enum.join(" ")

    "(#{output})"
  end
end

defmodule Mal.Printer do
  def print_str(mal, print_readably \\ true)
  def print_str(mal, _) when is_atom(mal), do: Atom.to_string(mal)
  def print_str(mal, _) when is_integer(mal), do: Integer.to_string(mal)
  def print_str(mal, _) when is_function(mal), do: "#<function>"
  def print_str({:closure, _function}, _), do: "#<function>"
  def print_str({:symbol, value}, _), do: value
  def print_str(mal, false) when is_bitstring(mal), do: mal
  def print_str(mal, true) when is_bitstring(mal) do
    Inspect.Algebra.to_doc(mal, %Inspect.Opts{})
  end

  def print_str(mal, print_readably) when is_list(mal) do
    output = mal
      |> Enum.map(fn(x) -> print_str(x, print_readably) end)
      |> Enum.join(" ")

    "(#{output})"
  end
end

Use print_readably correctly for lists
Use print_readably correctly for lists

h3rald/mal,0gajun/mal,alantsev/mal,martinlschumann/mal,h3rald/mal,mpwillson/mal,enitihas/mal,outcastgeek/mal,tompko/mal,sleep/mal,0gajun/mal,martinlschumann/mal,profan/mal,0gajun/mal,jwalsh/mal,hterkelsen/mal,tompko/mal,enitihas/mal,enitihas/mal,h3rald/mal,martinlschumann/mal,foresterre/mal,fdserr/mal,sleep/mal,DomBlack/mal,DomBlack/mal,sleexyz/mal,alantsev/mal,outcastgeek/mal,tompko/mal,nlfiedler/mal,mohsenil85/mal,keith-rollin/mal,alantsev/mal,sleep/mal,tompko/mal,foresterre/mal,jwalsh/mal,sleexyz/mal,h3rald/mal,tompko/mal,SawyerHood/mal,SawyerHood/mal,ekmartin/mal,alcherk/mal,sleep/mal,0gajun/mal,0gajun/mal,fdserr/mal,foresterre/mal,nlfiedler/mal,DomBlack/mal,tompko/mal,mohsenil85/mal,alcherk/mal,SawyerHood/mal,tompko/mal,enitihas/mal,alcherk/mal,jwalsh/mal,foresterre/mal,moquist/mal,outcastgeek/mal,h3rald/mal,moquist/mal,enitihas/mal,h3rald/mal,mohsenil85/mal,martinlschumann/mal,martinlschumann/mal,martinlschumann/mal,sleep/mal,mpwillson/mal,h3rald/mal,sleexyz/mal,outcastgeek/mal,fdserr/mal,profan/mal,hterkelsen/mal,SawyerHood/mal,alcherk/mal,sleexyz/mal,alantsev/mal,DomBlack/mal,hterkelsen/mal,sleexyz/mal,jwalsh/mal,martinlschumann/mal,0gajun/mal,keith-rollin/mal,ekmartin/mal,sleexyz/mal,h3rald/mal,sleexyz/mal,sleep/mal,SawyerHood/mal,moquist/mal,martinlschumann/mal,DomBlack/mal,fdserr/mal,alantsev/mal,alcherk/mal,SawyerHood/mal,sleep/mal,nlfiedler/mal,mpwillson/mal,outcastgeek/mal,profan/mal,jwalsh/mal,sleep/mal,fdserr/mal,mpwillson/mal,keith-rollin/mal,ekmartin/mal,jwalsh/mal,h3rald/mal,sleexyz/mal,ekmartin/mal,enitihas/mal,profan/mal,profan/mal,0gajun/mal,moquist/mal,keith-rollin/mal,h3rald/mal,ekmartin/mal,hterkelsen/mal,sleexyz/mal,ekmartin/mal,fdserr/mal,DomBlack/mal,ekmartin/mal,enitihas/mal,nlfiedler/mal,moquist/mal,nlfiedler/mal,enitihas/mal,sleep/mal,outcastgeek/mal,martinlschumann/mal,0gajun/mal,foresterre/mal,foresterre/mal,SawyerHood/mal,foresterre/mal,foresterre/mal,nlfiedler/mal,alantsev/mal,alcherk/mal,tompko/mal,fdserr/mal,tompko/mal,nlfiedler/mal,SawyerHood/mal,DomBlack/mal,SawyerHood/mal,hterkelsen/mal,SawyerHood/mal,enitihas/mal,DomBlack/mal,hterkelsen/mal,mpwillson/mal,hterkelsen/mal,sleep/mal,profan/mal,sleep/mal,fdserr/mal,keith-rollin/mal,fdserr/mal,ekmartin/mal,mpwillson/mal,SawyerHood/mal,sleexyz/mal,nlfiedler/mal,alcherk/mal,mpwillson/mal,tompko/mal,profan/mal,0gajun/mal,hterkelsen/mal,SawyerHood/mal,hterkelsen/mal,foresterre/mal,profan/mal,mpwillson/mal,keith-rollin/mal,nlfiedler/mal,martinlschumann/mal,DomBlack/mal,moquist/mal,enitihas/mal,sleexyz/mal,DomBlack/mal,0gajun/mal,alantsev/mal,hterkelsen/mal,martinlschumann/mal,jwalsh/mal,hterkelsen/mal,foresterre/mal,ekmartin/mal,h3rald/mal,DomBlack/mal,outcastgeek/mal,0gajun/mal,sleexyz/mal,0gajun/mal,SawyerHood/mal,alcherk/mal,DomBlack/mal,nlfiedler/mal,profan/mal,mpwillson/mal,martinlschumann/mal,alantsev/mal,jwalsh/mal,0gajun/mal,DomBlack/mal,profan/mal,h3rald/mal,tompko/mal,fdserr/mal,profan/mal,keith-rollin/mal,alcherk/mal,moquist/mal,outcastgeek/mal,sleep/mal,SawyerHood/mal,moquist/mal,keith-rollin/mal,tompko/mal,sleexyz/mal,enitihas/mal,jwalsh/mal,alantsev/mal,h3rald/mal,joncol/mal,SawyerHood/mal,DomBlack/mal,hterkelsen/mal,joncol/mal,mpwillson/mal,profan/mal,jwalsh/mal,sleep/mal,outcastgeek/mal,jwalsh/mal,fdserr/mal,DomBlack/mal,mohsenil85/mal,0gajun/mal,sleexyz/mal,martinlschumann/mal,fdserr/mal,moquist/mal,mpwillson/mal,moquist/mal,alcherk/mal,foresterre/mal,mpwillson/mal,foresterre/mal,martinlschumann/mal,nlfiedler/mal,nlfiedler/mal,alantsev/mal,nlfiedler/mal,moquist/mal,sleexyz/mal,enitihas/mal,ekmartin/mal,outcastgeek/mal,ekmartin/mal,tompko/mal,foresterre/mal,0gajun/mal,DomBlack/mal,hterkelsen/mal,tompko/mal,enitihas/mal,h3rald/mal,jwalsh/mal,joncol/mal,alcherk/mal,outcastgeek/mal,alantsev/mal,alcherk/mal,foresterre/mal,enitihas/mal,jwalsh/mal,moquist/mal,moquist/mal,keith-rollin/mal,0gajun/mal,enitihas/mal,enitihas/mal,jwalsh/mal,foresterre/mal,SawyerHood/mal,sleep/mal,DomBlack/mal,h3rald/mal,hterkelsen/mal,nlfiedler/mal,moquist/mal,keith-rollin/mal,mohsenil85/mal,alantsev/mal,mohsenil85/mal,ekmartin/mal,outcastgeek/mal,profan/mal,tompko/mal,jwalsh/mal,alantsev/mal,SawyerHood/mal,outcastgeek/mal,alcherk/mal,ekmartin/mal,SawyerHood/mal,mpwillson/mal,hterkelsen/mal,jwalsh/mal,profan/mal,mohsenil85/mal,hterkelsen/mal,mohsenil85/mal,outcastgeek/mal,keith-rollin/mal,mohsenil85/mal,nlfiedler/mal,alantsev/mal,h3rald/mal,sleexyz/mal,0gajun/mal,alcherk/mal,outcastgeek/mal,DomBlack/mal,0gajun/mal,ekmartin/mal,0gajun/mal,sleep/mal,fdserr/mal,alantsev/mal,keith-rollin/mal,mohsenil85/mal,sleexyz/mal,foresterre/mal,mohsenil85/mal,fdserr/mal,alantsev/mal,mohsenil85/mal,mohsenil85/mal,alantsev/mal,DomBlack/mal,outcastgeek/mal,hterkelsen/mal,martinlschumann/mal,tompko/mal,keith-rollin/mal,nlfiedler/mal,mohsenil85/mal,jwalsh/mal,martinlschumann/mal,alcherk/mal,keith-rollin/mal,moquist/mal,DomBlack/mal,sleep/mal,nlfiedler/mal,mohsenil85/mal,h3rald/mal,keith-rollin/mal,ekmartin/mal,alcherk/mal,hterkelsen/mal,sleep/mal,foresterre/mal,mohsenil85/mal,DomBlack/mal,hterkelsen/mal,tompko/mal,ekmartin/mal,profan/mal,mpwillson/mal,keith-rollin/mal,profan/mal,moquist/mal,martinlschumann/mal,fdserr/mal,mohsenil85/mal,fdserr/mal,profan/mal,0gajun/mal