Guy*_*der 36 f# ocaml ml sml functor
这个问题始于
SML.NET可以做仿函数并使用Microsoft .NET.
*请参阅:SML.NET用户指南第4.8.2节类类型和仿函数?
由于Microsoft .NET的一些限制,我一直看到F#无法做真正的仿函数.
*ML仿函数可以用.NET完全编码(C#/ F#)吗?
*算子的任何解决方法?
那么如果SML.NET可以在.NET上运行仿函数那么为什么F#不能呢?SML.NET做了什么,F#不能做什么?
我越了解来自类别理论的仿函数,我越看到它们的美丽,并希望在F#中拥有它们.
编辑
Jac*_* P. 40
.NET中没有任何基本限制可以阻止仿函数在F#中实现.确实,它们不能直接在.NET元数据中表示,但其他F#语言功能也不能像union类型那样.带有仿函数的语言的编译器(例如,标准ML,OCaml)有一个名为defunctorize的传递; 它就像C++模板扩展一样工作,因为它通过将仿函数专门化为普通模块来"展平"仿函数.
F#编译器可以做同样的事情,但你必须问:这将如何暴露给其他.NET语言?由于仿函数不能直接在.NET类型系统中编码,因此您需要提出一些方法来表示它们; 如果从C#或VB.NET中难以/不可能使用该表示,那么包含F#仿函数是否仍然有意义?F#成功的一个重要部分来自于它能够与C#和VB.NET轻松互动(双向).
编辑:不要误解我的意思 - 我喜欢在F#中使用仿函数,它们对于处理一些目前很痛苦和/或没有它们时无法实现的情况非常有用.我只是指出语言还没有(也许永远不会)有问题的主要原因是互操作问题还没有解决; 元数据编码问题实际上很容易.
编辑2:MLton的defunctorize传递代码:defunctorize.fun
更新:我有一个关于如何函子竟以为可以在.NET类型系统内表达,所以我把一个小实验.它不漂亮,但它有效 - 所以现在我们知道F#有一天可以支持仿函数至少是合理的.实际上,您在实验代码中看到的复杂性都将被编译器/语言隐藏.如果你想看看它:实验函子
| 归档时间: |
|
| 查看次数: |
3197 次 |
| 最近记录: |