Yes, the line
count_characters([H|T], #{ H := N }=X) -> …
is not yet fully understood by the VM. More details on this here [1].
Every other line works fine though. Oh and instead of using maps one can use records, dicts, sets, gb_trees, proplists, …
[1] http://stackoverflow.com/questions/23106543/illegal-pattern-...