packages feed

diagrams-rubiks-cube 0.1.0.0 → 0.1.1.0

raw patch · 4 files changed

+47/−30 lines, 4 filesdep ~diagrams-libPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: diagrams-lib

API changes (from Hackage documentation)

- Diagrams.RubiksCube.Draw: _moveSep :: MovesSettings -> Double
- Diagrams.RubiksCube.Draw: _offsetX :: Offsets -> Double
- Diagrams.RubiksCube.Draw: _offsetY :: Offsets -> Double
- Diagrams.RubiksCube.Draw: _offsets :: MovesSettings -> Offsets
- Diagrams.RubiksCube.Draw: _showEnd :: MovesSettings -> Bool
- Diagrams.RubiksCube.Draw: _showStart :: MovesSettings -> Bool
- Diagrams.RubiksCube.Draw: instance Default MovesSettings
- Diagrams.RubiksCube.Draw: instance Default Offsets
- Diagrams.RubiksCube.Draw: instance Eq MovesSettings
- Diagrams.RubiksCube.Draw: instance Eq Offsets
- Diagrams.RubiksCube.Draw: instance Read MovesSettings
- Diagrams.RubiksCube.Draw: instance Read Offsets
- Diagrams.RubiksCube.Draw: instance Show MovesSettings
- Diagrams.RubiksCube.Draw: instance Show Offsets
- Diagrams.RubiksCube.Model: _backSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _bottomCenter :: Side a -> a
- Diagrams.RubiksCube.Model: _bottomLeft :: Side a -> a
- Diagrams.RubiksCube.Model: _bottomRight :: Side a -> a
- Diagrams.RubiksCube.Model: _cube :: RubiksCube a -> Cube (Side a)
- Diagrams.RubiksCube.Model: _downSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _frontSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _leftSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _middleCenter :: Side a -> a
- Diagrams.RubiksCube.Model: _middleLeft :: Side a -> a
- Diagrams.RubiksCube.Model: _middleRight :: Side a -> a
- Diagrams.RubiksCube.Model: _rightSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _topCenter :: Side a -> a
- Diagrams.RubiksCube.Model: _topLeft :: Side a -> a
- Diagrams.RubiksCube.Model: _topRight :: Side a -> a
- Diagrams.RubiksCube.Model: _upSide :: Cube a -> a
- Diagrams.RubiksCube.Model: instance Applicative Cube
- Diagrams.RubiksCube.Model: instance Applicative RubiksCube
- Diagrams.RubiksCube.Model: instance Applicative Side
- Diagrams.RubiksCube.Model: instance Applicative Vec3
- Diagrams.RubiksCube.Model: instance Applicative Vec4
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Cube a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (RubiksCube a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Side a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Vec3 a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Vec4 a)
- Diagrams.RubiksCube.Model: instance Foldable Cube
- Diagrams.RubiksCube.Model: instance Foldable Side
- Diagrams.RubiksCube.Model: instance Foldable Vec3
- Diagrams.RubiksCube.Model: instance Foldable Vec4
- Diagrams.RubiksCube.Model: instance Functor Cube
- Diagrams.RubiksCube.Model: instance Functor RubiksCube
- Diagrams.RubiksCube.Model: instance Functor Side
- Diagrams.RubiksCube.Model: instance Functor Vec3
- Diagrams.RubiksCube.Model: instance Functor Vec4
- Diagrams.RubiksCube.Model: instance Reversing (Side a)
- Diagrams.RubiksCube.Model: instance Reversing (Vec3 a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Cube a)
- Diagrams.RubiksCube.Model: instance Show a => Show (RubiksCube a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Side a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Vec3 a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Vec4 a)
- Diagrams.RubiksCube.Model: instance Traversable Cube
- Diagrams.RubiksCube.Model: instance Traversable Side
- Diagrams.RubiksCube.Model: instance Traversable Vec3
- Diagrams.RubiksCube.Model: instance Traversable Vec4
- Diagrams.RubiksCube.Move: instance Eq Move
- Diagrams.RubiksCube.Move: instance Read Move
- Diagrams.RubiksCube.Move: instance Show Move
+ Diagrams.RubiksCube.Draw: [_moveSep] :: MovesSettings -> Double
+ Diagrams.RubiksCube.Draw: [_offsetX] :: Offsets -> Double
+ Diagrams.RubiksCube.Draw: [_offsetY] :: Offsets -> Double
+ Diagrams.RubiksCube.Draw: [_offsets] :: MovesSettings -> Offsets
+ Diagrams.RubiksCube.Draw: [_showEnd] :: MovesSettings -> Bool
+ Diagrams.RubiksCube.Draw: [_showStart] :: MovesSettings -> Bool
+ Diagrams.RubiksCube.Draw: instance Data.Default.Class.Default Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance Data.Default.Class.Default Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: instance GHC.Classes.Eq Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance GHC.Classes.Eq Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: instance GHC.Read.Read Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance GHC.Read.Read Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: instance GHC.Show.Show Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance GHC.Show.Show Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: type RubiksCubeBackend b = (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)
+ Diagrams.RubiksCube.Model: [_backSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_bottomCenter] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_bottomLeft] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_bottomRight] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_cube] :: RubiksCube a -> Cube (Side a)
+ Diagrams.RubiksCube.Model: [_downSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_frontSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_leftSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_middleCenter] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_middleLeft] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_middleRight] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_rightSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_topCenter] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_topLeft] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_topRight] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_upSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: instance Control.Lens.Internal.Iso.Reversing (Diagrams.RubiksCube.Model.Side a)
+ Diagrams.RubiksCube.Model: instance Control.Lens.Internal.Iso.Reversing (Diagrams.RubiksCube.Model.Vec3 a)
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.RubiksCube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.RubiksCube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Cube a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.RubiksCube a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Side a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Vec3 a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Vec4 a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Cube a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.RubiksCube a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Side a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Vec3 a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Vec4 a)
+ Diagrams.RubiksCube.Move: instance GHC.Classes.Eq Diagrams.RubiksCube.Move.Move
+ Diagrams.RubiksCube.Move: instance GHC.Read.Read Diagrams.RubiksCube.Move.Move
+ Diagrams.RubiksCube.Move: instance GHC.Show.Show Diagrams.RubiksCube.Move.Move
- Diagrams.RubiksCube.Draw: drawFoldingPattern :: Renderable (Path R2) b => RubiksCube (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawFoldingPattern :: RubiksCubeBackend b => RubiksCube (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Draw: drawMove :: Renderable (Path R2) b => Move -> Offsets -> RubiksCube (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawMove :: RubiksCubeBackend b => Move -> Offsets -> RubiksCube (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Draw: drawMoves :: Renderable (Path R2) b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawMoves :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b
- Diagrams.RubiksCube.Draw: drawMovesBackward :: Renderable (Path R2) b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawMovesBackward :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b
- Diagrams.RubiksCube.Draw: drawRubiksCube :: Renderable (Path R2) b => Offsets -> RubiksCube (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawRubiksCube :: RubiksCubeBackend b => Offsets -> RubiksCube (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Draw: drawSide :: Renderable (Path R2) b => R2 -> R2 -> Side (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawSide :: RubiksCubeBackend b => V2 Double -> V2 Double -> Side (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Model: backSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: backSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: bottomCenter :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: bottomCenter :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: bottomLeft :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: bottomLeft :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: bottomRight :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: bottomRight :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: cube :: Iso (RubiksCube a_ab54) (RubiksCube a_abbu) (Cube (Side a_ab54)) (Cube (Side a_abbu))
+ Diagrams.RubiksCube.Model: cube :: Iso (RubiksCube a_aexN) (RubiksCube a_aeEq) (Cube (Side a_aexN)) (Cube (Side a_aeEq))
- Diagrams.RubiksCube.Model: downSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: downSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: frontSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: frontSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: leftSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: leftSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: middleCenter :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: middleCenter :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: middleLeft :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: middleLeft :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: middleRight :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: middleRight :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: rightSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: rightSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: topCenter :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: topCenter :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: topLeft :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: topLeft :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: topRight :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: topRight :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: upSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: upSide :: Lens' (Cube a_adOD) a_adOD

Files

+ CHANGELOG.md view
@@ -0,0 +1,10 @@+# Change Log++## 0.1.1.0 - 2015-05-01++- Added change log+- Upgraded to diagrams-1.3++## 0.1.0.0 - 2015-03-10++- Initial release
README.md view
@@ -18,4 +18,4 @@ [hackage-image]: https://img.shields.io/hackage/v/diagrams-rubiks-cube.svg?style=flat [hackage-url]: http://hackage.haskell.org/package/diagrams-rubiks-cube [hackage-deps-image]: https://img.shields.io/hackage-deps/v/diagrams-rubiks-cube.svg?style=flat-[hackage-deps-url]: http://packdeps.haskellers.com/feed?needle=diagrams-rubiks-cube.svg+[hackage-deps-url]: http://packdeps.haskellers.com/feed?needle=diagrams-rubiks-cube
diagrams-rubiks-cube.cabal view
@@ -1,5 +1,5 @@ name:                diagrams-rubiks-cube-version:             0.1.0.0+version:             0.1.1.0 synopsis:            Library for drawing the Rubik's Cube. description:         Includes a facets model of the Rubik's Cube and a 'diagrams'-based renderer. homepage:            https://github.com/timjb/rubiks-cube@@ -10,7 +10,7 @@ copyright:           2015 Tim Baumann category:            Graphics build-type:          Simple-extra-source-files:  README.md, diagrams/*.svg+extra-source-files:  README.md, CHANGELOG.md, diagrams/*.svg extra-doc-files:     diagrams/*.svg cabal-version:       >= 1.10 @@ -25,7 +25,7 @@                        Diagrams.RubiksCube.Model,                        Diagrams.RubiksCube.Draw   build-depends:       base >= 4.6 && < 5,-                       diagrams-lib >= 1.2.0.7 && < 1.3,+                       diagrams-lib >= 1.3 && < 1.4,                        lens >= 4.6.0.1 && < 5,                        data-default-class >= 0.0.1 && < 0.1   hs-source-dirs:      src
src/Diagrams/RubiksCube/Draw.hs view
@@ -1,9 +1,12 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE Rank2Types #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ConstraintKinds #-}  module Diagrams.RubiksCube.Draw-  ( solvedRubiksCube+  ( RubiksCubeBackend+  , solvedRubiksCube   , drawSide   , drawFoldingPattern   , Offsets (..), offsetX, offsetY@@ -17,12 +20,13 @@ import Diagrams.RubiksCube.Model  import Control.Lens hiding ((#))-import Diagrams.Prelude hiding (center)+import Diagrams.Prelude hiding (center, cube) import Data.List (sortBy, mapAccumL) import Data.Function (on) import qualified Diagrams.Prelude as P-import Data.Default.Class +type RubiksCubeBackend b = (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)+ -- > import Diagrams.RubiksCube.Draw -- > solvedCube = drawFoldingPattern solvedRubiksCube @@ -52,11 +56,11 @@ -- -- <<diagrams/src_Diagrams_RubiksCube_Draw_drawSideDia.svg#diagram=drawSideDia&height=150&width=200>> drawSide-  :: Renderable (Path R2) b-  => R2 -- ^ dx-  -> R2 -- ^ dy+  :: RubiksCubeBackend b+  => V2 Double -- ^ dx+  -> V2 Double -- ^ dy   -> Side (Colour Double)-  -> Diagram b R2+  -> Diagram b drawSide dx dy side = mconcat $ do   (y, row) <- count rows   let Vec3 l c r = side ^. row@@ -64,8 +68,11 @@   where     count = zip [(0 :: Int)..]     rows = [bottomRow, middleRow, topRow]-    pos x y = p2 $ unr2 $ fromIntegral x *^ dx ^+^ fromIntegral y *^ dy-    drawField :: Renderable (Path R2) b => Int -> Int -> Colour Double -> Diagram b R2+    pos :: Int -> Int -> Point V2 Double+    pos x y = P $ fromIntegral x *^ dx ^+^ fromIntegral y *^ dy+    drawField+      :: (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)+      => Int -> Int -> Colour Double -> Diagram b     drawField x y color =       fromVertices [pos x y, pos (x+1) y, pos (x+1) (y+1), pos x (y+1), pos x y]         # mapLoc closeTrail # trailLike # fc color@@ -73,9 +80,9 @@ -- | Draw the folding pattern of the cube. The front side is at the center of -- the pattern. drawFoldingPattern-  :: Renderable (Path R2) b+  :: RubiksCubeBackend b   => RubiksCube (Colour Double)-  -> Diagram b R2+  -> Diagram b drawFoldingPattern c' =   let c = c' ^. cube       drawSide' = drawSide (r2 (1,0)) (r2 (0,1))@@ -126,10 +133,10 @@ -- >   let c = solvedRubiksCube ^. undoMoves [R,U,R',U'] -- >   in drawRubiksCube with c drawRubiksCube-  :: Renderable (Path R2) b+  :: RubiksCubeBackend b   => Offsets   -> RubiksCube (Colour Double)-  -> Diagram b R2+  -> Diagram b drawRubiksCube (Offsets dx dy) c' = position $   [ f ] ++   sides ++@@ -153,18 +160,18 @@     d = (p2 (3*dx, 3*dy), drawSide' dx' (-dz') downSide)  moveArrow-  :: Renderable (Path R2) b-  => Bool -> P2 -> P2 -> Diagram b R2+  :: RubiksCubeBackend b+  => Bool -> P2 Double -> P2 Double -> Diagram b moveArrow rev s e =   (if rev then arrowBetween' opts e s else arrowBetween' opts s e) # lc red   where opts = with & shaftStyle %~ lw ultraThick & headLength .~ veryLarge  drawMoveU, drawMoveD, drawMoveL, drawMoveR, drawMoveF-  :: Renderable (Path R2) b+  :: RubiksCubeBackend b   => Bool -- ^ invert   -> Offsets   -> RubiksCube (Colour Double)-  -> Diagram b R2+  -> Diagram b drawMoveU rev off c =   atop (moveArrow rev (p2 (2.8, 2.5)) (p2 (0.2, 2.5)))        (drawRubiksCube off c)@@ -178,13 +185,13 @@   atop (moveArrow rev (p2 (2.5, 0.2)) (p2 (2.5, 2.8)))        (drawRubiksCube off c) drawMoveF rev off c =-  arr (opts & arrowShaft .~ quarterTurn) (p2 (1.5, 2.6)) (p2 (2.5, 1.3))+  arr (opts & arrowShaft .~ quarterTurn') (p2 (1.5, 2.6)) (p2 (2.5, 1.3))   `atop`-  arr (opts & arrowShaft .~ quarterTurn) (p2 (1.5, 0.4)) (p2 (0.5, 1.7))+  arr (opts & arrowShaft .~ quarterTurn') (p2 (1.5, 0.4)) (p2 (0.5, 1.7))   `atop`   drawRubiksCube off c   where-    quarterTurn = arc (0 @@ turn) (1/4 @@ turn) # (if rev then id else reverseTrail)+    quarterTurn' = arc xDir (1/4 @@ turn) # (if rev then id else reverseTrail)     opts = with & shaftStyle %~ lw ultraThick & headLength .~ veryLarge     arr opts' s e = (if rev then arrowBetween' opts' e s else arrowBetween' opts' s e)                    # lc red@@ -200,11 +207,11 @@ -- >   let c = solvedRubiksCube ^. undoMoves [L,U,L',U'] -- >   in drawMove L with c drawMove-  :: Renderable (Path R2) b+  :: RubiksCubeBackend b   => Move   -> Offsets   -> RubiksCube (Colour Double)-  -> Diagram b R2+  -> Diagram b drawMove U  = drawMoveU False drawMove U' = drawMoveU True drawMove D  = drawMoveD False@@ -241,11 +248,11 @@ -- >       settings = with & showStart .~ True -- >   in drawMoves settings startPos moves drawMoves-  :: Renderable (Path R2) b+  :: RubiksCubeBackend b   => MovesSettings   -> RubiksCube (Colour Double) -- ^ the start configuration   -> [Move]-  -> Diagram b R2+  -> Diagram b drawMoves settings c moves =   let ((j, c'), ps) = mapAccumL iter (0 :: Int, c) moves       allCubes = (if settings ^. showStart then ((pos ((-1) :: Int), drawRubiksCube off c) :) else id) $@@ -269,10 +276,10 @@ -- >       settings = with & showStart .~ True -- >   in drawMovesBackward settings endPos moves drawMovesBackward-  :: Renderable (Path R2) b+  :: RubiksCubeBackend b   => MovesSettings   -> RubiksCube (Colour Double) -- ^ the end configuration   -> [Move]-  -> Diagram b R2+  -> Diagram b drawMovesBackward settings c moves =   drawMoves settings (c ^. undoMoves moves) moves