[Haskell-cafe] Re: Combining Wouter's expressions with extensible
records
Ron Alford
ronwalf at volus.net
Thu Jul 10 18:43:58 EDT 2008
This is a bit similar to Either. Is there a way to see the generated
instance code for
deriving instance Data Either ?
On Thu, Jul 10, 2008 at 6:38 PM, Ron Alford <ronwalf at volus.net> wrote:
> Close - it compiles now! I made a minor change, going to Typeable1
> instead of Typeable:
>
> instance (Typeable1 f, Typeable1 g) => Typeable1 (f :+: g) where
> typeOf1 l@(Inl x) = mkTyConApp (mkTyCon "Planning.Wouter.:+:")
> [typeOf1 x, typeOf1 y]
> where (Inr y) = undefined `asTypeOf` l
> typeOf1 r@(Inr y) = mkTyConApp (mkTyCon "Planning.Wouter.:+:")
> [typeOf1 x, typeOf1 y]
> where (Inl x) = undefined `asTypeOf` r
>
> Except this gives me a runtime error:
> *WouterTest> getName testNamed
> "*** Exception: Prelude.undefined
>
> The only thing I can think of is to have a class that gives default
> values to type - ick!
>
> -Ron Alford
>
> On Thu, Jul 10, 2008 at 4:16 PM, Antoine Latter <aslatter at gmail.com> wrote:
>> On Thu, Jul 10, 2008 at 2:15 PM, Ron Alford <ronwalf at volus.net> wrote:
>>> I'm making progress, but how would I make the following a Typeable instance:
>>> data (f :+: g) e = Inl (f e) | Inr (g e) deriving Eq
>>>
>>> Here is what I'm using for Expr:
>>> data Expr f = In (f (Expr f))
>>> instance Typeable1 f => Typeable (Expr f) where
>>> typeOf (In x) = mkTyConApp (mkTyCon "Data.Trie.General.ListGT") [typeOf1 x]
>>>
>>> I don't think I can use this for ':+:', because the typeOf instance
>>> only has access to a member of one type at a time.
>>> This may be similar to a definition of Typeable2 for Either, but I
>>> can't find an example to follow for that.
>>>
>>
>> Maybe something like:
>>
>> instance (Typeable1 f, Typeable1 g) => Typeable (f :+: g) where
>> typeOf in@(InL f) = (some function of 'f' and 'g')
>> where InR g = undefined `asTypeOf` in
>>
>> typeOf in@(InR g) = (some function of 'f' and 'g')
>> where InL f = undefined `asTypeOf` in
>>
>> would work?
>>
>> -Antoine
>>
>
More information about the Haskell-Cafe
mailing list