---input--- true. stop :- !. of (fun F) :- pi x\ of x => of (F x). match (uvar as Y) :- print Y. f :- forall (_\ true) []. ---tokens--- 'true' Text '.' Operator '\n' Text.Whitespace 'stop' Text ' ' Text.Whitespace ':-' Keyword.Declaration ' ' Text.Whitespace '!' Keyword.Declaration '.' Operator '\n' Text.Whitespace 'of' Text ' ' Text.Whitespace '(' Punctuation 'fun' Text ' ' Text.Whitespace 'F' Name.Variable ')' Punctuation ' ' Text.Whitespace ':-' Keyword.Declaration ' ' Text.Whitespace 'pi' Keyword.Declaration ' ' Text.Whitespace 'x' Name.Variable '\\' Text ' ' Text.Whitespace 'of' Text ' ' Text.Whitespace 'x' Text ' ' Text.Whitespace '=>' Keyword.Declaration ' ' Text.Whitespace 'of' Text ' ' Text.Whitespace '(' Punctuation 'F' Name.Variable ' ' Text.Whitespace 'x' Text ')' Punctuation '.' Operator '\n' Text.Whitespace 'match' Text ' ' Text.Whitespace '(' Punctuation 'uvar' Keyword.Declaration ' ' Text.Whitespace 'as' Keyword.Declaration ' ' Text.Whitespace 'Y' Name.Variable ')' Punctuation ' ' Text.Whitespace ':-' Keyword.Declaration ' ' Text.Whitespace 'print' Text ' ' Text.Whitespace 'Y' Name.Variable '.' Operator '\n' Text.Whitespace 'f' Text ' ' Text.Whitespace ':-' Keyword.Declaration ' ' Text.Whitespace 'forall' Text ' ' Text.Whitespace '(' Punctuation '_\\' Name.Variable ' ' Text.Whitespace 'true' Text ')' Punctuation ' ' Text.Whitespace '[]' Keyword.Declaration '.' Operator ' \n' Text.Whitespace