Bifunctor
を使用している場合は、first
とsecond
「マップ」機能にアクセスできます。ですから、基本的にはFunctor
で、fmap
の2つの異なる方法があります。Bifunctorに相当するMonoidはありますか?
Monoid
のようなものがありますか? 2つの異なる方法で追加できる概念
たとえば、不透明なMatrix
タイプを想像してください。リストやベクトルのベクトルではありませんが、内部でどのように構造化されているのかわかりませんが、行と列を追加できることはわかっています。
これを可能にするいくつかのタイプのクラスがありますか?
class X a where
firstAppend :: a -> a -> a
secondAppend :: a -> a -> a
instance X Matrix where
firstAppend = appendRow
secondAppend = appendColumn
私が定義されて何の標準を認識していませんよ。あなたは確かに自分でそれを定義することができます。タイプレベルでは区別するものがないので、私は価値があるかどうか分かりません。より適切な解決策は 'newtype'ラッパーと' Data.Monoid'の 'Product'と' Sum'に似た2つの異なるインスタンスであると思います。 – ryachza
ええ@ryachza私はそれがより適切な解決策かもしれないと思う。 –
これは通常、アドホックなやり方で行われます。 [図で](http://hackage.haskell.org/package/diagrams-lib-1.4.1.2/docs/Diagrams-TwoD-Combinators.html#v:-61--61--61-)、[matrix ](http://hackage.haskell.org/package/matrix-0.3.5.0/docs/Data-Matrix.html#g:9)または[hmatrix](http://hackage.haskell.org/package/hmatrix) -0.18.1.0/docs/Numeric-LinearAlgebra-Data.html#g:12)。 – leftaroundabout