module Game.Chess.Tree (positionTree, positionForest, plyTree, plyForest) where import Data.Tree (Forest, Tree (Node)) import Game.Chess.Internal positionTree :: Position -> Tree Position positionTree :: Position -> Tree Position positionTree Position pos = Position -> Forest Position -> Tree Position forall a. a -> Forest a -> Tree a Node Position pos (Forest Position -> Tree Position) -> Forest Position -> Tree Position forall a b. (a -> b) -> a -> b $ Position -> Forest Position positionForest Position pos positionForest :: Position -> Forest Position positionForest :: Position -> Forest Position positionForest Position pos = Position -> Tree Position positionTree (Position -> Tree Position) -> (Ply -> Position) -> Ply -> Tree Position forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> Ply -> Position unsafeDoPly Position pos (Ply -> Tree Position) -> [Ply] -> Forest Position forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Position -> [Ply] legalPlies Position pos plyForest :: Position -> Forest Ply plyForest :: Position -> Forest Ply plyForest Position pos = Position -> Ply -> Tree Ply plyTree Position pos (Ply -> Tree Ply) -> [Ply] -> Forest Ply forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Position -> [Ply] legalPlies Position pos plyTree :: Position -> Ply -> Tree Ply plyTree :: Position -> Ply -> Tree Ply plyTree Position pos Ply ply = Ply -> Forest Ply -> Tree Ply forall a. a -> Forest a -> Tree a Node Ply ply (Forest Ply -> Tree Ply) -> (Position -> Forest Ply) -> Position -> Tree Ply forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> Forest Ply plyForest (Position -> Tree Ply) -> Position -> Tree Ply forall a b. (a -> b) -> a -> b $ Position -> Ply -> Position unsafeDoPly Position pos Ply ply