Consider using monoid action for time-domain
Time differences act on times as a monoid action: https://hackage.haskell.org/package/monoid-extras-0.6.1/docs/Data-Monoid-Action.html
In fact, they do a bit more than that. The action is invertible because we can take the difference of two timestamps. So it's a transitive group action. There exists a group package: https://hackage.haskell.org/package/groups but there is no action class, and no transitivity.
See https://github.com/Taneb/groups/issues/15
https://github.com/diagrams/monoid-extras/issues/53
Other possibilities of modelling the difference of timestamp differences might be https://hackage.haskell.org/package/monoid-subclasses-1.2.3/docs/Data-Semigroup-Cancellative.html#t:LeftReductive