我希望能够将CommandRecord
序列化为二进制文件以将其保存到文件中。但是我只做的天真的方法是:
由于以下错误,instance Binary CommandRecord
无法正常工作。
我可以使用哪种方法来实现上述目标?现在,我的想法是通过放弃使用thyme
库和UTCTime
的想法来解决此问题,而改为使用time
库和UTCTime
(具有已定义的Binary实例)。
我具有以下数据类型:
data CommandRecord = CommandRecord {
command :: Text
, timedate :: UTCTime
, path :: Text
} deriving Generic
我有以下进口商品:
import Data.Thyme.Clock
import Data.Binary
import Data.Binary.Orphans
我正在使用以下软件包:
错误*:
/home/chris/Projects/Haskell/MoscoviumOrange/src/Main.hs:28:10-
29: error:
• No instance for (Binary UTCTime)
arising from a use of ‘binary-0.8.5.1:Data.Binary.Class
.$dmput’
There are instances for similar types:
instance Binary
time-1.8.0.2:Data.Time.Clock.Internal.UTCTim
e.UTCTime
-- Defined in ‘Data.Binary.Orphans’
• In the expression:
binary-0.8.5.1:Data.Binary.Class.$dmput @CommandRecord
In an equation for ‘put’:
put = binary-0.8.5.1:Data.Binary.Class.$dmput
@CommandRecord
In the instance declaration for ‘Binary CommandRecord’
|
28 | instance Binary CommandRecord
| ^^^^^^^^^^^^^^^^^^^^
/home/chris/Projects/Haskell/MoscoviumOrange/src/Main.hs:28:10-
29: error:
• No instance for (Binary UTCTime)
arising from a use of ‘binary-0.8.5.1:Data.Binary.Class
.$dmget’
There are instances for similar types:
instance Binary
time-1.8.0.2:Data.Time.Clock.Internal.UTCTim
e.UTCTime
-- Defined in ‘Data.Binary.Orphans’
• In the expression:
binary-0.8.5.1:Data.Binary.Class.$dmget @CommandRecord
In an equation for ‘get’:
get = binary-0.8.5.1:Data.Binary.Class.$dmget
@CommandRecord
In the instance declaration for ‘Binary CommandRecord’
|
28 | instance Binary CommandRecord
| ^^^^^^^^^^^^^^^^^^^^
答案 0 :(得分:1)
是的,琐碎但缺少的实例问题。我会怎么做:
instance Binary Thyme
作为孤立实例添加到您的模块。确认它有效。#if !MIN_VERSION_thyme(0,3,6)
开关中。原因是,如果出现的新版本thyme
也已经包含该实例,则您不希望重复的实例破坏您的构建。thyme<=0.3.5
文件中,因此不会尝试该新版本没有的实例。 (这似乎使实例上的切换失效。要点是,您可以在事后编辑关于Hackage的依赖关系范围,并且在出现带有实例的.cabal
版本时应该这样做。)thyme
维护者提出拉取请求。这应该是没有争议的,因为无论如何thyme
间接依赖于thyme
。仅当您要编写的文件是可执行文件或小型专家库时,才建议这样做。如果这是许多其他项目可能使用的库,则存在与其他人的孤立实例冲突的风险。在这种情况下,您应该改用一种解决方法,直到Binary
添加实例为止:
thyme
答案 1 :(得分:0)
跟随@leftaroundabout的1.点,我得到了以下模块:
{-# OPTIONS -Wno-orphans #-}
module ThymeBinaryInstances where
import Data.Binary
import Data.Thyme.Internal.Micro
import Data.Thyme.Clock
instance Binary UTCTime
instance Binary NominalDiffTime
instance Binary Micro