F# 如果列表为空,如何修复List.head中的异常地狱

F# 如果列表为空,如何修复List.head中的异常地狱,f#,f#-interactive,f#-3.0,F#,F# Interactive,F# 3.0,我需要将列表的开头传递给list.fold。如果部门为空,对于以下情况,处理ArgumentException的功能解决方案是什么 let result = employees |> List.fold (...) (List.head departments) 这里是一个部门列表。为了清楚起见,我没有在这里指定fold函数 编写匹配模式会使我的代码变得很糟糕。您需要检查部门列表,如果该列表为空,则提供默认值。您可以为此提供一个助手函数: let headOrDefault def d

我需要将列表的开头传递给list.fold。如果
部门
为空,对于以下情况,处理
ArgumentException
的功能解决方案是什么

let result = employees 
|> List.fold (...) (List.head departments)
这里是一个部门列表。为了清楚起见,我没有在这里指定fold函数


编写匹配模式会使我的代码变得很糟糕。

您需要检查
部门
列表,如果该列表为空,则提供默认值。您可以为此提供一个助手函数:

let headOrDefault def d =
    match d with
    | [] -> def
    | _ -> List.head d
您可以这样使用:

let result = 
    employees 
    |> List.fold (...) (headOrDefault defDep departments)

如果
departments
不能为空,您可以使用
NonEmptyListI。我真的不明白为什么
let result=将departments与[]->匹配(d::ds)->List.fold(…)d
应该是awkard-我看不出有地狱;)
let result = employees 
|> List.fold (...) (NonEmptyList.head departments)