On Fri, Jun 17, 2011 at 1:04 PM, Vincent Hanquez <tab@snarc.org> wrote:
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."