gpt4 book ai didi

module - Ocaml 值与模块和签名中的参数化类型不匹配

转载 作者:行者123 更新时间:2023-12-01 23:21:35 25 4
gpt4 key购买 nike

我正在尝试做 http://okmij.org/ftp/tagless-final/nondet-effect.html#no-functor 中的扩展练习之一并将 int_t 类型替换为 'a repr。在尝试执行此操作时,我遇到了以下错误:

Values do not match:
val cons : '_a repr -> '_a list_t -> '_a list_t
is not included in
val cons : 'a repr -> 'a list_t -> 'a list_t

我的 cons 实现看起来像

let cons: 'a repr -> 'a list_t -> 'a list_t =
liftm2 (fun h t -> h::t)

这绝对有正确的类型。为什么这些看似相同的类型不兼容?

最佳答案

制作一个最小的例子帮助我解决了问题!我能够将失败的情况减少到这样:

module type Test = sig
type 'a t
val id: 'a t -> 'a t
end

module TestT: Test = struct
type 'a t = 'a

let id_maker () x = x
let id: 'a t -> 'a t =
id_maker ()
end

这表明我正在成为 value restriction 的受害者。this other stack overflow question中也有类似的问题,但我被模块错误消息误导了。我通过更改解决了问题

let cons: 'a repr -> 'a list_t -> 'a list_t =
liftm2 (fun h t -> h::t)

let cons: 'a repr -> 'a list_t -> 'a list_t =
fun h t -> liftm2 (fun h t -> h::t) h t

关于module - Ocaml 值与模块和签名中的参数化类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43826550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com