<br><br><div class="gmail_quote">On Fri, Jun 17, 2011 at 1:04 PM, Vincent Hanquez <span dir="ltr">&lt;<a href="mailto:tab@snarc.org">tab@snarc.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On 06/17/2011 10:00 AM, Dmitri O.Kondratiev wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
I try to parse csv file with Text.CSV, like this:<br>
<br>
import Text.CSV<br>
import System<br>
<br>
main = do<br>
     [inpFileName] &lt;- getArgs<br>
     putStrLn (&quot;Parsing &quot;++inpFileName++&quot;...&quot;)<br>
     let result = parseCSVFromFile inpFileName<br>
     print result<br>
<br>
<br>
=== As a result I get:<br>
<br>
 No instance for (Show<br>
                    (IO (Either Text.Parsec.Error.ParseError CSV)))<br>
   arising from a use of `print&#39;<br>
 Possible fix:<br>
   add an instance declaration for<br>
   (Show (IO (Either Text.Parsec.Error.ParseError CSV)))<br>
<br>
=== Question:<br>
How to add a Show instance for &quot;(IO (Either Text.Parsec.Error.ParseError CSV)))&quot; ?<br>
</blockquote></div></div>
Hi Dmitri,<br>
<br>
you don&#39;t add a show instance for IO, but you &quot;unwrap&quot; the IO Monad first and then show the result.<br>
<br>
let result = parseCSVFromFile inpFileName<br>
<br>
should be:<br>
<br>
result &lt;- parseCSVFromFile inpFileName<br>
<br>
-- <br><font color="#888888">
Vincent<br>
</font></blockquote></div><br>Thanks everybody!  This is how I solved it:<br><br clear="all">import Text.CSV<br>import Data.Either<br>import System<br>import Data.List<br><br>main = do<br>     [inpFileName] &lt;- getArgs<br>
     putStrLn (&quot;Parsing &quot;++inpFileName++&quot;...&quot;)<br>     result &lt;- parseCSVFromFile inpFileName<br>     let errors = lefts [result]<br>     let csvL = rights [result]<br>     print &quot;CSV list&quot;<br>
     print csvL<br>     print &quot;Errors&quot;<br>     print errors<br>     putStrLn &quot;All done.&quot;<br><br>