type Letter = |A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
type Location = {x : int; y : int}
type PartialLetter = |Letter|None
type PlacedPartialLetter =
PartialLetter:PartialLetter
type PartiallyAnsweredWord =
PlacedPartialLetters :PlacedPartialLetter list
WordStartLocation: Location
type Direction = |Across|Down
type WordsFoundInDictionary = Word list
type WordsFoundInDictionarySearch =
type NextFoundWord = Word
type GetNextWord = WordsFoundInDictionary -> NextFoundWord
type Split = (NextFoundWord * WordsFoundInDictionary) -> WordsFoundInDictionary
type Dictionary = Word list
type FindWordsThatMatch = (PartiallyAnsweredWord * Dictionary) -> WordsFoundInDictionarySearch option
NextFoundWord: NextFoundWord
PartiallyAnsweredClues : PartiallyAnsweredWord list option
AnsweredClues : AnsweredClue list
type SolvedCrossword = AnsweredClue list
type UpdateSolution() = (UnsolvedCrossword * PartiallyAnsweredWord) -> (UnsolvedCrossword, SolvedCrossword)