       ...>   base = String.length(prefix)
       ...>   String.slice(full, base..-1)
       ...> end
-      ...> take_prefix.("Mr. John", "Mr. ")
+      iex> take_prefix.("Mr. John", "Mr. ")
       "John"
 
   While this is much better (we don't traverse `full` twice),

      ...>   base = byte_size(prefix)
      ...>   binary_part(full, base, byte_size(full) - base)
      ...> end
      ...> take_prefix.("Mr. John", "Mr. ")
      "John"

  Or simply used pattern matching:

      iex> take_prefix = fn full, prefix ->
      ...>   base = byte_size(prefix)
      ...>   <<_ :: binary-size(base), rest :: binary>> = full
      ...>   rest
      ...> end
      ...> take_prefix.("Mr. John", "Mr. ")
      "John"

  On the other hand, if you want to dynamically slice a string

      ...>   base = String.length(prefix)
      ...>   String.slice(full, base, String.length(full) - base)
      ...> end
      iex> take_prefix.("Mr. John", "Mr. ")
      "John"

  Although the function above works, it performs poorly. To
