<$ in in Maybe定义

ech*_*cho 2 haskell

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中的工具.谢谢.

Ry-*_*Ry- 6

(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)


bax*_*iwe 6

问题是你打字了(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)