在使用之前将函数应用于 IO 操作的结果是很好的描述fmap
。
askPointer = do
newInput <- fmap (map toUpper) getLine
[..here I will re-use new Input..]
return ()
所以这里fmap
完全符合您的要求 - 它适用map toUpper
于getLine
您将其绑定到newInput
.
在您的解释器中尝试这些(ghci/hugs):
fmap reverse getLine
fmap tail getLine
fmap head getLine
fmap (map toUpper) getLine
如果你import Data.Functor
或,你可以使用 ,的import Control.Applicative
中缀版本fmap
:<$>
reverse <$> getLine
tail <$> getLine
head <$> getLine
map toUpper <$> getLine
这意味着你也可以写
askPointer = do
newInput <- map toUpper <$> getLine
[..here I will re-use new Input..]
return ()
fmap
确实是一个非常有用的功能。您可以在关于 fmap的其他答案中阅读更多内容,我最终在其中编写了一个迷你教程。