OS.FileSys.mkDir 当目录已经存在时不会引发异常

OS.FileSys.mkDir that does not raise exception when the directory already exists

我正在尝试编写一个创建目录但在目录已存在时不会引发错误的函数。这是函数:

fun ensureDir s =
  (OS.FileSys.mkDir s)
  handle OS.SysErr (_, SOME Posix.Error.exist) => ()

我的模式 OS.SysErr (_, SOME Posix.Error.exist) 是基于以下事实:当目录已经存在时 OS.FileSys.mkDir 失败并显示以下错误消息:

但是,当我尝试在 Poly/ML shell:

中定义函数时出现此错误
poly: : error: qualified name Posix.Error.exist illegal here
Static Errors

这是SML/NJ中的错误:

Error: variable found where constructor is required: Posix.Error.exist

我在函数定义中犯了什么错误?

(Poly/ML 5.7.1; SML/NJ 110.79; Ubuntu 20.04)

Posix.Error.exist 是一个 val 而不是构造函数(如 SOME)所以 您不能将它用作模式匹配构造中的模式。这里 是您打算执行的等效代码。

fun ensureDir s =
  (OS.FileSys.mkDir s)
  handle e as (OS.SysErr (_, SOME err)) =>
      if err = Posix.Error.exist
      then ()
      else raise e
;