假设我们有以下数据定义
data Test = Test
{ _intMember :: Int
, _strMember :: String
, _dblMember :: Double
}
我想将数据结构编码为ByteString,如下所示:
encode :: Test -> ByteString
encode test = pack $ show (test ^. intMember) `append` show (test ^. strMember) `append` show (test ^. dblMember)
非常直截了当。然而,实际上我有一个类似50个红色的数据,它很快变得非常不愉快。更糟糕的是,我有很多像这样的数据定义。最好是Lens库中的toListOf
可以处理自定义数据,但显然通用自定义数据不是该函数使用的Getting
类型。所以我的问题是尽可能多地减少样板的最佳方法是什么?为简单起见,我们假设我需要处理的所有记录都是Show
类的实例。谢谢你的阅读。