最近需要补的东西较多,疏于打理关于Monad的学习笔记,所以赶在到公历新年前,先整理出一部分,以备忘:
是什么?
A monad is just a monoid in the category of endofunctors, what’s the problem?
单子 不过是一个自函[……]
There are 8 posts filed in FP.
最近需要补的东西较多,疏于打理关于Monad的学习笔记,所以赶在到公历新年前,先整理出一部分,以备忘:
A monad is just a monoid in the category of endofunctors, what’s the problem?
单子 不过是一个自函[……]
准确来说,IO API 不算是 Akka Streams的内容,但它却是 Streaming IO (TCP) 的基础。
IO API 编程的第一步,是获取一个管理对象的引用。比如我们想针对TCP编程,可以这么获取 TCP Manager:
[crayon-675181d935cf5[……]
Akka Streams 为异步编程提供了管道和流式接口,但如果我们希望结合 actor 模型的消息机制呢?Akka Streams提供了如下解决方案:
Sink.actorRef
产生 ActorRef,做为下游结点接收管道里的流数据Source.actorRef
产生A[……]Stage 是 Akka Streams 里的核心概念,它代表了在Graph里的单位,是如何定义输入端口(Inlet) / 输出端口(Outlet) 的;常用的基础形态有:
reactive streams 是一个异步流标准,Akka项目是这个标准最早的实现者之一。
标准定义了两个通道:
标准要求这两个通道间的通信是异步非阻塞的,并且是基[……]
最近在学习 Akka,因为Scala的新版本已将Actors迁移到Akka [1](教材就是那本烂到一定程度的 Akka in action,排版字体代码示例一如既往的Manning式的糟糕)——至于为什么要学习Actors,大概是因为 红宝书 里提出了一些对异步编程组合子的设计要求。[……]
RingBuffer (环形缓冲区),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流(用来实现轮转功能的日志也很合适)。
它亦是一个队列,先进先出(FIFO)。这意味着,入队永远是在环的尾部(tail),出队永远是在环的头部(head)。这个环的容量是一开始[……]
组合某种类型(含函数)的两个元素,进而生成一个该类型的新元素:
1 2 3 4 5 6 7 |
let compose = (f, g) => a => f(g(a)) let toUpperCase = x => x.toUpperCase() let exclaim = x => x + '!' let shout = compose(exclaim, toUpperCase); shout("hello world") // HELLO WORLD! |
一个多参函数,如果我们只提供了部分参数,这种应用就是偏函数应用:
[crayo[……]