Haskell динамически устанавливает поле записи на основе строки имени поля?
Скажем, у меня есть следующая запись:
data Rec = Rec {
field1 :: Int,
field2 :: Int
}
Как мне написать функцию:
changeField :: Rec -> String -> Int -> Rec
changeField rec fieldName value
так что я могу передать в строках "field1" или "field2" вfieldName
аргумент и есть ли обновить соответствующее поле? Я понимаюData.Data
а такжеData.Typeable
есть что использовать здесь, но я не могу понять эти два пакета.
Пример библиотеки, которую я видел, делает это cmdArgs. Нижевыдержка из публикации в блоге о том, как использовать эту библиотеку:
{-# LANGUAGE DeriveDataTypeable #-}
import System.Console.CmdArgs
data Guess = Guess {min :: Int, max :: Int, limit :: Maybe Int} deriving (Data,Typeable,Show)
main = do
x <- cmdArgs $ Guess 1 100 Nothing
print x
Теперь у нас есть простой парсер командной строки. Некоторые примеры взаимодействий:
$ guess --min=10
NumberGuess {min = 10, max = 100, limit = Nothing}