gpt4 book ai didi

types - FSharp 根据谓词定义类型

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

我的代码看起来像

type U0 = E1|E2|E3...
type T2 = {field1: string; field2: string; field3: string}
type T1 = T2*T2*T2
type T0 = T1*T1*T1

我想执行一些谓词 P1关于 field1 的类型那field1这样 (GetUnionCases typeof<U0>).contains(field1) .我希望这不是太抽象。

为此,我想引入 P1 类型,其定义类似于

type P1(x) = (GetUnionCases typeof<U0>).map(fun x -> x.Name).contains(x)

最佳答案

通常,F# 没有任何形式的 refinement types这将使您可以将任意谓词作为约束附加到类型声明中。

很难根据您有点抽象的示例给出更具体的答案,但通常可以以不同的方式设计域(您的类型),以便通过构造强制执行谓词 - 换句话说,设计您的类型,以便该类型的任何值自动满足谓词。 designing with types article series有一些实际例子可以证明这一点。

我没有完全按照你的例子,但是说你想确保 field1 的字符串包含值 E1,字符串 field2 包含值 E2(作为子字符串)等等。所以:

{  field1 = "hi E1 there" } // valid
{ field1 = "hi there" } // invalid

您可以将 field1 的类型从 string 更改为 string * string 表示字符串“E1”的前缀和后缀所以你只能构建:

{ field1 = "hi", "there" } // valid

现在没有办法创建一个不隐含“E1”作为子字符串的值!
我很确定我误解了你的例子,但我希望这能证明这个想法......

关于types - FSharp 根据谓词定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304183/

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