
On Fri, Jun 17, 2011 at 1:04 PM, Vincent Hanquez
On 06/17/2011 10:00 AM, Dmitri O.Kondratiev wrote:
Hi, I try to parse csv file with Text.CSV, like this:
import Text.CSV import System
main = do [inpFileName] <- getArgs putStrLn ("Parsing "++inpFileName++"...") let result = parseCSVFromFile inpFileName print result
=== As a result I get:
No instance for (Show (IO (Either Text.Parsec.Error.ParseError CSV))) arising from a use of `print' Possible fix: add an instance declaration for (Show (IO (Either Text.Parsec.Error.ParseError CSV)))
=== Question: How to add a Show instance for "(IO (Either Text.Parsec.Error.ParseError CSV)))" ?
Hi Dmitri,
you don't add a show instance for IO, but you "unwrap" the IO Monad first and then show the result.
let result = parseCSVFromFile inpFileName
should be:
result <- parseCSVFromFile inpFileName
-- Vincent
Thanks everybody! This is how I solved it: import Text.CSV import Data.Either import System import Data.List main = do [inpFileName] <- getArgs putStrLn ("Parsing "++inpFileName++"...") result <- parseCSVFromFile inpFileName let errors = lefts [result] let csvL = rights [result] print "CSV list" print csvL print "Errors" print errors putStrLn "All done."