Here is how to debug this kind of error:
Go to
module:function/2 (file.erl, line 42)
Find the offending matching operation that is definitely there
Replace the left-hand side with a fresh variable. Here you may figure out that you are trying to pattern-match against an already bound variable...
Add a call to
erlang:display/1
with the new variableRun the program again to print the value of this variable and understand why it doesn't match the given pattern
Here are some examples:
-
{_, Input} = io:get_line("Do you want to chat?") % Line 42
Replace this with:
Fresh1 = io:get_line("Do you want to chat?"), erlang:display(Fresh1), {_, Input} = Fresh1
Run the program again:
1> module:run(). Do you want to chat? Yes "Yes\n" ** exception error: no match of right hand side value "Yes\n" in function module:function/2 (file.erl, line 44)
You can see that
io:get_line/1
returns a string and not a tuple, so the matching against{_, Input}
fails. -
In an Erlang shell:
2> Pid = echo:start(). ** exception error: no match of right hand side value <0.41.0>
Here the variable Pid is definitely already bound to another value...
3> Pid. <0.39.0>
You can make the shell forget such a binding with
f(Var)
orf()
:4> f(Pid). ok 5> Pid. * 1: variable 'Pid' is unbound 6> Pid = echo:start(). <0.49.0>