Описание тега discriminated-union

Дискриминированное объединение или непересекающееся объединение - это структура данных, используемая для хранения значения, которое может принимать несколько разных, но фиксированных типов. В теории типов они также известны как "типы суммы". Вместо [ocaml] используйте [вариант].
1 ответ

Общая функция F#: Как получить Тип F# Дискриминационного Союза?

Пример кода: http://www.tryfsharp.org/create/dutts/Generics.fsx У меня есть некоторый код отображения в моем F#, который берет объект C# и оборачивает его в различимый союз. module MyModule = type MappedThings = | DoThings of External.Things.DoThing…
16 фев '15 в 09:22
1 ответ

Как использовать член дискриминируемого объединения F# от участника записи

Я пытаюсь сделать запись с дискриминированными профсоюзами в качестве членов, но после создания записи "API" у меня есть доступ только к профсоюзам, а не к тому, что я в них вставил.... type DefaultExpr = Expr<int -> Ref<int> -> int -…
22 фев '14 в 14:50
3 ответа

Невозможно сериализовать Дискриминационный Союз в F# Chiron

Если у меня есть: type a = B | C Как мне написать статические члены ToJson и FromJson? Я знаю, как написать его для типа записи (который показан в примерах на Chiron: JSON + Ducks + Monads), но я не могу найти никаких примеров для DU. РЕДАКТИРОВАТЬ …
18 май '16 в 14:55
2 ответа

Списки дискриминируемых союзов в fsharp

Кто-нибудь может объяснить, почему следующие 2 оператора let не работают? type Rank = | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten type Face = | Jack | Queen | King | Ace type Suit = | Diamonds | Clubs | Hearts | Spades type Card =…
06 фев '12 в 14:17
3 ответа

Доступ к конкретному случаю из F# DU

Предположим, у меня есть следующий DU: type Something = | A of int | B of string * int Теперь я использую его в такой функции: let UseSomething = function | A(i) -> DoSomethingWithA i | B(s, i) -> DoSomethingWithB s i Это работает, но мне приш…
15 мар '13 в 08:22
2 ответа

Есть ли способ для меня, чтобы полностью определить дискриминационный путь союза?

Есть ли способ для меня, чтобы полностью определить дискриминационный путь союза? В настоящее время у меня есть это: type PostionOfScott = | ScottOnFirst | ScottOnSecond | ScottOnThird type PostionOfBrian = | BrianOnFirst | BrianOnSecond | BrianOnTh…
10 май '16 в 03:07
1 ответ

Можно ли иметь полиморфную фабрику для типов, унаследованных от интерфейса?

Следуя советам в SO и других местах, я попытался реализовать полиморфизм, используя интерфейсы, как в следующем упрощенном примере. type IFace = // abstract methods abstract member foo: int -> int type X(i: int) = // some code interface IFace wit…
2 ответа

Сравнение случаев дискриминационного объединения с <и> в F#

Я изучаю F# и строю быстрый набор функций, которые сравнивают две покерные руки и определяют победителя. Я сделал этот дискриминационный союз, чтобы представлять категории покерных рук: type Category = | HighCard | OnePair | TwoPair | ThreeOfAKind |…
1 ответ

F#: постоянный номер тега объединения

Каждый случай объединения в различаемом типе объединения получает номер тега type Result&lt;'TSuccess,'TFailure&gt; = | Success of 'TSuccess | Failure of 'TFailure let cases = FSharpType.GetUnionCases typedefof&lt;Result&lt;_,_&gt;&gt; for case in c…
31 июл '14 в 16:13
2 ответа

Записи против единичных дискриминированных союзов

Какие плюсы и минусы использования type Complex = { real: float; imag: float; } или же type Complex = Complex of real: float * imag: float Я особенно заинтересован в удобочитаемости и обработке в разных ситуациях.И в меньшей степени производительнос…
06 апр '17 в 09:35
7 ответов

Идиоматический способ представления типа суммы (Either a b) в Clojure

Ред. Теперь у меня вопрос: какие идиоматические конструкции Clojure обычно используются вместо типов суммы в языках статических типов? До сих пор достигнут консенсус: используйте протоколы, если поведение можно унифицировать, в противном случае испо…
08 июн '12 в 11:05
2 ответа

Имена, связанные как с разложенными компонентами различимого объединения, так и с исходным составным значением

Я не могу найти документацию по этому вопросу. Мне нужно разбить значение "Дискриминационный союз" на некоторые его компоненты, но мне также нужно использовать элемент целиком в теле функции. я могу сделать let matcher = function MyDU(_,b,_) -&gt; b…
10 ноя '14 в 17:05
17 ответов

Дискриминационный союз в C#

[Примечание: у этого вопроса было первоначальное название "объединение стилей C (ish) в C#", но, как сообщил мне комментарий Джеффа, очевидно, что эта структура называется "дискриминационным объединением"] Извините за многословность этого вопроса. В…
30 июн '10 в 17:18
2 ответа

Сжатое сопоставление с образцом на единственном распознаваемом объединении в F#

Скажем, у меня есть следующий единый случай дискриминированного союза: type OrderId = OrderId of string В какой-то момент мне нужна актуальная строка. Я нашел способ извлечь это: let id = match orderId with OrderId x -&gt; x Есть ли более краткий сп…
01 сен '12 в 23:14
1 ответ

Машинописный теговый союз в общем

Как сделать эту компиляцию без ошибок? Мы используем TypeScript 2.9.1. interface IFoo { type: 'foo'; foo: string; } interface IBar { type: 'bar'; bar: string; } type FooBar = IFoo | IBar; class Getter&lt;T extends FooBar&gt; { private data: T; const…
12 июн '18 в 14:41
2 ответа

Как я могу разложить дискриминационный союз, который является типом?

Предположим, у меня есть следующее (основное и немного бессмысленное) F#... type Point = Point of int * int type MyUnion = | MyInt of int | MyString of string | MyTwoStrings of string * string | MyPoint of Point ... тогда я могу написать такую ​​фун…
08 апр '18 в 21:53
1 ответ

Схема XML для Tagged Union

У меня есть документ XML, который включает в себя повторяющиеся серии адресов, фактическое содержание которых зависит от значения включенного перечисления. Я полагаю, это тип "тегового союза" [или "дискриминационного союза"?]: { &lt;AddressList&gt; …
04 июн '17 в 16:03
0 ответов

Передача различимых объединений в атрибуты InlineData

Я пытаюсь выполнить модульный тест синтаксического анализатора, который анализирует строку и возвращает соответствующее абстрактное синтаксическое дерево (представленное в виде дискриминированного объединения). Я подумал, что было бы довольно компак…
31 дек '14 в 20:30
1 ответ

Можете ли вы распаковать дискриминированные союзы без файла подписи?

Проектирование с единичными типами DU type DoB = | DoB of System.DateTime let DoB (dt:DateTime) = // shadow constructor if(dt.Year&gt;1914) // business defines what a min Date of Birth should be then Some(DoB dt) else None И я вижу через ответы на …
18 июн '14 в 19:06
1 ответ

Тестирование равенства с Dicricted union в списке

Я определил различные типы: type TypeNull() = class end type MyType1 = { a:int; b:int } type MyType2 = { a:string; b:int } type MyType3 = { a:string; b:DateTime } и разные униженные объединения, которые их используют: type myDU = | A of int | B of s…
01 мар '16 в 16:50