Maybe you can directly distinguish if the parser returned an error (Left) or not (Right), instead of using lefts and rights:
Thanks everybody! This is how I solved it:On Fri, Jun 17, 2011 at 1:04 PM, Vincent Hanquez <tab@snarc.org> wrote:
Hi Dmitri,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)))" ?
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
import Text.CSV
import Data.Either
import System
import Data.Listresult <- parseCSVFromFile inpFileName
main = do
[inpFileName] <- getArgs
putStrLn ("Parsing "++inpFileName++"...")
let errors = lefts [result]
let csvL = rights [result]
print "CSV list"
print csvL
print "Errors"
print errors
putStrLn "All done."
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe