module CircularShift where import LineStorage rotate :: [a] -> [a] rotate [] = [] rotate (x:xs) = xs ++ [x] rotateAll :: [a] -> [[a]] rotateAll xs = take (length xs) (iterate rotate xs) circularShift :: Core Ready (m (a i e)) -> Core Rotated (m (a i e)) circularShift (Core core) = do set $ map rotateAll core