gpt4 book ai didi

f# - f# 中的神秘类型检查错误(当出现 ?12345 :> ISomething) 时丢失

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

我有一个 F# 片段没有正确输入。我猜我需要将 'a1 和 'b1 限制为 ISomething 但我不知道如何。有两个错误,都在底线上。 f 和 g 在 RHS 上的使用带有下划线,错误消息如下: A type parameter is missing a constraint 'when '?123456 :> ISomething' 唯一的区别是 g 的消息包含一个神秘的数字 1 大于那对于f。非常感谢。

type ISomething =
abstract getint : int

type IOther<'a, 'b> =
abstract map : ('a->'a1) -> ('b->'b1) -> IOther<'a1, 'b1>

type sometype<'a, 'b when 'a :> ISomething and 'b :> ISomething> (a:'a, b:'b) =

member this.map (f:'a->'a1) (g:'b->'b1) : sometype<'a1, 'b1> = sometype (f a, g b)

interface IOther<'a, 'b> with
member x.map (f:'a->'a1) (g:'b->'b1) = x.map f g :> IOther<'a1,'b1>

最佳答案

这里的问题是你的 map 函数专门构造了一个 sometype实例。

在这种情况下,因为您要创建一个 IOther<'a, 'b>直接使用本地 map 功能, map 功能需要 'a1'b1实现ISomething (因为您创建了一个新的 sometype 实例),接口(interface)实现缺少约束。

在这种情况下您可以通过将约束添加到 IOther<'a, 'b> 来解决它的 map 功能,即:

type IOther<'a, 'b> =
abstract map<'a, 'b, 'a1, 'b1 when 'a1 :> ISomething and 'b1 :> ISomething> : ('a->'a1) -> ('b->'b1) -> IOther<'a1, 'b1>

这会导致 sometime.map函数在您指定的约束范围内工作,尽管它限制了所有 IOther<'a, 'b>仅适用于 ISomething 的实例.

如果这还不够,另一个选择是更改 sometype.map构造一个没有约束的类型。

关于f# - f# 中的神秘类型检查错误(当出现 ?12345 :> ISomething) 时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999943/

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