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
在仿函数中,
(<$) = fmap . const
为什么我为Maybe得到不同的结果?在Maybe中找不到<$
的实现。感谢。
答案 0 :(得分:6)
(fmap . const) 2 Just 3
相当于((fmap . const) 2 Just) 3
,其中2 <$ Just
为const 2
,const 2 3
为2
。
你的意思是:
(fmap . const) 2 $ Just 3
答案 1 :(得分:6)
问题是您输入了(fmap . const) 2 Just 3
。我相信你的意思是(fmap . const) 2 (Just 3)
。在前者中,函数fmap . const
应用于三个参数,即2
,Just
和3
,而在后者中,您的表达式确实等同于{{ 1}}。
2 <$ Just 3