【发布时间】:2014-05-15 03:51:11
【问题描述】:
我正在寻找编码(在某些 .NET 语言中——fsharp 似乎最有可能支持)形成当前上下文的一类类型。
规则是我们从 'a 类型的初始上下文开始。随着计算的进行,上下文将被添加到其中,但我总是可以得到以前的值。因此,假设一个将信息添加到上下文中的操作,'a -> 'b,推断出 'a 的所有元素也在 'b 中。
这个想法类似于不可变地图,但我希望它是静态类型的。这可行吗?如何,或者为什么不? TIA。
更新:答案似乎是您目前无法完全做到这一点,尽管我有一些很好的建议可以用不同的方式对我正在寻找的东西进行建模。感谢所有试图帮助解决我措辞不当的问题的人。
【问题讨论】:
-
如果我理解你,首先想到的是一个元组。你可以有一个函数
'a -> 'a * 'b。当然,嵌套元组可能会使类型变得混乱,但对于少数转换来说,它既快速又简单。 -
type Context 'a>(f:'a -> 'b -> 'c, v:'a, v1:'b ) = 成员 x.Current:'c = f(v, v1)
-
...抱歉,这个编辑器不太好。上面的代码接近我正在寻找的类型的约束。我实际上更喜欢 'a 和 'c 是不可变的。
-
试图弄清楚你想要达到的目标。 'a、'b、'c 类型应该如何相互关联?在您的示例中,'c 是 'a 的子类型,为什么它很重要?当您谈论将信息添加到上下文的操作时,您听起来好像 'a 和 'b 都是集合。如果是这样,为什么它们不能是同一类型?如果不是,那么“'a 的所有元素都在 'b 中”是什么意思?
-
你的意思是一个以'a开始的过程,然后通过一系列步骤,你用'b类型的数据优化上下文,并从初始'a生成一个'c对象以及收集到的 'b 值?
标签: f#