How to make Data.Set.Set a Functor
Simon Marlow
simonmar at microsoft.com
Wed Oct 12 04:56:53 EDT 2005
On 11 October 2005 17:16, Lajos Nagy wrote:
> 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
A nice way to do this would be:
data FSet a where
FSet :: Ord a => Set a -> FSet a
instance Functor FSet where
...
if only GADTs worked with type classes :-)
Cheers,
Simon
More information about the Glasgow-haskell-users
mailing list