在沉思些什么有用的标准类建议to this one双共同体的方法是什么?
class Coordinate c where
createCoordinate :: x -> y -> c x y
getFirst :: c x y -> x
getSecond :: c x y -> y
addCoordinates :: (Num x, Num y) => c x y -> c x y -> c x y
它发生我,而不是其他VectorSpace
-y或R2
,一个较为普遍的野兽可能潜伏在这里:一个Type -> Type -> Type
它的两个包含类型都可以提取。嗯,也许他们可以是extract
ed?
结果都不是comonad
也不是bifunctors
包中包含所谓的Bicomonad
。问题是,从类别理论上讲,这样的班级是否有意义?不像Bimonad
(其中还没有定义,我也实在看不出可能是什么样子),一个天真的定义似乎也合情合理:
class Bifunctor c => Bicomonad c where
fst :: c x y -> x
snd :: c x y -> y
bidup :: c x y -> c (c x y) (c x y)
与法律
fst . bidup ≡ id
snd . bidup ≡ id
bimap fst snd . bidup ≡ id
bimap bidup bidup . bidup ≡ bidup . bidup
可能,但我觉得它令人不安的是bidup
的结果的两个字段都包含相同的类型,并且还有许多其他的,也许是“更好”的可想象的签名。
有什么想法?
不是答案,而是:(co)monad只是** endo **仿函数的范畴中的一个(复合)monoid(具有仿函数构成作为张量积),对吗? Haskell双刃管不是内管工。所以我不确定一个真正的双(单)monad会是什么样子,或者即使在双功能器之上构建这样一个事情也是有意义的。但也许还有一些有用的东西看起来“有点像”双生子,所以它仍然是一个有趣的问题。 –