This repository has been archived on 2024-06-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
coffee.pygments/tests/examplefiles/lhs/DancingSudoku.lhs.output
2021-12-03 15:40:45 +01:00

4519 lines
112 KiB
Text
Generated

' A Sukodku solver by Chris Kuklewicz (haskell (at) list (dot) mightyreason (dot) com)\n' Text
' The usual BSD license applies, copyright 2006.\n' Text
' Uploaded to HaskellWiki as DancingSudoku.lhs\n' Text
'\n' Text
' I compile on a powerbook G4 (Mac OS X, ghc 6.4.2) using\n' Text
' ghc -optc-O3 -funbox-strict-fields -O2 --make -fglasgow-exts\n' Text
'\n' Text
" This is a translation of Knuth's GDANCE from dance.w / dance.c\n" Text
'\n' Text
' http://www-cs-faculty.stanford.edu/~uno/preprints.html\n' Text
' http://www-cs-faculty.stanford.edu/~uno/programs.html\n' Text
' http://en.wikipedia.org/wiki/Dancing_Links\n' Text
'\n' Text
' I have an older verison that uses lazy ST to return the solutions on\n' Text
' demand, which was more useful when trying to generate new puzzles to\n' Text
' solve.\n' Text
'\n' Text
'> ' Comment.Special
'module' Keyword.Reserved
' ' Text.Whitespace
'Main' Name.Namespace
' ' Text.Whitespace
'where' Keyword.Reserved
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Prelude' Name.Namespace
' ' Text.Whitespace
'hiding' Keyword
' ' Text.Whitespace
'(' Punctuation
'read' Name.Function
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Control.Monad' Name.Namespace
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Control.Monad.Fix' Name.Namespace
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Data.Array.IArray' Name.Namespace
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Control.Monad.ST.Strict' Name.Namespace
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Data.STRef.Strict' Name.Namespace
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Data.Char' Name.Namespace
'(' Punctuation
'intToDigit' Name
',' Punctuation
'digitToInt' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'import' Keyword.Reserved
' ' Text.Whitespace
'Data.List' Name.Namespace
'(' Punctuation
'unfoldr' Name
',' Punctuation
'intersperse' Name
',' Punctuation
'inits' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'new' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'newSTRef' Name
'\n' Text.Whitespace
'> ' Comment.Special
'{-' Comment.Multiline
'# INLINE new #' Comment.Multiline
'-}' Comment.Multiline
'\n' Text.Whitespace
'> ' Comment.Special
'read' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'readSTRef' Name
'\n' Text.Whitespace
'> ' Comment.Special
'{-' Comment.Multiline
'# INLINE read #' Comment.Multiline
'-}' Comment.Multiline
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'writeSTRef' Name
'\n' Text.Whitespace
'> ' Comment.Special
'{-' Comment.Multiline
'# INLINE write #' Comment.Multiline
'-}' Comment.Multiline
'\n' Text.Whitespace
'> ' Comment.Special
'modify' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'modifySTRef' Name
'\n' Text.Whitespace
'> ' Comment.Special
'{-' Comment.Multiline
'# INLINE modify #' Comment.Multiline
'-}' Comment.Multiline
'\n' Text.Whitespace
'\n' Text
' Data types to prevent mixing different index and value types\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'A' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Int' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'newtype' Keyword.Reserved
' ' Text.Whitespace
'R' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'R' Keyword.Type
' ' Text.Whitespace
'A' Keyword.Type
' ' Text.Whitespace
'deriving' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'Show' Keyword.Type
',' Punctuation
'Read' Keyword.Type
',' Punctuation
'Eq' Keyword.Type
',' Punctuation
'Ord' Keyword.Type
',' Punctuation
'Ix' Keyword.Type
',' Punctuation
'Enum' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'newtype' Keyword.Reserved
' ' Text.Whitespace
'C' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'C' Keyword.Type
' ' Text.Whitespace
'A' Keyword.Type
' ' Text.Whitespace
'deriving' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'Show' Keyword.Type
',' Punctuation
'Read' Keyword.Type
',' Punctuation
'Eq' Keyword.Type
',' Punctuation
'Ord' Keyword.Type
',' Punctuation
'Ix' Keyword.Type
',' Punctuation
'Enum' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'newtype' Keyword.Reserved
' ' Text.Whitespace
'V' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'V' Keyword.Type
' ' Text.Whitespace
'A' Keyword.Type
' ' Text.Whitespace
'deriving' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'Show' Keyword.Type
',' Punctuation
'Read' Keyword.Type
',' Punctuation
'Eq' Keyword.Type
',' Punctuation
'Ord' Keyword.Type
',' Punctuation
'Ix' Keyword.Type
',' Punctuation
'Enum' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'newtype' Keyword.Reserved
' ' Text.Whitespace
'B' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'B' Keyword.Type
' ' Text.Whitespace
'A' Keyword.Type
' ' Text.Whitespace
'deriving' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'Show' Keyword.Type
',' Punctuation
'Read' Keyword.Type
',' Punctuation
'Eq' Keyword.Type
',' Punctuation
'Ord' Keyword.Type
',' Punctuation
'Ix' Keyword.Type
',' Punctuation
'Enum' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' Sudoku also has block constraints, so we want to look up a block\n' Text
' index in an array:\n' Text
'\n' Text
'> ' Comment.Special
'lookupBlock' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Array' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'R' Keyword.Type
',' Punctuation
'C' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'B' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'lookupBlock' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'listArray' Name
' ' Text.Whitespace
'bb' Name
' ' Text.Whitespace
'[' Punctuation
' ' Text.Whitespace
'toBlock' Name
' ' Text.Whitespace
'ij' Name
' ' Text.Whitespace
'|' Operator
' ' Text.Whitespace
'ij' Name
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'range' Name
' ' Text.Whitespace
'bb' Name
' ' Text.Whitespace
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'ra' Name
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Array' Keyword.Type
' ' Text.Whitespace
'Int' Keyword.Type
' ' Text.Whitespace
'B' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'ra' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'listArray' Name
' ' Text.Whitespace
'(' Punctuation
'0' Literal.Number.Integer
',' Punctuation
'pred' Name
' ' Text.Whitespace
'(' Punctuation
'rangeSize' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
')' Punctuation
' ' Text.Whitespace
'[' Punctuation
'B' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'fst' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
' ' Text.Whitespace
'..' Operator
' ' Text.Whitespace
'B' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'snd' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'toBlock' Name.Function
' ' Text.Whitespace
'(' Punctuation
'R' Keyword.Type
' ' Text.Whitespace
'i' Name
',' Punctuation
'C' Keyword.Type
' ' Text.Whitespace
'j' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'ra' Name
' ' Text.Whitespace
'!' Operator
' ' Text.Whitespace
'(' Punctuation
' ' Text.Whitespace
'(' Punctuation
'div' Name
' ' Text.Whitespace
'(' Punctuation
'index' Name
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'j' Name
')' Punctuation
' ' Text.Whitespace
'3' Literal.Number.Integer
')' Punctuation
'+' Operator
'3' Literal.Number.Integer
'*' Operator
'(' Punctuation
'div' Name
' ' Text.Whitespace
'(' Punctuation
'index' Name
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'i' Name
')' Punctuation
' ' Text.Whitespace
'3' Literal.Number.Integer
')' Punctuation
' ' Text.Whitespace
')' Punctuation
'\n' Text.Whitespace
'\n' Text
" The values for an unknown location is 'u'.\n" Text
' The bound and range are given by b and rng. And bb is a 2D bound.\n' Text
'\n' Text
'> ' Comment.Special
'u' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'V' Keyword.Type
' ' Text.Whitespace
'0' Literal.Number.Integer
' ' Text.Whitespace
'-- unknown value' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'b' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Int' Keyword.Type
',' Punctuation
'Int' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'b' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'1' Literal.Number.Integer
',' Punctuation
'9' Literal.Number.Integer
')' Punctuation
' ' Text.Whitespace
'-- min and max bounds' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'rng' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'enumFromTo' Name
' ' Text.Whitespace
'(' Punctuation
'fst' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'snd' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
' ' Text.Whitespace
"-- list from '1' to '9'" Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'bb' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'(' Punctuation
'R' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'fst' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
',' Punctuation
'C' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'fst' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
')' Punctuation
',' Punctuation
'(' Punctuation
'R' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'snd' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
',' Punctuation
'C' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'snd' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' A Spec can be turned into a parsed array with ease:\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'Hint' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'(' Punctuation
'R' Keyword.Type
',' Punctuation
'C' Keyword.Type
')' Punctuation
',' Punctuation
'V' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'newtype' Keyword.Reserved
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'[' Punctuation
'Hint' Keyword.Type
']' Punctuation
' ' Text.Whitespace
'deriving' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'Eq' Keyword.Type
',' Punctuation
'Show' Keyword.Type
')' Punctuation
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'PA' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Array' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'R' Keyword.Type
',' Punctuation
'C' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'V' Keyword.Type
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'parse' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'PA' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'parse' Name.Function
' ' Text.Whitespace
'(' Punctuation
'Spec' Keyword.Type
' ' Text.Whitespace
'parsed' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'let' Keyword.Reserved
' ' Text.Whitespace
'acc' Name
' ' Text.Whitespace
'old' Name
' ' Text.Whitespace
'new' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'new' Name
'\n' Text.Whitespace
'> ' Comment.Special
'in' Keyword.Reserved
' ' Text.Whitespace
'accumArray' Name
' ' Text.Whitespace
'acc' Name
' ' Text.Whitespace
'u' Name
' ' Text.Whitespace
'bb' Name
' ' Text.Whitespace
'parsed' Name
'\n' Text.Whitespace
'\n' Text
' The dancing links algorithm depends on a sparse 2D node structure.\n' Text
' Each column represents a constraint. Each row represents a Hint.\n' Text
' The number of possible hints is 9x9x9 = 271\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'MutInt' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'Int' Keyword.Type
'\n' Text.Whitespace
'\n' Text
' The pointer types:\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'NodePtr' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'HeadPtr' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
" The structures is a 2D grid of nodes, with Col's on the top of\n" Text
' columns and a sparse collection of nodes. Note that topNode of Head\n' Text
' is not a strict field. This is because the topNode needs to refer to\n' Text
' the Head, and they are both created monadically.\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'HeadName' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Int' Keyword.Type
',' Punctuation
'Int' Keyword.Type
',' Punctuation
'Int' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'-- see below for meaning' Comment.Single
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'data' Keyword.Reserved
' ' Text.Whitespace
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Head' Keyword.Type
' ' Text.Whitespace
'{' Punctuation
'headName' Name
'::' Operator.Word
' ' Text.Whitespace
'!' Operator
'HeadName' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
',' Punctuation
'topNode' Name
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'-- header node for this column' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
',' Punctuation
'len' Name
'::' Operator.Word
' ' Text.Whitespace
'!' Operator
'(' Punctuation
'MutInt' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'-- number of nodes below this head' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
',' Punctuation
'next' Name
',' Punctuation
'prev' Name
'::' Operator.Word
' ' Text.Whitespace
'!' Operator
'(' Punctuation
'HeadPtr' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'-- doubly-linked list' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'}' Punctuation
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'data' Keyword.Reserved
' ' Text.Whitespace
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Node' Keyword.Type
' ' Text.Whitespace
'{' Punctuation
'getHint' Name
'::' Operator.Word
' ' Text.Whitespace
'!' Operator
'Hint' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
',' Punctuation
'getHead' Name
'::' Operator.Word
' ' Text.Whitespace
'!' Operator
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'-- head for the column this node is in' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
',' Punctuation
'up' Name
',' Punctuation
'down' Name
',' Punctuation
'left' Name
',' Punctuation
'right' Name
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'!' Operator
'(' Punctuation
'NodePtr' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'-- two doubly-linked lists' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'}' Punctuation
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'instance' Keyword.Reserved
' ' Text.Whitespace
'Eq' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'where' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'a' Name.Function
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'headName' Name
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'headName' Name
' ' Text.Whitespace
'b' Name
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'instance' Keyword.Reserved
' ' Text.Whitespace
'Eq' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'where' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'a' Name.Function
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'up' Name
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'up' Name
' ' Text.Whitespace
'b' Name
'\n' Text.Whitespace
'\n' Text
" To initialize the structures is a bit tedious. Knuth's code reads in\n" Text
' the problem description from a data file and builds the structure\n' Text
' based on that. Rather than short strings, I will use HeadName as the\n' Text
' identifier.\n' Text
' \n' Text
' The columns are (0,4,5) for nodes that put some value in Row 4 Col 5\n' Text
' (1,2,3) for nodes that put Val 3 in Row 2 and some column\n' Text
' (2,7,4) for nodes that put Val 4 in Col 7 and some row\n' Text
' (3,1,8) for nodes that put Val 8 in some (row,column) in Block 1\n' Text
'\n' Text
' The first head is (0,0,0) which is the root. The non-root head data\n' Text
' will be put in an array with the HeadName as an index.\n' Text
'\n' Text
'> ' Comment.Special
'headNames' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'HeadName' Keyword.Type
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'headNames' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'let' Keyword.Reserved
' ' Text.Whitespace
'names' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'0' Literal.Number.Integer
',' Punctuation
'1' Literal.Number.Integer
',' Punctuation
'2' Literal.Number.Integer
',' Punctuation
'3' Literal.Number.Integer
']' Punctuation
' \n' Text.Whitespace
'> ' Comment.Special
'in' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'0' Literal.Number.Integer
',' Punctuation
'0' Literal.Number.Integer
',' Punctuation
'0' Literal.Number.Integer
')' Punctuation
':' Keyword.Type
'[' Punctuation
' ' Text.Whitespace
'(' Punctuation
'l' Name
',' Punctuation
'i' Name
',' Punctuation
'j' Name
')' Punctuation
' ' Text.Whitespace
'|' Operator
' ' Text.Whitespace
'l' Name
'<-' Operator.Word
'names' Name
',' Punctuation
'i' Name
'<-' Operator.Word
'rng' Name
',' Punctuation
'j' Name
'<-' Operator.Word
'rng' Name
']' Punctuation
'\n' Text.Whitespace
'\n' Text
' A "row" of left-right linked nodes is a move. It is defined by a\n' Text
' list of head names.\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'Move' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'(' Punctuation
'Hint' Keyword.Type
',' Punctuation
'HeadName' Keyword.Type
')' Punctuation
']' Punctuation
'\n' Text.Whitespace
'\n' Text
' Initial hints are enforced by making them the only legal move for\n' Text
" that location. Blank entries with value 'u = V 0' have a move for\n" Text
' all possible values [V 1..V 9].\n' Text
'\n' Text
'> ' Comment.Special
'parseSpec' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'Move' Keyword.Type
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'parseSpec' Name.Function
' ' Text.Whitespace
'spec' Name
' ' Text.Whitespace
'=' Operator.Word
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'rowsFrom' Name
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Hint' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'Move' Keyword.Type
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'rowsFrom' Name.Function
' ' Text.Whitespace
'(' Punctuation
'rc' Name
'@' Operator
'(' Punctuation
'R' Keyword.Type
' ' Text.Whitespace
'r' Name
',' Punctuation
'C' Keyword.Type
' ' Text.Whitespace
'c' Name
')' Punctuation
',' Punctuation
'mv' Name
'@' Operator
'(' Punctuation
'V' Keyword.Type
' ' Text.Whitespace
"v'" Name
')' Punctuation
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' \n' Text.Whitespace
'> ' Comment.Special
'if' Keyword.Reserved
' ' Text.Whitespace
'mv' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'u' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'[' Punctuation
' ' Text.Whitespace
'rsyms' Name
' ' Text.Whitespace
'v' Name
' ' Text.Whitespace
'|' Operator
' ' Text.Whitespace
'v' Name
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'rng' Name
' ' Text.Whitespace
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'[' Punctuation
' ' Text.Whitespace
'rsyms' Name
' ' Text.Whitespace
"v'" Name
' ' Text.Whitespace
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'B' Keyword.Type
' ' Text.Whitespace
'b' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'lookupBlock' Name
' ' Text.Whitespace
'!' Operator
' ' Text.Whitespace
'rc' Name
'\n' Text.Whitespace
'> ' Comment.Special
'rsyms' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'A' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'Move' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'rsyms' Name.Function
' ' Text.Whitespace
'v' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'map' Name
' ' Text.Whitespace
'(' Punctuation
' ' Text.Whitespace
'(' Punctuation
',' Punctuation
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'rc' Name
',' Punctuation
'V' Keyword.Type
' ' Text.Whitespace
'v' Name
')' Punctuation
' ' Text.Whitespace
')' Punctuation
' ' Text.Whitespace
'[' Punctuation
'(' Punctuation
'0' Literal.Number.Integer
',' Punctuation
'r' Name
',' Punctuation
'c' Name
')' Punctuation
',' Punctuation
'(' Punctuation
'1' Literal.Number.Integer
',' Punctuation
'r' Name
',' Punctuation
'v' Name
')' Punctuation
',' Punctuation
'(' Punctuation
'2' Literal.Number.Integer
',' Punctuation
'c' Name
',' Punctuation
'v' Name
')' Punctuation
',' Punctuation
'(' Punctuation
'3' Literal.Number.Integer
',' Punctuation
'b' Name
',' Punctuation
'v' Name
')' Punctuation
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'in' Keyword.Reserved
' ' Text.Whitespace
'concatMap' Name
' ' Text.Whitespace
'rowsFrom' Name
' ' Text.Whitespace
'(' Punctuation
'assocs' Name
' ' Text.Whitespace
'(' Punctuation
'parse' Name
' ' Text.Whitespace
'spec' Name
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' mkDList creates doubly linked lists using a monadic smart\n' Text
' constructor and the recursive "mdo" notation as documented at\n' Text
' http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#mdo-notation\n' Text
' http://www.cse.ogi.edu/PacSoft/projects/rmb/\n' Text
'\n' Text
' For more fun with this, see the wiki page at\n' Text
' http://haskell.org/hawiki/TyingTheKnot\n' Text
'\n' Text
'> ' Comment.Special
'mkDList' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'MonadFix' Keyword.Type
' ' Text.Whitespace
'm' Name
')' Punctuation
' ' Text.Whitespace
'=>' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'b' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'm' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'a' Name
']' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'm' Name
' ' Text.Whitespace
'b' Name
'\n' Text.Whitespace
'> ' Comment.Special
'mkDList' Name.Function
' ' Text.Whitespace
'_' Keyword.Reserved
' ' Text.Whitespace
'[]' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'error' Name.Exception
' ' Text.Whitespace
'"' Literal.String
'must have at least one element' Literal.String
'"' Literal.String
'\n' Text.Whitespace
'> ' Comment.Special
'mkDList' Name.Function
' ' Text.Whitespace
'mkNode' Name
' ' Text.Whitespace
'xs' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'mdo' Name
' ' Text.Whitespace
'(' Punctuation
'first' Name
',' Punctuation
'last' Name
')' Punctuation
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'go' Name
' ' Text.Whitespace
'last' Name
' ' Text.Whitespace
'xs' Name
' ' Text.Whitespace
'first' Name
'\n' Text.Whitespace
'> ' Comment.Special
'return' Name.Function
' ' Text.Whitespace
'first' Name
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'go' Name
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'[]' Keyword.Type
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'return' Name
' ' Text.Whitespace
'(' Punctuation
'next' Name
',' Punctuation
'prev' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'go' Name.Function
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'(' Punctuation
'x' Name
':' Keyword.Type
'xs' Name
')' Punctuation
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'mdo' Name
' ' Text.Whitespace
'this' Name
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'mkNode' Name
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'x' Name
' ' Text.Whitespace
'rest' Name
'\n' Text.Whitespace
'> ' Comment.Special
'(' Punctuation
'rest' Name
',' Punctuation
'last' Name
')' Punctuation
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'go' Name
' ' Text.Whitespace
'this' Name
' ' Text.Whitespace
'xs' Name
' ' Text.Whitespace
'next' Name
'\n' Text.Whitespace
'> ' Comment.Special
'return' Name.Function
' ' Text.Whitespace
'(' Punctuation
'this' Name
',' Punctuation
'last' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' toSimple takes a function and a header node and iterates (read . function)\n' Text
' until the header is reached again, but does not return the header\n' Text
' itself.\n' Text
'\n' Text
'> ' Comment.Special
'toSingle' Name.Function
' ' Text.Whitespace
'step' Name
' ' Text.Whitespace
'header' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'loop' Name
' ' Text.Whitespace
'=<<' Operator
' ' Text.Whitespace
'(' Punctuation
'read' Name
' ' Text.Whitespace
'.' Operator
' ' Text.Whitespace
'step' Name
')' Punctuation
' ' Text.Whitespace
'header' Name
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'loop' Name
' ' Text.Whitespace
'y' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'header' Name
'/=' Operator
'y' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'liftM' Name
' ' Text.Whitespace
'(' Punctuation
'y' Name
':' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'read' Name
' ' Text.Whitespace
'(' Punctuation
'step' Name
' ' Text.Whitespace
'y' Name
')' Punctuation
' ' Text.Whitespace
'>>=' Operator
' ' Text.Whitespace
'loop' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'return' Name
' ' Text.Whitespace
'[]' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'\n' Text.Whitespace
'\n' Text
' forEach is an optimization of (toSimple step header >>= mapM_ act)\n' Text
'\n' Text
'> ' Comment.Special
'forEach' Name.Function
' ' Text.Whitespace
'step' Name
' ' Text.Whitespace
'header' Name
' ' Text.Whitespace
'act' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'loop' Name
' ' Text.Whitespace
'=<<' Operator
' ' Text.Whitespace
'(' Punctuation
'read' Name
' ' Text.Whitespace
'.' Operator
' ' Text.Whitespace
'step' Name
')' Punctuation
' ' Text.Whitespace
'header' Name
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'loop' Name
' ' Text.Whitespace
'y' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'header' Name
'/=' Operator
'y' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'act' Name
' ' Text.Whitespace
'y' Name
' ' Text.Whitespace
'>>' Operator
' ' Text.Whitespace
'(' Punctuation
'read' Name
' ' Text.Whitespace
'(' Punctuation
'step' Name
' ' Text.Whitespace
'y' Name
')' Punctuation
')' Punctuation
' ' Text.Whitespace
'>>=' Operator
' ' Text.Whitespace
'loop' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'return' Name
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'\n' Text
' Now make the root node and all the head nodes. This also exploits mdo:\n' Text
'\n' Text
'> ' Comment.Special
'makeHeads' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'HeadName' Keyword.Type
']' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'makeHeads' Name.Function
' ' Text.Whitespace
'names' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'mkDList' Name
' ' Text.Whitespace
'makeHead' Name
' ' Text.Whitespace
'names' Name
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'makeHead' Name
' ' Text.Whitespace
'before' Name
' ' Text.Whitespace
'name' Name
' ' Text.Whitespace
'after' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'mdo' Name
'\n' Text.Whitespace
'> ' Comment.Special
'~' Operator
'newTopNode' Name
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'liftM4' Name
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'(' Punctuation
'R' Keyword.Type
' ' Text.Whitespace
'0' Literal.Number.Integer
',' Punctuation
'C' Keyword.Type
' ' Text.Whitespace
'0' Literal.Number.Integer
')' Punctuation
',' Punctuation
'V' Keyword.Type
' ' Text.Whitespace
'0' Literal.Number.Integer
')' Punctuation
' ' Text.Whitespace
'newHead' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'newTopNode' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'newTopNode' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'(' Punctuation
'new' Name
' ' Text.Whitespace
'newTopNode' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'newTopNode' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'newHead' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'liftM3' Name
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'name' Name
' ' Text.Whitespace
'newTopNode' Name
')' Punctuation
' \n' Text.Whitespace
'> ' Comment.Special
'(' Punctuation
'new' Name
' ' Text.Whitespace
'0' Literal.Number.Integer
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'after' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'before' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'return' Name.Function
' ' Text.Whitespace
'newHead' Name
'\n' Text.Whitespace
'\n' Text
' The Head nodes will be places in an array for easy lookup while building moves:\n' Text
'\n' Text
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'HArray' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Array' Keyword.Type
' ' Text.Whitespace
'HeadName' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'hBounds' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'(' Punctuation
'0' Literal.Number.Integer
',' Punctuation
'1' Literal.Number.Integer
',' Punctuation
'1' Literal.Number.Integer
')' Punctuation
',' Punctuation
'(' Punctuation
'3' Literal.Number.Integer
',' Punctuation
'9' Literal.Number.Integer
',' Punctuation
'9' Literal.Number.Integer
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'type' Keyword.Reserved
' ' Text.Whitespace
'Root' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
',' Punctuation
'HArray' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' The addMove function creates the (four) nodes that represent a move and adds\n' Text
' them to the data structure. The HArray in Root makes for a fast\n' Text
' lookup of the Head data.\n' Text
'\n' Text
'> ' Comment.Special
'addMove' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'forall' Name
' ' Text.Whitespace
'st' Name
'.' Operator
' ' Text.Whitespace
'(' Punctuation
'Root' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'Move' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'addMove' Name.Function
' ' Text.Whitespace
'(' Punctuation
'_' Keyword.Reserved
',' Punctuation
'ha' Name
')' Punctuation
' ' Text.Whitespace
'move' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'mkDList' Name
' ' Text.Whitespace
'addNode' Name
' ' Text.Whitespace
'move' Name
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'addNode' Name
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Hint' Keyword.Type
',' Punctuation
'HeadName' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'addNode' Name.Function
' ' Text.Whitespace
'before' Name
' ' Text.Whitespace
'(' Punctuation
'hint' Name
',' Punctuation
'name' Name
')' Punctuation
' ' Text.Whitespace
'after' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'ha' Name
' ' Text.Whitespace
'!' Operator
' ' Text.Whitespace
'name' Name
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'below' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'topNode' Name
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'> ' Comment.Special
'above' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'up' Name
' ' Text.Whitespace
'below' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'newNode' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'liftM4' Name
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'hint' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'above' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'below' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'(' Punctuation
'new' Name
' ' Text.Whitespace
'before' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'new' Name
' ' Text.Whitespace
'after' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'down' Name
' ' Text.Whitespace
'above' Name
')' Punctuation
' ' Text.Whitespace
'newNode' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'up' Name
' ' Text.Whitespace
'below' Name
')' Punctuation
' ' Text.Whitespace
'newNode' Name
'\n' Text.Whitespace
'> ' Comment.Special
'modify' Name.Function
' ' Text.Whitespace
'(' Punctuation
'len' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'succ' Name
'\n' Text.Whitespace
'> ' Comment.Special
'l' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'len' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'seq' Name.Function
' ' Text.Whitespace
'l' Name
' ' Text.Whitespace
'(' Punctuation
'return' Name
' ' Text.Whitespace
'newNode' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' Create the column headers, including the fast lookup array. These\n' Text
' will be resused between puzzles.\n' Text
'\n' Text
'> ' Comment.Special
'initHA' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Root' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'initHA' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'root' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'makeHeads' Name
' ' Text.Whitespace
'headNames' Name
'\n' Text.Whitespace
'> ' Comment.Special
'heads' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'toSingle' Name
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'root' Name
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'ha' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'array' Name
' ' Text.Whitespace
'hBounds' Name
' ' Text.Whitespace
'(' Punctuation
'zip' Name
' ' Text.Whitespace
'(' Punctuation
'map' Name
' ' Text.Whitespace
'headName' Name
' ' Text.Whitespace
'heads' Name
')' Punctuation
' ' Text.Whitespace
'heads' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'return' Name.Function
' ' Text.Whitespace
'(' Punctuation
'root' Name
',' Punctuation
'ha' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' Take the Root from initHA and a puzzle Spec and fill in all the Nodes.\n' Text
'\n' Text
'> ' Comment.Special
'initRoot' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Root' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'initRoot' Name.Function
' ' Text.Whitespace
'root' Name
' ' Text.Whitespace
'spec' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'moves' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'parseSpec' Name
' ' Text.Whitespace
'spec' Name
'\n' Text.Whitespace
'> ' Comment.Special
'mapM_' Name.Function
' ' Text.Whitespace
'(' Punctuation
'addMove' Name
' ' Text.Whitespace
'root' Name
')' Punctuation
' ' Text.Whitespace
'moves' Name
'\n' Text.Whitespace
'\n' Text
' Return the column headers to their condition after initHA\n' Text
'\n' Text
'> ' Comment.Special
'resetRoot' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Root' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'resetRoot' Name.Function
' ' Text.Whitespace
'(' Punctuation
'root' Name
',' Punctuation
'ha' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'heads' Name
'@' Operator
'(' Punctuation
'first' Name
':' Keyword.Type
'_' Keyword.Reserved
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'elems' Name
' ' Text.Whitespace
'ha' Name
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'resetHead' Name
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'len' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'0' Literal.Number.Integer
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'node' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'topNode' Name
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'down' Name
' ' Text.Whitespace
'node' Name
')' Punctuation
' ' Text.Whitespace
'node' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'up' Name
' ' Text.Whitespace
'node' Name
')' Punctuation
' ' Text.Whitespace
'node' Name
'\n' Text.Whitespace
'> ' Comment.Special
'reset' Name.Function
' ' Text.Whitespace
'(' Punctuation
'last' Name
':' Keyword.Type
'[]' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'root' Name
')' Punctuation
' ' Text.Whitespace
'last' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'root' Name
')' Punctuation
' ' Text.Whitespace
'first' Name
'\n' Text.Whitespace
'> ' Comment.Special
'reset' Name.Function
' ' Text.Whitespace
'(' Punctuation
'before' Name
':' Keyword.Type
'xs' Name
'@' Operator
'(' Punctuation
'head' Name
':' Keyword.Type
'[]' Keyword.Type
')' Punctuation
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'resetHead' Name.Function
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'before' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'root' Name
'\n' Text.Whitespace
'> ' Comment.Special
'reset' Name.Function
' ' Text.Whitespace
'xs' Name
'\n' Text.Whitespace
'> ' Comment.Special
'reset' Name.Function
' ' Text.Whitespace
'(' Punctuation
'before' Name
':' Keyword.Type
'xs' Name
'@' Operator
'(' Punctuation
'head' Name
':' Keyword.Type
'after' Name
':' Keyword.Type
'_' Keyword.Reserved
')' Punctuation
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'resetHead' Name.Function
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'before' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'after' Name
'\n' Text.Whitespace
'> ' Comment.Special
'reset' Name.Function
' ' Text.Whitespace
'xs' Name
'\n' Text.Whitespace
'> ' Comment.Special
'reset' Name.Function
' ' Text.Whitespace
'(' Punctuation
'root' Name
':' Keyword.Type
'heads' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' getBest iterates over the unmet constraints (i.e. the Head that are\n' Text
' reachable from root). It locates the one with the lowest number of\n' Text
' possible moves that will solve it, aborting early if it finds 0 or 1\n' Text
' moves.\n' Text
'\n' Text
'> ' Comment.Special
'getBest' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'Maybe' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'getBest' Name.Function
' ' Text.Whitespace
'root' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'first' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'root' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'if' Keyword.Reserved
' ' Text.Whitespace
'first' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'root' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'return' Name
' ' Text.Whitespace
'Nothing' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'findMin' Name
' ' Text.Whitespace
'm' Name
' ' Text.Whitespace
'best' Name
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'|' Operator
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'root' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'return' Name
' ' Text.Whitespace
'(' Punctuation
'Just' Keyword.Type
' ' Text.Whitespace
'best' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'|' Operator
' ' Text.Whitespace
'otherwise' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'l' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'len' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'if' Keyword.Reserved
' ' Text.Whitespace
'l' Name
' ' Text.Whitespace
'<=' Operator
' ' Text.Whitespace
'1' Literal.Number.Integer
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'return' Name
' ' Text.Whitespace
'(' Punctuation
'Just' Keyword.Type
' ' Text.Whitespace
'head' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'l' Name
' ' Text.Whitespace
'<' Operator
' ' Text.Whitespace
'm' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'findMin' Name
' ' Text.Whitespace
'l' Name
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'=<<' Operator
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'findMin' Name
' ' Text.Whitespace
'l' Name
' ' Text.Whitespace
'best' Name
' ' Text.Whitespace
'=<<' Operator
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'findMin' Name.Function
' ' Text.Whitespace
'10' Literal.Number.Integer
' ' Text.Whitespace
'first' Name
' ' Text.Whitespace
'first' Name
'\n' Text.Whitespace
'\n' Text
' The unlink and relink operations are from where Knuth got the name\n' Text
' "dancing links". So long as "a" does not change in between, the\n' Text
' relink call will undo the unlink call. Similarly, the unconver will\n' Text
' undo the changes of cover and unconverOthers will undo coverOthers.\n' Text
'\n' Text
'> ' Comment.Special
'unlink' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'a' Name
'->' Operator.Word
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'a' Name
'->' Operator.Word
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'unlink' Name.Function
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'before' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'after' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'before' Name
')' Punctuation
' ' Text.Whitespace
'after' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'after' Name
')' Punctuation
' ' Text.Whitespace
'before' Name
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'relink' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'a' Name
'->' Operator.Word
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'a' Name
'->' Operator.Word
'STRef' Keyword.Type
' ' Text.Whitespace
'st' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'relink' Name.Function
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'before' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'after' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'read' Name
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'a' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'next' Name
' ' Text.Whitespace
'before' Name
')' Punctuation
' ' Text.Whitespace
'a' Name
'\n' Text.Whitespace
'> ' Comment.Special
'write' Name.Function
' ' Text.Whitespace
'(' Punctuation
'prev' Name
' ' Text.Whitespace
'after' Name
')' Punctuation
' ' Text.Whitespace
'a' Name
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'cover' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'cover' Name.Function
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'unlink' Name.Function
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'eachDown' Name
' ' Text.Whitespace
'rr' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'forEach' Name
' ' Text.Whitespace
'right' Name
' ' Text.Whitespace
'rr' Name
' ' Text.Whitespace
'eachRight' Name
'\n' Text.Whitespace
'> ' Comment.Special
'eachRight' Name.Function
' ' Text.Whitespace
'nn' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'unlink' Name.Function
' ' Text.Whitespace
'up' Name
' ' Text.Whitespace
'down' Name
' ' Text.Whitespace
'nn' Name
'\n' Text.Whitespace
'> ' Comment.Special
'modify' Name.Function
' ' Text.Whitespace
'(' Punctuation
'len' Name
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'getHead' Name
' ' Text.Whitespace
'nn' Name
')' Punctuation
' ' Text.Whitespace
'pred' Name
'\n' Text.Whitespace
'> ' Comment.Special
'forEach' Name.Function
' ' Text.Whitespace
'down' Name
' ' Text.Whitespace
'(' Punctuation
'topNode' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'eachDown' Name
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'uncover' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'uncover' Name.Function
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'eachUp' Name
' ' Text.Whitespace
'rr' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'forEach' Name
' ' Text.Whitespace
'left' Name
' ' Text.Whitespace
'rr' Name
' ' Text.Whitespace
'eachLeft' Name
'\n' Text.Whitespace
'> ' Comment.Special
'eachLeft' Name.Function
' ' Text.Whitespace
'nn' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'modify' Name.Function
' ' Text.Whitespace
'(' Punctuation
'len' Name
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'getHead' Name
' ' Text.Whitespace
'nn' Name
')' Punctuation
' ' Text.Whitespace
'succ' Name
'\n' Text.Whitespace
'> ' Comment.Special
'relink' Name.Function
' ' Text.Whitespace
'up' Name
' ' Text.Whitespace
'down' Name
' ' Text.Whitespace
'nn' Name
'\n' Text.Whitespace
'> ' Comment.Special
'forEach' Name.Function
' ' Text.Whitespace
'up' Name
' ' Text.Whitespace
'(' Punctuation
'topNode' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
' ' Text.Whitespace
'eachUp' Name
'\n' Text.Whitespace
'> ' Comment.Special
'relink' Name.Function
' ' Text.Whitespace
'prev' Name
' ' Text.Whitespace
'next' Name
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'coverOthers' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'coverOthers' Name.Function
' ' Text.Whitespace
'node' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'forEach' Name
' ' Text.Whitespace
'right' Name
' ' Text.Whitespace
'node' Name
' ' Text.Whitespace
'(' Punctuation
'cover' Name
' ' Text.Whitespace
'.' Operator
' ' Text.Whitespace
'getHead' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
'uncoverOthers' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'uncoverOthers' Name.Function
' ' Text.Whitespace
'node' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'forEach' Name
' ' Text.Whitespace
'left' Name
' ' Text.Whitespace
'node' Name
' ' Text.Whitespace
'(' Punctuation
'uncover' Name
' ' Text.Whitespace
'.' Operator
' ' Text.Whitespace
'getHead' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' A helper function for gdance:\n' Text
'\n' Text
'> ' Comment.Special
'choicesToSpec' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'(' Punctuation
'Node' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
']' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'choicesToSpec' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'.' Operator
' ' Text.Whitespace
'(' Punctuation
'map' Name
' ' Text.Whitespace
'getHint' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' This is the heart of the algorithm. I have altered it to return only\n' Text
' the first solution, or produce an error if none is found.\n' Text
'\n' Text
' Knuth used several goto links to do what is done below with tail\n' Text
' recursion.\n' Text
'\n' Text
'> ' Comment.Special
'gdance' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Head' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'ST' Keyword.Type
' ' Text.Whitespace
'st' Name
')' Punctuation
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'-- [Spec]' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'gdance' Name.Function
' ' Text.Whitespace
'root' Name
' ' Text.Whitespace
'=' Operator.Word
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'forward' Name.Function
' ' Text.Whitespace
'choices' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'maybeHead' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'getBest' Name
' ' Text.Whitespace
'root' Name
'\n' Text.Whitespace
'> ' Comment.Special
'case' Keyword.Reserved
' ' Text.Whitespace
'maybeHead' Name
' ' Text.Whitespace
'of' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'Nothing' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'null' Name
' ' Text.Whitespace
'choices' Name
'\n' Text.Whitespace
'> ' Comment.Special
'then' Keyword.Reserved
' ' Text.Whitespace
'error' Name.Exception
' ' Text.Whitespace
'"' Literal.String
'No choices in forward' Literal.String
'"' Literal.String
' ' Text.Whitespace
'-- return [] -- for [Spec]' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'do' Keyword.Reserved
' ' Text.Whitespace
'-- nextSols <- recover choices -- for [Spec]' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'return' Name.Function
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'(' Punctuation
'choicesToSpec' Name
' ' Text.Whitespace
'choices' Name
')' Punctuation
' ' Text.Whitespace
'-- :nextSols -- for [Spec]' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'Just' Keyword.Type
' ' Text.Whitespace
'head' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
' ' Text.Whitespace
'cover' Name
' ' Text.Whitespace
'head' Name
'\n' Text.Whitespace
'> ' Comment.Special
'startRow' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'readSTRef' Name
' ' Text.Whitespace
'(' Punctuation
'down' Name
' ' Text.Whitespace
'(' Punctuation
'topNode' Name
' ' Text.Whitespace
'head' Name
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'advance' Name.Function
' ' Text.Whitespace
'(' Punctuation
'startRow' Name
':' Keyword.Type
'choices' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'\n' Text.Whitespace
'> ' Comment.Special
'advance' Name.Function
' ' Text.Whitespace
'choices' Name
'@' Operator
'(' Punctuation
'newRow' Name
':' Keyword.Type
'oldChoices' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'endOfRows' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'topNode' Name
' ' Text.Whitespace
'(' Punctuation
'getHead' Name
' ' Text.Whitespace
'newRow' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'if' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'newRow' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'endOfRows' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'then' Keyword.Reserved
' ' Text.Whitespace
'do' Keyword.Reserved
' ' Text.Whitespace
'uncover' Name
' ' Text.Whitespace
'(' Punctuation
'getHead' Name
' ' Text.Whitespace
'newRow' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'if' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'null' Name
' ' Text.Whitespace
'oldChoices' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'then' Keyword.Reserved
' ' Text.Whitespace
'error' Name.Exception
' ' Text.Whitespace
'"' Literal.String
'No choices in advance' Literal.String
'"' Literal.String
' ' Text.Whitespace
'-- return [] -- for [Spec]' Comment.Single
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'recover' Name
' ' Text.Whitespace
'oldChoices' Name
'\n' Text.Whitespace
'> ' Comment.Special
'else' Keyword.Reserved
' ' Text.Whitespace
'do' Keyword.Reserved
' ' Text.Whitespace
'coverOthers' Name
' ' Text.Whitespace
'newRow' Name
'\n' Text.Whitespace
'> ' Comment.Special
'forward' Name.Function
' ' Text.Whitespace
'choices' Name
'\n' Text.Whitespace
'> ' Comment.Special
'\n' Text.Whitespace
'> ' Comment.Special
'recover' Name.Function
' ' Text.Whitespace
'(' Punctuation
'oldRow' Name
':' Keyword.Type
'oldChoices' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'uncoverOthers' Name.Function
' ' Text.Whitespace
'oldRow' Name
'\n' Text.Whitespace
'> ' Comment.Special
'newRow' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'readSTRef' Name
' ' Text.Whitespace
'(' Punctuation
'down' Name
' ' Text.Whitespace
'oldRow' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'advance' Name.Function
' ' Text.Whitespace
'(' Punctuation
'newRow' Name
':' Keyword.Type
'oldChoices' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'\n' Text.Whitespace
'> ' Comment.Special
'in' Keyword.Reserved
' ' Text.Whitespace
'forward' Name
' ' Text.Whitespace
'[]' Keyword.Type
'\n' Text.Whitespace
'\n' Text
'\n' Text
' Convert a text board into a Spec\n' Text
'\n' Text
'> ' Comment.Special
'parseBoard' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'String' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'parseBoard' Name.Function
' ' Text.Whitespace
's' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'zip' Name
' ' Text.Whitespace
'rcs' Name
' ' Text.Whitespace
"vs'check" Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'rcs' Name
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'(' Punctuation
'R' Keyword.Type
',' Punctuation
'C' Keyword.Type
')' Punctuation
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'rcs' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'[' Punctuation
' ' Text.Whitespace
'(' Punctuation
'R' Keyword.Type
' ' Text.Whitespace
'r' Name
',' Punctuation
'C' Keyword.Type
' ' Text.Whitespace
'c' Name
')' Punctuation
' ' Text.Whitespace
'|' Operator
' ' Text.Whitespace
'r' Name
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'rng' Name
',' Punctuation
' ' Text.Whitespace
'c' Name
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'rng' Name
' ' Text.Whitespace
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'isUnset' Name.Function
' ' Text.Whitespace
'c' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'c' Name
'==' Operator
"'.'" Literal.String.Char
')' Punctuation
' ' Text.Whitespace
'||' Operator
' ' Text.Whitespace
'(' Punctuation
'c' Name
'==' Operator
"' '" Literal.String.Char
')' Punctuation
' ' Text.Whitespace
'||' Operator
' ' Text.Whitespace
'(' Punctuation
'c' Name
'==' Operator
"'0'" Literal.String.Char
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'isHint' Name.Function
' ' Text.Whitespace
'c' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'(' Punctuation
"'1'" Literal.String.Char
'<=' Operator
'c' Name
')' Punctuation
' ' Text.Whitespace
'&&' Operator
' ' Text.Whitespace
'(' Punctuation
'c' Name
'<=' Operator
"'9'" Literal.String.Char
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'cs' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'take' Name
' ' Text.Whitespace
'81' Literal.Number.Integer
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'filter' Name
' ' Text.Whitespace
'(' Punctuation
'\\' Name.Function
'c' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'isUnset' Name
' ' Text.Whitespace
'c' Name
' ' Text.Whitespace
'||' Operator
' ' Text.Whitespace
'isHint' Name
' ' Text.Whitespace
'c' Name
')' Punctuation
' ' Text.Whitespace
's' Name
'\n' Text.Whitespace
'> ' Comment.Special
'vs' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'[' Punctuation
'V' Keyword.Type
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'vs' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'map' Name
' ' Text.Whitespace
'(' Punctuation
'\\' Name.Function
'c' Name
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'isUnset' Name
' ' Text.Whitespace
'c' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'u' Name
' ' Text.Whitespace
'else' Keyword.Reserved
' ' Text.Whitespace
'(' Punctuation
'V' Keyword.Type
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'digitToInt' Name
' ' Text.Whitespace
'c' Name
')' Punctuation
')' Punctuation
' ' Text.Whitespace
'cs' Name
'\n' Text.Whitespace
'> ' Comment.Special
"vs'check" Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'81' Literal.Number.Integer
'==' Operator
'length' Name
' ' Text.Whitespace
'vs' Name
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
'vs' Name
' ' Text.Whitespace
'else' Keyword.Reserved
' ' Text.Whitespace
'error' Name.Exception
' ' Text.Whitespace
'(' Punctuation
'"' Literal.String
'parse of board failed' Literal.String
'\\' Literal.String.Escape
'n' Literal.String.Escape
'"' Literal.String
'++' Operator
's' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' This is quite useful as a utility function which partitions the list into groups of n elements.\n' Text
' Used by showSpec.\n' Text
'\n' Text
'> ' Comment.Special
'groupTake' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Int' Keyword.Type
'->' Operator.Word
'[' Punctuation
'a' Name
']' Punctuation
'->' Operator.Word
'[' Punctuation
'[' Punctuation
'a' Name
']' Punctuation
']' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'groupTake' Name.Function
' ' Text.Whitespace
'n' Name
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'unfoldr' Name
' ' Text.Whitespace
'foo' Name
' ' Text.Whitespace
'b' Name
'\n' Text.Whitespace
'> ' Comment.Special
'where' Keyword.Reserved
' ' Text.Whitespace
'foo' Name
' ' Text.Whitespace
'[]' Keyword.Type
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Nothing' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'foo' Name.Function
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'Just' Keyword.Type
' ' Text.Whitespace
'(' Punctuation
'splitAt' Name
' ' Text.Whitespace
'n' Name
' ' Text.Whitespace
'b' Name
')' Punctuation
'\n' Text.Whitespace
' \n' Text
' Make a nice 2D ascii board from the Spec (not used at the moment)\n' Text
'\n' Text
'> ' Comment.Special
'showSpec' Name.Function
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'Spec' Keyword.Type
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'String' Keyword.Type
'\n' Text.Whitespace
'> ' Comment.Special
'showSpec' Name.Function
' ' Text.Whitespace
'spec' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'let' Keyword.Reserved
' ' Text.Whitespace
'pa' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'parse' Name
' ' Text.Whitespace
'spec' Name
'\n' Text.Whitespace
'> ' Comment.Special
'g' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'groupTake' Name
' ' Text.Whitespace
'9' Literal.Number.Integer
' ' Text.Whitespace
'(' Punctuation
'map' Name
' ' Text.Whitespace
'(' Punctuation
'\\' Name.Function
'(' Punctuation
'V' Keyword.Type
' ' Text.Whitespace
'v' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'if' Keyword.Reserved
' ' Text.Whitespace
'v' Name
' ' Text.Whitespace
'==' Operator
' ' Text.Whitespace
'0' Literal.Number.Integer
' ' Text.Whitespace
'then' Keyword.Reserved
' ' Text.Whitespace
"'.'" Literal.String.Char
' ' Text.Whitespace
'else' Keyword.Reserved
' ' Text.Whitespace
'intToDigit' Name
' ' Text.Whitespace
'v' Name
')' Punctuation
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'elems' Name
' ' Text.Whitespace
'pa' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'addV' Name.Function
' ' Text.Whitespace
'line' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'concat' Name
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'intersperse' Name
' ' Text.Whitespace
'"' Literal.String
'|' Literal.String
'"' Literal.String
' ' Text.Whitespace
'(' Punctuation
'groupTake' Name
' ' Text.Whitespace
'3' Literal.Number.Integer
' ' Text.Whitespace
'line' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'addH' Name.Function
' ' Text.Whitespace
'list' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'concat' Name
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'intersperse' Name
' ' Text.Whitespace
'[' Punctuation
'"' Literal.String
'---+---+---' Literal.String
'"' Literal.String
']' Punctuation
' ' Text.Whitespace
'(' Punctuation
'groupTake' Name
' ' Text.Whitespace
'3' Literal.Number.Integer
' ' Text.Whitespace
'list' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'in' Keyword.Reserved
' ' Text.Whitespace
'unlines' Name
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'addH' Name
' ' Text.Whitespace
'(' Punctuation
'map' Name
' ' Text.Whitespace
'addV' Name
' ' Text.Whitespace
'g' Name
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' One line display\n' Text
'\n' Text
'> ' Comment.Special
'showCompact' Name.Function
' ' Text.Whitespace
'spec' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'map' Name
' ' Text.Whitespace
'(' Punctuation
'\\' Name.Function
'(' Punctuation
'V' Keyword.Type
' ' Text.Whitespace
'v' Name
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'intToDigit' Name
' ' Text.Whitespace
'v' Name
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'elems' Name
' ' Text.Whitespace
'(' Punctuation
'parse' Name
' ' Text.Whitespace
'spec' Name
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'\n' Text
' The main routine is designed to handle the input from http://www.csse.uwa.edu.au/~gordon/sudoku17\n' Text
'\n' Text
'> ' Comment.Special
'main' Name.Function
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'all' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'getContents' Name
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'puzzles' Name
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'zip' Name
' ' Text.Whitespace
'[' Punctuation
'1' Literal.Number.Integer
'..' Operator
']' Punctuation
' ' Text.Whitespace
'(' Punctuation
'map' Name
' ' Text.Whitespace
'parseBoard' Name
' ' Text.Whitespace
'(' Punctuation
'lines' Name
' ' Text.Whitespace
'all' Name
')' Punctuation
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'root' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'stToIO' Name
' ' Text.Whitespace
'initHA' Name
'\n' Text.Whitespace
'> ' Comment.Special
'let' Keyword.Reserved
' ' Text.Whitespace
'act' Name
' ' Text.Whitespace
'::' Operator.Word
' ' Text.Whitespace
'(' Punctuation
'Int' Keyword.Type
',' Punctuation
'Spec' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'->' Operator.Word
' ' Text.Whitespace
'IO' Keyword.Type
' ' Text.Whitespace
'()' Name.Builtin
'\n' Text.Whitespace
'> ' Comment.Special
'act' Name.Function
' ' Text.Whitespace
'(' Punctuation
'i' Name
',' Punctuation
'spec' Name
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'do' Keyword.Reserved
'\n' Text.Whitespace
'> ' Comment.Special
'answer' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'stToIO' Name
' ' Text.Whitespace
'(' Punctuation
'do' Keyword.Reserved
' ' Text.Whitespace
'initRoot' Name
' ' Text.Whitespace
'root' Name
' ' Text.Whitespace
'spec' Name
' \n' Text.Whitespace
'> ' Comment.Special
'answer' Name.Function
' ' Text.Whitespace
'<-' Operator.Word
' ' Text.Whitespace
'gdance' Name
' ' Text.Whitespace
'(' Punctuation
'fst' Name
' ' Text.Whitespace
'root' Name
')' Punctuation
' \n' Text.Whitespace
'> ' Comment.Special
'resetRoot' Name.Function
' ' Text.Whitespace
'root' Name
'\n' Text.Whitespace
'> ' Comment.Special
'return' Name.Function
' ' Text.Whitespace
'answer' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'print' Name.Function
' ' Text.Whitespace
'(' Punctuation
'i' Name
',' Punctuation
'showCompact' Name
' ' Text.Whitespace
'answer' Name
')' Punctuation
'\n' Text.Whitespace
'> ' Comment.Special
'mapM_' Name.Function
' ' Text.Whitespace
'act' Name
' ' Text.Whitespace
'puzzles' Name
'\n' Text.Whitespace
'\n' Text
'> ' Comment.Special
"inits'" Name.Function
' ' Text.Whitespace
'xn' Name
'@' Operator
'(' Punctuation
'_' Keyword.Reserved
':' Keyword.Type
'_' Keyword.Reserved
')' Punctuation
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'zipWith' Name
' ' Text.Whitespace
'take' Name
' ' Text.Whitespace
'[' Punctuation
'0' Literal.Number.Integer
'..' Operator
']' Punctuation
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'map' Name
' ' Text.Whitespace
'(' Punctuation
'const' Name
' ' Text.Whitespace
'xn' Name
')' Punctuation
' ' Text.Whitespace
'$' Operator
' ' Text.Whitespace
'undefined' Name
':' Keyword.Type
'xn' Name
'\n' Text.Whitespace
'> ' Comment.Special
"inits'" Name.Function
' ' Text.Whitespace
'_' Keyword.Reserved
' ' Text.Whitespace
'=' Operator.Word
' ' Text.Whitespace
'undefined' Name
'\n' Text.Whitespace