并集/交集类型和(共)单子之间的关系

Chr*_*hse 5 monads haskell types typescript

在探索 Typescript 时,我注意到并集和交集类型(实例化一个参数)的推理规则分别明显类似于 monad 和 comonad。通过一些暗示性的命名,我们有

type Union X = X | B
join: Union (Union X) == Union X
pure: X <: (Union X)

type Intersect X = X & B
dup: Intersect X == Intersect (Intersect X) 
extract: Intersect X <: X
Run Code Online (Sandbox Code Playgroud)

这些看起来像(共)单子的严格版本,并且满足(共)单子定律的类似物,除了它们不是内函子(bind是我们能达到的最接近的函map子,并且必须单独实现)。

这只是一个可爱的巧合还是有更深层次的原因?