
Serguey Zefirov
Data.Map.Map and Data.Set.Set are exported abstractly, without exposing knowledge about their internal structure.
I cannot directly create my own class instances for them because of that. But I found that I can write Template Haskell code that could do that - those data types could be reified just fine.
Huh? Sure you can write class instances for them. ,---- | | import qualified Data.Map as Map | import Data.Map(Map) | import qualified Data.Set as Set | import Data.Set(Set) | | class SizeOf x where | sizeOf :: x -> Int | | instance SizeOf [a] where | sizeOf = length | | instance SizeOf (Set a) where | sizeOf = Set.size | | instance SizeOf (Map k v) where | sizeOf = Map.size `----
This is somewhat strange situation.
Was it a design decision?
The reason that they are exported abstractly is so that you don't see the internals of the data structure, because 1) you don't need to, and 2) to stop you from doing anything stupid with them. -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com