[Haskell-cafe] TH instance code.

Andy Stewart lazycat.manatee at gmail.com
Tue Jun 22 17:13:26 EDT 2010


Hi Edward,

Thank you very much, your code works perfect!

  -- Andy

Edward Kmett <ekmett at gmail.com> writes:

> 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


More information about the Haskell-Cafe mailing list