+
+-- Some versions of Text.CSV do not use or accept a trailing newline; compensate for that.
+removeTrailingNewline s = if not (null s) && last s == '\n' then init s else s
+addTrailingNewline s = if not (null s) && last s /= '\n' then s ++ ['\n'] else s
+
+parseTSV fname str = case parseCSV fname (swapTabCommaIn $ removeTrailingNewline str) of