2014-05-01 13 views
7

Giả sử tôi có một kiểu dữ liệu như vậy:Nhiều định nghĩa chức năng với mẫu Haskell

data Color = Red | Blue | Green 

Làm thế nào tôi sẽ tạo ra một chức năng như thế này sử dụng templatehaskell?

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

tức là tôi đang tìm nhiều định nghĩa cho một hàm dựa trên mẫu phù hợp.

Trả lời

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

Điều này đặt tôi đi đúng hướng. Tôi đã kết thúc bằng cách sử dụng một lambda với một biểu hiện trường hợp như vậy: 'myShow = return $ LamE [VarP mc] (CaseE (VarE mc) $ [Match ...] trong đó mc = mkName" mc "' –

Các vấn đề liên quan