Magma Algebraic structure
Typescript Functional Programming fp-ts algebra
Magma 為代數結構的一種,擁有最單純定義,卻是其他代數結構的基礎。
定義
有一個集合與運算 ,隨意取出 中兩個元素 和 ,將兩者做運算的結果仍為集合 內的元素。
而在 fp-ts 的 interface 是這樣定義的
interface Magma<A> {
readonly concat(first: A, second: A) => A
}
這裡的 A 就是你要給的集合 ,concat 就是你要定義的運算 。
實例
假設我要定義數字的相加的 Magma,會寫成這樣:
const MagmaAdd: Magma<number> = {
concat: (first, second) => first + second,
};
加法太好聯想的,來點不一樣的,座標相加:
type Coord = {
x: number;
y: number;
};
const MagmaCoordAdd: Magma<Coord> = {
concat: (first, second) => ({ x: first.x + second.x, y: first.y + second.y }),
};
結合律?交換律?
這是我們要注意的點,Magma 本身並沒有要求你要達成結合律跟交換律特性,只是我們用的加法剛好有而已,所以我們只要達成定義上 的條件,即可成為 Magma