Получить имена полей записи Haskell в виде списка строк?
Скажи, что у меня есть следующее:
data Rec = Rec {
alpha :: Int,
beta :: Double,
phi :: Float
}
sample = Rec 1 2.3 4.5
Я понимаю шаблон Haskell & the reify
Функция может получить мне имена полей записи. То есть:
print $(f sample) --> ["alpha", "beta", "phi"]
Существует также утверждение, что это можно сделать без использования шаблона Haskell. Может ли кто-нибудь предоставить пример реализации, для этого можно выполнить?
1 ответ
Решение
Это можно сделать с помощью экземпляра Data (большинство версий GHC) или Generic (7.2.x и выше), который GHC может получить для вас. Вот пример того, как вывести дамп полей записи с классом типов данных:
{-# 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