什么!你老婆又要生了?

Scala Cats 初探

Cats logo

这次准备通过看一些厉害的包,学习Scala的语法。Scala Cats是用途非常广泛的一个包,提供了许多Type Class。将一一解构一下。

Kernel

Kernel 是 Cats包里最为基础的一个部分。它主要提供了非常有用的几个Type Class.

Type Class 父类 特征 说明 实例
SemiGroup Any combine: a->a->a 半群满足结合律 String上的append运算满足半群, Int上的+或者乘法也满足半群
Monoid SemiGroup 增加 empty: a 幺半群,幺代表有幺元,任意半群中元素和它结合依然是自己 String 上的空字符串,Int上加法的zero,乘法的1都是对应群的幺元
Group Monoid 增加逆元 inverse: a->a 群满足四个要素,其中封闭性显然满足,半群提供结合律,Monoid提供幺元,自己提供逆元 整数加法群的相反数,乘法群的倒数
Band SemiGroup 增加幂等约束 对于任何半群中元素xx=x,乘法表示的是群中的运算 布尔环,true and true is true, false and false is false
Commutative[Group/SemiGroup/Monoid] [Group/SemiGroup/Monoid] 增加交换律约束 显然很多运算都满足交换律 整数加法群乘法满足交换律,String Append不满足
Semilattice Band,CommutativeSemigroup 有结合律 (xy)z=x(yz);交换律 xy=yx;有蜜等xx=x 半格, 用来引出偏序关系,x<=y定义为xy=x,显然x<=x因为xx=x,显然x<=y<=z=>x<=z,因为xyyz=xyz=xz=xyy=x, 显然x<=y,y<=x=>x=y,因为xy=x=yx=y Bool上的and 运算
Bounded Semilattice Semilattice,CommutativeMonoid 有幺元有最大/最小值 用来引出全序关系, 显然x1=x 存在最小值 Bool上的and 运算

然后引出 Eq => Partial Order => Order