首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果SML.NET有函子,为什么不能F#?

如果SML.NET有函子,为什么不能F#?
EN

Stack Overflow用户
提问于 2013-02-08 16:56:18
回答 1查看 3.6K关注 0票数 38

这个问题是从

  1. 我把L. C.鲍尔森的"给工作程序员的毫升“(WorldCat)翻译成使用函子作为例子的F#。
  2. 最终的愿望翻译"纯功能数据结构“(WorldCat)的克里斯冈崎,它使用函子。
  3. 阅读"类别、类型和结构--工作计算机科学家范畴理论简介“(WorldCat)作者Asperti和Giuseppe。
  4. 不完全理解,主要是范畴理论。

SML.NET可以做函子,并与微软.NET一起工作。

代码语言:javascript
复制
 \* See: [SML.NET User Guide](http://www.cl.cam.ac.uk/research/tsg/SMLNET/smlnet.pdf) Section 4.8.2 Class types and functors?

我一直注意到,由于微软F#的某些限制,.NET无法执行真正的函式。

代码语言:javascript
复制
 \* [Can ML functors be fully encoded in .NET (C#/F#)?](https://stackoverflow.com/q/1426239/1243762)
代码语言:javascript
复制
 \* [Any workaround for functor?](http://cs.hubfs.net/topic/None/57222) 

那么,如果SML.NET可以在.NET上做函子,为什么F#不能呢?SML.NET做了F#不能做的事情吗?

我从范畴理论中学到的函子越多,我就越能看到函子的美,也越想在F#中拥有它们。

编辑

为了更好地理解范畴理论和函数式编程之间的关系,请参阅问与答 at 政务司司长:StackExchange

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-08 17:09:27

.NET没有阻止函子在F#中实现的基本限制。诚然,它们不能直接用.NET元数据表示,但其他F#语言特性(如联合类型)也不能直接表示。函子语言的编译器(例如,标准ML,OCaml)有一个名为http://mlton.org/Defunctorize的通行证;它的工作方式类似于C++模板扩展,因为它通过将函子专门化为普通模块来“平平”函子。

F#编译器可以做同样的事情,但是接下来您必须问:这将如何向其他.NET语言公开?由于函子不能在.NET类型系统中直接编码,所以您需要想出一些方法来表示它们;如果C#或VB.NET很难/不可能使用这种表示,那么包含F#函子是否仍然有意义呢?F#成功的一个重要部分在于它能够轻松地(在两个方向)与C#和VB.NET进行互操作。

编辑:不要误解我的意思--我希望在F#中有函子,如果没有函子,它们对处理一些目前痛苦和/或不可能实现的情况是非常有用的。我只是指出,语言还没有(也许永远不会)有函子的主要原因是互操作问题尚未解决;元数据编码问题实际上是很容易解决的。

编辑2:MLtondefunctorize.fun失效传递的代码

更新:--我曾经想过如何在.NET类型系统中表达函子,所以我做了一个小实验。它不是很漂亮,但它很管用--所以现在我们知道,至少有一天,F#可以支持函子。实际上,您在我的实验代码中看到的复杂性都会被编译器/语言所隐藏。如果您想要查看它:实验函子

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14777522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档