goatee- A monadic take on a 2,500-year-old board game - library.

Safe HaskellNone



SGF data structures modelling the hierarchical game tree.



data Collection Source

An SGF collection of game trees.




collectionTrees :: [Node]


data Node Source

An SGF game tree node. Unlike in the SGF spec, we represent a game tree with nodes uniformly, rather than having the separation between sequences and nodes.




newtype NodeWithDeepEquality Source

A wrapper around Node with an Eq instance that considers two nodes equal iff they contain the same properties (not necessarily in the same order), and if they contain children (in the same order) whose nodes are recursively equal.

This instance is not on Node directly because it is not the only obvious sense of equality (only comparing properties would be another one), and it's also potentially expensive.

emptyNode :: Node Source

A node with no properties and no children.

rootNode :: Maybe (Int, Int) -> Node Source

Returns a fresh root Node with AP set to Goatee and optionally with a board size set via SZ.

findProperty :: Descriptor a => a -> Node -> Maybe Property Source

Searches for a matching property in a node's property list.

findProperty' :: Descriptor a => a -> [Property] -> Maybe Property Source

Searches for a matching property in a property list.

findPropertyValue :: ValuedDescriptor v a => a -> Node -> Maybe v Source

Retrieves the value of a property in a node's property list.

findPropertyValue' :: ValuedDescriptor v a => a -> [Property] -> Maybe v Source

Retrieves the value of a property in a property list.

addProperty :: Property -> Node -> Node Source

Appends a property to a node's property list.

addChild :: Node -> Node -> Node Source

addChild child parent appends a child node to a node's child list.

addChildAt :: Int -> Node -> Node -> Node Source

addChildAt index child parent inserts a child node into a node's child list at the given index, shifting all nodes at or after the given index to the right. If the position is less than 0 or greater than the length of the list, then the index is clamped to this range.

deleteChildAt :: Int -> Node -> Node Source

deleteChildAt index node deletes the child at the given index from the node. If the index is invalid, node is returned.

validateNode :: Bool -> Bool -> Node -> [String] Source

Returns a list of validation errors for the current node, an empty list if no errors are detected.