【发布时间】:2018-04-14 07:10:08
【问题描述】:
在 fp-ts 中,他们为更高种类的类型提供了这种解决方法:
export interface HKT<URI, A> {
readonly _URI: URI;
readonly _A: A;
}
而且可以这样使用:
export interface Foldable<F> {
readonly URI: F;
reduce: <A, B>(fa: HKT<F, A>, b: B, f: (b: B, a: A) => B) => B;
}
_URI是什么成员,_A是什么成员?
【问题讨论】:
-
String是一种接地类型,即它具有值。让我们用*表示地面类型。[a]是参数化类型,因为它需要另一个接地类型a。因此它具有* -> *的形式并被称为一阶类型。现在一个高阶(或高阶)类型从参数化类型[]中抽象出来,并具有(* -> *) -> *的形式。_URI代表这个第一类参数化类型(* -> *)和_A代表地面类型*。这意味着Foldable的实例需要参数化类型(例如[])和地面类型(例如String)才能成为地面类型本身。
标签: typescript functional-programming fp-ts