[Haskell-cafe] existentially quantified data types - restrictions

2010-03-25 Thread Ozgur Akgun
Dear Cafe, I need to use a language feature which is explicitly documented to be a restriction, and -even worse- I think I reasonably need to use it. f2 (Baz1 a b) (Baz1 p q) = a==q It's ok to say a==b or p==q, but a==q is wrong because it equates the two distinct types arising from the two

Re: [Haskell-cafe] existentially quantified data types - restrictions

2010-03-25 Thread andy morris
Can you have Typeable as an extra constraint? If so: {-# LANGUAGE ExistentialQuantification #-} import Data.Typeable data Baz = forall a. (Eq a, Typeable a) = Baz a instance Eq Baz where Baz x == Baz y = case cast y of Just y' - x == y' Nothing - False ghci Baz

Re: [Haskell-cafe] existentially quantified data types - restrictions

2010-03-25 Thread Ozgur Akgun
Looks great! I started searching on how to write my own Typeable instances, but then I found the language extension *DeriveDataTypeable*, and now everything work like a charm. Thanks very much! On 25 March 2010 15:13, andy morris a...@adradh.org.uk wrote: Can you have Typeable as an extra

Re: [Haskell-cafe] existentially quantified data types - restrictions

2010-03-25 Thread Alex Rozenshteyn
I think type witnesses *might* be relevant to your interests. On Thu, Mar 25, 2010 at 11:13 AM, andy morris a...@adradh.org.uk wrote: Can you have Typeable as an extra constraint? If so: {-# LANGUAGE ExistentialQuantification #-} import Data.Typeable data Baz = forall a. (Eq a,

Re: [Haskell-cafe] existentially quantified data types - restrictions

2010-03-25 Thread Ozgur Akgun
[for future reference] After looking into the *cast* function a little bit more, I think we can simply get rid of the case expression: data Baz = forall a. (Eq a, Typeable a) = Baz a instance Eq Baz where Baz x == Baz y = cast x == Just y On 25 March 2010 15:13, andy morris