函数式编程:上线文、包裹、容器-我们可以将一个值用Context(上下文)包裹起来
Functor,即函子,是 Haskell 中普遍存在的、最基本的类型类。你可以用以下两种方式来理解 Functor:
- 它代表某种容器,该容器能够将某一函数应用到其每一个元素上。
- 它代表某种“可计算上下文”(computational context)。
https://www.cnblogs.com/feng9exe/p/9152447.html
整体上代表封装的概念,重点是函数的封装,及函数运行的上下文环境。
trait Functor[F[_]]
Functor:代表整体封装;
F[_]:代表封装后的目标域。
A、B:代表普通的对象;
f:代表对象间转换的函数。
Functor[F[_]] :映射的结果和源在同一个范畴内;
Functor的代码表示
trait Functor[F[_]] {
def map[A, B](a: F[A])(f: A => B): F[B]
}
//list Functor的实现
def listFunctor = new Functor[List] {
def map[A, B](a: List[A])(f: (A) => B) = a.map(f)
}
接下来我们用Scala实现Monad的定义:
trait Monad[M[_]] {
def unit[A](a: A): M[A] //identity
def join[A](mma: M[M[A]]): M[A]
}
还有一种更为常见的定义方式,在Scala中Monad也是以这种方式出现:
trait Monad[M[_]] {
def unit[A](a: A): M[A]
def flatMap[A, B](fa: M[A])(f: A => M[B]): M[B]
}
https://www.cnblogs.com/feng9exe/p/8656389.html
函数式编程:上线文、包裹、容器-我们可以将一个值用Context(上下文)包裹起来的更多相关文章
- Java8内置的函数式编程接口应用场景和方式
首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...
- 函数式编程-将Monad(单子)融入Swift
前言 近期又开始折腾起Haskell,掉进这个深坑恐怕很难再爬上来了.在不断深入了解Haskell的各种概念以及使用它们去解决实际问题的时候,我会试想着将这些概念移植到Swift中.函数式编程范式的很 ...
- 翻译连载 | 第 10 章:异步的函数式(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- swift之函数式编程(二)
本文的主要内容来自<Functional Programming in Swift>这本书,有点所谓的观后总结 在本书的Introduction章中: we will try to foc ...
- 一文带你了解JavaScript函数式编程
摘要: 函数式编程入门. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 函数式编程在前端已经成为了一个非常热门的话题.在最近几年里,我们看到非常多的应用程序代码库里大量使用着函 ...
- 【大前端攻城狮之路】JavaScript函数式编程
转眼之间已入五月,自己毕业也马上有三年了.大学计算机系的同学大多都在北京混迹,大家为了升职加薪,娶媳妇买房,熬夜加班跟上线,出差pk脑残客户.同学聚会时有不少兄弟已经体重飙升,开始关注13号地铁线上铺 ...
- 用C++进行函数式编程
http://www.programmer.com.cn/12717/ 文 / John Carmack 译 / 王江平 <Quake>作者Carmack认为追求函数式的程序设计有着实 ...
- 转: JavaScript函数式编程(二)
转: JavaScript函数式编程(二) 作者: Stark伟 上一篇文章里我们提到了纯函数的概念,所谓的纯函数就是,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环 ...
- 翻译连载 | 附录 A:Transducing(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
随机推荐
- (5)在tomcat运行自己的javaweb项目
A:在MyEclipse下方的Servers栏中启动服务器,运行项目: 1,选中项目所在的tomcat服务器 2,点击“启动按钮”,见下图 3,启动以后,看控制台输出日志: B:从服务器按钮启动: 1 ...
- mongo04---基本查询
核心: mongod: 数据库核心进程 mongos: 查询路由器,集群时用 mongo: 交互终端(客户端) 二进制导出导入: mongodump:导出bson数据 mongorestore: 导入 ...
- The android gradle plugin version 2.3.0-beta2 is too old, please update to the latest version.
编译项目的时候,报如下错误: Error:(, ) A problem occurred evaluating project ':app'. > Failed to apply plugin ...
- WebLogic之eclipse安装WebLogic插件
转自:https://blog.csdn.net/magi1201/article/details/38323775
- 关于JAVA通过REST接口对arcGis Server数据进行增删改查
一: 添加要素 public void create(BoxVo boxVo) throws Exception { // 创建HTTP客户端 CloseableHttpClient httpclie ...
- asp.net调用oracle存储过程
oracle内的存储过程是通过游标返回结果集的 DataTable dt = new DataTable(); OracleParameter[] paras = ]; paras[] = new O ...
- MYSQL自动备份策略的选择(转载)
原文地址: http://shinepaopao.iteye.com/blog/1938568
- selenium中同名的class如何区分
例子是使用了selenium3.7.0 , python 3.6.2 , 火狐57版本 以下是例子的源码: <!DOCTYPE html><!-- <html> --& ...
- Rails5终端基本命令
更新: 2017/06/10 更新: 2017/06/21 增加迁移文件查看履历命令: rails db:migrate:status 迁移文件生成 ...
- Git学习二
一.在工作区和暂存区退回 在工作区: $git checkout -- filename 在暂存区: $git reset HEAD filename $git checkout -- filenam ...