如何解决Git.FS 后端可以使用 Irmin Linked_log 吗?
我想使用来自Linked_log
的Irmin_containers
https://mirage.github.io/irmin/irmin-containers/Irmin_containers/Linked_log/index.html
提供了两个函子来制作由 Linked_log
或 Mem
后端支持的 FS
。此外,还有一个 Make
函子,用于通过传递所有参数来实现完全可配置。
我想做一个由 Irmin_unix.Git.FS
商店支持的产品。
我正在努力浏览类型并找到正确的值以传递给各种函子。
现有的 Linked_log FS 函子 looks like:
module FS (C : Stores.Content_addressable) (V : Irmin.Type.S) () =
Make (Irmin_unix.FS.KV) (C) (Time.Machine) (Irmin.Hash.SHA1) (V) ()
我想我只想制作我自己的“GitFS”仿函数,它看起来几乎一样,但用 Irmin_unix.Git.FS.KV
代替 Irmin_unix.FS.KV
我的第一个问题是 Stores.Content_addressable
类型的 C
参数在这个文件中找到:
https://github.com/mirage/irmin/blob/5fd54838c5e8eb9bfa4c02170df30698f78b0201/src/irmin-containers/stores.ml
...但它没有导出。
有一系列复杂的包含需要遵循,但我想我最终找到了可以在我自己的代码中使用的正确签名。我能够定义:
module GitFSLinkedLog_maker (C : Irmin_containers.Cas_maker) (V : Irmin.Type.S) () =
Irmin_containers.Linked_log.Make (Irmin_unix.Git.FS.KV) (C) (Irmin_containers.Time.Machine) (Irmin.Hash.SHA1) (V) ()
...类型检查器可以接受。
我现在的问题是如何使用这个函子。
我认为 V
应该类似于 Irmin.Content.String
。不过,我不知道要为 C
传递什么。
我想我可以看看他们的测试。例如 here 他们这样做:
module CAS = struct
include Irmin.Content_addressable.Make (Irmin_mem.Append_only)
let config = Irmin_mem.config ()
end
module L = Irmin_containers.Linked_log.Mem (CAS) (Irmin.Contents.String) ()
这看起来很有希望。 Irmin_containers.Linked_log.Mem
相当于我的 GitFSLinkedLog_maker
。所以我需要将这样的结构作为 C
参数传递。
但是如果我将其复制并粘贴到我自己的代码中,则会出现构建错误:
51 | include Irmin.Content_addressable.Make (Irmin_mem.Append_only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: The module Irmin.Content_addressable is a functor,it cannot have any components
对我来说这似乎是非法代码时,这对他们有什么作用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。