[Haskell-cafe] Text.CSV questions

Alejandro Serrano Mena trupill at gmail.com
Mon Jun 20 17:30:28 CEST 2011


Maybe you can directly distinguish if the parser returned an error (Left) or
not (Right), instead of using lefts and rights:

import Text.CSV
import Data.Either
import System
import Data.List

main = do
     [inpFileName] <- getArgs
     putStrLn ("Parsing "++inpFileName++"...")
     result <- parseCSVFromFile inpFileName
     case result of
       Left error -> do print "Parse error: "
                             print error
       Right csv -> print csvL
     putStrLn "All done."

2011/6/17 Dmitri O.Kondratiev <dokondr at gmail.com>

>
>
> On Fri, Jun 17, 2011 at 1:04 PM, Vincent Hanquez <tab at 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."
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110620/e8334f1c/attachment.htm>


More information about the Haskell-Cafe mailing list