[Haskell-cafe] Text.CSV questions

Dmitri O.Kondratiev dokondr at gmail.com
Mon Jun 20 17:38:14 CEST 2011


On Mon, Jun 20, 2011 at 7:30 PM, Alejandro Serrano Mena
<trupill at gmail.com>wrote:

> 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."
>
>
Yes, you right, this is better, then printing empty error list.



> 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/732de428/attachment.htm>


More information about the Haskell-Cafe mailing list