相关疑难解决方法(0)

如何以及为什么在Haskell中将ap定义为liftM2 id

在尝试更好地理解Applicative的同时,我查看了<*>的定义,该定义往往被定义为ap,后者又被定义为:

ap                :: (Monad m) => m (a -> b) -> m a -> m b
ap                =  liftM2 id
Run Code Online (Sandbox Code Playgroud)

查看liftM2和id的类型签名,即:

liftM2  :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
id                      :: a -> a
Run Code Online (Sandbox Code Playgroud)

我无法理解如何通过传递id,类型签名的相关部分似乎从转换(a1 -> a2 -> r) -> m a1m (a -> b).我在这里错过了什么?

haskell applicative

12
推荐指数
1
解决办法
1078
查看次数

如何使用约束构造Applicative实例(类似于使用ContT构造Monad实例)

这个问题涉及Monad从monad中构造一个适当的实例,但仅限于某些约束 - 例如Set.诀窍在于将其包装成ContT,这会将约束推迟到包装/展开其值.

现在我想用Applicatives 做同样的事情.特别是,我有一个pure具有类型类约束的Applicative实例.如何构建有效的实例有类似的技巧吗?Applicative

(是否有"所有应用函子的母亲"就像monad一样?)

haskell type-constraints applicative category-abstractions

12
推荐指数
2
解决办法
237
查看次数

monoid和applicative是如何连接的?

我正在阅读有关应用程序并尝试理解它的haskellbook.

在书中,作者提到:

因此,使用Applicative,我们的结构和功能应用为我们的价值观提供了Monoid!

monoid如何连接到applicative?

haskell

12
推荐指数
1
解决办法
452
查看次数

什么意味着"在函子内部的功能"

在类别理论中,仿函数是两个类别之间的同态.在Haskell中,它表示applicative functor允许我们在"functor"中应用函数.是否可以将"函数内部的函数"转换为数学或提供其他一些见解?(我知道,仿函数可以Maybe,[]等等,但仍然在努力理解这一概念.)

haskell category-theory

10
推荐指数
1
解决办法
303
查看次数

它不是单子,但它是什么?

根据Haskell wikibook,一个Monad被调用的mFunctor另外两个操作:

unit :: a -> m a
join :: m (m a) -> m a
Run Code Online (Sandbox Code Playgroud)

这很好,但我有一些不同的东西.粉饰血淋淋的细节,我有一个具有良好的类型unitjoin功能,但它fmap没有得到很好的表现(fmap g . fmap f不一定fmap (g.f)).因此,它不能成为一个实例Monad.尽管如此,我还是希望尽可能多地提供通用功能.

所以我的问题是,什么类别的理论结构与monad相似,因为他们有a unitjoin

我意识到在某种程度上,上述问题是不明确的.对于monad而言unit,join定义仅在fmap定义方面有意义.没有fmap,你不能定义任何monad法则,所以任何unit/的定义join都同样"有效".所以我正在寻找除了fmap在这些unitjoin函数上定义一些"非monad"定律可能有意义的函数.

monads haskell category-theory

10
推荐指数
1
解决办法
702
查看次数