说我有以下内容:
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的情况下完成此操作。有人可以为此提供示例实现吗?
答案 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