For fun, define a Kleene- algebra trait, make a regex data type (with constructors for alternation, concatenation, and star), make a language data type (maybe?), and make a k instance for each. Maybe we do not need language.
We'll either have to define an equiv for regex or else always normalize inputs when we construct (like reducing fractions).
Then of course we'll want to define NFA and DFA data types and implement matching and transformation algorithms.
First, make a lexer directly using fastparse.
For fun, define a Kleene- algebra trait, make a regex data type (with constructors for alternation, concatenation, and star), make a language data type (maybe?), and make a k instance for each. Maybe we do not need language.
We'll either have to define an equiv for regex or else always normalize inputs when we construct (like reducing fractions).
Then of course we'll want to define NFA and DFA data types and implement matching and transformation algorithms.