                 # keep traversing
                 return node.map (x) -> postprocess x
     else
-        return node
+        # some ()s in strings were replaced with (__nil__) when preprocessing
+        return node.replace?('(__nil__)', '()')
 
 module.exports = ParseSExpr

    # make it friendly to 'lisp-to-array' package
    chunk = chunk.replace /'\(/g, '(__number__ '
    chunk = chunk.replace /\("/g, '(__string__ "'
    chunk = chunk.replace /\(\)/g, '(error)'
    return chunk

# cosmetic surgery, recursively


            when "`"
                # ["`", "some string"] => "some string"
                return postprocess node[1]

            when "__number__", "__string__", "__nil__"
                # ["__number__", 1, 2, 3] => [1, 2, 3]
                # ["__string__", 1, 2, 3] => [1, 2, 3]
                # ["__nil__"]             => []
                node.shift()
                return postprocess node

