<div dir="ltr">I'm looking at <a href="https://hackage.haskell.org/package/containers-0.6.5.1/docs/src/Data.Set.Internal.html">this</a> code and wondering, first, about the strategy behind the data type <font face="monospace">Set</font> itself<div><br></div><div><font face="monospace">data Set a    = Bin {-# UNPACK #-} !Size !a !(Set a) !(Set a) | Tip</font></div><div><br></div><div>It says it's a "balanced tree." I found <a href="http://groups.csail.mit.edu/mac/users/adams/BB/index.html">this</a> talking about maybe why that is. Will read. But in the meantime, any explanation in plain English as to why we're doing it as a tree and not some other structure would be helpful. And why are we bringing Size along, and in general, why all the strictness !'s? All this might have something to do with why a balanced tree is better than quick-and-dirty list representation like I see in beginner tutorials? Next, is this ZFC? I've seen treatments that supposedly are ZFC-friendly. Finally, I've taken a preliminary look at Agda, and right from the start there's <font face="monospace">Set</font>, and no doubt an entirely alternative, category universe approach to the concept of set theory. Any contrast and compare between Haskell and Agda's set notions would be appreciated. Haskell seems to dance in and out of Category Theory, while Agda seems pretty much just CT....</div><div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>⨽<br></div>Lawrence Bottorff<div>Grand Marais, MN, USA</div><div><a href="mailto:borgauf@gmail.com" target="_blank">borgauf@gmail.com</a></div></div></div></div></div>