You gave `map' strings as input, so it attempts to return a string. That means it is trying to map the output of `is' into the characters of a string, but t and nil aren't charactors.
(def char-is (a b) (if (is a b) #\t #\f))
(map char-is "abba" "abab") => "ttff"
Common Lisp addresses this issue by having `map' take a result type as the first argument.