使用Bifunctor
時,我們可以訪問first
和second
「地圖」功能。所以基本上這是一個Functor
,允許我們以兩種不同的方式fmap
。是否有一個Monoid相當於Bifunctor?
有沒有像Monoid
這樣的東西?一些概念允許我們以兩種不同的方式追加?
例如,假設一個不透明的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'。 – 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 /文檔/數字-LinearAlgebra-Data.html#克:12)。 – leftaroundabout