25得票3回答
究竟有哪些类别被应用函子所映射?

我一直在阅读有关应用函子的内容,但我很难协调范畴论和函数式编程中术语的不匹配。 虽然我查看了各种博客,但我用于此研究的最完整的资源是: 麦克布赖德和帕特森 - 带效果的应用编程(PDF) Gibbons&Oliveira- 迭代器模式的本质(PDF) Tomas Petricek - 使...

25得票2回答
单子绑定(>>=)运算符更接近于函数组合(链式调用)还是函数应用?

在我阅读的许多文章中,monad >>= 运算符被描述为表示函数组合的一种方式。但对我来说,它更接近于一种高级函数应用。($) :: (a -> b) -> a -> b (>>=) :: Monad m => m a -> (a -&...

24得票2回答
有逆变单子吗?

函子可以是协变的或者逆变的。这种协变/逆变的双重性质是否也适用于单子? 类似这样:class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b class...

24得票3回答
单子变换器与单子堆叠有什么不同?

在许多情况下,我不清楚使用转换器将两个单子合并起来是否比使用两个单独的单子更好。显然,使用两个单独的单子是麻烦的,可能会涉及到do表示法内的do表示法,但是否有一些情况下它就是表达不够充分呢? 一个例子似乎是StateT on List:组合单子不能得到正确的类型,如果你通过类似Bar(其中...

23得票5回答
为什么Functor类没有返回函数?

从范畴论的角度来看,函子是一对映射(一个在对象之间,另一个在范畴的箭头之间),遵循一些公理。 我假设每个函子实例都类似于数学定义,即可以映射对象和函数,但Haskell的Functor类只有将函数映射的fmap函数。 为什么呢? 更新:换句话说: 每种Monad类型M都有一个函数ret...

23得票3回答
Haskell中的functor与范畴论中的functor有什么关系?

据我了解,函子是两个范畴之间的映射,例如从中的对象到中的对象,其中和是范畴。在Haskell中,有一个名为Hask的范畴,其中对象是Haskell类型,态射是Haskell函数。然而,Functor类型类具有函数fmap,它将这些类型(因此是对象而不是范畴本身)之间进行映射:fmap :: (...

22得票3回答
`pure` 在 Applicative Functor 中的作用是什么?

遇见了Applicative 类型类。它位于 Control.Applicative 模块中,定义了两个方法 pure 和 <*>。 它们都没有提供默认实现,因此如果我们想要将某个东西作为应用函子,就必须定义这两个方法。 我试图理解谁在使用 pure 函数。我确实使用 (<...

22得票2回答
有没有叫做“半单子”或“计数器单子”的东西?

好的,我正在学习 Haskell Monad。当我阅读维基百科范畴论文章时,我发现单子态射的签名看起来很像逻辑中的重言式,但你需要将 M a 转换为 ~~A,这里的~表示逻辑否定。 return :: a -> M a -- Map to tautology A => ~~A, ...

21得票2回答
`DList`和`[]`与Codensity之间的关系是什么?

最近我一直在尝试使用 Codensity,它被认为可以将DList与[]等其他内容关联起来。不过,在查找相关代码时我并没有找到明确表述这种关系的代码。经过一些尝试后,我得出了以下结论:{-# LANGUAGE RankNTypes #-} module Codensity where new...

21得票2回答
在函数式编程的背景下,举升(lifting)与范畴论有何关系?

看着Haskell文档,lifting似乎基本上是fmap的泛化,允许映射具有多个参数的函数。 然而,维基百科对lifting的解释完全不同,它用范畴中的态射来定义"lift",以及它如何与范畴中的其他对象和态射相关联(这里我不会详细说明)。我猜如果我们考虑Cat(类别的范畴,因此使我们的态...