大多数Haskell教程都教授IO使用do-notation.
我也开始使用do-notation,但这使得我的代码看起来更像是一种命令式语言而不是FP语言.
本周我看到一个教程使用IO <$>
stringAnalyzer <$> readFile "testfile.txt"
Run Code Online (Sandbox Code Playgroud)
而不是使用 do
main = do
strFile <- readFile "testfile.txt"
let analysisResult = stringAnalyzer strFile
return analysisResult
Run Code Online (Sandbox Code Playgroud)
并且日志分析工具没有完成do.
所以我的问题是" 在任何情况下我们都应该避免使用记号吗? ".
我知道do在某些情况下可能会使代码变得更好.
另外,为什么大多数教程都教IO do?
在我看来<$>,<*>使代码更多FP比IO.
如何reverse2lines转换成使用>>=语法?就像addOneInt变成了 addOneInt'?
addOneInt :: IO ()
addOneInt = do line <- getLine
putStrLn (show (1 + read line :: Int))
addOneInt' :: IO ()
addOneInt' = getLine >>= \line ->
putStrLn (show ( 1 + read line :: Int))
reverse2lines :: IO ()
reverse2lines =
do line1 <- getLine
line2 <- getLine
putStrLn (reverse line2)
putStrLn (reverse line1)
Run Code Online (Sandbox Code Playgroud)
另请考虑阅读后续问题及其有价值的答案.
haskell ×2