<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.28.3">
</HEAD>
<BODY>
Why is a function that gets a bunch of strict ByteStrings out of a lazy one exposed?<BR>
<BR>
In any case, it sounds like a similar situation to (==) on Float and Double. There's a mismatch between the &quot;Haskellish&quot; desire for a law on (==), and the &quot;convenient&quot; desire for -0.0 == 0.0, or for exposing toChunks. Which one you prefer depends on your attitude. My point is not so much to advocate for the Haskellish viewpoint than to recognise the tension in the design. Float and Double are pretty ugly anyway from a Haskell point of view, since they break a bunch of other desirable properties for (+), (-) and so on.<BR>
<BR>
The theoretical reason for using floating point rather than fixed point is when one needs relative precision over a range of scales: for other needs one should use fixed point or rationals. I added a Fixed type to base, but it doesn't implement the functions in the Floating class and I doubt it's as fast as Double for common arithmetic functions.<BR>
<BR>
It would be possible to represent the IEEE types in a Haskellish way, properly revealing all their ugliness. This would be gratifying for us purists, but would annoy those just trying to get some numeric calculations done.<BR>
<BR>
-- <BR>
Ashley Yakeley<BR>
<BR>
<BR>
On Mon, 2010-04-19 at 15:32 -0400, Edward Kmett wrote:<BR>
<BLOCKQUOTE TYPE=CITE>
    Because it is the most utilitarian way to get a bunch of strict ByteStrings out of a lazy one.<BR>
    <BR>
    Yes it exposes an implementation detail, but the alternatives involve an unnatural amount of copying.<BR>
    <BR>
    -Edward Kmett<BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    On Sat, Apr 17, 2010 at 6:37 PM, Ashley Yakeley &lt;<A HREF="mailto:ashley@semantic.org">ashley@semantic.org</A>&gt; wrote:
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        Ketil Malde wrote:<BR>
        <BLOCKQUOTE>
            Do we also want to modify equality for lazy bytestrings, where equality<BR>
            is currently independent of chunk segmentation? &nbsp;(I.e.<BR>
            <BR>
            &nbsp;toChunks s1 == toChunks s2 ==&gt; s1 == s2 &nbsp;<BR>
            but not vice versa.)<BR>
        </BLOCKQUOTE>
        <BR>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        Why is toChunks exposed?<BR>
        <BR>
        -- <BR>
        <FONT COLOR="#888888">Ashley Yakeley</FONT>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        <BR>
        _______________________________________________<BR>
        Haskell-Cafe mailing list<BR>
        <A HREF="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</A><BR>
        <A HREF="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</A><BR>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BR>
<PRE>
_______________________________________________
Haskell-Cafe mailing list
<A HREF="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</A>
<A HREF="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</A>
</PRE>
</BLOCKQUOTE>
<BR>
</BODY>
</HTML>