How to make Data.Set.Set a Functor
Lajos Nagy
lnagy at fit.edu
Tue Oct 11 12:16:23 EDT 2005
Hi,
While working on a toy compiler I realized that Data.Set.Set (Set) is not
an instance of the Functor class. In other words: 'fmap' is not defined
on it. I tried various ways of defining an instance but I failed. The
reason is quite interesting: Set is a type constructor (* -> *) so it
should qualify it for being a Functor. (In a sense it is very similar to
a Map or a list.) However, most Set functions require the elements of the
Set to be an instance of Ord. The problem is that this constraint cannot
be deduced from the instance declaration for Functor:
instance Functor Data.Set.Set where
fmap f s = Data.Set.map f s
GHCi:
Could not deduce (Ord a, Ord b) from the context (Functor
Data.Set.Set)
arising from use of `Data.Set.map' at ...
Probable fix: add (Ord a, Ord b) to the class or instance method
`fmap'
In the definition of `fmap': fmap f s = Data.Set.map f s
In the definition for method `fmap'
In the instance declaration for `Functor Data.Set.Set'
On the other hand, it seems intuitively natural to make Set an instance of
fmap. Any ideas on how to do it?
Thanks and Regards,
Lajos Nagy
More information about the Glasgow-haskell-users
mailing list