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
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
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
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,
[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