discriminated-union相关内容
我正在编写一个 F# 程序,该程序将一个字符串解析为一个 AST 类型,这是一个可区分的联合. 当我使用 fsi(在 Mono + Mac OS X 上)运行我的代码时,AST 以一种很好的格式打印出来.但是当我使用 printfn "%s"
..
我想为 F# 受歧视的联合成员获得等效的 Enum.GetName.调用 ToString() 给了我 TypeName+MemberName,这不是我想要的.当然,我可以将它子串起来,但是它安全吗?或者也许有更好的方法? 解决方案 您需要使用 Microsoft.FSharp.Reflection 命名空间中的类,因此: 打开 Microsoft.FSharp.Reflection//
..
我使用了废掉你的样板 a> 和 Haskell 编程语言中的 Uniplate 库,我会发现这种基于可区分联合的泛型编程形式非常有用.f# 编程语言中是否有等效的库? 解决方案 我不知道;如果没有内置语言/编译器的支持,我希望唯一的选择是基于反射的版本.(我不知道 Uniplate 是如何实现的 - 你是吗?) 这是基于原始演示文稿示例的基于反射的版本的代码.我没有深入考虑它的局限
..
CompilationRepresentationFlags.UseNullAsTrueValue 可以是习惯了 允许使用 null 作为可区分联合中的无效鉴别器的表示 Option.None 是最突出的例子. 为什么这很有用?null 检查如何比检查联合情况的传统机制(生成的 Tag 属性)更好? 这可能会导致意外行为: Some(1).ToString()//"Som
..
我创建了一个名为 Actor 的新类,用于处理传递给它的消息.我遇到的问题是找出将相关但不同的消息传递给 Actor 的最优雅方式.我的第一个想法是使用继承,但它看起来很臃肿,但它是强类型,这是一个明确的要求. 有什么想法吗? 示例 私有抽象类QueueMessage { }私有类 ClearMessage : QueueMessage{public static readonly
..
如何枚举 F# 中可区分联合的可能“值"? 我想知道是否有类似 Enum.GetValues(Type) 之类的用于区分联合的东西,我不确定我会枚举什么样的数据.我想为每个选项生成一个可区分联合的列表或数组. 解决方案 是的,F# 有它自己的反射层构建在 .NET 的反射之上,以帮助您理解特定于 F# 的类型,例如区分联合.这是让您枚举联合案例的代码: 打开 Microsoft.F
..
我正在尝试使用 Typescript Discriminated Union 来建模异步加载数据时比较常见的场景: type LoadingState = { isLoading: true;}type SuccessState = { isLoading: false;isSuccess: 真;}type ErrorState = { isLoading: false;是成功:假;错误消息:字
..
我希望能够使用工会歧视 带有泛型.但是,它似乎不起作用: 示例代码(在打字稿操场上查看): 接口 Foo{类型:'富';fooProp: 字符串}界面栏{类型:'酒吧'barProp: 数字}接口 GenericThing{项目:T;}let func = (genericThing: GenericThing) =>{if (genericThing.item.type === 'foo
..
我更频繁地使用歧视工会 (DU) 并开始喜欢它们.然而,我确实有一个我似乎无法解决的问题.如果您内联 DU 的布尔检查,您可以依靠 TypeScript (TS) 自动为您推断类型.但是,如果您提取布尔检查,TS 就不能再缩小到 DU 的特定子类型.我知道类型保护,但我想知道为什么编译器不支持提取的在线检查,特别是. 这是一个已知的限制吗?我应该提交错误/功能请求吗? 实施例这里(W/
..
我正在尝试编写一些可以处理标量或向量的数字代码(在这种情况下,分别是来自 DiffSharp 的 D 和 DV 类型).有时我希望能够使用任何一个,所以我为它们定义了一个可区分的联合: 类型 IBroadcastable =|D 的标量|DV的向量 对于这两种类型已经有很多运算符重载了,所以为了在 IBroadcastable 上使用它们,我编写了这样的添加代码到联合中: 静态成员Exp x
..
在下面的示例中,我定义了Typescript类型以从索引中请求数据. 有两种从索引服务器检索数据的有效方法,通过 , endKey 或,通过 startKey , limit (键数). 当将这些替代情况组合在一起以在Typescript中定义请求时,我做错了事,我看不到什么,除非我与联合相交的方法没有道理或我不理解打字稿错误. 接口StartKey {startKey:字符串;}接
..
我有一个受歧视的工会,例如: type Union = {a:"foo",b:字符串,c:数字} |{a:"bar",b:布尔值} 我需要派生一个包含所有潜在属性的类型,并为其分配可能在 Union 的任何成员上找到的类型,即使仅在某些示例中进行了定义-在我的示例中: type CollapsedUnion = {a:"foo"|“栏",b:字符串|布尔值c:数字|不明确的} 我如
..
是否可以将常量字段值添加到F#区分的联合中? 我可以做这样的事情吗? 类型西服|俱乐部("C")|钻石("D")|心("H")|黑桃("S")和覆盖this.ToString()=//打印与特定项目相关的字母结尾 如果我正在编写Java枚举,则应向构造函数添加一个私有值,如下所示: 公共枚举诉讼{CLUBS("C"),钻石("D"),心("H"),SPADES("S");私有的最终S
..
在此游乐场我想创建一个地图,其中最多包含一个“动作"联合中每种类型的单个动作.每个联合类型的区别在于具有不同的字符串文字属性"type".我为此地图定义了一个可编译但过于宽松的地图... const lastAction:{ [A in Action["type"]]?:Action } = {} lastAction映射中的键约束强制执行... 密钥是“类型"密钥.某些
..
我正在尝试使用 OneOf 库中的类型将JSON序列化为数据结构JSON.NET,使用自定义转换器. 我遇到以下异常: System.InvalidCastException::“无法将类型为System.String的对象转换为类型为System.Nullable`1 [OneOf.OneOf`2 [OneOf.OneOf`2 [PandocFilters.TagContent] ,
..
下面的问题中,答案为序列化/反序列化受歧视的联合提供了一个有效的解决方案( IgnoreMissingMember设置似乎不适用于FSharpLu.Json解串器) 我现在有一个实用的在这种情况下会失败(尽管在更简单的情况下也可以)。 这是测试代码: 打开System.Collections.Generic 打开Microsoft.FSharpLu.Json 打开Newton
..
这是以下内容:反序列化问题,带有json.net,位于F#。 我正在使用 FSharpLu.Json 。下面是代码: 打开系统 打开Newtonsoft.Json 打开Microsoft.FSharpLu.Json 类型r = { a:int } let a = “ {\” a\“ :3,\“ b\”:5}“ Compact.TupleAsArraySe
..
我有一个XML文档,其中包含一系列重复的地址,其实际内容取决于所包含的枚举的值.我想这是“标记的工会"(或“歧视的工会"?)的一种类型: {
..
在上一个问题中,有一个一个很好的解决方案,询问一个对象是否是一个特定的联合案例: let isUnionCase (c : Expr 'T>) = match c with | Lambdas (_, NewUnionCase(uci, _)) -> let tagReader = Microsoft.FSharp.Reflection.FSha
..
有没有一种方法可以建立一个有区别的联合,使您可以与每个联合成员一起捕获特定类型?我正在尝试按照以下方式编写类型安全的命令处理程序: interface GetUsersCommand { // returns User[] type: 'GET_USERS' } interface UpdateUserNameCommand { // returns void type: 'UPD
..