0
votes

I have a simple record

#client{level}

level can be : user / superUser / manager / admin

I would like to accept to the function only when level is manager and admin. How would shrink this into only one :

parse(Client = #client{level=manager}) ->
    ok;
parse(Client = #client{level=admin}) ->
    ok.

Or should I use Guards ?

1

1 Answers

1
votes

Yes, you should definitely use guards:

parse(Client = #client{level = Level}) when Level == manager; Level == admin ->
    ok;

Expressiveness of pattern matching is limited to binding and comparing equality of defined values. You can't write it like in type specification:

-spec foo('admin' | 'manager') -> 'ok'.