¿Puedo hacer mis propios guardias en Erlang?

Me encontré con este código en la web:

is_char(Ch) ->         
    if Ch < 0 -> false;  
       Ch > 255 -> false;
       true -> true      
    end.

is_string(Str) ->            
    case is_list(Str) of           
    false -> false;           
    true -> lists:all(is_char, Str)
    end.

Es la Guardia con la que siempre he soñado, ya que comprueba si una entrada es una cadena. Sin embargo, no puedo usarla en erlang, ¿por qué? ¿Y hay un trabajo alrededor?

Me gustaría poder escribir cosas como:

Fun(Str) when is_string(Str) -> Str;
Fun(Int) when is_integer(Int) -> io:format("~w", [Int]).

O incluso mejor usarlo en mensajes.

Respuestas a la pregunta(2)

Su respuesta a la pregunta