11

これに提案するより便利な標準クラスを考えながら

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 つの型の両方を抽出することができます。うーん、もしかしたら彼らはextractedできるの?

どちらのパッケージにも と呼ばれるものが含まれcomonadていないことが判明しました。質問は、そのようなクラスはカテゴリ理論的に意味があるでしょうか? (これも定義されておらず、どのように見えるかを実際に確認できませんでした)とは異なり、単純な定義はもっともらしいようです:bifunctorsBicomonadBimonad

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同じ型が含まれており、他にもおそらく「より良い」と考えられるシグネチャがかなりの数あることに不安を覚えます。

何かご意見は?

4

1 に答える 1

1

これは答えではありませんが、については、これはBimonadどうですか?

class Biapplicative p => Bimonad p where
  (>>==) :: p a b -> (a -> b -> p c d) -> p c d

biap :: Bimonad p => p (a -> b) (c -> d) -> p a c -> p b d
biap p q = p >>== \ab cd -> q >>== \a c -> bipure (ab a) (cd c)

instance Bimonad (,) where
  (a,b) >>== f = f a b

これが断固として正しい/興味深いものなのか、それとも少しでも役立つものなのかはわかりませんが、Haskell の観点からは適切な匂いがします。Bicomonadそれはあなたのまたは似たようなものと一致しますか?

于 2016-11-28T00:44:17.567 に答える