在思考什么更有用的标准类建议给这个
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 or R2
:a Type -> Type -> Type
,它的两个包含的类型都可以被提取。嗯,也许他们可以被extract
教育?
原来comonad
norbifunctors
包都不包含名为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
包含相同的类型,并且还有很多其他的,也许是“更好”的可以想象的签名。
有什么想法吗?