<div dir="ltr"><div>A bit late to the party, but to build on the previous answer, you're going to run into the same problem with the Text data type, which has both a lazy variant and a strict (?) variant. <br></div><div><br></div><div>The functions to convert from/to the strict/lazy variant are usually in the lazy module:</div><div><br></div><div><b>Data.Text.Lazy.toStrict</b> and <b>Data.Text.Lazy.fromStrict</b>. </div><div><br></div><div><b>Data.ByteString.Lazy.toStrict</b> and <b>Data.ByteString.Lazy.toStrict</b>.</div><div><br></div><div>It's a common use-case to want to save the Text / ByteString to a file, and in those cases you can find helper functions such as <b>Data.ByteString.Lazy.writeFile</b>.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 20, 2018 at 6:56 PM, Daniel Bergey <span dir="ltr"><<a href="mailto:bergey@teallabs.org" target="_blank">bergey@teallabs.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Network.Socket.ByteString.recv uses the strict ByteString from<br>
Data.ByteString, not the lazy one from Data.ByteString.Lazy.  So you<br>
want the `unpack` from Data.ByteString.Char8, rather than<br>
Data.ByteString.Lazy.Char8.<br>
<br>
I never remember which functions return strict or lazy ByteString.  I<br>
find the easiest way to check is to open the online docs and see where<br>
the `ByteString` link points:<br>
<br>
<a href="https://hackage.haskell.org/package/network-2.7.0.0/docs/Network-Socket-ByteString.html#v:recv" rel="noreferrer" target="_blank">https://hackage.haskell.org/<wbr>package/network-2.7.0.0/docs/<wbr>Network-Socket-ByteString.<wbr>html#v:recv</a><br>
<br>
points to:<br>
<br>
<a href="https://hackage.haskell.org/package/bytestring-0.10.8.2/docs/Data-ByteString.html#t:ByteString" rel="noreferrer" target="_blank">https://hackage.haskell.org/<wbr>package/bytestring-0.10.8.2/<wbr>docs/Data-ByteString.html#t:<wbr>ByteString</a><br>
<br>
hope this helps,<br>
bergey<br>
<br>
On 2018-05-20 at 07:52, Dinesh Amerasekara <<a href="mailto:ddinesh31@yahoo.com">ddinesh31@yahoo.com</a>> wrote:<br>
> Hi,<br>
><br>
> I am unable to compile the below code.<br>
><br>
> import Network.Socket hiding(recv) <br>
> import Network.Socket.ByteString as S (recv) <br>
> import qualified Data.ByteString.Lazy.Char8 as Char8  <br>
><br>
> getMessage :: Socket -> IO String <br>
> getMessage sock =  Char8.unpack <$> S.recv sock 8888<br>
><br>
> It gives the below error.<br>
><br>
> Couldn't match type ‘Data.ByteString.Internal.<wbr>ByteString’<br>
>                      with ‘ByteString’<br>
> NB: ‘ByteString’ is defined in ‘Data.ByteString.Lazy.<wbr>Internal’<br>
>     ‘Data.ByteString.Internal.<wbr>ByteString’<br>
>         is defined in ‘Data.ByteString.Internal’<br>
>     Expected type: IO ByteString<br>
>     Actual type: IO Data.ByteString.Internal.<wbr>ByteString<br>
><br>
> In the second argument of ‘(<$>)’, namely ‘recv sock 8888’<br>
> In the expression: unpack <$> recv sock 8888<br>
> In an equation for ‘getMsg’:<br>
>       getMsg sock = unpack <$> recv sock 8888<br>
><br>
> Can somebody tell me how I can return the IO String using<br>
> Network.Socket.ByteString.<wbr>recv?<br>
><br>
> Best Regards,<br>
> Dinesh.<br>
><br>
> ______________________________<wbr>_________________<br>
> Beginners mailing list<br>
> <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
______________________________<wbr>_________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Steven Leiva<br>305.528.6038<br><a href="mailto:leiva.steven@gmail.com" target="_blank">leiva.steven@gmail.com</a><br><a href="http://www.linkedin.com/in/stevenleiva" target="_blank">http://www.linkedin.com/in/stevenleiva</a><br></div>
</div>