-createCircle current = Circle Q.empty current Q.empty
-
-currentMarble :: Circle -> Integer
-currentMarble (Circle _ m _) = m
-
-stepClockwise :: Circle -> Circle
-stepClockwise (Circle left current right)
- | (Q.null left) && (Q.null right) = Circle left current right
- | (Q.null right) = stepClockwise (Circle Q.empty current left)
- | otherwise = Circle (left |> current) r rs
- where (r :< rs) = Q.viewl right
-
-stepAntiClockwise :: Circle -> Circle
-stepAntiClockwise (Circle left current right)
- | (Q.null left) && (Q.null right) = Circle left current right
- | (Q.null left) = stepAntiClockwise (Circle right current Q.empty)
- | otherwise = Circle ls l (current <| right)
- where (ls :> l) = Q.viewr left
-
-insertAfter :: Integer -> Circle -> Circle
-insertAfter new (Circle left current right) = Circle (left |> current) new right
-
-removeCurrent :: Circle -> Circle
-removeCurrent (Circle left _ right)
- | Q.null right = Circle ls l Q.empty
- | otherwise = Circle left r rs
- where (l :< ls) = Q.viewl left
- (r :< rs) = Q.viewl right