Sto definendo un parser osservabile/reattivo monadico. Questo comportamento si comporta in modo abbastanza diverso da un normale parser in quanto è una query continua. Il tipo di fondo è:Scopo di un'unione discriminata a caso singolo
IObservable<'a> -> IObservable<'b>
Guardando varie implementazioni di parser in linguaggi funzionali, sembra come se il modo più appropriato per definire le cose è un singolo caso un'unione discriminata:
type Pattern<'a,'b> = Pattern of (IObservable<'a> -> IObservable<'b>)
il che significa che quindi necessario estrarre la funzione di fondo di usarlo:
let find (Pattern p) = p
la domanda è: questo solo per convenzione, o per scopi di proroga al più tardi, o è la è un motivo per farlo anche se la definizione non cambia mai?
Bonus domanda: Se è solo per una firma di tipo più conveniente, perché non basta usare un tipo alias:
type Pattern<'a,'b> = IObservable<'a> -> IObservable<'b>
ho avanzato una piuttosto un modo attraverso questo, e non ho trovato un caso in cui la componibilità è influenzata dal non utilizzo del DU.
Grazie, è in realtà una ragione abbastanza concreta. Sicuramente non voglio digitare 'IObservable <'a> -> IObservable <'b>' ovunque invece di 'Modello <'a,'b>'. – yamen
Un follow-up molte lune più tardi. Ho finito per aggiungere un secondo caso al sindacato, e quindi l'universo è in equilibrio. – yamen