困惑(fmap length Just)[1,1,1,1] vs. fmap length $ Just [1,1,1,1]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了困惑(fmap length Just)[1,1,1,1] vs. fmap length $ Just [1,1,1,1]相关的知识,希望对你有一定的参考价值。

我理解parens强制执行不同的操作顺序,但我不太了解第一个结果:

>> (fmap length Just) [1, 2, 3]
1

虽然以下内容非常有意义 - 我们在Just结构上提升了长度函数,因此我们应该得到“Just [list of list]”:

>> fmap length $ Just [1, 2, 3]
Just 3

第一种情况发生了什么?

答案

在第一种情况下,您将获得Functor的函数实例,其中fmap = (.),所以:

fmap length Just [1,2,3]
=
(length . Just) [1,2,3]
=
length (Just [1,2,3])

FoldableMaybe实例说,Nothings有0的长度,而Justs有1的长度 - 如果你认为Maybe a有点像as的集合,其中至多有一个a,这是非常明智的。

以上是关于困惑(fmap length Just)[1,1,1,1] vs. fmap length $ Just [1,1,1,1]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们有map、fmap和liftM?

Haskell - 树的fmap和foldMap

Rx Java Android 中的困惑

为什么在fmap方法参数后评估getArgs?

在haskell中拆分使用和不使用fmap的输入读取的行

如果声明让我困惑