関数を使用する前に 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 に関するこの他の回答を参照してください。ここで、ミニ チュートリアルを作成しました。