module Diagrams.RubiksCube.Move ( Move (..) , mirror , invert ) where -- | A move in . data Move = D | D' | U | U' | L | L' | R | R' | F | F' | B | B' deriving (Eq, Show, Read) -- | The opposite move. invert :: Move -> Move invert D = D' invert D' = D invert U = U' invert U' = U invert L = L' invert L' = L invert R = R' invert R' = R invert F = F' invert F' = F invert B = B' invert B' = B -- | Swaps left and right. mirror :: Move -> Move mirror D = D' mirror D' = D mirror U = U' mirror U' = U mirror L = R' mirror L' = R mirror R = L' mirror R' = L mirror F = F' mirror F' = F mirror B = B' mirror B' = B