 
   """
   @spec put(t, key, value) :: t
-  def put(keywords, key, value) when is_atom(key) do
+  def put(keywords, key, value) when is_list(keywords) and is_atom(key) do
     [{key, value}|delete(keywords, key)]
   end
 


  """
  @spec put_new(t, key, value) :: t
  def put_new(keywords, key, value) when is_atom(key) do
    case :lists.keyfind(key, 1, keywords) do
      { ^key, _ } -> keywords
      false -> [{key, value}|keywords]

      { [a: 1, c: 3, a: 5], [b: 2, d: 4] }

  """
  def split(keywords, keys) when is_list(keywords) do
    acc = { [], [] }

    { take, drop } = Enum.reduce keywords, acc, fn({ k, v }, { take, drop }) ->
      case k in keys do
        true  -> { [{k, v}|take], drop }
        false -> { take, [{k, v}|drop] }
