2016-02-17 2 views
1

Я хочу использовать derivingSafeCopy от https://hackage.haskell.org/package/safecopy-0.9.0.1/docs/Data-SafeCopy.html, для сериализации моих типов данных для их хранения в базе данных - это потому, что я хочу легко переносить типы в моей базе данных.Haskell: Почему derivingSafeCopy зависит только от типов, переданных в конструктор?

Согласно спецификации, если у меня есть что-то вроде:

data A = A 
data B = B 
deriveSafeCopy 1 'base ''A 
deriveSafeCopy 1 'base ''B 

выхода putCopy A и B putCopy будет идентичен. Я надеюсь, что putCopy A и putCopy B будут отличаться, так как я сериализую A и B, используя runGet. safeGet, и хотите, чтобы A и B сериализовались для чего-то другого. Почему это работает так, и как я могу получить A и B для сериализации для разных вещей таким образом, чтобы я мог легко переносить типы данных?

ответ

1

Предположим, что данные были помечены сериализованным типом, так как вам кажется, что это так. Как бы вы использовали эту информацию? Даже если бы можно было десериализовать значение без указания типа, как бы вы использовали полученное значение (в конце концов, вы не знаете его тип).

Рассмотрим делает вид, как это:

data C = TagA A | TagB B 

Теперь вы можете положить A и B значения в Cобертке и сериализации результат. Когда вы десериализуете значения типа C, теперь у вас есть тег (конструктор), указывающий тип содержащегося значения.

Отказ от ответственности: у меня никогда не было случая использовать эти библиотеки.