gpt4 book ai didi

types - 如何在模式匹配的每个分支中返回不同类型的值

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

在 OCaml 中,如何在模式匹配的不同分支中返回不同类型的值?

示例代码:

type t =
| Int of int
| Bool of bool

let f x =
match x with
| Int i -> i
| Bool b -> b

但是,这将失败并显示错误:此表达式的类型为 bool,但表达式应为 int 类型

我试图通过使用本地抽象类型来解决这个问题:

type _ t =
| Int of int
| Bool of bool

let f (type a) (x : a t) : a =
match x with
| Int i -> i
| Bool b -> b

但是,这也不起作用。错误是 Error: This expression has type int but an expression was expected of type a

我做错了什么?甚至可以在模式匹配的每个分支中返回不同类型的值吗?

最佳答案

你给 t 的类型参数实际上并没有受到任何限制,所以编译器只会推断它是它首先遇到的任何东西,并在遇到其他东西时提示后来就不是那样了。

您需要使用 GADT 根据使用的构造函数为类型参数指定类型:

type _ t =
| Int: int -> int t
| Bool: bool -> bool t

本地抽象类型是使类型细化工作所必需的,但它本身不做任何事情。 GADT 负责这里的工作。

关于types - 如何在模式匹配的每个分支中返回不同类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73517791/

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