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)
因此,我的问题是:是否有一些标准方法来处理这种情况?
您还可以通过模式匹配处理多个案例,避免厄运金字塔。
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)