gpt4 book ai didi

ocaml 多态变体类型 推断类型太笼统

转载 作者:行者123 更新时间:2023-12-01 10:18:14 26 4
gpt4 key购买 nike

我有这个代码

let my_fun: [`X | `Y | `Z] -> [`Z | `Y] = function
| `X -> `Y
| x -> x

它不会与消息一起编译
11 |   | x -> x
^
Error: This expression has type [ `X | `Y | `Z ]
but an expression was expected of type [ `Y | `Z ]
The second variant type does not allow tag(s) `X

为什么编译器不能推断类型 [Z | Y] 如果很清楚 `X 永远不能从函数中返回?

最佳答案

如果 x 的类型被推断为 [`Y | `Z] , 那么它不能用于类型 [`X | `Y | `Z]这会很奇怪,因为它绑定(bind)到该类型的参数。

您可以使用 as模式来获得具有精细类型的绑定(bind),如下所示:

let my_fun: [`X | `Y | `Z] -> [`Y | `Z] = function
| `X -> `Y
| (`Y | `Z) as yz -> yz
#type_name如果您想对许多情况下的多态变体执行此操作,模式可能非常有用。

关于ocaml 多态变体类型 推断类型太笼统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867614/

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