A parser which uses reflection combined with F# discriminated unions to define a language