haskus-utils-1.5: src/lib/Haskus/Utils/TimedValue.hs
-- | Mutable value with associated last write time
module Haskus.Utils.TimedValue
( TimedValue (..)
)
where
-- | Value with Eq/Ord instances uniquely based on time field indicating the
-- time the value was last written.
--
-- This can be used with IOVar/IOTree which use Eq instances to detect value
-- changes. It can be useful for values that we don't want to structurally
-- compare (because it is too costly or because we can't)
--
-- `t` should be SystemTime (fast to query monotonic clock)
data TimedValue t a = TimedValue t a
instance Eq t => Eq (TimedValue t a) where
TimedValue t1 _ == TimedValue t2 _ = t1 == t2
instance Ord t => Ord (TimedValue t a) where
compare (TimedValue t1 _) (TimedValue t2 _) = compare t1 t2