Я определяю монадический наблюдаемый/реактивный парсер. Это ведет себя по-разному к обычным парсером, поскольку это непрерывный запрос. Основной тип:
IObservable<'a> -> IObservable<'b>
От взгляда на различные реализации синтаксического анализа на функциональных языках кажется, что более подходящий способ определить вещи - это единичный случай дискриминации:
type Pattern<'a,'b> = Pattern of (IObservable<'a> -> IObservable<'b>)
Это значит, что мне нужно извлечь основную функцию, чтобы использовать ее:
let find (Pattern p) = p
Вопрос: это просто по соглашению или для дальнейшего расширения, или есть ли основания для этого, даже если определение никогда не изменяется?
Бонусный вопрос: если это просто для более удобной сигнатуры типа, почему бы просто не использовать псевдоним типа:
type Pattern<'a,'b> = IObservable<'a> -> IObservable<'b>
Я проделал этот путь довольно далеко и не нашел случая, когда на способность влияет не использование DU.