Если вы ищете «быстрое исправление», для одноразового скрипта или чего-то подобного, вы можете получить Read
в дополнение к Show
, и тогда вы сможете использовать show
преобразовать в String
и read
для обратного преобразования, например:
data D = D { x :: Int, y :: Bool }
deriving (Show, Read)
d1 = D 42 True
s = show d1
-- s == "D {x = 42, y = True}"
d2 :: D
d2 = read s
-- d2 == d1
Однако, пожалуйста, пожалуйста не помещайте это в производственный код. Во-первых, вы неявно полагаетесь на то, как закодирована запись, и нет никаких проверок для защиты от незначительных изменений. Во-вторых, функция read
имеет значение частичное - то есть произойдет сбой, если не удастся проанализировать ввод. И, наконец, если вы сохраните свои данные таким образом, вы застрянете с этим форматом записи и никогда не сможете его изменить.
Извините, решение для обеспечения качества производствано вам придется придумать явный, документированный формат сериализации.Обойти это невозможно - на любом языке.