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

Age*_*uid 5 haskell functional-programming functor

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

>> (fmap length Just) [1, 2, 3]
1
Run Code Online (Sandbox Code Playgroud)

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

>> fmap length $ Just [1, 2, 3]
Just 3
Run Code Online (Sandbox Code Playgroud)

第一种情况发生了什么?

Dan*_*ner 11

在第一种情况下,你所得到的功能情况Functor,为此fmap = (.),所以:

fmap length Just [1,2,3]
=
(length . Just) [1,2,3]
=
length (Just [1,2,3])
Run Code Online (Sandbox Code Playgroud)

说s的长度为s 且长度为s 的Foldable实例- 如果你认为有点像s中最多有一个s 的集合,这是非常明智的.MaybeNothing0Just1Maybe aaa

  • @AgentLiquid [Functor`的文档](https://hackage.haskell.org/package/base-4.10.1.0/docs/Prelude.html#t:Functor)包含一个实例列表; 单击该列表中` - >`实例旁边的"Source". (2认同)