【发布时间】:2012-04-26 09:42:00
【问题描述】:
我正在定义一个单子可观察/反应式解析器。这与普通解析器的行为完全不同,因为它是一个连续查询。底层类型是:
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 会影响可组合性的情况。
【问题讨论】:
标签: f# monads discriminated-union