获取Haskell记录的字段名称作为字符串列表?

时间:2011-12-10 16:10:46

标签: haskell template-haskell reify

说我有以下内容:

data Rec = Rec {
    alpha :: Int,
    beta  :: Double,
    phi   :: Float 
} 

sample = Rec 1 2.3 4.5

我理解模板Haskell& reify函数可以获取记录的字段名称。那就是:

print $(f sample) --> ["alpha", "beta", "phi"]

还有一种声称可以在没有模板Haskell的情况下完成此操作。有人可以为此提供示例实现吗?

1 个答案:

答案 0 :(得分:16)

可以使用GHC可以为您推导的Data(大多数GHC版本)或Generic(7.2.x及更高版本)实例来完成。以下是如何使用Data类型类转储记录字段的示例:

{-# LANGUAGE DeriveDataTypeable #-}

import Data.Data

data Rec = Rec {
    alpha :: Int,
    beta  :: Double,
    phi   :: Float 
}  deriving (Data, Typeable)

sample = Rec 1 2.3 4.5

main :: IO ()
main = print . constrFields . toConstr $ sample