Could you please help me to understand the meaning of this interface in typescript?
For my understanding when this interface is applied... an object must implement a function named map
not sure what <A, B>
means here.
If you could provide me a plain English "translation" I would really appreciate it.
interface Functor<M> {
map: <A, B>(f: (a: A) => B) => (ma: M<A>) => M<B>
}
答案 0 :(得分:1)
此接口(当前)在TypeScript中无效,因为TypeScript不支持higher kinded types,但意图仍然很清楚。
M
表示通用数据结构,例如Array
或Set
,可以使用给定类型对其进行参数化以保存该类型的元素(例如{{1} }或Array<number>
)。让我们以Set<string>
为例。 M = Array
实现采用一种类型为Functor<Array>
(A
或Array<A>
)的元素数组,并使用提供的函数{{将每个元素转换为类型A[]
1}};结果是类型为B
(f: (a: A) => B
或B
)的元素数组。只要您具有适当的函数Array<B>
来转换单个元素,此转换就可以用于任何类型的B[]
和A
。这就是B
在f: (a: A) => B
和map
中是通用的原因。实际上,人们会假设将使用等效于A
的{{1}}来实现。 B
是相同的想法,除了它将Functor<Array>
转换为Array.prototype.map
。
我希望这能解释TypeScript的角度。对于一般的函子的介绍,我做了a quick web search,发现其中两个看起来很有用(1,2)。