   the amount they should appear in the word. For example,
   `%{a: 4, k: 2}` will return all words with exactly 4 a's and 2 k's.
   """
+  @spec containing(Enumerable.t, map, list) :: Enumerable.t
   def containing(words, constraints, opts \\ []) do
     opts = Keyword.put_new(opts, :precise, true)
     words |> Stream.filter(&contains?(&1, constraints, opts))

  @doc """
  Returns all words in the word list.
  """
  def words do
    Agent.get(__MODULE__, &(&1))
  end

      iex> WordFinder.compare "pineapple", "apple"
      {["p", "i", "n", "e"], []}
  """
  @spec compare_words(String.t, String.t) :: {String.t, String.t}
  @spec compare_words(list, list) :: {String.t, String.t}

  def compare_words(a, b) when is_bitstring(a) and is_bitstring(b) do
    a = a |> String.codepoints
    b = b |> String.codepoints
    compare_words(a, b)
