In Erlang when you have a list of printable characters, its a string, but a string is also a list of items and all functions of a list can be applied onto a string. Really,
using the isprint(3) definition of printable characters --
isprint(X) when X >= 32, X < 127 -> true; isprint(_) -> false. is_string(List) when is_list(List) -> lists:all(fun isprint/1, List); is_string(_) -> false.
you won't be able to use it as a guard, though.