exec :: RotationState a -> RotationState a
exec (Reversing ok f f' r r') = if L.isEmpty f
  then Appending ok f' (L.head r `L.cons` r')
  else Reversing (ok + 1) (L.tail f) (L.head f `L.cons` f') r (L.head r `L.cons` r')
exec :: RotationState a -> RotationState a
exec (Reversing ok f f' r r') = if L.isEmpty f
  then Appending ok f' (L.head r `L.cons` r')
  else Reversing (ok + 1) (L.tail f) (L.head f `L.cons` f') r (L.head r `L.cons` r')
exec (Reversing ok f f' r r') = if L.isEmpty f
  then Appending ok f' (L.head r `L.cons` r')
  else Reversing (ok + 1) (L.tail f) (L.head f `L.cons` f') r (L.head r `L.cons` r')