
Milan Straka wrote:
Hi all,
here is the discussion that initiated the Lazy and Strict versions: https://www.haskell.org/pipermail/libraries/2011-May/016362.html
What follows is only my own interpretation of the discussion, please feel to reed it by yourselves. There were few people discussing, but I feel that avoiding the distinction on a type level was quite supported. I advocated the idea that strictness is not a property of the map itself, but a property of how you work with the map. The flexibility of one data type at the expense of some static checking was mentioned.
I may be somewhat late for the discussion, but I would advocate for the contrary point of view, that "strictness" *is* a property of the map. I would also say that "strictness" is not the right word (hence the quotes). Rather, the maps from `Data.Map.Strict` are characterized by the invariant that whenever such a map is in WHNF, then all its values are in WHNF, too. The type system seems like the right place to encode such invariants. For a more detailed discussion of this approach, see also http://apfelmus.nfshost.com/blog/2013/08/21-space-invariants.html I discuss an actual use case at the end. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com