これに提案するより便利な標準クラスを考えながら
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
、より一般的な獣がここに潜んでいるのではないかと思いました: a にはType -> Type -> Type
、含まれている 2 つの型の両方を抽出することができます。うーん、もしかしたら彼らは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
同じ型が含まれており、他にもおそらく「より良い」と考えられるシグネチャがかなりの数あることに不安を覚えます。
何かご意見は?