scala – Functor如何有用?
我们知道任何泛型类型F [_] withmap方法,符合某些
laws,是一个仿函数.例如,List [_],Option [_]和F [A] = Env => A是运算符.我只是想知道这个仿函数抽象是否有意义.
我如何使用它们是仿函数的事实?你能展示一个非平凡计算的例子,它会使用地图并且实际上有用吗? 解决方法
函数等概念的最大好处之一是,有一些通用结构允许您使用更简单的仿函数构建更复杂的类型,并保证这些复杂类型具有某些属性.当你像你一样孤立地考虑它们时,可以理解的是,函数看起来毫无意义,但是你学习和掌握的这些结构越多越有用.
一个更简单的例子是几种组合仿函数的方法也产生了一个仿函数;例如,如果List [A]和Option [A]是仿函数,那么: >仿函数的组成:列表[选项[A]]和选项[列表[A]] 我不知道在Scala中写出这个,但在Haskell中这样的事实转化为通用代码,如下例: -- A generic type to represent the composition of any two functors -- `f` and `g`. newtype Compose f g a = Compose { getCompose :: f (g a) } -- If `f` and `g` are functors,so is `Compose f g`. instance (Functor f,Functor g) => Functor (Compose f g) where fmap f (Compose fga) = Compose (fmap (fmap f) fga) 这是一个非常简单的例子,但是: >它至少作为分析工具已经很有用了.人们在实践中编写的许多数据类型,当你通过这个例子的镜头观察它们时,结果是简单仿函数的产品,总和或组合.因此,一旦理解了这些结构,您就可以在编写复杂类型时自动“感知”它是一个仿函数,以及如何编写它的map()操作. >我们有一个通用的结构,当用实现Functor的类型实例化时保证某些契约; 更详细的示例是free monads(链接具有扩展的Scala示例),这是一种通用的解释器结构,它依赖于用户提供的Functors来定义语言的“指令”.其他链接(这些链接大部分来自Google搜索): > https://softwaremill.com/free-monads/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |