discriminated-union相关内容

打印 F# 可区分联合

我正在编写一个 F# 程序,该程序将一个字符串解析为一个 AST 类型,这是一个可区分的联合. 当我使用 fsi(在 Mono + Mac OS X 上)运行我的代码时,AST 以一种很好的格式打印出来.但是当我使用 printfn "%s" ..
发布时间:2022-01-05 10:28:07 其他开发

F# 联合成员的 Enum.GetName 等效项是什么?

我想为 F# 受歧视的联合成员获得等效的 Enum.GetName.调用 ToString() 给了我 TypeName+MemberName,这不是我想要的.当然,我可以将它子串起来,但是它安全吗?或者也许有更好的方法? 解决方案 您需要使用 Microsoft.FSharp.Reflection 命名空间中的类,因此: 打开 Microsoft.FSharp.Reflection// ..
发布时间:2022-01-05 10:13:40 其他开发

在 f# 中废弃你的样板

我使用了废掉你的样板 a> 和 Haskell 编程语言中的 Uniplate 库,我会发现这种基于可区分联合的泛型编程形式非常有用.f# 编程语言中是否有等效的库? 解决方案 我不知道;如果没有内置语言/编译器的支持,我希望唯一的选择是基于反射的版本.(我不知道 Uniplate 是如何实现的 - 你是吗?) 这是基于原始演示文稿示例的基于反射的版本的代码.我没有深入考虑它的局限 ..

为什么 None 表示为 null?

CompilationRepresentationFlags.UseNullAsTrueValue 可以是习惯了 允许使用 null 作为可区分联合中的无效鉴别器的表示 Option.None 是最突出的例子. 为什么这很有用?null 检查如何比检查联合情况的传统机制(生成的 Tag 属性)更好? 这可能会导致意外行为: Some(1).ToString()//"Som ..
发布时间:2022-01-05 09:44:50 其他开发

如何在 C# 中复制 F# 区分联合类型?

我创建了一个名为 Actor 的新类,用于处理传递给它的消息.我遇到的问题是找出将相关但不同的消息传递给 Actor 的最优雅方式.我的第一个想法是使用继承,但它看起来很臃肿,但它是强类型,这是一个明确的要求. 有什么想法吗? 示例 私有抽象类QueueMessage { }私有类 ClearMessage : QueueMessage{public static readonly ..
发布时间:2022-01-05 09:44:29 C#/.NET

如何在 F# 中枚举受歧视的联合?

如何枚举 F# 中可区分联合的可能“值"? 我想知道是否有类似 Enum.GetValues(Type) 之类的用于区分联合的东西,我不确定我会枚举什么样的数据.我想为每个选项生成一个可区分联合的列表或数组. 解决方案 是的,F# 有它自己的反射层构建在 .NET 的反射之上,以帮助您理解特定于 F# 的类型,例如区分联合.这是让您枚举联合案例的代码: 打开 Microsoft.F ..
发布时间:2022-01-05 09:38:48 其他开发

泛型判别联合

我希望能够使用工会歧视 带有泛型.但是,它似乎不起作用: 示例代码(在打字稿操场上查看): 接口 Foo{类型:'富';fooProp: 字符串}界面栏{类型:'酒吧'barProp: 数字}接口 GenericThing{项目:T;}let func = (genericThing: GenericThing) =>{if (genericThing.item.type === 'foo ..
发布时间:2021-09-11 20:38:10 其他开发

TypeScript 可以通过“提取"推断出可区分联合的类型吗?布尔逻辑?

我更频繁地使用歧视工会 (DU) 并开始喜欢它们.然而,我确实有一个我似乎无法解决的问题.如果您内联 DU 的布尔检查,您可以依靠 TypeScript (TS) 自动为您推断类型.但是,如果您提取布尔检查,TS 就不能再缩小到 DU 的特定子类型.我知道类型保护,但我想知道为什么编译器不支持提取的在线检查,特别是. 这是一个已知的限制吗?我应该提交错误/功能请求吗? 实施例这里(W/ ..
发布时间:2021-09-11 20:31:14 其他开发

可区分联合的运算符重载

我正在尝试编写一些可以处理标量或向量的数字代码(在这种情况下,分别是来自 DiffSharp 的 D 和 DV 类型).有时我希望能够使用任何一个,所以我为它们定义了一个可区分的联合: 类型 IBroadcastable =|D 的标量|DV的向量 对于这两种类型已经有很多运算符重载了,所以为了在 IBroadcastable 上使用它们,我编写了这样的添加代码到联合中: 静态成员Exp x ..
发布时间:2021-06-12 20:41:03 其他开发

带联合的Typescript交集导致不存在的属性

在下面的示例中,我定义了Typescript类型以从索引中请求数据. 有两种从索引服务器检索数据的有效方法,通过 , endKey 或,通过 startKey , limit (键数). 当将这些替代情况组合在一起以在Typescript中定义请求时,我做错了事,我看不到什么,除非我与联合相交的方法没有道理或我不理解打字稿错误. 接口StartKey {startKey:字符串;}接 ..

折叠已区分的联合-从联合中导出具有所有可能的键值组合的伞型

我有一个受歧视的工会,例如: type Union = {a:"foo",b:字符串,c:数字} |{a:"bar",b:布尔值} 我需要派生一个包含所有潜在属性的类型,并为其分配可能在 Union 的任何成员上找到的类型,即使仅在某些示例中进行了定义-在我的示例中: type CollapsedUnion = {a:"foo"|“栏",b:字符串|布尔值c:数字|不明确的} 我如 ..
发布时间:2021-05-10 18:54:39 其他开发

向F#区分的联合添加常量字段

是否可以将常量字段值添加到F#区分的联合中? 我可以做这样的事情吗? 类型西服|俱乐部("C")|钻石("D")|心("H")|黑桃("S")和覆盖this.ToString()=//打印与特定项目相关的字母结尾 如果我正在编写Java枚举,则应向构造函数添加一个私有值,如下所示: 公共枚举诉讼{CLUBS("C"),钻石("D"),心("H"),SPADES("S");私有的最终S ..
发布时间:2021-05-06 19:59:15 其他开发

我可以定义一个Typescript映射,该映射具有与每个值的键对应的值约束吗?

在此游乐场我想创建一个地图,其中最多包含一个“动作"联合中每种类型的单个动作.每个联合类型的区别在于具有不同的字符串文字属性"type".我为此地图定义了一个可编译但过于宽松的地图... const lastAction:{ [A in Action["type"]]?:Action } = {} lastAction映射中的键约束强制执行... 密钥是“类型"密钥.某些 ..
发布时间:2021-02-14 21:16:55 其他开发

在F#中使用区分的联合反序列化数据的另一个失败

下面的问题中,答案为序列化/反序列化受歧视的联合提供了一个有效的解决方案( IgnoreMissingMember设置似乎不适用于FSharpLu.Json解串器) 我现在有一个实用的在这种情况下会失败(尽管在更简单的情况下也可以)。 这是测试代码: 打开System.Collections.Generic 打开Microsoft.FSharpLu.Json 打开Newton ..

TypeScript区分了与泛型的联合

有没有一种方法可以建立一个有区别的联合,使您可以与每个联合成员一起捕获特定类型?我正在尝试按照以下方式编写类型安全的命令处理程序: interface GetUsersCommand { // returns User[] type: 'GET_USERS' } interface UpdateUserNameCommand { // returns void type: 'UPD ..
发布时间:2020-06-11 19:44:07 其他开发