【发布时间】:2014-05-01 10:02:56
【问题描述】:
假设我有这样的数据类型:
data Color = Red | Blue | Green
如何使用 templatehaskell 生成这样的函数?
myShow Red = ...
myShow Blue = ...
myShow Green = ...
即我正在寻找基于模式匹配的函数的多个定义。
【问题讨论】:
假设我有这样的数据类型:
data Color = Red | Blue | Green
如何使用 templatehaskell 生成这样的函数?
myShow Red = ...
myShow Blue = ...
myShow Green = ...
即我正在寻找基于模式匹配的函数的多个定义。
【问题讨论】:
{-# 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) []
【讨论】:
myShow = return $ LamE [VarP mc] (CaseE (VarE mc) $ [Match ...] where mc = mkName "mc"