Lorsque vous travaillez avec un Bifunctor
, nous avons accès aux fonctions "carte" first
et second
. Donc, fondamentalement, c'est un Functor
qui nous permet de fmap
de deux façons différentes.Existe-t-il un équivalent Monoid de Bifunctor?
Y a-t-il quelque chose comme ceci pour Monoid
? Un concept qui nous permet d'ajouter de deux manières différentes? Par exemple, imaginez un type Matrix
opaque. Ce n'est pas une liste de listes ou un vecteur de vecteurs, nous n'avons aucune idée de la façon dont elle est structurée à l'intérieur, mais nous savons que nous pouvons y ajouter des lignes et des colonnes.
Y aurait-il une classe de type autorisée à le faire?
class X a where
firstAppend :: a -> a -> a
secondAppend :: a -> a -> a
instance X Matrix where
firstAppend = appendRow
secondAppend = appendColumn
Je ne suis pas au courant de la norme de quoi que ce soit défini . Vous pourriez certainement le définir vous-même. Je ne suis pas sûr de la valeur car au niveau du type il n'y a rien à différencier. Je pense qu'une solution plus appropriée pourrait être wrapper 'newtype' et deux instances différentes, semblables à' Product' et 'Sum' dans' Data.Monoid'. – ryachza
Ouais @ryachza Je pense que cela pourrait être une solution plus appropriée. –
Ceci est régulièrement effectué de manière ad hoc, par ex. [dans les diagrammes] (http://hackage.haskell.org/package/diagrams-lib-1.4.1.2/docs/Diagrams-TwoD-Combinators.html#v:-61--61--61-), [matrice ] (http://hackage.haskell.org/package/matrix-0.3.5.0/docs/Data-Matrix.html#g:9) ou [hmatrix] (http://hackage.haskell.org/package/hmatrix -0.18.1.0/docs/Numeric-LinearAlgebra-Data.html # g: 12). – leftaroundabout