在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