我正在编写一个逻辑非常复杂的循环脚本:
main = do
inFH <- openFile "..." ReadMode
outFH <- openFile "..." WriteMode
forM myList $ \ item ->
...
if ...
then ...
else do
...
case ... of
Nothing -> ...
Just x -> do
...
...
代码很快就会向右飞,因此我考虑将其分成几个部分,例如使用
where
子句。问题是,许多这些...
包含读取/写入语句到两个句柄inFH
和outFH
,使用where
语句会使这两个名称失去上下文。每次使用where
语句时,我都必须发送这两个变量。
有更好的处理方法吗?
let
的原因之一是它翻转了阅读顺序——我首先定义步骤的一部分,然后才是其他部分的流程。另外,我也不喜欢给逻辑流程的一部分命名,这也是我想避免使用where
的另一个原因。 - xzhu