https://hackage.haskell.org/package/contravariant-1.4/docs/Data-Functor-Contravariant-Divisible.html Example use case: `divide` can be seen as a way of deriving behavior by splitting a "larger" type in two