在Haskell中,我們使用術語「部分」來表示在中綴位置中使用的部分應用函數。例如,對於一個功能foo :: a -> b -> c和值x :: a和y :: b,我們有兩節 s1 = (x `foo`) :: b -> c == \b -> foo x b
和 s2 = (`foo` y) :: a -> c == \a -> foo a y
範疇論,然而,部分的fg被定義爲右逆的f(所
下面是我們如何定義KleisliFunctor: class (Monad m, Functor f) => KleisliFunctor m f where
kmap :: (a -> m b) -> f a -> f b
kmap f = kjoin . fmap f
kjoin :: f (m a) -> f a
kjoin = kmap id
它看起來好像轉換應該形成一個Monoid,其中標識函數爲空元素,標準函數組合爲二元運算。我認爲這不是特別有用,但它應該是可能的。沿着線的東西: instance Monoid (a -> a) where
mempty = id
mappend f g = (.)
以上不編譯,可能是因爲它是由預先存在的定義屏蔽 instance Monoid b => Monoid (
在沉思些什麼有用的標準類建議to this one 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
我目前正在爲我的謹慎數學課程開發一個個人項目,並試圖在Haskell中形式化集合論。我們課堂中定義的一個集合是特定宇宙元素的任意嵌套。我選擇了代表這是事實上的標準嵌套列表: data Set a where
Empty :: Set a
Elem :: a -> Set a -> Set a
Set :: Set a -> Set a -> Set a
作爲一個懶
使用Bifunctor時,我們可以訪問first和second「地圖」功能。所以基本上這是一個Functor,允許我們以兩種不同的方式fmap。 有沒有像Monoid這樣的東西?一些概念允許我們以兩種不同的方式追加? 例如,假設一個不透明的Matrix類型。它不是列表或矢量矢量列表,我們不知道它是如何在內部構造的,但我們知道可以將行和列附加到它。 會有一些類型的類允許這樣做嗎? class X a