prop_compose_assoc
  :: TestableOTSystem doc op
  => DocHistory doc op Three
  -> Result
prop_compose_assoc (SS _doc a (SS _ b (SS _ c _))) =
  eitherResult (compose a b) $ \ab ->
  eitherResult (compose ab c) $ \abc1 ->
  eitherResult (compose b c) $ \bc ->
  eitherResult (compose a bc) $ \abc2 ->
  abc1 ==? abc2
prop_compose_assoc
  :: TestableOTSystem doc op
  => DocHistory doc op Three
  -> Result
prop_compose_assoc (SS _doc a (SS _ b (SS _ c _))) =
  eitherResult (compose a b) $ \ab ->
  eitherResult (compose ab c) $ \abc1 ->
  eitherResult (compose b c) $ \bc ->
  eitherResult (compose a bc) $ \abc2 ->
  abc1 ==? abc2
prop_compose_assoc (SS _doc a (SS _ b (SS _ c _))) =
  eitherResult (compose a b) $ \ab ->
  eitherResult (compose ab c) $ \abc1 ->
  eitherResult (compose b c) $ \bc ->
  eitherResult (compose a bc) $ \abc2 ->
  abc1 ==? abc2