这里有两个非常简单的函数f
和g
.
{-# LANGUAGE ScopedTypeVariables #-}
module Test where
import Control.Applicative
f :: IO ()
f = do
y <- (<*>) (pure (show . (*10))) (read <$> readFile "data")
writeFile "out" y
g :: IO ()
g = do
y <- (readFile "data" >>= return . show . (*10) . read)
writeFile "out" y
读取和写入的文件*10
以和f
的应用样式写入。读取和写入的文件以monadic 样式写入,带有. (我故意避免使用in来强调下面的问题)。pure
(<*>)
*10
g
>>=
liftM
g
f
和之间的语义区别是什么g
?或者在这种情况下,它只是一种风格选择吗?