[Haskell-cafe] TH instance code.

Edward Kmett ekmett at gmail.com
Tue Jun 22 11:59:26 EDT 2010


v-- I had accidentally elided the _'s before the t's in the quasiquotation
before.

What you're looking for is something like:

deriveVariable _t = [d|
    instance Variable $_t where
        toVariant = toVariant . show
        fromVariant x = fmap (\v -> read v :: $_t) $ fromVariant x|]

deriveVariable (conT ''PageType)
deriveVariable (conT ''Int)
deriveVariable (conT ''Maybe `appT` conT ''Char)
...



>
> On Tue, Jun 22, 2010 at 11:24 AM, Andy Stewart <lazycat.manatee at gmail.com>wrote:
>
>> Hi all,
>>
>> I have below duplicate code, but i don't know how to use TH instance code.
>>
>> ------------------------------> duplicate code start
>> <------------------------------
>> instance Variable PageType where
>>    toVariant = toVariant . show
>>    fromVariant x = fmap (\v -> read v :: PageType) $ fromVariant x
>>
>> instance Variable Int where
>>    toVariant = toVariant . show
>>    fromVariant x = fmap (\v -> read v :: Int) $ fromVariant x
>>
>> instance Variable (Maybe Char) where
>>    toVariant = toVariant . show
>>    fromVariant x = fmap (\v -> read v :: Maybe Char) $ fromVariant x
>>
>> instance Variable (Maybe Int) where
>>    toVariant = toVariant . show
>>    fromVariant x = fmap (\v -> read v :: Maybe Int) $ fromVariant x
>>
>> instance Variable ProcessID where
>>    toVariant = toVariant . show
>>    fromVariant x = fmap (\v -> read v :: ProcessID) $ fromVariant x
>>
>> instance Variable GWindowId where
>>    toVariant = toVariant . show
>>    fromVariant x = fmap (\v -> read v :: GWindowId) $ fromVariant x
>> ------------------------------> duplicate code end
>> <------------------------------
>>
>> Any TH expert help?
>>
>> Thanks,
>>
>>  -- Andy
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100622/907737fa/attachment.html


More information about the Haskell-Cafe mailing list