首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F#中的变质作用

F#中的变质作用
EN

Stack Overflow用户
提问于 2017-09-12 09:43:37
回答 1查看 700关注 0票数 15

我正在阅读维基百科关于变形的文章,目前我能够在F#中复制Haskell的例子,但这部分除外:

代码语言:javascript
复制
type Algebra f a = f a -> a -- the generic f-algebras

newtype Fix f = Iso { invIso :: f (Fix f) } -- gives us the initial algebra for the functor f

cata :: Functor f => Algebra f a -> (Fix f -> a) -- catamorphism from Fix f to a
cata alg = alg . fmap (cata alg) . invIso -- note that invIso and alg map in opposite directions

在F#中可以这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-12 22:32:26

如果您正在考虑在任意容器类型(a‘’la 递归格式 )上表达真正的泛型折叠,直接在F# (或CLR )类型系统中--那么您就倒霉了。语言中缺少太多所需的机器--最关键的是更高的类型。

然而,HKT可以使用一种称为F#的技术在去功能化中进行编码。有一个基于本文概念的F#库-更高。实际上,它已经实现了fix,cata/ana/同构代数作为概念的证明。在性能和易用性方面,我没有一个很好的衡量标准。

除此之外,您还可以手工为您的容器实现折叠,省去了HKT的需求。目前,有一系列关于实现变形这里的经典博客文章。这是非常值得一读的-除了折叠,它还深入到编程的延续-传递风格。

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

https://stackoverflow.com/questions/46173077

复制
相关文章

相似问题

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