Estoy definiendo un analizador sintáctico/reactivo monádico. Esto se comporta de manera bastante diferente a un analizador normal, ya que es una consulta continua. El tipo subyacente es:Propósito de una unión discriminada de un solo caso
IObservable<'a> -> IObservable<'b>
De su análisis de varias implementaciones de analizadores en los lenguajes funcionales, parece como si el camino más apropiado para definir las cosas es un solo caso unión discriminado:
type Pattern<'a,'b> = Pattern of (IObservable<'a> -> IObservable<'b>)
Lo cual significa entonces tienen que extraer la función subyacente utilizarlo:
let find (Pattern p) = p
la pregunta es: ¿es sólo por convención, o con fines de extensión posterior, o es el ¿Hay una razón para hacer esto incluso si la definición nunca cambia?
Bono pregunta: Si es sólo para una firma de tipo más conveniente, ¿por qué no usar un tipo de alias:
type Pattern<'a,'b> = IObservable<'a> -> IObservable<'b>
He avanzado bastante camino a través de esto, y no he encontrado un caso en el que la capacidad de compilación se ve afectada al no usar el DU.
Gracias, esa es en realidad una razón bastante concreta. Definitivamente no quiero escribir 'IObservable <'a> -> IObservable <'b>' en todas partes en lugar de 'Patrón <'a,'b>'. – yamen
Un seguimiento de muchas lunas más tarde. Terminé agregando un segundo caso a la unión, y así el universo está en equilibrio. – yamen