我正在将 OCaml格式模块转换为 F#;请参阅我之前的问题。
开始我改变了
字体大小
外部 size_of_int : int -> size = "%identity"
外部 int_of_size : 大小 -> int = "%identity"
到
让 size_of_int = sizeof
<int
>
以及一些我知道不正确的其他调整,但它允许我转换与 open_box 和 close_box 相关的所有代码,期望这三行。
现在我只需要更改这三行,以便我可以测试我转换的格式模块的子集。
我知道带有 size_of_int 和 int_of_size 而 external 的行可能依赖于 F# 核心中的某些功能。我也知道转换可能会忽略%identity 。
我最好的猜测是我只需要使用 size_of_int 和 int_of_size 创建一个名为 size 的简单类型,但是如何?
编辑
根据Jeffrey Scofield的回答,我能够创建以下 F# 代码。
type size =
interface
abstract size_of_int : int -> size
abstract int_of_size : size -> int
end
type size = int
let size_of_int i = i
let int_of_size s = s
这使我的 Format 模块的子集能够成功编译。
编辑
下面回答的Jack在FSharpx.Compatibility.OCaml.Format.Format.fs有一个版本, 我没有测试过,但它是我目前找到的最完整的版本。