如何用简单的英语阅读`map:<a,b =“”>(f:(a:A)=> B)=>(ma:M <a>) =&gt; M<b>`

时间:2018-09-06 07:43:42

标签: typescript

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>
}

1 个答案:

答案 0 :(得分:1)

此接口(当前)在TypeScript中无效,因为TypeScript不支持higher kinded types,但意图仍然很清楚。

M表示通用数据结构,例如ArraySet,可以使用给定类型对其进行参数化以保存该类型的元素(例如{{1} }或Array<number>)。让我们以Set<string>为例。 M = Array实现采用一种类型为Functor<Array>AArray<A>)的元素数组,并使用提供的函数{{将每个元素转换为类型A[] 1}};结果是类型为Bf: (a: A) => BB)的元素数组。只要您具有适当的函数Array<B>来转换单个元素,此转换就可以用于任何类型的B[]A。这就是Bf: (a: A) => Bmap中是通用的原因。实际上,人们会假设将使用等效于A的{​​{1}}来实现。 B是相同的想法,除了它将Functor<Array>转换为Array.prototype.map

我希望这能解释TypeScript的角度。对于一般的函子的介绍,我做了a quick web search,发现其中两个看起来很有用(12)。