Шаблон LHS ++ RHS
расширяется во время компиляции до [ lhs0, lhs1, lhs2 | RHS]
(где LHS =:= [lhs0, lhs1, lhs2]
, и компилятор отказывается делать это для чего-либо, кроме литеральных строк / списков. Теоретически он может сделать это для переменных, но он просто нене сейчас.
Я думаю, что в вашем случае вам нужно сделать:
Prefix = read_from_config(),
TestString = "Some test string",
case lists:prefix(Prefix, TestString) of
true ->
%% remove prefix from target string
lists:nthtail(length(Prefix), TestString);
false ->
different_prefix
end.