在 Haskell 标准库的帮助下重构这样的虚拟代码的最佳方法是什么?

Ser*_*bov 2 refactoring haskell

我目前正在处理用 Haskell 编写的相当肮脏的项目。它包含很多代码,例如:

try_parse_parameters (p:ps) kvps options = 
        let maybeKvp = try_parse_kvp p 
        in
          if isJust maybeKvp 
            then try_parse_parameters ps ((fromJust maybeKvp) : kvps) options
            else 
              let maybeOption = try_parse_option p
              in 
                if isJust maybeOption
                  then try_parse_parameters ps kvps ((fromJust maybeOption) : options)
                  else try_parse_parameters ps kvps options
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:是否有一些标准方法来处理这种情况?

Eug*_*uge 5

您还可以通过模式匹配处理多个案例,避免厄运金字塔

try_parse_parameters (p:ps) kvps options = 
    case (try_parse_kvp p, try_parse_option p) of
      (Just k, _)       -> try_parse_parameters ps (k : kvps) options
      (Nothing, Just o) -> try_parse_parameters ps kvps (o : options)
      (Nothing, Nothing)-> try_parse_parameters ps kvps options
Run Code Online (Sandbox Code Playgroud)