{- | Move and cube definitions
 -}

module Rubik.Cube.Moves (
  MoveTag (..),
  Move18, Move10,

  -- * Generating moves
  u,r,f,d,l,b,
  move6,

  -- * 18 elementary moves
  move18Names,
  move18,

  -- * Other subgroups
  move10Names,
  move10,
  move6',

  -- * Symmetries
  surf3, sf2, su4, slr2,

  Symmetry (..),
  Symmetric,
  UDFix,
  rawMoveSym,
  rawCast,

  symmetry_urf3,
  symmetry_urf3',
  mkSymmetry,

  SymCode (..),
  symDecode,
  sym16Codes,
  sym16,
  sym16',
  sym48Codes,
  sym48,
  sym48',
  composeSym,
  invertSym,

  -- * Random cube/move
  randomCube,

  -- * Move algebra
  BasicMove,
  oppositeAndGT,

  ElemMove,
  Move,

  reduceMove,
  nubMove,

  -- ** Conversions
  moveToCube,

  moveToString,
  stringToMove,
  ) where

import Rubik.Cube.Moves.Internal