2014-05-01 14 views

Odpowiedz

3
{-# LANGUAGE TemplateHaskell #-} 

module Test where 

import Language.Haskell.TH 

data Color = Red | Blue | Green 

myShow' :: Q [Dec] 
myShow' = return [FunD (mkName "myShow") [mkClause 'Red, mkClause 'Blue, mkClause 'Green]] 
    where mkClause n = Clause [ConP n []] (NormalB $ LitE $ StringL $ nameBase n) [] 
+0

To postawiło mnie na dobrej drodze. W końcu użyłem lambda z takim wyrażeniem jak case: 'myShow = return $ LamE [VarP mc] (CaseE (VarE mc) $ [Match ...] gdzie mc = mkName" mc "' –