问题标签 [bifunctor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
640 浏览

scala - 什么是 ZIO 错误通道以及如何了解其中的内容?

ZIO( https://zio.dev/ ) 是一个 scala 框架,其核心是ZIO[R, E, A]数据结构,其站点为三个参数提供以下信息:

齐奥

数据类型具有ZIO[R, E, A]三个类型参数:

  • R- 环境类型。效果需要 type 的环境R。如果此类型参数为Any,则表示效果没有要求,因为您可以使用任何值(例如,单位值())运行效果。
  • E- 故障类型。效果可能会因 type 的值而失败E。一些应用程序将使用Throwable. 如果此类型参数为 Nothing,则表示效果不会失败,因为没有 Nothing 类型的值。
  • A- 成功类型。效果可能会以 type 的值成功A。如果此类型参数为Unit,则表示效果不会产生有用的信息,如果是Nothing,则表示效果将永远运行(或直到失败)。

很容易得到什么A是:它是函数在名义情况下返回的值,即我们编写函数的原因。 R是一种依赖注入 - 一个有趣的话题,但我们可以忽略它,始终ZIO将其设置为Any(实际上IO[E, A] = ZIO[Any, E, A]在 lib 中有一个别名)。

因此,它仍然E是用于错误的类型(著名的错误通道)。我大概明白这IO[E, A]是一种Either[E, A],但处理效果(这很棒)。

我的问题是:为什么我应该在我的应用程序中到处使用错误通道,我如何决定错误通道中应该包含什么?

0 投票
1 回答
83 浏览

haskell - 程序员从范畴论理解双函子 - Ch. 8

对程序员类别理论的第 8 章很感兴趣。

在 8.3 节中,Bartosz 定义了这种类型

在这里,如果我对 Haskell有所了解bffu, 和gu是类型构造函数,类型为bfkind(* -> *) -> (* -> *) -> * -> * -> *fuand (就像or一样),而, 和是 kind 的一般类型;左边是一个类型构造函数,写起来很长,而右边是一个值构造函数,所以它是 type 。gu* -> *Maybe[]ab*BiComp =BiComp (bf (fu a) (gu b)) -> BiComp bf fu gu a b

然后作者在and中做BiComp了一个双函子,前提是类型构造函数参数也是 a ,并且类型构造函数and是s:abbfBifunctorfuguFunctor

到目前为止一切顺利,在这一点上对我来说一切似乎都是合理的。除了对类型构造函数和值构造函数使用相同的名称可能会让我迷失方向。

现在我很想提出以下意见:

  • bimap定义右侧的那个是利用约束的那个:它是bimap假定在Bifunctor任何类型的构造函数的实例中定义的那个bf,因此它bimap有 type (a -> a') -> (b -> b') -> bf a b -> bf a' b';我认为这没有下面的那么有趣,因为它毕竟只是8.1 中呈现bimapBifunctor类型的签名;class
  • 相反,bimap左边的 是我们在其第 4 和第 5 个参数中定义BiComp的;Bifunctor以及参数f1f2是必须作用于类型实体的函数,这些实体是 的第 4 个和第 5 个参数BiComp;因此, thisbimap的类型是(a -> a') -> (b -> b') -> BiComp bf fu gu a b -> BiComp bf fu gu a' b'

它是否正确?

如果是这样,那么我不明白以下内容

因为这是bimap右边的类型,我在上面的要点中写的那个,除了它是用a= fu aa'=等写fu a'的。

我是否遗漏了什么(或过度思考......)?

0 投票
1 回答
91 浏览

haskell - 这种类型是有效的“rank-2 双函子”吗?

rank2classes包提供一个版本,Functor其映射函数似乎是类型构造函数之间的自然转换。

按照这个想法,这是 2 级版本Bifunctor

似乎很清楚,Foo可以给这种类型一个Rank2Bifunctor实例:

但是Bar这种嵌套f和的类型呢g

对于初学者来说,似乎我们需要Functor p在 , 的签名中要求rank2bimap能够转换.gf

Bar有效的“rank-2 双函子”吗?

0 投票
1 回答
79 浏览

dictionary - 为什么 Data.Map.Map 不是双函子?

在 a 中存储数据时Map,我最近在寻找一个Bitraversable实例,因为我想遍历键和值。令我惊讶的是,我发现它Map甚至没有Bifunctor实例,即使first( mapKeys) 和second( map) 的实现都存在。

是否有特定的原因,或者这个决定只是为了最小化依赖关系?

谢谢

0 投票
2 回答
239 浏览

haskell - 这个双函子子集有名字吗?

双函子有一个带有这个签名的 map 函数:

你也可以有这样的地图:

具有此函数的类型是双函子的严格子集(您始终可以定义bimapusing othermap,但反之则不行)。第二个签名有名字吗?

追问:这个中间函数呢?