Guy*_*der 3 f# ocaml types external
我正在将OCaml Format模块转换为F#; 看我早先的问题.
开始我改变了
类型大小
external size_of_int:int - > size ="%identity"
external int_of_size:size - > int ="%identity"
至
让size_of_int = sizeof
<int>
以及我知道的一些其他调整是不正确的,但它允许我转换所有与open_box相关的代码,而close_box期望这三行.
现在我必须更改这三行,以便我可以测试我转换的格式模块的子集.
我知道在外部使用size_of_int和int_of_size的行可能依赖于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
Run Code Online (Sandbox Code Playgroud)
它允许我的Format模块子集成功编译.
编辑
杰克,下面回答,有一个版本在FSharpx.Compatibility.OCaml.Format.Format.fs 我还没有测试过它,但它是我目前发现的最具竞争力的版本.
这些线:
type size
external size_of_int : int -> size = "%identity"
external int_of_size : size -> int = "%identity"
Run Code Online (Sandbox Code Playgroud)
创建一个与int相同的抽象类型.转换函数是无操作(标识函数).我不知道F#习语,但在OCaml中你可以使用一个接口文件,并避免使用"%identity"的聪明.
(* Interface file *)
type size
val size_of_int : int -> size
val int_of_size : size -> int
(* Implementation file *)
type size = int
let size_of_int i = i
let int_of_size s = s
Run Code Online (Sandbox Code Playgroud)
希望这更容易转化为F#.
| 归档时间: |
|
| 查看次数: |
367 次 |
| 最近记录: |