Prelude> (fmap . const ) 2 Just 3
2
Prelude> 2 <$ Just 3
Just 2
Prelude> :t (<$)
(<$) :: Functor f => a -> f b -> f a
Prelude> :t fmap . const
fmap . const :: Functor f => b -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
在仿函数中,
(<$) = fmap . const
Run Code Online (Sandbox Code Playgroud)
为什么我为Maybe得到不同的结果?没找到<$在Maybe中的工具.谢谢.
(fmap . const) 2 Just 3相当于((fmap . const) 2 Just) 3,其中2 <$ Just是const 2和const 2 3是2.
你的意思是:
(fmap . const) 2 $ Just 3
Run Code Online (Sandbox Code Playgroud)
问题是你打字了(fmap . const) 2 Just 3.我相信你的意思是相当的(fmap . const) 2 (Just 3).在前者中,该功能fmap . const被应用到三个参数,即2,Just和3和,在后者中,你的表现的确等同于2 <$ Just 3.
> (fmap . const) 2 (Just 3)
Just 2
> 2 <$ Just 3
Just 3
Run Code Online (Sandbox Code Playgroud)