Type classes for types representing time
#1Time is an AffineSpace
Instead of defining your own Time class from scratch, why not make it a subclass of https://hackage.haskell.org/package/vector-space-0.10.2/docs/Data-AffineSpace.html#t:AffineSpace. This actually fits more, since time deltas are in general not numerical. In particular, multiplying two time deltas generally doesn't result in a time delta. The package above only requires that deltas or differences can be added, subtracted, and has a 0. The same package comes with a class for multiplying by a constant, which the delta/diff can further be constrained to.
Additionally, the package comes with some functions already defined on affine spaces, such as linear interpolation. (What date is 3/4's of the way between halloween and christmas, for example.)