我们使用包装类型对一些数据进行加密签名....
--Here is the base data
data Fridge = Fridge {numOnions::Int, numPickles::Int} deriving (Show)
--Here is the same data, signed
data SignedFridge = SignedFridge {fridge::Fridge, signature::Int}
这样做是为了类型安全(即 - 我错误地提交了无符号Fridge
代替签名的代码太多次了......通过这种分割,这个错误在编译时被淘汰了)
现在,我们需要将这些数据(包括签名)存储到数据库中....我希望使用Persistent / Template Haskell,甚至可以移交数据类型生成....但是Fridge中的字段分割/ SignedFridge似乎使这个变得不可能。如果没有签名,那就是
[persistLowerCase|
Fridge
numOnions Int
numPickles Int
deriving Show
|]
然而,推迟额外的signature
项目并保持类型分割是困难的....
三个(坏)选项似乎是
SignedFridge
。这有效,但肯定不是DRY。Maybe Int
。当然,直到运行时我都不会发现我不小心使用了未签名的冰箱,我需要签名。对我来说,有没有人有第四个更好的选择?