rm_functorial
  :: TestableOTSystem doc op
  => ConcurrentDocHistories doc op One Two
  -> Result
prop_transform_functorial (CDH (SS _ c _) (SS _ a (SS _ b _))) =
  eitherResult (compose a b) $ \ab ->
  eitherResult (transform c ab) $ \(_c''1, abPrimed1) ->
  eitherResult (transform c a) $ \(c', a') ->
  eitherResult (transform c' b) $ \(_c''2, b') ->
  eitherResult (compose a' b') $ \abPrimed2 ->
  abPrimed1 ==? abPrimed2

prop_transform_functorial
  :: TestableOTSystem doc op
  => ConcurrentDocHistories doc op One Two
  -> Result
prop_transform_functorial (CDH (SS _ c _) (SS _ a (SS _ b _))) =
  eitherResult (compose a b) $ \ab ->
  eitherResult (transform c ab) $ \(_c''1, abPrimed1) ->
  eitherResult (transform c a) $ \(c', a') ->
  eitherResult (transform c' b) $ \(_c''2, b') ->
  eitherResult (compose a' b') $ \abPrimed2 ->
  abPrimed1 ==? abPrimed2
prop_transform_functorial (CDH (SS _ c _) (SS _ a (SS _ b _))) =
  eitherResult (compose a b) $ \ab ->
  eitherResult (transform c ab) $ \(_c''1, abPrimed1) ->
  eitherResult (transform c a) $ \(c', a') ->
  eitherResult (transform c' b) $ \(_c''2, b') ->
  eitherResult (compose a' b') $ \abPrimed2 ->
  abPrimed1 ==? abPrimed2