Jichao Ouyang's Blog

"First Class" Types in Scala 3

You may no longer need Shapeless

Dummy Guide to sbt

It is actually a Simple Build Tool if you use it correctly

Phantom Types in Scala 3

You probably don't need Cats

Generalized Algebraic Datatypes in Scala 3


FunctionK in Scala 3

You probably don't need Cats

Scala 3 Kan Extensions

你可能不再需要 Cats

Dependent Types in Scala 3

You may no longer need Aux pattern

Scala 3 Dependent Types

你可能不再需要 Cats

Scala 3 Phantom Types

你可能不再需要 Cats

Rank N Types in Scala 3

You probably don't need Cats

Scala 3 原生 FunctionK

你可能不再需要 Cats

Scala 3 Generalized Algebraic Datatypes (GADT)

你可能不再需要 Cats

Scala 3 原生 Rank N Type

你可能不再需要 Cats

Applied Evolutionary Design

Chapter 1 - The Story

2019 Year in Review

Highlights about what happened last year.

Type-Driven Development with PureScript

Let us Type-Driven a TodoMVC with PureScript

PureScript Cheat Sheet For JavaScript Developers

Coverting code from JavaScript to PureScript is very straight forward.

Functional Scala Caching

Cats need Caffeine!

Applied Category Theory in Scala

Typeclass Choice

Into ReaderT-verse

As what I've been discussed in 3 Layer Scala Cake ReaderT pattern is pretty much enough for most case. So, let's dive into the ReaderT universe and see how can we factor those effects out.

3 Layer Scala Cake

I've been using Free Monad in production for a while, as the projects scale and more members contribute, the boundary of different layer reveal them self more clearly.

Finch vs Http4s, which is FPer

This is purely personal overall comparation from Functional Programming point of view, which only consider composible, extensible, and joy of FP. Performance and eco system are out of the scope.

Grokking Monad in Scala

Type classes and some Monads

Grokking Monad in Scala - Free

Kind and Free Monad

关闭 gulugulu 弹幕


使用 Flink 解救多线程 Scala 应用


范畴论完全装逼手册 / Grokking Monad

卷三 搞基猫呢

xReact Fantasy


Type Classes in TypeScript


the 99 problems


如何部署 Scala 代码

到底应该打成肥 jar 包还是 docker? 打包工具为何如此难用?Scala部署到底怎么最简单高效?

范畴论完全装逼手册 / Grokking Monad

卷一 猫论

范畴论完全装逼手册 / Grokking Monad

卷二 食用猫呢

2016 Year in Review




Functional Ruby


Implicit, to be or not to be


Rethinking React Dataflow


看我们3天 hackday 都干了些什么


A Compact React Cookbook


使用 dotfiles 和 stow 管理你的 dotfiles

可能看标题你觉得我疯了,什么叫用 dotfiles 管理你的 dotfiles。第一个单词 dotfiles 指将 HOME 目录下的 .XXX (它们是真的字面意思dotfiles) 文件同步到 Github 上的方式。通常情况下,我们在开发过程中装的大部分工具,都会在 HOME 目录下创建一个以 . 开头的文件或目录,放置配置或者状态。因此我们希望的是用 github 版本管理这些 配置 ,而不是 状态

Monadic Reactive Programming in JavaScript

当我们都用习惯 Promise Monad 之后,我再来介绍一个跟时间相关的 Monad reactive prograaming 中的 Stream

入语言第二试: readtable 与 core.async

ru-lang version 0.2.1 新特性,引入 core.async 及 readtable



自制语言初试 - 入lang


JavaScript玩转Clojure大法之 - Macro (1)


JavaScript玩转Clojure大法之 - Trampoline

在函数式编程中, 递归可以说是最关健甚至唯一的循环手段, Clojure的recur可以保证得到 尾递归 优化, 而相互递归则不能用recur来保证得到优化, 因此, 另一个大法出现了 – Trampoline


通过上一篇Clojure风格的JavaScript并发编程介绍了如何用JavaScript享受到Clojure在并发编程的优势. 我决定写一系列关于如何用JavaScript玩转Clojure大法的文章. 这回要用简单的JavaScript玩转另一个Clojure的全新的概念 – Transducer.

Functional JavaScript Mini Book


Literal Programming Emacs Configure

the article that generate my emacs config

Clojure 风格的 JavaScript 并发编程

用原生 javascript es6 实现类似clojure core.async 风格的异步任务, 拜拜 callback hell

Essential EcmaScript 6

新的草案(虽然说是草案,但你可以看到 Firefox 其实已经实现大部分的feature)离我们越来越近了, 而且我们已经可以通过 babel 在项目中使用这些新的features. 是时候让我们重新认识一下 JavaScript 了. 下面列出了一部分比较让人兴奋和期待的features.

Clojure The Mini Book

Why we need to learn clojure and why it's so awesome

make Bamboo support Github Pull Request with Status API

bamboo does not come with native support of github commit status api, but we can still hack it to do the similar thing for our pull request

About Me