You can define: data EqDyn= forall a.(Typeable a, Eq a)=> EqDyn a
instance Eq EqDyn where (EqDyn x) == (EqDyn y)= typeOf x== typeOf y && x== unsafeCoerce y unsafeCoerce is safe synce the expression assures that types are equal 2013/7/20 adam vogt <vogt.a...@gmail.com> > On Sat, Jul 20, 2013 at 12:31 AM, Carter Schonwald > <carter.schonw...@gmail.com> wrote: > > the tricky part then is to add support for other types. > > > > another approach to existentially package type classes with the data > type! > > > > eg > > data HasEq = forall a . HasEq ( Eq a => a) > > or its siblinng > > data HasEq a = Haseq (Eq a => a ) > > > > note this requires more planning in how you structure your program, but > is a > > much more pleasant approach than using dynamic when you can get it to > suite > > your application needs. > > > > note its also late, so I've not type checked these examples ;) > > Hi Carter, > > It doesn't seem like the existential one will work as-is, since ghc > rejects this: > > {-# LANGUAGE ExistentialQuantification #-} > data HEQ = forall a. Eq a => HEQ a > usingHEQ :: HEQ -> HEQ -> Bool > usingHEQ (HEQ a) (HEQ b) = a == b > > > I think you were hinting at this option which is better than my first > suggestion: > > {-# LANGUAGE ExistentialQuantification #-} > import Data.Typeable > data DYN = forall a. Typeable a => DYN (a, DYN -> Bool) > > mkDyn :: (Eq a, Typeable a) => a -> DYN > mkDyn x = DYN (x, \(DYN (y, eq2)) -> case cast y of > Just y' -> x == y' > _ -> False) > > mkDyn' :: Typeable a => a -> DYN > mkDyn' x = DYN (x, \_ -> False) > > eqDyn :: DYN -> DYN -> Bool > eqDyn x@(DYN (_, fx)) y@(DYN (_,fy)) = fx y || fy x > > > Maybe there's some way to get mkDyn' and mkDyn as the same function, > without having to re-write all of the Eq instances as a 2-parameter > class like <http://www.haskell.org/haskellwiki/GHC/AdvancedOverlap>. > > > -- > Adam > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > -- Alberto.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe