Haskell 在do表示法中使用where语句

Haskell 在do表示法中使用where语句,haskell,Haskell,是否有一些方法可以使用do表示法中的where语句而不会带来不便: x = do putStrLn "Enter file name" fileName <- getLine putStrLn "Enter file extension" fileExt <- getLine doIO $ fileName ++ "." ++ fileExt doSomeMoreIO $ fileName ++ "." ++ fileExt x=do putStrLn

是否有一些方法可以使用do表示法中的where语句而不会带来不便:

x = do
  putStrLn "Enter file name"
  fileName  <- getLine
  putStrLn "Enter file extension"
  fileExt   <- getLine
  doIO $ fileName ++ "." ++ fileExt
  doSomeMoreIO $ fileName ++ "." ++ fileExt
x=do
putStrLn“输入文件名”

文件名
其中
,否。
,是:

x = do
  putStrLn "Enter file name"
  fileName  <- getLine
  putStrLn "Enter file extension"
  fileExt   <- getLine
  let file = fileName ++ "." ++ fileExt
  doIO file
  doSomeMoreIO file
x=do
putStrLn“输入文件名”

fileName
let
是最简单的方法,但另一种选择可能是使用单独的函数:

x = do
  putStrLn "Enter file name"
  fileName  <- getLine
  putStrLn "Enter file extension"
  fileExt   <- getLine
  doFileIO $ fileName ++ "." ++ fileExt
  where
     doFileIO file = do
        doIO file
        doSomeMoreIO file
x=do
putStrLn“输入文件名”

文件名使用
do
中的
let file=…
where
无法访问像
fileName
这样的绑定。您可能也喜欢。我认为如果
where
子句可以以这种方式与
do
块一起使用,这将是一个非常好的特性。实际上,我有时需要在创建一个大的
let
语句内联,或者将一段代码移动到
where
子句中,其中包含一组参数,这些参数将仅绑定到
do
块中的相同名称和值。两者都使代码更难理解。@jberryman是的,我有同样的经验。尽管角落里有一大堆难题,当我戴上语言设计帽时,我不知道如何回答。