packages feed

cube-hs-0.4.0.0: src/Data/Cube.hs

-- |
-- Module      : Data.Cube
-- Description : High-performance, type-safe Rubik's Cube library
-- Copyright   : (c) coshz, 2026
-- License     : MIT
-- Maintainer  : fsinhx@gmail.com
-- Stability   : stable
--
-- This module provides a safe-by-default Haskell interface for 3x3 Rubik's Cube 
-- manipulation and solving via C FFI.
--
-- === Example Usage
-- @
-- import Data.Cube
--
-- main :: IO ()
-- main = do
--     -- 1. Verify standard solved state representation
--     let initStr = showCube cubeId
--     putStrLn $ "Is initial cube legal? " ++ show (isLegalCubeString initStr)
--
--     -- 2. Parse standard WCA scramble sequence
--     let scrambledTurns = fromMaybe [] $ parseTurns "U F U' L2 R L' D2 B"
--     putStrLn $ "Is the count of turns is 8? " ++ show (length scrambledTurns == 8)
--
--     -- 3. Apply group action (&>) to scramble the solved identity cube
--     let scrambledCube = foldl (&>) cubeId scrambledTurns
--     putStrLn $ "Scrambled state: " ++ showCube scrambledCube
--
--     -- 4. Solve using zero-cost C FFI solver and verify restoration
--     let sol = unsafeSolveFrom scrambledCube
--     putStrLn $ "Optimal solution steps: " ++ showTurns sol
--     putStrLn $ "Is fully restored? " ++ show (applyTurns scrambledCube sol == cubeId)
-- @

module Data.Cube
( 
  -- * Core Types
  Turn(..)
, Cube
  -- * Identity & Constants
, cubeId
  -- * Validation & Formatting
, isLegalCubeString
, showCube
, parseCube
  -- * Algebraic Operations & Group Actions 
, (&>)
, applyTurns
  -- * WCA Turns Representation
, showTurns
, parseTurns
  -- * Solving Interface (C FFI)
, solve
, unsafeSolve
, solveFrom
, unsafeSolveFrom
) where

import Data.Cube.Internal