Posso fazer meus próprios guardas em Erlang?

Eu vim através deste código na 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.

É o Guard I alwais sonhado, em que ele verifica se uma entrada é uma string - como nunca, eu não estou autorizado a usá-lo em erlang, por que isso? E há um trabalho por aí?

Eu gostaria de poder escrever coisas como:

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

ou melhor ainda usá-lo nas mensagens.

questionAnswers(2)

yourAnswerToTheQuestion