在多态性不足的情况下,为什么我们需要`bbb:B => B => B`?

时间:2016-10-14 13:14:08

标签: scala haskell

insufficiently-polymorphic

中的

为什么作者添加第三个参数:bbb: B => B => B从b到b到b是什么意思,为什么我们需要这样的东西?

  

让我们说我们更进一步,并介绍更多   多态进入代码,隐藏第二个参数的事实   和返回值是列表:

foo :: forall a b. List a -> (a -> b) -> (b -> b -> b) -> b -> b
def foo[A, B](as: List[A], b: B, ab: A => B, bbb: B => B => B): B

为什么突然出现从a到b的转换函数:ab: A => B我们在原始代码中没有这个,为什么会添加?

1 个答案:

答案 0 :(得分:4)

稍后在帖子中暗示了进一步的通用版本:

expect ftpScript myToken filesToSend/*

半群只是一种支持二进制附加操作的结构,例如

foo :: forall f a r. (Foldable f, Semigroup r) => f a -> (a -> r) -> r -> r

所以trait Semigroup[T] { def append(v1: T, v2: T): T } 接受一个输入列表,一个函数将每个列表元素映射到一个适当的半群实例(函数foo和一个半群的a -> b操作。最后{{} 1}}参数是要累积的初始值。

append然后简单地遍历列表,将当前累加器与当前列表项关联的值组合在一起。

b

列表形成一个半群,其中foo只附加两个列表。