【发布时间】:2022-01-26 18:41:11
【问题描述】:
双函子有一个带有这个签名的地图函数:
bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
你也可以有这样的地图:
othermap :: ((a, c) -> (b, d)) -> p a c -> p b d
具有此功能的类型是双函子的严格子集(您始终可以使用othermap 定义bimap,但反之则不行)。第二个签名有名字吗?
跟进:这个中间函数呢?
halfothermap :: ((a, c) -> b) -> (c -> d) -> p a c -> p b d
【问题讨论】:
-
例如,如果您有
a或c,但不能同时拥有两者,您将如何为Either a c实现此功能? -
我认为这个类没有多大用处。它太强大了——任何实现该签名的双函子类型都必须与包裹在元组周围的普通函子同构。
-
我只看到提供的 Haskell 代码,并没有特定于 OCaml。 ocaml 标签真的相关吗? (如果这是一个带有 Haskell 示例的一般 FOP 问题,那么函数式编程标签可能更相关。
-
@Chris 好点,这实际上是一个 OCaml 问题,但我在 Haskell 中编写了它以改善回答者池。
-
在这种情况下,您可能希望编辑问题以澄清。
标签: haskell types functional-programming functor bifunctor