You're changing the spec here, from "unescape c" to "unescape all chars". Reading the code, I think the warning points to a bug: c should be used in the second case of the pattern matching. It isn't used because c is redefined, but obviously that's not what we want: right now x = c is always true, and the last two cases are never used!