问题标签 [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.
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]
,但处理效果(这很棒)。
我的问题是:为什么我应该在我的应用程序中到处使用错误通道,我如何决定错误通道中应该包含什么?
haskell - 程序员从范畴论理解双函子 - Ch. 8
在 8.3 节中,Bartosz 定义了这种类型
在这里,如果我对 Haskell有所了解bf
,fu
, 和gu
是类型构造函数,类型为bf
kind(* -> *) -> (* -> *) -> * -> * -> *
和fu
and (就像or一样),而, 和是 kind 的一般类型;左边是一个类型构造函数,写起来很长,而右边是一个值构造函数,所以它是 type 。gu
* -> *
Maybe
[]
a
b
*
BiComp
=
BiComp
(bf (fu a) (gu b)) -> BiComp bf fu gu a b
然后作者在and中做BiComp
了一个双函子,前提是类型构造函数参数也是 a ,并且类型构造函数and是s:a
b
bf
Bifunctor
fu
gu
Functor
到目前为止一切顺利,在这一点上对我来说一切似乎都是合理的。除了对类型构造函数和值构造函数使用相同的名称可能会让我迷失方向。
现在我很想提出以下意见:
bimap
定义右侧的那个是利用约束的那个:它是bimap
假定在Bifunctor
任何类型的构造函数的实例中定义的那个bf
,因此它bimap
有 type(a -> a') -> (b -> b') -> bf a b -> bf a' b'
;我认为这没有下面的那么有趣,因为它毕竟只是8.1 中呈现bimap
的Bifunctor
类型的签名;class
- 相反,
bimap
左边的 是我们在其第 4 和第 5 个参数中定义BiComp
的;Bifunctor
以及参数f1
和f2
是必须作用于类型实体的函数,这些实体是 的第 4 个和第 5 个参数BiComp
;因此, thisbimap
的类型是(a -> a') -> (b -> b') -> BiComp bf fu gu a b -> BiComp bf fu gu a' b'
。
它是否正确?
如果是这样,那么我不明白以下内容
因为这是bimap
右边的类型,我在上面的要点中写的那个,除了它是用a
= fu a
,a'
=等写fu a'
的。
我是否遗漏了什么(或过度思考......)?
dictionary - 为什么 Data.Map.Map 不是双函子?
在 a 中存储数据时Map
,我最近在寻找一个Bitraversable
实例,因为我想遍历键和值。令我惊讶的是,我发现它Map
甚至没有Bifunctor
实例,即使first
( mapKeys
) 和second
( map
) 的实现都存在。
是否有特定的原因,或者这个决定只是为了最小化依赖关系?
谢谢
haskell - 这个双函子子集有名字吗?
双函子有一个带有这个签名的 map 函数:
你也可以有这样的地图:
具有此函数的类型是双函子的严格子集(您始终可以定义bimap
using othermap
,但反之则不行)。第二个签名有名字吗?
追问:这个中间函数呢?