【问题标题】:Multiple function definitions with template haskell带有模板 haskell 的多个函数定义
【发布时间】:2014-05-01 10:02:56
【问题描述】:

假设我有这样的数据类型:

data Color = Red | Blue | Green

如何使用 templatehaskell 生成这样的函数?

myShow Red   = ...
myShow Blue  = ...
myShow Green = ...

即我正在寻找基于模式匹配的函数的多个定义。

【问题讨论】:

    标签: haskell template-haskell


    【解决方案1】:
    {-# 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) []
    

    【讨论】:

    • 这让我走上了正轨。我最终使用了一个带有 case 表达式的 lambda,如下所示:myShow = return $ LamE [VarP mc] (CaseE (VarE mc) $ [Match ...] where mc = mkName "mc"
    猜你喜欢
    • 2010-09-19
    • 2012-10-30
    • 2019-06-11
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多