"Vc" as in Vancouver, or Valencia?
[Char] is usually written as String.

You have a redundant base case: nameMatch [] [].

The parameter names are a bit off.  A common convention for naming the head and tail is x:xs.

nameMatch :: String -&gt; String -&gt; Bool
nameMatch [] _      = True
nameMatch abbrev [] = False
nameMatch abbrev@(a:as) word@(w:ws)
   | a == w    = nameMatch as ws
   | otherwise = nameMatch abbrev ws




For printing the output, if you want each result to be on a separate line rather than as a list (which would produce output like ["Trollh\228ttan"]), then write

mapM putStrLn $ filter (nameMatch search) cities