4519 lines
112 KiB
Text
Generated
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
|