当我思考更有用的标准类别时,建议将其链接到此类别
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
的结果字段中包含相同类型的值,而且可能存在其他“更好”的可想象签名。
有什么想法吗?