I’m not quite sure where you get the is_boolean/1 from. I never used that.
The first step is (as I said already) to simply replace your first condition with my function:
defp check_input(input, game = %State{}) do
input = String.trim(input)
cond do
only_single_lowercase(input) ->
Map.put(game, :guess, input)
true ->
IO.puts("please enter a lower-case letter"
accept_move(game)
end
end
The next step is to rewrite the cond into a case (and inline my function):
def check_input(input, game = %State{}) do
input
|> String.trim()
|> case do
<<c::utf8>> when c in ?a..?z ->
Map.put(game, :guess, input)
_ ->
IO.puts(…)
accept_move(game)
end
end
And now it should be easy to extract this 2-clause case into a 2-clause function.






















