Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LanguageExt v0.1.1
BepInEx/plugins/LanguageExt/LanguageExt.Core.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Buffers; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Net; using System.Numerics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using LanguageExt; using LanguageExt.Attributes; using LanguageExt.ClassInstances; using LanguageExt.ClassInstances.Const; using LanguageExt.ClassInstances.Pred; using LanguageExt.Common; using LanguageExt.DataTypes.Serialisation; using LanguageExt.Effects.Traits; using LanguageExt.Pipes; using LanguageExt.TypeClasses; using LanguageExt.UnitsOfMeasure; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("Paul Louth")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright (c) Paul Louth. All rights reserved.")] [assembly: AssemblyDescription("This library uses and abuses the features of C# to provide a functional 'Base class library', that, if you squint, can look like extensions to the language itself.")] [assembly: AssemblyFileVersion("4.4.5.0")] [assembly: AssemblyInformationalVersion("4.4.5-dev.5+d8167ed3491f17e813ed9e9422b0384b15b2982d")] [assembly: AssemblyProduct("LanguageExt.Core")] [assembly: AssemblyTitle("LanguageExt.Core")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Lordfirespeed/LanguageExtThunderstore")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("4.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsByRefLikeAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public static class CompositionsExt { public static Compositions<A> Cons<MonoidA, A>(this A a, Compositions<A> ma) where MonoidA : struct, Monoid<A> { return Compositions.cons<MonoidA, A>(a, ma); } } public static class Tuple1Extensions { [Pure] public static Tuple<A, B> Add<A, B>(this Tuple<A> self, B second) { return Prelude.Tuple(self.Item1, second); } [Pure] public static Tuple<A> Append<SemiA, A>(this Tuple<A> a, Tuple<A> b) where SemiA : struct, Semigroup<A> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1)); } [Pure] public static Tuple<A> Concat<MonoidA, A>(this Tuple<A> a, Tuple<A> b) where MonoidA : struct, Monoid<A> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 })); } [Pure] public static A Head<A>(this Tuple<A> self) { return self.Item1; } [Pure] public static A Last<A>(this Tuple<A> self) { return self.Item1; } [Pure] public static A Sum<NUM, A>(this Tuple<A> self) where NUM : struct, Num<A> { return self.Item1; } [Pure] public static A Product<NUM, A>(this Tuple<A> self) where NUM : struct, Num<A> { return self.Item1; } [Pure] public static bool Contains<EQ, A>(this Tuple<A> self, A value) where EQ : struct, Eq<A> { return default(EQ).Equals(self.Item1, value); } [Pure] public static Tuple<R> Map<A, R>(this Tuple<A> self, Func<A, R> map) { return Prelude.Tuple(map(self.Item1)); } [Pure] public static Tuple<R> Select<A, R>(this Tuple<A> self, Func<A, R> map) { return Prelude.Tuple(map(self.Item1)); } public static Unit Iter<A>(this Tuple<A> self, Action<A> func) { func(self.Item1); return Unit.Default; } [Pure] public static S Fold<A, S>(this Tuple<A> self, S state, Func<S, A, S> fold) { return fold(state, self.Item1); } } public static class Tuple2Extensions { [Pure] public static Tuple<A, B, C> add<A, B, C>(this Tuple<A, B> self, C third) { return Prelude.Tuple(self.Item1, self.Item2, third); } [Pure] public static Tuple<A, B> Append<SemiA, SemiB, A, B>(this Tuple<A, B> a, Tuple<A, B> b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2)); } [Pure] public static A Append<SemiA, A>(this Tuple<A, A> a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, a.Item2); } [Pure] public static Tuple<A, B> Concat<MonoidA, MonoidB, A, B>(this Tuple<A, B> a, Tuple<A, B> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 })); } [Pure] public static A Concat<MonoidA, A>(this Tuple<A, A> a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, a.Item2 }); } [Pure] public static T1 Head<T1, T2>(this Tuple<T1, T2> self) { return self.Item1; } [Pure] public static T2 Last<T1, T2>(this Tuple<T1, T2> self) { return self.Item2; } [Pure] public static Tuple<T2> Tail<T1, T2>(this Tuple<T1, T2> self) { return Prelude.Tuple(self.Item2); } [Pure] public static A Sum<NUM, A>(this Tuple<A, A> self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, Tuple<A, A>, A>(self); } [Pure] public static A Product<NUM, A>(this Tuple<A, A> self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, Tuple<A, A>, A>(self); } [Pure] public static bool Contains<EQ, A>(this Tuple<A, A> self, A value) where EQ : struct, Eq<A> { return TypeClass.contains<EQ, FoldTuple<A>, Tuple<A, A>, A>(self, value); } [Pure] public static R Map<T1, T2, R>(this Tuple<T1, T2> self, Func<T1, T2, R> map) { return map(self.Item1, self.Item2); } [Pure] public static R Map<A, B, R>(this Tuple<A, B> self, Func<Tuple<A, B>, R> map) { return map(self); } [Pure] public static Tuple<Y, Z> Map<A, B, Y, Z>(this Tuple<A, B> self, Func<A, B, Tuple<Y, Z>> map) { return map(self.Item1, self.Item2); } [Pure] public static Tuple<R1, R2> Map<T1, T2, R1, R2>(this Tuple<T1, T2> self, Func<Tuple<T1, T2>, Tuple<R1, R2>> map) { return map(self); } [Pure] public static Tuple<R1, R2> BiMap<T1, T2, R1, R2>(this Tuple<T1, T2> self, Func<T1, R1> firstMap, Func<T2, R2> secondMap) { return Prelude.Tuple(firstMap(self.Item1), secondMap(self.Item2)); } [Pure] public static Tuple<R1, T2> MapFirst<T1, T2, R1>(this Tuple<T1, T2> self, Func<T1, R1> firstMap) { return Prelude.Tuple(firstMap(self.Item1), self.Item2); } [Pure] public static Tuple<T1, R2> MapSecond<T1, T2, R2>(this Tuple<T1, T2> self, Func<T2, R2> secondMap) { return Prelude.Tuple(self.Item1, secondMap(self.Item2)); } [Pure] public static Tuple<R1, R2> Select<T1, T2, R1, R2>(this Tuple<T1, T2> self, Func<Tuple<T1, T2>, Tuple<R1, R2>> map) { return map(self); } public static Unit Iter<T1, T2>(this Tuple<T1, T2> self, Action<T1, T2> func) { func(self.Item1, self.Item2); return Unit.Default; } public static Unit Iter<T1, T2>(this Tuple<T1, T2> self, Action<T1> first, Action<T2> second) { first(self.Item1); second(self.Item2); return Unit.Default; } [Pure] public static S Fold<T1, T2, S>(this Tuple<T1, T2> self, S state, Func<S, T1, T2, S> fold) { return fold(state, self.Item1, self.Item2); } [Pure] public static S BiFold<T1, T2, S>(this Tuple<T1, T2> self, S state, Func<S, T1, S> firstFold, Func<S, T2, S> secondFold) { return secondFold(firstFold(state, self.Item1), self.Item2); } [Pure] public static S BiFoldBack<T1, T2, S>(this Tuple<T1, T2> self, S state, Func<S, T2, S> firstFold, Func<S, T1, S> secondFold) { return secondFold(firstFold(state, self.Item2), self.Item1); } } public static class Tuple3Extensions { [Pure] public static Tuple<T1, T2, T3, T4> Add<T1, T2, T3, T4>(this Tuple<T1, T2, T3> self, T4 fourth) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, fourth); } [Pure] public static Tuple<A, B, C> Append<SemiA, SemiB, SemiC, A, B, C>(this Tuple<A, B, C> a, Tuple<A, B, C> b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3)); } [Pure] public static A Append<SemiA, A>(this Tuple<A, A, A> a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, a.Item3)); } [Pure] public static Tuple<A, B, C> Concat<MonoidA, MonoidB, MonoidC, A, B, C>(this Tuple<A, B, C> a, Tuple<A, B, C> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 })); } [Pure] public static A Concat<MonoidA, A>(this Tuple<A, A, A> a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[3] { a.Item1, a.Item2, a.Item3 }); } [Pure] public static T1 Head<T1, T2, T3>(this Tuple<T1, T2, T3> self) { return self.Item1; } [Pure] public static T3 Last<T1, T2, T3>(this Tuple<T1, T2, T3> self) { return self.Item3; } [Pure] public static Tuple<T2, T3> Tail<T1, T2, T3>(this Tuple<T1, T2, T3> self) { return Prelude.Tuple(self.Item2, self.Item3); } [Pure] public static A Sum<NUM, A>(this Tuple<A, A, A> self) where NUM : struct, Num<A> { return default(NUM).Plus(self.Item1, default(NUM).Plus(self.Item2, self.Item3)); } [Pure] public static A Product<NUM, A>(this Tuple<A, A, A> self) where NUM : struct, Num<A> { return default(NUM).Product(self.Item1, default(NUM).Product(self.Item2, self.Item3)); } [Pure] public static bool Contains<EQ, A>(this Tuple<A, A, A> self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value)) { return default(EQ).Equals(self.Item3, value); } return true; } [Pure] public static R Map<A, B, C, R>(this Tuple<A, B, C> self, Func<Tuple<A, B, C>, R> map) { return map(self); } [Pure] public static R Map<A, B, C, R>(this Tuple<A, B, C> self, Func<A, B, C, R> map) { return map(self.Item1, self.Item2, self.Item3); } [Pure] public static Tuple<X, Y, Z> Map<A, B, C, X, Y, Z>(this Tuple<A, B, C> self, Func<A, B, C, Tuple<X, Y, Z>> map) { return map(self.Item1, self.Item2, self.Item3); } [Pure] public static Tuple<R1, R2, R3> Map<T1, T2, T3, R1, R2, R3>(this Tuple<T1, T2, T3> self, Func<T1, R1> firstMap, Func<T2, R2> secondMap, Func<T3, R3> thirdMap) { return Prelude.Tuple(firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3)); } [Pure] public static Tuple<R1, T2, T3> MapFirst<T1, T2, T3, R1>(this Tuple<T1, T2, T3> self, Func<T1, R1> firstMap) { return Prelude.Tuple(firstMap(self.Item1), self.Item2, self.Item3); } [Pure] public static Tuple<T1, R2, T3> MapSecond<T1, T2, T3, R2>(this Tuple<T1, T2, T3> self, Func<T2, R2> secondMap) { return Prelude.Tuple(self.Item1, secondMap(self.Item2), self.Item3); } [Pure] public static Tuple<T1, T2, R3> MapThird<T1, T2, T3, R3>(this Tuple<T1, T2, T3> self, Func<T3, R3> thirdMap) { return Prelude.Tuple(self.Item1, self.Item2, thirdMap(self.Item3)); } [Pure] public static Tuple<R1, R2, R3> Select<T1, T2, T3, R1, R2, R3>(this Tuple<T1, T2, T3> self, Func<Tuple<T1, T2, T3>, Tuple<R1, R2, R3>> map) { return map(self); } public static Unit Iter<T1, T2, T3>(this Tuple<T1, T2, T3> self, Action<T1, T2, T3> func) { func(self.Item1, self.Item2, self.Item3); return Unit.Default; } public static Unit Iter<T1, T2, T3>(this Tuple<T1, T2, T3> self, Action<T1> first, Action<T2> second, Action<T3> third) { first(self.Item1); second(self.Item2); third(self.Item3); return Unit.Default; } [Pure] public static S Fold<T1, T2, T3, S>(this Tuple<T1, T2, T3> self, S state, Func<S, T1, T2, T3, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3); } [Pure] public static S TriFold<T1, T2, T3, S>(this Tuple<T1, T2, T3> self, S state, Func<S, T1, S> firstFold, Func<S, T2, S> secondFold, Func<S, T3, S> thirdFold) { return thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3); } [Pure] public static S TriFoldBack<T1, T2, T3, S>(this Tuple<T1, T2, T3> self, S state, Func<S, T3, S> firstFold, Func<S, T2, S> secondFold, Func<S, T1, S> thirdFold) { return thirdFold(secondFold(firstFold(state, self.Item3), self.Item2), self.Item1); } } public static class Tuple4Extensions { [Pure] public static Tuple<A, B, C, D, E> Add<A, B, C, D, E>(this Tuple<A, B, C, D> self, E fifth) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, fifth); } [Pure] public static Tuple<A, B, C, D> Append<SemiA, SemiB, SemiC, SemiD, A, B, C, D>(this Tuple<A, B, C, D> a, Tuple<A, B, C, D> b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4)); } [Pure] public static A Append<SemiA, A>(this Tuple<A, A, A, A> a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, a.Item4))); } [Pure] public static Tuple<A, B, C, D> Concat<MonoidA, MonoidB, MonoidC, MonoidD, A, B, C, D>(this Tuple<A, B, C, D> a, Tuple<A, B, C, D> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 })); } [Pure] public static A Concat<MonoidA, A>(this Tuple<A, A, A, A> a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[4] { a.Item1, a.Item2, a.Item3, a.Item4 }); } [Pure] public static A Head<A, B, C, D>(this Tuple<A, B, C, D> self) { return self.Item1; } [Pure] public static D Last<A, B, C, D>(this Tuple<A, B, C, D> self) { return self.Item4; } [Pure] public static Tuple<B, C, D> Tail<A, B, C, D>(this Tuple<A, B, C, D> self) { return Prelude.Tuple(self.Item2, self.Item3, self.Item4); } [Pure] public static A Sum<NUM, A>(this Tuple<A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, Tuple<A, A, A, A>, A>(self); } [Pure] public static A Product<NUM, A>(this Tuple<A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, Tuple<A, A, A, A>, A>(self); } [Pure] public static bool Contains<EQ, A>(this Tuple<A, A, A, A> self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value)) { return default(EQ).Equals(self.Item4, value); } return true; } [Pure] public static R Map<A, B, C, D, R>(this Tuple<A, B, C, D> self, Func<Tuple<A, B, C, D>, R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, R>(this Tuple<A, B, C, D> self, Func<A, B, C, D, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4); } [Pure] public static Tuple<W, X, Y, Z> Map<A, B, C, D, W, X, Y, Z>(this Tuple<A, B, C, D> self, Func<A, W> firstMap, Func<B, X> secondMap, Func<C, Y> thirdMap, Func<D, Z> fourthMap) { return Prelude.Tuple(firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4)); } [Pure] public static Tuple<R1, B, C, D> MapFirst<A, B, C, D, R1>(this Tuple<A, B, C, D> self, Func<A, R1> firstMap) { return Prelude.Tuple(firstMap(self.Item1), self.Item2, self.Item3, self.Item4); } [Pure] public static Tuple<A, R2, C, D> MapSecond<A, B, C, D, R2>(this Tuple<A, B, C, D> self, Func<B, R2> secondMap) { return Prelude.Tuple(self.Item1, secondMap(self.Item2), self.Item3, self.Item4); } [Pure] public static Tuple<A, B, R3, D> MapThird<A, B, C, D, R3>(this Tuple<A, B, C, D> self, Func<C, R3> thirdMap) { return Prelude.Tuple(self.Item1, self.Item2, thirdMap(self.Item3), self.Item4); } [Pure] public static Tuple<A, B, C, R4> MapFourth<A, B, C, D, R4>(this Tuple<A, B, C, D> self, Func<D, R4> fourthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, fourthMap(self.Item4)); } [Pure] public static Tuple<W, X, Y, Z> Select<A, B, C, D, W, X, Y, Z>(this Tuple<A, B, C, D> self, Func<Tuple<A, B, C, D>, Tuple<W, X, Y, Z>> map) { return map(self); } public static Unit Iter<A, B, C, D>(this Tuple<A, B, C, D> self, Action<A, B, C, D> func) { func(self.Item1, self.Item2, self.Item3, self.Item4); return Unit.Default; } public static Unit Iter<A, B, C, D>(this Tuple<A, B, C, D> self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, S>(this Tuple<A, B, C, D> self, S state, Func<S, A, B, C, D, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4); } [Pure] public static S QuadFold<A, B, C, D, S>(this Tuple<A, B, C, D> self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold) { return fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4); } [Pure] public static S QuadFoldBack<A, B, C, D, S>(this Tuple<A, B, C, D> self, S state, Func<S, D, S> firstFold, Func<S, C, S> secondFold, Func<S, B, S> thirdFold, Func<S, A, S> fourthFold) { return fourthFold(thirdFold(secondFold(firstFold(state, self.Item4), self.Item3), self.Item2), self.Item1); } } public static class Tuple5Extensions { [Pure] public static Tuple<A, B, C, D, E, F> Add<A, B, C, D, E, F>(this Tuple<A, B, C, D, E> self, F sixth) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, sixth); } [Pure] public static Tuple<A, B, C, D, E> Append<SemiA, SemiB, SemiC, SemiD, SemiE, A, B, C, D, E>(this Tuple<A, B, C, D, E> a, Tuple<A, B, C, D, E> b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> where SemiE : struct, Semigroup<E> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4), default(SemiE).Append(a.Item5, b.Item5)); } [Pure] public static A Append<SemiA, A>(this Tuple<A, A, A, A, A> a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, default(SemiA).Append(a.Item4, a.Item5)))); } [Pure] public static Tuple<A, B, C, D, E> Concat<MonoidA, MonoidB, MonoidC, MonoidD, MonoidE, A, B, C, D, E>(this Tuple<A, B, C, D, E> a, Tuple<A, B, C, D, E> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> where MonoidE : struct, Monoid<E> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 }), TypeClass.mconcat<MonoidE, E>(new E[2] { a.Item5, b.Item5 })); } [Pure] public static A Concat<MonoidA, A>(this Tuple<A, A, A, A, A> a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[5] { a.Item1, a.Item2, a.Item3, a.Item4, a.Item5 }); } [Pure] public static A Head<A, B, C, D, E>(this Tuple<A, B, C, D, E> self) { return self.Item1; } [Pure] public static E Last<A, B, C, D, E>(this Tuple<A, B, C, D, E> self) { return self.Item5; } [Pure] public static Tuple<B, C, D, E> Tail<A, B, C, D, E>(this Tuple<A, B, C, D, E> self) { return Prelude.Tuple(self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static A Sum<NUM, A>(this Tuple<A, A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, Tuple<A, A, A, A, A>, A>(self); } [Pure] public static A Product<NUM, A>(this Tuple<A, A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, Tuple<A, A, A, A, A>, A>(self); } [Pure] public static bool Contains<EQ, A>(this Tuple<A, A, A, A, A> self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value) && !default(EQ).Equals(self.Item4, value)) { return default(EQ).Equals(self.Item5, value); } return true; } [Pure] public static R Map<A, B, C, D, E, R>(this Tuple<A, B, C, D, E> self, Func<Tuple<A, B, C, D, E>, R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, E, R>(this Tuple<A, B, C, D, E> self, Func<A, B, C, D, E, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static Tuple<V, W, X, Y, Z> Map<A, B, C, D, E, V, W, X, Y, Z>(this Tuple<A, B, C, D, E> self, Func<A, B, C, D, E, Tuple<V, W, X, Y, Z>> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static Tuple<V, W, X, Y, Z> Map<A, B, C, D, E, V, W, X, Y, Z>(this Tuple<A, B, C, D, E> self, Func<A, V> firstMap, Func<B, W> secondMap, Func<C, X> thirdMap, Func<D, Y> fourthMap, Func<E, Z> fifthMap) { return Prelude.Tuple(firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4), fifthMap(self.Item5)); } [Pure] public static Tuple<R1, B, C, D, E> MapFirst<A, B, C, D, E, R1>(this Tuple<A, B, C, D, E> self, Func<A, R1> firstMap) { return Prelude.Tuple(firstMap(self.Item1), self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static Tuple<A, R2, C, D, E> MapSecond<A, B, C, D, E, R2>(this Tuple<A, B, C, D, E> self, Func<B, R2> secondMap) { return Prelude.Tuple(self.Item1, secondMap(self.Item2), self.Item3, self.Item4, self.Item5); } [Pure] public static Tuple<A, B, R3, D, E> MapThird<A, B, C, D, E, R3>(this Tuple<A, B, C, D, E> self, Func<C, R3> thirdMap) { return Prelude.Tuple(self.Item1, self.Item2, thirdMap(self.Item3), self.Item4, self.Item5); } [Pure] public static Tuple<A, B, C, R4, E> MapFourth<A, B, C, D, E, R4>(this Tuple<A, B, C, D, E> self, Func<D, R4> fourthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, fourthMap(self.Item4), self.Item5); } [Pure] public static Tuple<A, B, C, D, R5> MapFifth<A, B, C, D, E, R5>(this Tuple<A, B, C, D, E> self, Func<E, R5> fifthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, fifthMap(self.Item5)); } [Pure] public static Tuple<V, W, X, Y, Z> Select<A, B, C, D, E, V, W, X, Y, Z>(this Tuple<A, B, C, D, E> self, Func<Tuple<A, B, C, D, E>, Tuple<V, W, X, Y, Z>> map) { return map(self); } public static Unit Iter<A, B, C, D, E>(this Tuple<A, B, C, D, E> self, Action<A, B, C, D, E> func) { func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); return Unit.Default; } public static Unit Iter<A, B, C, D, E>(this Tuple<A, B, C, D, E> self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth, Action<E> fifth) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); fifth(self.Item5); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, E, S>(this Tuple<A, B, C, D, E> self, S state, Func<S, A, B, C, D, E, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static S QuintFold<A, B, C, D, E, S>(this Tuple<A, B, C, D, E> self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold, Func<S, E, S> fifthFold) { return fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4), self.Item5); } [Pure] public static S QuintFoldBack<A, B, C, D, E, S>(this Tuple<A, B, C, D, E> self, S state, Func<S, E, S> firstFold, Func<S, D, S> secondFold, Func<S, C, S> thirdFold, Func<S, B, S> fourthFold, Func<S, A, S> fifthFold) { return fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item5), self.Item4), self.Item3), self.Item2), self.Item1); } } public static class Tuple6Extensions { [Pure] public static Tuple<A, B, C, D, E, F, G> Add<A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F> self, G seventh) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, seventh); } [Pure] public static Tuple<A, B, C, D, E, F> Append<SemiA, SemiB, SemiC, SemiD, SemiE, SemiF, A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> a, Tuple<A, B, C, D, E, F> b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> where SemiE : struct, Semigroup<E> where SemiF : struct, Semigroup<F> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4), default(SemiE).Append(a.Item5, b.Item5), default(SemiF).Append(a.Item6, b.Item6)); } [Pure] public static A Append<SemiA, A>(this Tuple<A, A, A, A, A, A> a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, default(SemiA).Append(a.Item4, default(SemiA).Append(a.Item5, a.Item6))))); } [Pure] public static Tuple<A, B, C, D, E, F> Concat<MonoidA, MonoidB, MonoidC, MonoidD, MonoidE, MonoidF, A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> a, Tuple<A, B, C, D, E, F> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> where MonoidE : struct, Monoid<E> where MonoidF : struct, Monoid<F> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 }), TypeClass.mconcat<MonoidE, E>(new E[2] { a.Item5, b.Item5 }), TypeClass.mconcat<MonoidF, F>(new F[2] { a.Item6, b.Item6 })); } [Pure] public static A Concat<MonoidA, A>(this Tuple<A, A, A, A, A, A> a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[6] { a.Item1, a.Item2, a.Item3, a.Item4, a.Item5, a.Item6 }); } [Pure] public static A Head<A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> self) { return self.Item1; } [Pure] public static F Last<A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> self) { return self.Item6; } [Pure] public static Tuple<B, C, D, E, F> Tail<A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> self) { return Prelude.Tuple(self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static A Sum<NUM, A>(this Tuple<A, A, A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, Tuple<A, A, A, A, A, A>, A>(self); } [Pure] public static A Product<NUM, A>(this Tuple<A, A, A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, Tuple<A, A, A, A, A, A>, A>(self); } [Pure] public static bool Contains<EQ, A>(this Tuple<A, A, A, A, A, A> self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value) && !default(EQ).Equals(self.Item4, value) && !default(EQ).Equals(self.Item5, value)) { return default(EQ).Equals(self.Item6, value); } return true; } [Pure] public static R Map<A, B, C, D, E, F, R>(this Tuple<A, B, C, D, E, F> self, Func<Tuple<A, B, C, D, E, F>, R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, E, F, R>(this Tuple<A, B, C, D, E, F> self, Func<A, B, C, D, E, F, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static Tuple<U, V, W, X, Y, Z> Map<A, B, C, D, E, F, U, V, W, X, Y, Z>(this Tuple<A, B, C, D, E, F> self, Func<A, B, C, D, E, F, Tuple<U, V, W, X, Y, Z>> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static Tuple<U, V, W, X, Y, Z> Map<A, B, C, D, E, F, U, V, W, X, Y, Z>(this Tuple<A, B, C, D, E, F> self, Func<A, U> firstMap, Func<B, V> secondMap, Func<C, W> thirdMap, Func<D, X> fourthMap, Func<E, Y> fifthMap, Func<F, Z> sixthMap) { return Prelude.Tuple(firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4), fifthMap(self.Item5), sixthMap(self.Item6)); } [Pure] public static Tuple<R1, B, C, D, E, F> MapFirst<A, B, C, D, E, F, R1>(this Tuple<A, B, C, D, E, F> self, Func<A, R1> firstMap) { return Prelude.Tuple(firstMap(self.Item1), self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static Tuple<A, R2, C, D, E, F> MapSecond<A, B, C, D, E, F, R2>(this Tuple<A, B, C, D, E, F> self, Func<B, R2> secondMap) { return Prelude.Tuple(self.Item1, secondMap(self.Item2), self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static Tuple<A, B, R3, D, E, F> MapThird<A, B, C, D, E, F, R3>(this Tuple<A, B, C, D, E, F> self, Func<C, R3> thirdMap) { return Prelude.Tuple(self.Item1, self.Item2, thirdMap(self.Item3), self.Item4, self.Item5, self.Item6); } [Pure] public static Tuple<A, B, C, R4, E, F> MapFourth<A, B, C, D, E, F, R4>(this Tuple<A, B, C, D, E, F> self, Func<D, R4> fourthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, fourthMap(self.Item4), self.Item5, self.Item6); } [Pure] public static Tuple<A, B, C, D, R5, F> MapFifth<A, B, C, D, E, F, R5>(this Tuple<A, B, C, D, E, F> self, Func<E, R5> fifthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, fifthMap(self.Item5), self.Item6); } [Pure] public static Tuple<A, B, C, D, E, R6> MapSixth<A, B, C, D, E, F, R6>(this Tuple<A, B, C, D, E, F> self, Func<F, R6> sixthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, sixthMap(self.Item6)); } [Pure] public static Tuple<U, V, W, X, Y, Z> Select<A, B, C, D, E, F, U, V, W, X, Y, Z>(this Tuple<A, B, C, D, E, F> self, Func<Tuple<A, B, C, D, E, F>, Tuple<U, V, W, X, Y, Z>> map) { return map(self); } public static Unit Iter<A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> self, Action<A, B, C, D, E, F> func) { func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); return Unit.Default; } public static Unit Iter<A, B, C, D, E, F>(this Tuple<A, B, C, D, E, F> self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth, Action<E> fifth, Action<F> sixth) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); fifth(self.Item5); sixth(self.Item6); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, E, F, S>(this Tuple<A, B, C, D, E, F> self, S state, Func<S, A, B, C, D, E, F, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static S SextFold<A, B, C, D, E, F, S>(this Tuple<A, B, C, D, E, F> self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold, Func<S, E, S> fifthFold, Func<S, F, S> sixthFold) { return sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4), self.Item5), self.Item6); } [Pure] public static S SextFoldBack<A, B, C, D, E, F, S>(this Tuple<A, B, C, D, E, F> self, S state, Func<S, F, S> firstFold, Func<S, E, S> secondFold, Func<S, D, S> thirdFold, Func<S, C, S> fourthFold, Func<S, B, S> fifthFold, Func<S, A, S> sixthFold) { return sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item6), self.Item5), self.Item4), self.Item3), self.Item2), self.Item1); } } public static class Tuple7Extensions { [Pure] public static Tuple<A, B, C, D, E, F, G> Append<SemiA, SemiB, SemiC, SemiD, SemiE, SemiF, SemiG, A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> a, Tuple<A, B, C, D, E, F, G> b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> where SemiE : struct, Semigroup<E> where SemiF : struct, Semigroup<F> where SemiG : struct, Semigroup<G> { return Prelude.Tuple(default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4), default(SemiE).Append(a.Item5, b.Item5), default(SemiF).Append(a.Item6, b.Item6), default(SemiG).Append(a.Item7, b.Item7)); } [Pure] public static A Append<SemiA, A>(this Tuple<A, A, A, A, A, A, A> a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, default(SemiA).Append(a.Item4, default(SemiA).Append(a.Item5, default(SemiA).Append(a.Item6, a.Item7)))))); } [Pure] public static Tuple<A, B, C, D, E, F, G> Concat<MonoidA, MonoidB, MonoidC, MonoidD, MonoidE, MonoidF, MonoidG, A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> a, Tuple<A, B, C, D, E, F, G> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> where MonoidE : struct, Monoid<E> where MonoidF : struct, Monoid<F> where MonoidG : struct, Monoid<G> { return Prelude.Tuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 }), TypeClass.mconcat<MonoidE, E>(new E[2] { a.Item5, b.Item5 }), TypeClass.mconcat<MonoidF, F>(new F[2] { a.Item6, b.Item6 }), TypeClass.mconcat<MonoidG, G>(new G[2] { a.Item7, b.Item7 })); } [Pure] public static A Concat<MonoidA, A>(this Tuple<A, A, A, A, A, A, A> a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[7] { a.Item1, a.Item2, a.Item3, a.Item4, a.Item5, a.Item6, a.Item7 }); } [Pure] public static A Head<A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> self) { return self.Item1; } [Pure] public static G Last<A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> self) { return self.Item7; } [Pure] public static (B, C, D, E, F, G) Tail<A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> self) { return (self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static A Sum<NUM, A>(this Tuple<A, A, A, A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, Tuple<A, A, A, A, A, A, A>, A>(self); } [Pure] public static A Product<NUM, A>(this Tuple<A, A, A, A, A, A, A> self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, Tuple<A, A, A, A, A, A, A>, A>(self); } [Pure] public static bool Contains<EQ, A>(this Tuple<A, A, A, A, A, A, A> self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value) && !default(EQ).Equals(self.Item4, value) && !default(EQ).Equals(self.Item5, value) && !default(EQ).Equals(self.Item6, value)) { return default(EQ).Equals(self.Item7, value); } return true; } [Pure] public static R Map<A, B, C, D, E, F, G, R>(this Tuple<A, B, C, D, E, F, G> self, Func<Tuple<A, B, C, D, E, F, G>, R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, E, F, G, R>(this Tuple<A, B, C, D, E, F, G> self, Func<A, B, C, D, E, F, G, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static Tuple<T, U, V, W, X, Y, Z> Map<A, B, C, D, E, F, G, T, U, V, W, X, Y, Z>(this Tuple<A, B, C, D, E, F, G> self, Func<A, T> firstMap, Func<B, U> secondMap, Func<C, V> thirdMap, Func<D, W> fourthMap, Func<E, X> fifthMap, Func<F, Y> sixthMap, Func<G, Z> seventhMap) { return Prelude.Tuple(firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4), fifthMap(self.Item5), sixthMap(self.Item6), seventhMap(self.Item7)); } [Pure] public static Tuple<R1, B, C, D, E, F, G> MapFirst<A, B, C, D, E, F, G, R1>(this Tuple<A, B, C, D, E, F, G> self, Func<A, R1> firstMap) { return Prelude.Tuple(firstMap(self.Item1), self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static Tuple<A, R2, C, D, E, F, G> MapSecond<A, B, C, D, E, F, G, R2>(this Tuple<A, B, C, D, E, F, G> self, Func<B, R2> secondMap) { return Prelude.Tuple(self.Item1, secondMap(self.Item2), self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static Tuple<A, B, R3, D, E, F, G> MapThird<A, B, C, D, E, F, G, R3>(this Tuple<A, B, C, D, E, F, G> self, Func<C, R3> thirdMap) { return Prelude.Tuple(self.Item1, self.Item2, thirdMap(self.Item3), self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static Tuple<A, B, C, R4, E, F, G> MapFourth<A, B, C, D, E, F, G, R4>(this Tuple<A, B, C, D, E, F, G> self, Func<D, R4> fourthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, fourthMap(self.Item4), self.Item5, self.Item6, self.Item7); } [Pure] public static Tuple<A, B, C, D, R5, F, G> MapFifth<A, B, C, D, E, F, G, R5>(this Tuple<A, B, C, D, E, F, G> self, Func<E, R5> fifthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, fifthMap(self.Item5), self.Item6, self.Item7); } [Pure] public static Tuple<A, B, C, D, E, R6, G> MapSixth<A, B, C, D, E, F, G, R6>(this Tuple<A, B, C, D, E, F, G> self, Func<F, R6> sixthMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, sixthMap(self.Item6), self.Item7); } [Pure] public static Tuple<A, B, C, D, E, F, R7> MapSeventh<A, B, C, D, E, F, G, R7>(this Tuple<A, B, C, D, E, F, G> self, Func<G, R7> seventhMap) { return Prelude.Tuple(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, seventhMap(self.Item7)); } [Pure] public static Tuple<U, V, W, X, Y, Z> Select<A, B, C, D, E, F, G, U, V, W, X, Y, Z>(this Tuple<A, B, C, D, E, F, G> self, Func<Tuple<A, B, C, D, E, F, G>, Tuple<U, V, W, X, Y, Z>> map) { return map(self); } public static Unit Iter<A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> self, Action<A, B, C, D, E, F, G> func) { func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); return Unit.Default; } public static Unit Iter<A, B, C, D, E, F, G>(this Tuple<A, B, C, D, E, F, G> self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth, Action<E> fifth, Action<F> sixth, Action<G> seventh) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); fifth(self.Item5); sixth(self.Item6); seventh(self.Item7); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, E, F, G, S>(this Tuple<A, B, C, D, E, F, G> self, S state, Func<S, A, B, C, D, E, F, G, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static S SeptFold<A, B, C, D, E, F, G, S>(this Tuple<A, B, C, D, E, F, G> self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold, Func<S, E, S> fifthFold, Func<S, F, S> sixthFold, Func<S, G, S> seventhFold) { return seventhFold(sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4), self.Item5), self.Item6), self.Item7); } [Pure] public static S SeptFoldBack<A, B, C, D, E, F, G, S>(this Tuple<A, B, C, D, E, F, G> self, S state, Func<S, G, S> firstFold, Func<S, F, S> secondFold, Func<S, E, S> thirdFold, Func<S, D, S> fourthFold, Func<S, C, S> fifthFold, Func<S, B, S> sixthFold, Func<S, A, S> seventhFold) { return seventhFold(sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item7), self.Item6), self.Item5), self.Item4), self.Item3), self.Item2), self.Item1); } } public static class ValueTuple1Extensions { [Pure] public static (A, B) Add<A, B>(this ValueTuple<A> self, B second) { return (self.Item1, second); } [Pure] public static ValueTuple<A> Append<SemiA, SemiB, A, B>(this ValueTuple<A> a, ValueTuple<A> b) where SemiA : struct, Semigroup<A> { return Prelude.VTuple(default(SemiA).Append(a.Item1, b.Item1)); } [Pure] public static ValueTuple<A> Concat<MonoidA, MonoidB, A, B>(this ValueTuple<A> a, ValueTuple<A> b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> { return Prelude.VTuple(TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 })); } [Pure] public static A Head<A>(this ValueTuple<A> self) { return self.Item1; } [Pure] public static A Last<A>(this ValueTuple<A> self) { return self.Item1; } [Pure] public static A Sum<NUM, A>(this ValueTuple<A> self) where NUM : struct, Num<A> { return self.Item1; } [Pure] public static A Product<NUM, A>(this ValueTuple<A> self) where NUM : struct, Num<A> { return self.Item1; } [Pure] public static bool Contains<EQ, A>(this ValueTuple<A> self, A value) where EQ : struct, Eq<A> { return default(EQ).Equals(self.Item1, value); } [Pure] public static ValueTuple<R> Map<A, R>(this ValueTuple<A> self, Func<A, R> map) { return Prelude.VTuple(map(self.Item1)); } [Pure] public static ValueTuple<R> Select<A, R>(this ValueTuple<A> self, Func<A, R> map) { return Prelude.VTuple(map(self.Item1)); } public static Unit Iter<A>(this ValueTuple<A> self, Action<A> func) { func(self.Item1); return Unit.Default; } [Pure] public static S Fold<A, S>(this ValueTuple<A> self, S state, Func<S, A, S> fold) { return fold(state, self.Item1); } } public static class ValueTuple2Extensions { [Pure] public static (A, B, C) Add<A, B, C>(this (A, B) self, C third) { return (self.Item1, self.Item2, third); } [Pure] public static (A, B) Append<SemiA, SemiB, A, B>(this (A, B) a, (A, B) b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> { return (default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2)); } [Pure] public static A Append<SemiA, A>(this (A, A) a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, a.Item2); } [Pure] public static (A, B) Concat<MonoidA, MonoidB, A, B>(this (A, B) a, (A, B) b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> { return (TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 })); } [Pure] public static A Concat<MonoidA, A>(this (A, A) a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, a.Item2 }); } [Pure] public static T1 Head<T1, T2>(this (T1, T2) self) { return self.Item1; } [Pure] public static T2 Last<T1, T2>(this (T1, T2) self) { return self.Item2; } [Pure] public static ValueTuple<T2> Tail<T1, T2>(this (T1, T2) self) { return Prelude.VTuple(self.Item2); } [Pure] public static A Sum<NUM, A>(this (A, A) self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, (A, A), A>(self); } [Pure] public static A Product<NUM, A>(this (A, A) self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, (A, A), A>(self); } [Pure] public static bool Contains<EQ, A>(this (A, A) self, A value) where EQ : struct, Eq<A> { return TypeClass.contains<EQ, FoldTuple<A>, (A, A), A>(self, value); } [Pure] public static R Map<A, B, R>(this (A, B) self, Func<(A, B), R> map) { return map(self); } [Pure] public static R Map<A, B, R>(this (A, B) self, Func<A, B, R> map) { return map(self.Item1, self.Item2); } [Pure] public static (R1, R2) BiMap<T1, T2, R1, R2>(this (T1, T2) self, Func<T1, R1> firstMap, Func<T2, R2> secondMap) { return (firstMap(self.Item1), secondMap(self.Item2)); } [Pure] public static (R1, T2) MapFirst<T1, T2, R1>(this (T1, T2) self, Func<T1, R1> firstMap) { return (firstMap(self.Item1), self.Item2); } [Pure] public static (T1, R2) MapSecond<T1, T2, R2>(this (T1, T2) self, Func<T2, R2> secondMap) { return (self.Item1, secondMap(self.Item2)); } [Pure] public static (R1, R2) Select<T1, T2, R1, R2>(this (T1, T2) self, Func<(T1, T2), (R1, R2)> map) { return map(self); } public static Unit Iter<T1, T2>(this (T1, T2) self, Action<T1, T2> func) { func(self.Item1, self.Item2); return Unit.Default; } public static Unit Iter<T1, T2>(this (T1, T2) self, Action<T1> first, Action<T2> second) { first(self.Item1); second(self.Item2); return Unit.Default; } [Pure] public static S Fold<T1, T2, S>(this (T1, T2) self, S state, Func<S, T1, T2, S> fold) { return fold(state, self.Item1, self.Item2); } [Pure] public static S BiFold<T1, T2, S>(this (T1, T2) self, S state, Func<S, T1, S> firstFold, Func<S, T2, S> secondFold) { return secondFold(firstFold(state, self.Item1), self.Item2); } [Pure] public static S BiFoldBack<T1, T2, S>(this (T1, T2) self, S state, Func<S, T2, S> firstFold, Func<S, T1, S> secondFold) { return secondFold(firstFold(state, self.Item2), self.Item1); } [Pure] public static Arr<(C, D)> Traverse<A, B, C, D>(this (Arr<A> ma, Arr<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return ArrExtensions.Select(from a in tuple.ma from b in tuple.mb select new { <>h__TransparentIdentifier0 = <>h__TransparentIdentifier0, r = f((a, b)) }, <>h__TransparentIdentifier1 => (<>h__TransparentIdentifier1.r.c, <>h__TransparentIdentifier1.r.d)); } [Pure] public static Arr<(C, D)> Traverse<A, B, C, D>(this (Arr<A> ma, Arr<B> mb) tuple, Func<A, B, (C c, D d)> f) { return ArrExtensions.Select(from a in tuple.ma from b in tuple.mb select new { <>h__TransparentIdentifier0 = <>h__TransparentIdentifier0, r = f(a, b) }, <>h__TransparentIdentifier1 => (<>h__TransparentIdentifier1.r.c, <>h__TransparentIdentifier1.r.d)); } [Pure] public static Arr<(A, B)> Sequence<A, B>(this (Arr<A> ma, Arr<B> mb) tuple) { return from a in tuple.ma from b in tuple.mb select (a, b); } [Pure] public static Either<L, (C, D)> Traverse<L, A, B, C, D>(this (Either<L, A> ma, Either<L, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { Either<L, A> item = tuple.ma; return from a in item from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static Either<L, (C, D)> Traverse<L, A, B, C, D>(this (Either<L, A> ma, Either<L, B> mb) tuple, Func<A, B, (C c, D d)> f) { Either<L, A> item = tuple.ma; return from a in item from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static Either<L, (A, B)> Sequence<L, A, B>(this (Either<L, A> ma, Either<L, B> mb) tuple) { Either<L, A> item = tuple.ma; return from a in item from b in tuple.mb select (a, b); } [Pure] public static EitherUnsafe<L, (C, D)> Traverse<L, A, B, C, D>(this (EitherUnsafe<L, A> ma, EitherUnsafe<L, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { EitherUnsafe<L, A> item = tuple.ma; return from a in item from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static EitherUnsafe<L, (C, D)> Traverse<L, A, B, C, D>(this (EitherUnsafe<L, A> ma, EitherUnsafe<L, B> mb) tuple, Func<A, B, (C c, D d)> f) { EitherUnsafe<L, A> item = tuple.ma; return from a in item from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static EitherUnsafe<L, (A, B)> Sequence<L, A, B>(this (EitherUnsafe<L, A> ma, EitherUnsafe<L, B> mb) tuple) { EitherUnsafe<L, A> item = tuple.ma; return from a in item from b in tuple.mb select (a, b); } [Pure] public static EitherAsync<L, (C, D)> Traverse<L, A, B, C, D>(this (EitherAsync<L, A> ma, EitherAsync<L, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return Prelude.apply((A a, B b) => f((a, b)), tuple.ma, tuple.mb); } [Pure] public static EitherAsync<L, (C, D)> Traverse<L, A, B, C, D>(this (EitherAsync<L, A> ma, EitherAsync<L, B> mb) tuple, Func<A, B, (C c, D d)> f) { return Prelude.apply((A a, B b) => f(a, b), tuple.ma, tuple.mb); } [Pure] public static EitherAsync<L, (A, B)> Sequence<L, A, B>(this (EitherAsync<L, A> ma, EitherAsync<L, B> mb) tuple) { return Prelude.apply((A a, B b) => (a, b), tuple.ma, tuple.mb); } [Pure] public static LanguageExt.HashSet<(C, D)> Traverse<A, B, C, D>(this (LanguageExt.HashSet<A> ma, LanguageExt.HashSet<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { LanguageExt.HashSet<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static LanguageExt.HashSet<(C, D)> Traverse<A, B, C, D>(this (LanguageExt.HashSet<A> ma, LanguageExt.HashSet<B> mb) tuple, Func<A, B, (C c, D d)> f) { LanguageExt.HashSet<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static LanguageExt.HashSet<(A, B)> Sequence<A, B>(this (LanguageExt.HashSet<A> ma, LanguageExt.HashSet<B> mb) tuple) { LanguageExt.HashSet<A> item = tuple.ma; return from a in item from b in tuple.mb select (a, b); } [Pure] public static Lst<(C, D)> Traverse<A, B, C, D>(this (Lst<A> ma, Lst<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return ListExtensions.Select(from a in tuple.ma from b in tuple.mb select new { <>h__TransparentIdentifier0 = <>h__TransparentIdentifier0, r = f((a, b)) }, <>h__TransparentIdentifier1 => (<>h__TransparentIdentifier1.r.c, <>h__TransparentIdentifier1.r.d)); } [Pure] public static Lst<(C, D)> Traverse<A, B, C, D>(this (Lst<A> ma, Lst<B> mb) tuple, Func<A, B, (C c, D d)> f) { return ListExtensions.Select(from a in tuple.ma from b in tuple.mb select new { <>h__TransparentIdentifier0 = <>h__TransparentIdentifier0, r = f(a, b) }, <>h__TransparentIdentifier1 => (<>h__TransparentIdentifier1.r.c, <>h__TransparentIdentifier1.r.d)); } [Pure] public static Lst<(A, B)> Sequence<A, B>(this (Lst<A> ma, Lst<B> mb) tuple) { return from a in tuple.ma from b in tuple.mb select (a, b); } [Pure] public static Option<(C, D)> Traverse<A, B, C, D>(this (Option<A> ma, Option<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { Option<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static Option<(C, D)> Traverse<A, B, C, D>(this (Option<A> ma, Option<B> mb) tuple, Func<A, B, (C c, D d)> f) { Option<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static Option<(A, B)> Sequence<A, B>(this (Option<A> ma, Option<B> mb) tuple) { Option<A> item = tuple.ma; return from a in item from b in tuple.mb select (a, b); } [Pure] public static OptionUnsafe<(C, D)> Traverse<A, B, C, D>(this (OptionUnsafe<A> ma, OptionUnsafe<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { OptionUnsafe<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static OptionUnsafe<(C, D)> Traverse<A, B, C, D>(this (OptionUnsafe<A> ma, OptionUnsafe<B> mb) tuple, Func<A, B, (C c, D d)> f) { OptionUnsafe<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static OptionUnsafe<(A, B)> Sequence<A, B>(this (OptionUnsafe<A> ma, OptionUnsafe<B> mb) tuple) { OptionUnsafe<A> item = tuple.ma; return from a in item from b in tuple.mb select (a, b); } [Pure] public static OptionAsync<(C, D)> Traverse<A, B, C, D>(this (OptionAsync<A> ma, OptionAsync<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return Prelude.apply((A a, B b) => f((a, b)), tuple.ma, tuple.mb); } [Pure] public static OptionAsync<(C, D)> Traverse<A, B, C, D>(this (OptionAsync<A> ma, OptionAsync<B> mb) tuple, Func<A, B, (C c, D d)> f) { return Prelude.apply((A a, B b) => f(a, b), tuple.ma, tuple.mb); } [Pure] public static OptionAsync<(A, B)> Sequence<A, B>(this (OptionAsync<A> ma, OptionAsync<B> mb) tuple) { return Prelude.apply((A a, B b) => (a, b), tuple.ma, tuple.mb); } [Pure] public static Reader<Env, (C, D)> Traverse<Env, A, B, C, D>(this (Reader<Env, A> ma, Reader<Env, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static Reader<Env, (C, D)> Traverse<Env, A, B, C, D>(this (Reader<Env, A> ma, Reader<Env, B> mb) tuple, Func<A, B, (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static Reader<Env, (A, B)> Sequence<Env, A, B>(this (Reader<Env, A> ma, Reader<Env, B> mb) tuple) { return from a in tuple.ma from b in tuple.mb select (a, b); } [Pure] public static Set<(C, D)> Traverse<A, B, C, D>(this (Set<A> ma, Set<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { Set<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static Set<(C, D)> Traverse<A, B, C, D>(this (Set<A> ma, Set<B> mb) tuple, Func<A, B, (C c, D d)> f) { Set<A> item = tuple.ma; return from a in item from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static Set<(A, B)> Sequence<A, B>(this (Set<A> ma, Set<B> mb) tuple) { Set<A> item = tuple.ma; return from a in item from b in tuple.mb select (a, b); } [Pure] public static State<S, (C, D)> Traverse<S, A, B, C, D>(this (State<S, A> ma, State<S, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static State<S, (C, D)> Traverse<S, A, B, C, D>(this (State<S, A> ma, State<S, B> mb) tuple, Func<A, B, (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static State<S, (A, B)> Sequence<S, A, B>(this (State<S, A> ma, State<S, B> mb) tuple) { return from a in tuple.ma from b in tuple.mb select (a, b); } [Pure] public static Task<(C, D)> Traverse<A, B, C, D>(this (Task<A> ma, Task<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return Prelude.apply((A a, B b) => f((a, b)), tuple.ma, tuple.mb); } [Pure] public static Task<(C, D)> Traverse<A, B, C, D>(this (Task<A> ma, Task<B> mb) tuple, Func<A, B, (C c, D d)> f) { return Prelude.apply((A a, B b) => f(a, b), tuple.ma, tuple.mb); } [Pure] public static Task<(A, B)> Sequence<A, B>(this (Task<A> ma, Task<B> mb) tuple) { return Prelude.apply((A a, B b) => (a, b), tuple.ma, tuple.mb); } [Pure] public static Try<(C, D)> Traverse<A, B, C, D>(this (Try<A> ma, Try<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static Try<(C, D)> Traverse<A, B, C, D>(this (Try<A> ma, Try<B> mb) tuple, Func<A, B, (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static Try<(A, B)> Sequence<A, B>(this (Try<A> ma, Try<B> mb) tuple) { return from a in tuple.ma from b in tuple.mb select (a, b); } [Pure] public static TryAsync<(C, D)> Traverse<A, B, C, D>(this (TryAsync<A> ma, TryAsync<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return Prelude.apply((A a, B b) => f((a, b)), tuple.ma, tuple.mb); } [Pure] public static TryAsync<(C, D)> Traverse<A, B, C, D>(this (TryAsync<A> ma, TryAsync<B> mb) tuple, Func<A, B, (C c, D d)> f) { return Prelude.apply((A a, B b) => f(a, b), tuple.ma, tuple.mb); } [Pure] public static TryAsync<(A, B)> Sequence<A, B>(this (TryAsync<A> ma, TryAsync<B> mb) tuple) { return Prelude.apply((A a, B b) => (a, b), tuple.ma, tuple.mb); } [Pure] public static TryOption<(C, D)> Traverse<A, B, C, D>(this (TryOption<A> ma, TryOption<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f((a, b)) select (r.c, r.d); } [Pure] public static TryOption<(C, D)> Traverse<A, B, C, D>(this (TryOption<A> ma, TryOption<B> mb) tuple, Func<A, B, (C c, D d)> f) { return from a in tuple.ma from b in tuple.mb let r = f(a, b) select (r.c, r.d); } [Pure] public static TryOption<(A, B)> Sequence<A, B>(this (TryOption<A> ma, TryOption<B> mb) tuple) { return from a in tuple.ma from b in tuple.mb select (a, b); } [Pure] public static TryOptionAsync<(C, D)> Traverse<A, B, C, D>(this (TryOptionAsync<A> ma, TryOptionAsync<B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return Prelude.apply((A a, B b) => f((a, b)), tuple.ma, tuple.mb); } [Pure] public static TryOptionAsync<(C, D)> Traverse<A, B, C, D>(this (TryOptionAsync<A> ma, TryOptionAsync<B> mb) tuple, Func<A, B, (C c, D d)> f) { return Prelude.apply((A a, B b) => f(a, b), tuple.ma, tuple.mb); } [Pure] public static TryOptionAsync<(A, B)> Sequence<A, B>(this (TryOptionAsync<A> ma, TryOptionAsync<B> mb) tuple) { return Prelude.apply((A a, B b) => (a, b), tuple.ma, tuple.mb); } [Pure] public static Validation<MonoidFail, L, (C, D)> Traverse<MonoidFail, L, A, B, C, D>(this (Validation<MonoidFail, L, A> ma, Validation<MonoidFail, L, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) where MonoidFail : struct, Monoid<L>, Eq<L> { return tuple.Apply((A a, B b) => f((a, b))); } [Pure] public static Validation<MonoidFail, L, (C, D)> Traverse<MonoidFail, L, A, B, C, D>(this (Validation<MonoidFail, L, A> ma, Validation<MonoidFail, L, B> mb) tuple, Func<A, B, (C c, D d)> f) where MonoidFail : struct, Monoid<L>, Eq<L> { return tuple.Apply(f); } [Pure] public static Validation<MonoidFail, L, (A, B)> Sequence<MonoidFail, L, A, B>(this (Validation<MonoidFail, L, A> ma, Validation<MonoidFail, L, B> mb) tuple) where MonoidFail : struct, Monoid<L>, Eq<L> { return tuple.Apply((A a, B b) => (a, b)); } [Pure] public static Validation<L, (C, D)> Traverse<L, A, B, C, D>(this (Validation<L, A> ma, Validation<L, B> mb) tuple, Func<(A a, B b), (C c, D d)> f) { return tuple.Apply((A a, B b) => f((a, b))); } [Pure] public static Validation<L, (C, D)> Traverse<L, A, B, C, D>(this (Validation<L, A> ma, Validation<L, B> mb) tuple, Func<A, B, (C c, D d)> f) { return tuple.Apply(f); } [Pure] public static Validation<L, (A, B)> Sequence<L, A, B>(this (Validation<L, A> ma, Validation<L, B> mb) tuple) { return tuple.Apply((A a, B b) => (a, b)); } } public static class ValueTuple3Extensions { [Pure] public static (T1, T2, T3, T4) Add<T1, T2, T3, T4>(this (T1, T2, T3) self, T4 fourth) { return (self.Item1, self.Item2, self.Item3, fourth); } [Pure] public static (A, B, C) Append<SemiA, SemiB, SemiC, A, B, C>(this (A, B, C) a, (A, B, C) b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> { return (default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3)); } [Pure] public static A Append<SemiA, A>(this (A, A, A) a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, a.Item3)); } [Pure] public static (A, B, C) Concat<MonoidA, MonoidB, MonoidC, A, B, C>(this (A, B, C) a, (A, B, C) b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> { return (TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 })); } [Pure] public static A Concat<MonoidA, A>(this (A, A, A) a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[3] { a.Item1, a.Item2, a.Item3 }); } [Pure] public static T1 Head<T1, T2, T3>(this (T1, T2, T3) self) { return self.Item1; } [Pure] public static T3 Last<T1, T2, T3>(this (T1, T2, T3) self) { return self.Item3; } [Pure] public static (T2, T3) Tail<T1, T2, T3>(this (T1, T2, T3) self) { return (self.Item2, self.Item3); } [Pure] public static A Sum<NUM, A>(this (A, A, A) self) where NUM : struct, Num<A> { return default(NUM).Plus(self.Item1, default(NUM).Plus(self.Item2, self.Item3)); } [Pure] public static A Product<NUM, A>(this (A, A, A) self) where NUM : struct, Num<A> { return default(NUM).Product(self.Item1, default(NUM).Product(self.Item2, self.Item3)); } [Pure] public static bool Contains<EQ, A>(this (A, A, A) self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value)) { return default(EQ).Equals(self.Item3, value); } return true; } [Pure] public static R Map<A, B, C, R>(this (A, B, C) self, Func<(A, B, C), R> map) { return map(self); } [Pure] public static R Map<A, B, C, R>(this (A, B, C) self, Func<A, B, C, R> map) { return map(self.Item1, self.Item2, self.Item3); } [Pure] public static (R1, R2, R3) Map<T1, T2, T3, R1, R2, R3>(this (T1, T2, T3) self, Func<T1, R1> firstMap, Func<T2, R2> secondMap, Func<T3, R3> thirdMap) { return (firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3)); } [Pure] public static (R1, T2, T3) MapFirst<T1, T2, T3, R1>(this (T1, T2, T3) self, Func<T1, R1> firstMap) { return (firstMap(self.Item1), self.Item2, self.Item3); } [Pure] public static (T1, R2, T3) MapSecond<T1, T2, T3, R2>(this (T1, T2, T3) self, Func<T2, R2> secondMap) { return (self.Item1, secondMap(self.Item2), self.Item3); } [Pure] public static (T1, T2, R3) MapThird<T1, T2, T3, R3>(this (T1, T2, T3) self, Func<T3, R3> thirdMap) { return (self.Item1, self.Item2, thirdMap(self.Item3)); } [Pure] public static (R1, R2, R3) Select<T1, T2, T3, R1, R2, R3>(this (T1, T2, T3) self, Func<(T1, T2, T3), (R1, R2, R3)> map) { return map(self); } public static Unit Iter<T1, T2, T3>(this (T1, T2, T3) self, Action<T1, T2, T3> func) { func(self.Item1, self.Item2, self.Item3); return Unit.Default; } public static Unit Iter<T1, T2, T3>(this (T1, T2, T3) self, Action<T1> first, Action<T2> second, Action<T3> third) { first(self.Item1); second(self.Item2); third(self.Item3); return Unit.Default; } [Pure] public static S Fold<T1, T2, T3, S>(this (T1, T2, T3) self, S state, Func<S, T1, T2, T3, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3); } [Pure] public static S TriFold<T1, T2, T3, S>(this (T1, T2, T3) self, S state, Func<S, T1, S> firstFold, Func<S, T2, S> secondFold, Func<S, T3, S> thirdFold) { return thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3); } [Pure] public static S TriFoldBack<T1, T2, T3, S>(this (T1, T2, T3) self, S state, Func<S, T3, S> firstFold, Func<S, T2, S> secondFold, Func<S, T1, S> thirdFold) { return thirdFold(secondFold(firstFold(state, self.Item3), self.Item2), self.Item1); } } public static class ValueTuple4Extensions { [Pure] public static (A, B, C, D, E) Add<A, B, C, D, E>(this (A, B, C, D) self, E fifth) { return (self.Item1, self.Item2, self.Item3, self.Item4, fifth); } [Pure] public static (A, B, C, D) Append<SemiA, SemiB, SemiC, SemiD, A, B, C, D>(this (A, B, C, D) a, (A, B, C, D) b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> { return (default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4)); } [Pure] public static A Append<SemiA, A>(this (A, A, A, A) a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, a.Item4))); } [Pure] public static (A, B, C, D) Concat<MonoidA, MonoidB, MonoidC, MonoidD, A, B, C, D>(this (A, B, C, D) a, (A, B, C, D) b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> { return (TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 })); } [Pure] public static A Concat<MonoidA, A>(this (A, A, A, A) a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[4] { a.Item1, a.Item2, a.Item3, a.Item4 }); } [Pure] public static A Head<A, B, C, D>(this (A, B, C, D) self) { return self.Item1; } [Pure] public static D Last<A, B, C, D>(this (A, B, C, D) self) { return self.Item4; } [Pure] public static (B, C, D) Tail<A, B, C, D>(this (A, B, C, D) self) { return (self.Item2, self.Item3, self.Item4); } [Pure] public static A Sum<NUM, A>(this (A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, (A, A, A, A), A>(self); } [Pure] public static A Product<NUM, A>(this (A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, (A, A, A, A), A>(self); } [Pure] public static bool Contains<EQ, A>(this (A, A, A, A) self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value)) { return default(EQ).Equals(self.Item4, value); } return true; } [Pure] public static R Map<A, B, C, D, R>(this (A, B, C, D) self, Func<(A, B, C, D), R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, R>(this (A, B, C, D) self, Func<A, B, C, D, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4); } [Pure] public static (W, X, Y, Z) Map<A, B, C, D, W, X, Y, Z>(this (A, B, C, D) self, Func<A, W> firstMap, Func<B, X> secondMap, Func<C, Y> thirdMap, Func<D, Z> fourthMap) { return (firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4)); } [Pure] public static (R1, B, C, D) MapFirst<A, B, C, D, R1>(this (A, B, C, D) self, Func<A, R1> firstMap) { return (firstMap(self.Item1), self.Item2, self.Item3, self.Item4); } [Pure] public static (A, R2, C, D) MapSecond<A, B, C, D, R2>(this (A, B, C, D) self, Func<B, R2> secondMap) { return (self.Item1, secondMap(self.Item2), self.Item3, self.Item4); } [Pure] public static (A, B, R3, D) MapThird<A, B, C, D, R3>(this (A, B, C, D) self, Func<C, R3> thirdMap) { return (self.Item1, self.Item2, thirdMap(self.Item3), self.Item4); } [Pure] public static (A, B, C, R4) MapFourth<A, B, C, D, R4>(this (A, B, C, D) self, Func<D, R4> fourthMap) { return (self.Item1, self.Item2, self.Item3, fourthMap(self.Item4)); } [Pure] public static (W, X, Y, Z) Select<A, B, C, D, W, X, Y, Z>(this (A, B, C, D) self, Func<(A, B, C, D), (W, X, Y, Z)> map) { return map(self); } public static Unit Iter<A, B, C, D>(this (A, B, C, D) self, Action<A, B, C, D> func) { func(self.Item1, self.Item2, self.Item3, self.Item4); return Unit.Default; } public static Unit Iter<A, B, C, D>(this (A, B, C, D) self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, S>(this (A, B, C, D) self, S state, Func<S, A, B, C, D, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4); } [Pure] public static S QuadFold<A, B, C, D, S>(this (A, B, C, D) self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold) { return fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4); } [Pure] public static S QuadFoldBack<A, B, C, D, S>(this (A, B, C, D) self, S state, Func<S, D, S> firstFold, Func<S, C, S> secondFold, Func<S, B, S> thirdFold, Func<S, A, S> fourthFold) { return fourthFold(thirdFold(secondFold(firstFold(state, self.Item4), self.Item3), self.Item2), self.Item1); } } public static class ValueTuple5Extensions { [Pure] public static (A, B, C, D, E, F) Add<A, B, C, D, E, F>(this (A, B, C, D, E) self, F sixth) { return (self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, sixth); } [Pure] public static (A, B, C, D, E) Append<SemiA, SemiB, SemiC, SemiD, SemiE, A, B, C, D, E>(this (A, B, C, D, E) a, (A, B, C, D, E) b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> where SemiE : struct, Semigroup<E> { return (default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4), default(SemiE).Append(a.Item5, b.Item5)); } [Pure] public static A Append<SemiA, A>(this (A, A, A, A, A) a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, default(SemiA).Append(a.Item4, a.Item5)))); } [Pure] public static (A, B, C, D, E) Concat<MonoidA, MonoidB, MonoidC, MonoidD, MonoidE, A, B, C, D, E>(this (A, B, C, D, E) a, (A, B, C, D, E) b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> where MonoidE : struct, Monoid<E> { return (TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 }), TypeClass.mconcat<MonoidE, E>(new E[2] { a.Item5, b.Item5 })); } [Pure] public static A Concat<MonoidA, A>(this (A, A, A, A, A) a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[5] { a.Item1, a.Item2, a.Item3, a.Item4, a.Item5 }); } [Pure] public static A Head<A, B, C, D, E>(this (A, B, C, D, E) self) { return self.Item1; } [Pure] public static E Last<A, B, C, D, E>(this (A, B, C, D, E) self) { return self.Item5; } [Pure] public static (B, C, D, E) Tail<A, B, C, D, E>(this (A, B, C, D, E) self) { return (self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static A Sum<NUM, A>(this (A, A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, (A, A, A, A, A), A>(self); } [Pure] public static A Product<NUM, A>(this (A, A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, (A, A, A, A, A), A>(self); } [Pure] public static bool Contains<EQ, A>(this (A, A, A, A, A) self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value) && !default(EQ).Equals(self.Item4, value)) { return default(EQ).Equals(self.Item5, value); } return true; } [Pure] public static R Map<A, B, C, D, E, R>(this (A, B, C, D, E) self, Func<(A, B, C, D, E), R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, E, R>(this (A, B, C, D, E) self, Func<A, B, C, D, E, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static (V, W, X, Y, Z) Map<A, B, C, D, E, V, W, X, Y, Z>(this (A, B, C, D, E) self, Func<A, V> firstMap, Func<B, W> secondMap, Func<C, X> thirdMap, Func<D, Y> fourthMap, Func<E, Z> fifthMap) { return (firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4), fifthMap(self.Item5)); } [Pure] public static (R1, B, C, D, E) MapFirst<A, B, C, D, E, R1>(this (A, B, C, D, E) self, Func<A, R1> firstMap) { return (firstMap(self.Item1), self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static (A, R2, C, D, E) MapSecond<A, B, C, D, E, R2>(this (A, B, C, D, E) self, Func<B, R2> secondMap) { return (self.Item1, secondMap(self.Item2), self.Item3, self.Item4, self.Item5); } [Pure] public static (A, B, R3, D, E) MapThird<A, B, C, D, E, R3>(this (A, B, C, D, E) self, Func<C, R3> thirdMap) { return (self.Item1, self.Item2, thirdMap(self.Item3), self.Item4, self.Item5); } [Pure] public static (A, B, C, R4, E) MapFourth<A, B, C, D, E, R4>(this (A, B, C, D, E) self, Func<D, R4> fourthMap) { return (self.Item1, self.Item2, self.Item3, fourthMap(self.Item4), self.Item5); } [Pure] public static (A, B, C, D, R5) MapFifth<A, B, C, D, E, R5>(this (A, B, C, D, E) self, Func<E, R5> fifthMap) { return (self.Item1, self.Item2, self.Item3, self.Item4, fifthMap(self.Item5)); } [Pure] public static (V, W, X, Y, Z) Select<A, B, C, D, E, V, W, X, Y, Z>(this (A, B, C, D, E) self, Func<(A, B, C, D, E), (V, W, X, Y, Z)> map) { return map(self); } public static Unit Iter<A, B, C, D, E>(this (A, B, C, D, E) self, Action<A, B, C, D, E> func) { func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); return Unit.Default; } public static Unit Iter<A, B, C, D, E>(this (A, B, C, D, E) self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth, Action<E> fifth) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); fifth(self.Item5); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, E, S>(this (A, B, C, D, E) self, S state, Func<S, A, B, C, D, E, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4, self.Item5); } [Pure] public static S QuintFold<A, B, C, D, E, S>(this (A, B, C, D, E) self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold, Func<S, E, S> fifthFold) { return fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4), self.Item5); } [Pure] public static S QuintFoldBack<A, B, C, D, E, S>(this (A, B, C, D, E) self, S state, Func<S, E, S> firstFold, Func<S, D, S> secondFold, Func<S, C, S> thirdFold, Func<S, B, S> fourthFold, Func<S, A, S> fifthFold) { return fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item5), self.Item4), self.Item3), self.Item2), self.Item1); } } public static class ValueTuple6Extensions { [Pure] public static (A, B, C, D, E, F, G) Add<A, B, C, D, E, F, G>(this (A, B, C, D, E, F) self, G seventh) { return (self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, seventh); } [Pure] public static (A, B, C, D, E, F) Append<SemiA, SemiB, SemiC, SemiD, SemiE, SemiF, A, B, C, D, E, F>(this (A, B, C, D, E, F) a, (A, B, C, D, E, F) b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> where SemiE : struct, Semigroup<E> where SemiF : struct, Semigroup<F> { return (default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4), default(SemiE).Append(a.Item5, b.Item5), default(SemiF).Append(a.Item6, b.Item6)); } [Pure] public static A Append<SemiA, A>(this (A, A, A, A, A, A) a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, default(SemiA).Append(a.Item4, default(SemiA).Append(a.Item5, a.Item6))))); } [Pure] public static (A, B, C, D, E, F) Concat<MonoidA, MonoidB, MonoidC, MonoidD, MonoidE, MonoidF, A, B, C, D, E, F>(this (A, B, C, D, E, F) a, (A, B, C, D, E, F) b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> where MonoidE : struct, Monoid<E> where MonoidF : struct, Monoid<F> { return (TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 }), TypeClass.mconcat<MonoidE, E>(new E[2] { a.Item5, b.Item5 }), TypeClass.mconcat<MonoidF, F>(new F[2] { a.Item6, b.Item6 })); } [Pure] public static A Concat<MonoidA, A>(this (A, A, A, A, A, A) a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[6] { a.Item1, a.Item2, a.Item3, a.Item4, a.Item5, a.Item6 }); } [Pure] public static A Head<A, B, C, D, E, F>(this (A, B, C, D, E, F) self) { return self.Item1; } [Pure] public static F Last<A, B, C, D, E, F>(this (A, B, C, D, E, F) self) { return self.Item6; } [Pure] public static (B, C, D, E, F) Tail<A, B, C, D, E, F>(this (A, B, C, D, E, F) self) { return (self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static A Sum<NUM, A>(this (A, A, A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, (A, A, A, A, A, A), A>(self); } [Pure] public static A Product<NUM, A>(this (A, A, A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, (A, A, A, A, A, A), A>(self); } [Pure] public static bool Contains<EQ, A>(this (A, A, A, A, A, A) self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value) && !default(EQ).Equals(self.Item4, value) && !default(EQ).Equals(self.Item5, value)) { return default(EQ).Equals(self.Item6, value); } return true; } [Pure] public static R Map<A, B, C, D, E, F, R>(this (A, B, C, D, E, F) self, Func<(A, B, C, D, E, F), R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, E, F, R>(this (A, B, C, D, E, F) self, Func<A, B, C, D, E, F, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static (U, V, W, X, Y, Z) Map<A, B, C, D, E, F, U, V, W, X, Y, Z>(this (A, B, C, D, E, F) self, Func<A, U> firstMap, Func<B, V> secondMap, Func<C, W> thirdMap, Func<D, X> fourthMap, Func<E, Y> fifthMap, Func<F, Z> sixthMap) { return (firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4), fifthMap(self.Item5), sixthMap(self.Item6)); } [Pure] public static (R1, B, C, D, E, F) MapFirst<A, B, C, D, E, F, R1>(this (A, B, C, D, E, F) self, Func<A, R1> firstMap) { return (firstMap(self.Item1), self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static (A, R2, C, D, E, F) MapSecond<A, B, C, D, E, F, R2>(this (A, B, C, D, E, F) self, Func<B, R2> secondMap) { return (self.Item1, secondMap(self.Item2), self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static (A, B, R3, D, E, F) MapThird<A, B, C, D, E, F, R3>(this (A, B, C, D, E, F) self, Func<C, R3> thirdMap) { return (self.Item1, self.Item2, thirdMap(self.Item3), self.Item4, self.Item5, self.Item6); } [Pure] public static (A, B, C, R4, E, F) MapFourth<A, B, C, D, E, F, R4>(this (A, B, C, D, E, F) self, Func<D, R4> fourthMap) { return (self.Item1, self.Item2, self.Item3, fourthMap(self.Item4), self.Item5, self.Item6); } [Pure] public static (A, B, C, D, R5, F) MapFifth<A, B, C, D, E, F, R5>(this (A, B, C, D, E, F) self, Func<E, R5> fifthMap) { return (self.Item1, self.Item2, self.Item3, self.Item4, fifthMap(self.Item5), self.Item6); } [Pure] public static (A, B, C, D, E, R6) MapSixth<A, B, C, D, E, F, R6>(this (A, B, C, D, E, F) self, Func<F, R6> sixthMap) { return (self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, sixthMap(self.Item6)); } [Pure] public static (U, V, W, X, Y, Z) Select<A, B, C, D, E, F, U, V, W, X, Y, Z>(this (A, B, C, D, E, F) self, Func<(A, B, C, D, E, F), (U, V, W, X, Y, Z)> map) { return map(self); } public static Unit Iter<A, B, C, D, E, F>(this (A, B, C, D, E, F) self, Action<A, B, C, D, E, F> func) { func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); return Unit.Default; } public static Unit Iter<A, B, C, D, E, F>(this (A, B, C, D, E, F) self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth, Action<E> fifth, Action<F> sixth) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); fifth(self.Item5); sixth(self.Item6); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, E, F, S>(this (A, B, C, D, E, F) self, S state, Func<S, A, B, C, D, E, F, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6); } [Pure] public static S SextFold<A, B, C, D, E, F, S>(this (A, B, C, D, E, F) self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold, Func<S, E, S> fifthFold, Func<S, F, S> sixthFold) { return sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4), self.Item5), self.Item6); } [Pure] public static S SextFoldBack<A, B, C, D, E, F, S>(this (A, B, C, D, E, F) self, S state, Func<S, F, S> firstFold, Func<S, E, S> secondFold, Func<S, D, S> thirdFold, Func<S, C, S> fourthFold, Func<S, B, S> fifthFold, Func<S, A, S> sixthFold) { return sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item6), self.Item5), self.Item4), self.Item3), self.Item2), self.Item1); } } public static class ValueTuple7Extensions { [Pure] public static (A, B, C, D, E, F, G, H) Add<A, B, C, D, E, F, G, H>(this (A, B, C, D, E, F, G) self, H eighth) { return (self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7, eighth); } [Pure] public static (A, B, C, D, E, F, G) Append<SemiA, SemiB, SemiC, SemiD, SemiE, SemiF, SemiG, A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) a, (A, B, C, D, E, F, G) b) where SemiA : struct, Semigroup<A> where SemiB : struct, Semigroup<B> where SemiC : struct, Semigroup<C> where SemiD : struct, Semigroup<D> where SemiE : struct, Semigroup<E> where SemiF : struct, Semigroup<F> where SemiG : struct, Semigroup<G> { return (default(SemiA).Append(a.Item1, b.Item1), default(SemiB).Append(a.Item2, b.Item2), default(SemiC).Append(a.Item3, b.Item3), default(SemiD).Append(a.Item4, b.Item4), default(SemiE).Append(a.Item5, b.Item5), default(SemiF).Append(a.Item6, b.Item6), default(SemiG).Append(a.Item7, b.Item7)); } [Pure] public static A Append<SemiA, A>(this (A, A, A, A, A, A, A) a) where SemiA : struct, Semigroup<A> { return default(SemiA).Append(a.Item1, default(SemiA).Append(a.Item2, default(SemiA).Append(a.Item3, default(SemiA).Append(a.Item4, default(SemiA).Append(a.Item5, default(SemiA).Append(a.Item6, a.Item7)))))); } [Pure] public static (A, B, C, D, E, F, G) Concat<MonoidA, MonoidB, MonoidC, MonoidD, MonoidE, MonoidF, MonoidG, A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) a, (A, B, C, D, E, F, G) b) where MonoidA : struct, Monoid<A> where MonoidB : struct, Monoid<B> where MonoidC : struct, Monoid<C> where MonoidD : struct, Monoid<D> where MonoidE : struct, Monoid<E> where MonoidF : struct, Monoid<F> where MonoidG : struct, Monoid<G> { return (TypeClass.mconcat<MonoidA, A>(new A[2] { a.Item1, b.Item1 }), TypeClass.mconcat<MonoidB, B>(new B[2] { a.Item2, b.Item2 }), TypeClass.mconcat<MonoidC, C>(new C[2] { a.Item3, b.Item3 }), TypeClass.mconcat<MonoidD, D>(new D[2] { a.Item4, b.Item4 }), TypeClass.mconcat<MonoidE, E>(new E[2] { a.Item5, b.Item5 }), TypeClass.mconcat<MonoidF, F>(new F[2] { a.Item6, b.Item6 }), TypeClass.mconcat<MonoidG, G>(new G[2] { a.Item7, b.Item7 })); } [Pure] public static A Concat<MonoidA, A>(this (A, A, A, A, A, A, A) a) where MonoidA : struct, Monoid<A> { return TypeClass.mconcat<MonoidA, A>(new A[7] { a.Item1, a.Item2, a.Item3, a.Item4, a.Item5, a.Item6, a.Item7 }); } [Pure] public static A Head<A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) self) { return self.Item1; } [Pure] public static G Last<A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) self) { return self.Item7; } [Pure] public static (B, C, D, E, F, G) Tail<A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) self) { return (self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static A Sum<NUM, A>(this (A, A, A, A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.sum<NUM, FoldTuple<A>, (A, A, A, A, A, A, A), A>(self); } [Pure] public static A Product<NUM, A>(this (A, A, A, A, A, A, A) self) where NUM : struct, Num<A> { return TypeClass.product<NUM, FoldTuple<A>, (A, A, A, A, A, A, A), A>(self); } [Pure] public static bool Contains<EQ, A>(this (A, A, A, A, A, A, A) self, A value) where EQ : struct, Eq<A> { if (!default(EQ).Equals(self.Item1, value) && !default(EQ).Equals(self.Item2, value) && !default(EQ).Equals(self.Item3, value) && !default(EQ).Equals(self.Item4, value) && !default(EQ).Equals(self.Item5, value) && !default(EQ).Equals(self.Item6, value)) { return default(EQ).Equals(self.Item7, value); } return true; } [Pure] public static R Map<A, B, C, D, E, F, G, R>(this (A, B, C, D, E, F, G) self, Func<(A, B, C, D, E, F, G), R> map) { return map(self); } [Pure] public static R Map<A, B, C, D, E, F, G, R>(this (A, B, C, D, E, F, G) self, Func<A, B, C, D, E, F, G, R> map) { return map(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static (T, U, V, W, X, Y, Z) Map<A, B, C, D, E, F, G, T, U, V, W, X, Y, Z>(this (A, B, C, D, E, F, G) self, Func<A, T> firstMap, Func<B, U> secondMap, Func<C, V> thirdMap, Func<D, W> fourthMap, Func<E, X> fifthMap, Func<F, Y> sixthMap, Func<G, Z> seventhMap) { return (firstMap(self.Item1), secondMap(self.Item2), thirdMap(self.Item3), fourthMap(self.Item4), fifthMap(self.Item5), sixthMap(self.Item6), seventhMap(self.Item7)); } [Pure] public static (R1, B, C, D, E, F, G) MapFirst<A, B, C, D, E, F, G, R1>(this (A, B, C, D, E, F, G) self, Func<A, R1> firstMap) { return (firstMap(self.Item1), self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static (A, R2, C, D, E, F, G) MapSecond<A, B, C, D, E, F, G, R2>(this (A, B, C, D, E, F, G) self, Func<B, R2> secondMap) { return (self.Item1, secondMap(self.Item2), self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static (A, B, R3, D, E, F, G) MapThird<A, B, C, D, E, F, G, R3>(this (A, B, C, D, E, F, G) self, Func<C, R3> thirdMap) { return (self.Item1, self.Item2, thirdMap(self.Item3), self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static (A, B, C, R4, E, F, G) MapFourth<A, B, C, D, E, F, G, R4>(this (A, B, C, D, E, F, G) self, Func<D, R4> fourthMap) { return (self.Item1, self.Item2, self.Item3, fourthMap(self.Item4), self.Item5, self.Item6, self.Item7); } [Pure] public static (A, B, C, D, R5, F, G) MapFifth<A, B, C, D, E, F, G, R5>(this (A, B, C, D, E, F, G) self, Func<E, R5> fifthMap) { return (self.Item1, self.Item2, self.Item3, self.Item4, fifthMap(self.Item5), self.Item6, self.Item7); } [Pure] public static (A, B, C, D, E, R6, G) MapSixth<A, B, C, D, E, F, G, R6>(this (A, B, C, D, E, F, G) self, Func<F, R6> sixthMap) { return (self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, sixthMap(self.Item6), self.Item7); } [Pure] public static (A, B, C, D, E, F, R7) MapSeventh<A, B, C, D, E, F, G, R7>(this (A, B, C, D, E, F, G) self, Func<G, R7> seventhMap) { return (self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, seventhMap(self.Item7)); } [Pure] public static (U, V, W, X, Y, Z) Select<A, B, C, D, E, F, G, U, V, W, X, Y, Z>(this (A, B, C, D, E, F, G) self, Func<(A, B, C, D, E, F, G), (U, V, W, X, Y, Z)> map) { return map(self); } public static Unit Iter<A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) self, Action<A, B, C, D, E, F, G> func) { func(self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); return Unit.Default; } public static Unit Iter<A, B, C, D, E, F, G>(this (A, B, C, D, E, F, G) self, Action<A> first, Action<B> second, Action<C> third, Action<D> fourth, Action<E> fifth, Action<F> sixth, Action<G> seventh) { first(self.Item1); second(self.Item2); third(self.Item3); fourth(self.Item4); fifth(self.Item5); sixth(self.Item6); seventh(self.Item7); return Unit.Default; } [Pure] public static S Fold<A, B, C, D, E, F, G, S>(this (A, B, C, D, E, F, G) self, S state, Func<S, A, B, C, D, E, F, G, S> fold) { return fold(state, self.Item1, self.Item2, self.Item3, self.Item4, self.Item5, self.Item6, self.Item7); } [Pure] public static S SeptFold<A, B, C, D, E, F, G, S>(this (A, B, C, D, E, F, G) self, S state, Func<S, A, S> firstFold, Func<S, B, S> secondFold, Func<S, C, S> thirdFold, Func<S, D, S> fourthFold, Func<S, E, S> fifthFold, Func<S, F, S> sixthFold, Func<S, G, S> seventhFold) { return seventhFold(sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item1), self.Item2), self.Item3), self.Item4), self.Item5), self.Item6), self.Item7); } [Pure] public static S SeptFoldBack<A, B, C, D, E, F, G, S>(this (A, B, C, D, E, F, G) self, S state, Func<S, G, S> firstFold, Func<S, F, S> secondFold, Func<S, E, S> thirdFold, Func<S, D, S> fourthFold, Func<S, C, S> fifthFold, Func<S, B, S> sixthFold, Func<S, A, S> seventhFold) { return seventhFold(sixthFold(fifthFold(fourthFold(thirdFold(secondFold(firstFold(state, self.Item7), self.Item6), self.Item5), self.Item4), self.Item3), self.Item2), self.Item1); } } public static class QueryExtensions { public static T Head<T>(this IQueryable<T> list) { return Query.head(list); } public static Option<T> HeadOrNone<T>(this IQueryable<T> list) { return Query.headOrNone(list); } public static Validation<S, T> HeadOrInvalid<S, T>(this IQueryable<T> list, S fail) { return Query.headOrInvalid(list, fail); } public static Either<S, T> HeadOrLeft<S, T>(this IQueryable<T> list, S left) { return Query.headOrLeft(list, left); } public static IQueryable<T> Tail<T>(this IQueryable<T> list) { return Query.tail(list); } public static IQueryable<R> Map<T, R>(this IQueryable<T> list, Expression<Func<T, R>> map) { return Query.map(list, map); } public static IQueryable<R> Map<T, R>(this IQueryable<T> list, Expression<Func<int, T, R>> map) { return Query.map(list, map); } public static IQueryable<T> Filter<T>(this IQueryable<T> list, Expression<Func<T, bool>> predicate) { return Query.filter(list, predicate); } public static IQueryable<U> Choose<T, U>(this IQueryable<T> list, Expression<Func<T, Option<U>>> selector) { return Query.choose(list, selector); } public static IQueryable<U> Choose<T, U>(this IQueryable<T> list, Expression<Func<int, T, Option<U>>> selector) { return Query.choose(list, selector); } public static IQueryable<R> Collect<T, R>(this IQueryable<T> list, Expression<Func<T, IEnumerable<R>>> map) { return Query.collect(list, map); } public static IQueryable<T> Rev<T>(this IQueryable<T> list) { return Query.rev(list); } public static IQueryable<T> Append<T>(this IQueryable<T> lhs, IQueryable<T> rhs) { return Query.append(lhs, rhs); } public static S Fold<S, T>(this IQueryable<T> list, S state, Expression<Func<S, T, S>> folder) { return Query.fold(list, state, folder); } public static S FoldBack<S, T>(this IQueryable<T> list, S state, Expression<Func<S, T, S>> folder) { return Query.foldBack(list, state, folder); } public static T Reduce<T>(this IQueryable<T> list, Expression<Func<T, T, T>> reducer) { return Query.reduce(list, reducer); } public static T ReduceBack<T>(this IQueryable<T> list, Expression<Func<T, T, T>> reducer) { return Query.reduceBack(list, reducer); } public static Lst<T> Freeze<T>(this IQueryable<T> list) { return Query.freeze(list); } public static IQueryable<V> Zip<T, U, V>(this IQueryable<T> list, IEnumerable<U> other, Expression<Func<T, U, V>> zipper) { return Query.zip(list, other, zipper); } public static int Length<T>(this IQueryable<T> list) { return Query.length(list); } public static bool ForAll<T>(this IQueryable<T> list, Expression<Func<T, bool>> pred) { return Query.forall(list, pred); } public static IQueryable<T> Distinct<T>(this IQueryable<T> list) { return Query.distinct(list); } public static bool Exists<T>(this IQueryable<T> list, Expression<Func<T, bool>> pred) { return Query.exists(list, pred); } } public static class ArrExtensions { [Pure] public static A[] Flatten<A>(this A[][] ma) { return ma.Bind(Prelude.identity).ToArray(); } [Pure] public static Arr<A> Flatten<A>(this Arr<Arr<A>> ma) { return ma.Bind<A>(Prelude.identity); } [Pure] public static TAccumulate Aggregate<TSource, TAccumulate>(this Arr<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func) { return source.Value.Aggregate(seed, func); } [Pure] public static TResult Aggregate<TSource, TAccumulate, TResult>(this Arr<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector) { return source.Value.Aggregate(seed, func, resultSelector); } [Pure] public static TSource Aggregate<TSource>(this Arr<TSource> source, Func<TSource, TSource, TSource> func) { return source.Value.Aggregate(func); } [Pure] public static bool All<TSource>(this Arr<TSource> source, Func<TSource, bool> predicate) { return source.Value.All(predicate); } [Pure] public static bool Any<TSource>(this Arr<TSource> source) { return source.Value.Any(); } [Pure] public static bool Any<TSource>(this Arr<TSource> source, Func<TSource, bool> predicate) { return source.Value.Any(predicate); } [Pure] public static IEnumerable<TSource> AsEnumerable<TSource>(this Arr<TSource> source) { return source.Value.AsEnumerable(); } [Pure] public static IQueryable<TElement> AsQueryable<TElement>(this Arr<TElement> source) { return source.Value.AsQueryable().AsQueryable(); } [Pure] public static decimal Average(this Arr<decimal> source) { return source.Value.Average(); } [Pure] public static decimal Average<TSource>(this Arr<TSource> source, Func<TSource, decimal> selector) { return source.Value.Average(selector); } [Pure] public static decimal? Average(this Arr<decimal?> source) { return source.Value.Average(); } [Pure] public static decimal? Average<TSource>(this Arr<TSource> source, Func<TSource, decimal?> selector) { return source.Value.Average(selector); } [Pure] public static double Average(this Arr<double> source) { return source.Value.Average(); } [Pure] public static double Average(this Arr<int> source) { return source.Value.Average(); } [Pure] public static double Average(this Arr<long> source) { return source.Value.Average(); } [Pure] public static double Average<TSource>(this Arr<TSource> source, Func<TSource, double> selector) { return source.Value.Average(selector); } [Pure] public static double Average<TSource>(this Arr<TSource> source, Func<TSource, int> selector) { return source.Value.Average(selector); } [Pure] public static double Average<TSource>(this Arr<TSource> source, Func<TSource, long> selector) { return source.Value.Average(selector); } [Pure] public static double? Average(this Arr<double?> source) { return source.Value.Average(); } [Pure] public static double? Average(this Arr<int?> source) { return source.Value.Average(); } [Pure] public static double? Average(this Arr<long?> source) { return source.Value.Average(); } [Pure] public static double? Average<TSource>(this Arr<TSource> source, Func<TSource, double?> selector) { return source.Value.Average(selector); } [Pure] public static double? Average<TSource>(this Arr<TSource> source, Func<TSource, int?> selector) { return source.Value.Average(selector); } [Pure] public static double? Average<TSource>(this Arr<TSource> source, Func<TSource, long?> selector) { return source.Value.Average(selector); } [Pure] public static float Average(this Arr<float> source) { return source.Value.Average(); } [Pure] public static float Average<TSource>(this Arr<TSource> source, Func<TSource, float> selector) { return source.Value.Average(selector); } [Pure] public static float? Average(this Arr<float?> source) { return source.Value.Average(); } [Pure] public static float? Average<TSource>(this Arr<TSource> source, Func<TSource, float?> selector) { return source.Value.Average(selector); } [Pure] public static IEnumerable<TSource> Concat<TSource>(this Arr<TSource> first, IEnumerable<TSource> second) { return first.Value.Concat(second); } [Pure] public static bool Contains<TSource>(this Arr<TSource> source, TSource value) { return source.Value.Contains(value); } [Pure] public static bool Contains<TSource>(this Arr<TSource> source, TSource value, IEqualityComparer<TSource> comparer) { return source.Value.Contains(value, comparer); } [Pure] public static int Count<TSource>(this Arr<TSource> source) { return source.Value.Count(); } [Pure] public static int Count<TSource>(this Arr<TSource> source, Func<TSource, bool> predicate) { return source.Value.Count(predicate); } [Pure] public static IEnumerable<TSource> DefaultIfEmpty<TSource>(this Arr<TSource> source) { return source.Value.DefaultIfEmpty(); } [Pure] public static IEnumerable<TSource> DefaultIfEmpty<TSource>(this Arr<TSource> source, TSource defaultValue) { return source.Value.DefaultIfEmpty(defaultValue); } [Pure] public static IEnumerable<TSource> Distinct<TSource>(this Arr<TSource> source) { return source.Value.Distinct(); } [Pure] public static IEnumerable<TSource> Distinct<TSource>(this Arr<TSource> source, IEqualityComparer<TSource> comparer) { return source.Value.Distinct(comparer); } [Pure] public static TSource ElementAt<TSource>(this Arr<TSource> source, int index) { return source.Value.ElementAt(index); } [Pure] public static TSource ElementAtOrDefault<TSource>(this Arr<TSource> source, int index) { return source.Value.ElementAtOrDefault(index); } [Pure] public static IEnumerable<TSource> Except<TSource>(this Arr<TSource> first, IEnumerable<TSource> second) { return first.Value.Except(second); } [Pure] public static IEnumerable<TSource> Except<TSource>(this Arr<TSource> first, IEnumerable<TSource> second, IEquali
BepInEx/plugins/LanguageExt/LanguageExt.Rx.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.Contracts; using System.Reactive.Linq; using System.Reactive.Threading.Tasks; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading; using System.Threading.Tasks; using LanguageExt.Common; using LanguageExt.Effects.Traits; using LanguageExt.TypeClasses; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("Paul Louth")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright (c) Paul Louth. All rights reserved.")] [assembly: AssemblyDescription("Support for Reactive Extensions overloads for various types in the LanguageExt.Core")] [assembly: AssemblyFileVersion("4.4.5.0")] [assembly: AssemblyInformationalVersion("4.4.5-dev.5+d8167ed3491f17e813ed9e9422b0384b15b2982d")] [assembly: AssemblyProduct("LanguageExt.Rx")] [assembly: AssemblyTitle("LanguageExt.Rx")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Lordfirespeed/LanguageExtThunderstore")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("4.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LanguageExt { public static class AffRxExtensions { public static Aff<Unit> Consume<A>(this IObservable<A> ma, Func<A, Aff<Unit>> next, CancellationToken token = default(CancellationToken)) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) return Prelude.AffMaybe<Unit>((Func<ValueTask<Fin<Unit>>>)async delegate { A nextValue = default(A); AutoResetEvent wait = new AutoResetEvent(initialState: false); using (ObservableExtensions.Subscribe<A>(ma, (Action<A>)delegate(A x) { nextValue = x; wait.Set(); })) { while (token == default(CancellationToken) || !token.IsCancellationRequested) { wait.WaitOne(); Fin<Unit> val = await next(nextValue).Run(); if (val.IsFail) { return Prelude.FinFail<Unit>((Error)val); } } return Fin<Unit>.op_Implicit(Prelude.unit); } }); } public static Aff<RT, Unit> Consume<RT, A>(this IObservable<A> ma, Func<A, Aff<RT, Unit>> next) where RT : struct, HasCancel<RT> { //IL_001e: Unknown result type (might be due to invalid IL or missing references) return Prelude.AffMaybe<RT, Unit>((Func<RT, ValueTask<Fin<Unit>>>)async delegate(RT env) { A nextValue = default(A); AutoResetEvent wait = new AutoResetEvent(initialState: false); using (ObservableExtensions.Subscribe<A>(ma, (Action<A>)delegate(A x) { nextValue = x; wait.Set(); })) { while (((HasCancel<RT>)env).CancellationToken == default(CancellationToken) || !((HasCancel<RT>)env).CancellationToken.IsCancellationRequested) { wait.WaitOne(); Fin<Unit> val = await next(nextValue).Run(env); if (val.IsFail) { return Prelude.FinFail<Unit>((Error)val); } } return Fin<Unit>.op_Implicit(Prelude.unit); } }); } public static Aff<S> Fold<S, A>(this IObservable<A> ma, S state, Func<S, A, Aff<S>> next, CancellationToken token = default(CancellationToken)) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) return Prelude.AffMaybe<S>((Func<ValueTask<Fin<S>>>)async delegate { A nextValue = default(A); AutoResetEvent wait = new AutoResetEvent(initialState: false); using (ObservableExtensions.Subscribe<A>(ma, (Action<A>)delegate(A x) { nextValue = x; wait.Set(); })) { while (token == default(CancellationToken) || !token.IsCancellationRequested) { wait.WaitOne(); Fin<S> val = await next(state, nextValue).Run(); if (val.IsFail) { return Prelude.FinFail<S>((Error)val); } state = (S)val; } return Fin<S>.op_Implicit(state); } }); } public static Aff<RT, S> Fold<RT, S, A>(this IObservable<A> ma, S state, Func<S, A, Aff<RT, S>> next) where RT : struct, HasCancel<RT> { //IL_0025: Unknown result type (might be due to invalid IL or missing references) return Prelude.AffMaybe<RT, S>((Func<RT, ValueTask<Fin<S>>>)async delegate(RT env) { A nextValue = default(A); AutoResetEvent wait = new AutoResetEvent(initialState: false); using (ObservableExtensions.Subscribe<A>(ma, (Action<A>)delegate(A x) { nextValue = x; wait.Set(); })) { while (((HasCancel<RT>)env).CancellationToken == default(CancellationToken) || !((HasCancel<RT>)env).CancellationToken.IsCancellationRequested) { wait.WaitOne(); Fin<S> val = await next(state, nextValue).Run(env); if (val.IsFail) { return Prelude.FinFail<S>((Error)val); } state = (S)val; } return Fin<S>.op_Implicit(state); } }); } } public static class AtomExtensions { [Pure] public static IObservable<A> OnChange<A>(this Atom<A> atom) { return Observable.FromEvent<A>((Action<Action<A>>)delegate(Action<A> add) { atom.Change += add.Invoke; }, (Action<Action<A>>)delegate(Action<A> remove) { atom.Change -= remove.Invoke; }); } [Pure] public static IObservable<A> OnChange<M, A>(this Atom<M, A> atom) { return Observable.FromEvent<A>((Action<Action<A>>)delegate(Action<A> add) { atom.Change += add.Invoke; }, (Action<Action<A>>)delegate(Action<A> remove) { atom.Change -= remove.Invoke; }); } [Pure] public static IObservable<A> OnChange<A>(this Ref<A> atom) { return Observable.FromEvent<A>((Action<Action<A>>)delegate(Action<A> add) { atom.Change += add.Invoke; }, (Action<Action<A>>)delegate(Action<A> remove) { atom.Change -= remove.Invoke; }); } [Pure] public static IObservable<HashMapPatch<K, V>> OnChange<K, V>(this AtomHashMap<K, V> atom) { return Observable.FromEvent<HashMapPatch<K, V>>((Action<Action<HashMapPatch<K, V>>>)delegate(Action<HashMapPatch<K, V>> add) { atom.Change += add.Invoke; }, (Action<Action<HashMapPatch<K, V>>>)delegate(Action<HashMapPatch<K, V>> remove) { atom.Change -= remove.Invoke; }); } [Pure] public static IObservable<HashMapPatch<EqK, K, V>> OnChange<EqK, K, V>(this AtomHashMap<EqK, K, V> atom) where EqK : struct, Eq<K> { return Observable.FromEvent<HashMapPatch<EqK, K, V>>((Action<Action<HashMapPatch<EqK, K, V>>>)delegate(Action<HashMapPatch<EqK, K, V>> add) { atom.Change += add.Invoke; }, (Action<Action<HashMapPatch<EqK, K, V>>>)delegate(Action<HashMapPatch<EqK, K, V>> remove) { atom.Change -= remove.Invoke; }); } [Pure] public static IObservable<(K, Change<V>)> OnEntryChange<K, V>(this AtomHashMap<K, V> atom) { return Observable.SelectMany<HashMapPatch<K, V>, (K, Change<V>)>(atom.OnChange<K, V>(), (Func<HashMapPatch<K, V>, IEnumerable<(K, Change<V>)>>)((HashMapPatch<K, V> p) => ListExtensions.Filter<(K, Change<V>)>(p.Changes.AsEnumerable(), (Func<(K, Change<V>), bool>)(((K Key, Change<V> Value) c) => c.Value.HasChanged)))); } [Pure] public static IObservable<(K, Change<V>)> OnEntryChange<EqK, K, V>(this AtomHashMap<EqK, K, V> atom) where EqK : struct, Eq<K> { return Observable.SelectMany<HashMapPatch<EqK, K, V>, (K, Change<V>)>(atom.OnChange<EqK, K, V>(), (Func<HashMapPatch<EqK, K, V>, IEnumerable<(K, Change<V>)>>)((HashMapPatch<EqK, K, V> p) => ListExtensions.Filter<(K, Change<V>)>(p.Changes.AsEnumerable(), (Func<(K, Change<V>), bool>)(((K Key, Change<V> Value) c) => c.Value.HasChanged)))); } [Pure] public static IObservable<HashMap<EqK, K, V>> OnMapChange<EqK, K, V>(this AtomHashMap<EqK, K, V> atom) where EqK : struct, Eq<K> { return Observable.Select<HashMapPatch<EqK, K, V>, HashMap<EqK, K, V>>(atom.OnChange<EqK, K, V>(), (Func<HashMapPatch<EqK, K, V>, HashMap<EqK, K, V>>)((HashMapPatch<EqK, K, V> p) => p.To)); } } internal static class CastExtensions { public static A Cast<A>(this Option<A> ma) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (A)ma; } public static A Cast<A>(this OptionUnsafe<A> ma) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (A)ma; } public static L CastLeft<L, R>(this Either<L, R> ma) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (L)ma; } public static R CastRight<L, R>(this Either<L, R> ma) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (R)ma; } public static L CastLeft<L, R>(this EitherUnsafe<L, R> ma) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (L)ma; } public static R CastRight<L, R>(this EitherUnsafe<L, R> ma) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (R)ma; } } internal static class Check { internal static T NullReturn<T>(T value) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown if (!Prelude.isnull<T>(value)) { return value; } return Prelude.raise<T>((Exception)new ResultIsNullException()); } } public static class EitherRxExtensions { public unsafe static IObservable<R> ToObservable<L, R>(this Either<L, R> ma) { return ((Either<IObservable<R>, ?>*)(&ma))->Match<IObservable<R>>((Func<?, IObservable<R>>)(object)new Func<R, IObservable<R>>(Observable.Return<R>), (Func<IObservable<R>, IObservable<R>>)(object)(Func<L, IObservable<R>>)((L _) => Observable.Empty<R>()), (Func<IObservable<R>>)null); } [Pure] public static IObservable<R2> MatchObservable<L, R, R2>(this Either<L, IObservable<R>> self, Func<R, R2> Right, Func<L, R2> Left) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) if (!self.IsRight) { return Observable.Return<R2>(Check.NullReturn(Left(self.CastLeft<L, IObservable<R>>()))); } return Observable.Select<R2, R2>(Observable.Select<R, R2>(self.CastRight<L, IObservable<R>>(), Right), (Func<R2, R2>)Check.NullReturn); } [Pure] public static IObservable<R2> MatchObservable<L, R, R2>(this IObservable<Either<L, R>> self, Func<R, R2> Right, Func<L, R2> Left) { return Observable.Select<Either<L, R>, R2>(self, (Func<Either<L, R>, R2>)((Either<L, R> either) => Prelude.match<L, R, R2>(either, Right, Left))); } [Pure] public unsafe static IObservable<R2> MatchObservable<L, R, R2>(this Either<L, R> ma, Func<R, IObservable<R2>> Right, Func<L, R2> Left) { return ((Either<IObservable<R2>, ?>*)(&ma))->Match<IObservable<R2>>((Func<?, IObservable<R2>>)(object)Right, (Func<IObservable<R2>, IObservable<R2>>)(object)(Func<L, IObservable<R2>>)((L l) => Observable.Return<R2>(Left(l))), (Func<IObservable<R2>>)null); } [Pure] public unsafe static IObservable<R2> MatchObservable<L, R, R2>(this Either<L, R> ma, Func<R, IObservable<R2>> Right, Func<L, IObservable<R2>> Left) { return ((Either<IObservable<R2>, ?>*)(&ma))->Match<IObservable<R2>>((Func<?, IObservable<R2>>)(object)Right, (Func<IObservable<R2>, IObservable<R2>>)(object)Left, (Func<IObservable<R2>>)null); } } public static class NullableRxExtensions { public static IObservable<A> ToObservable<A>(this A? ma) where A : struct { if (!ma.HasValue) { return Observable.Empty<A>(); } return Observable.Return<A>(ma.Value); } [Pure] public static IObservable<R> MatchObservable<T, R>(this T? self, Func<T, IObservable<R>> Some, Func<R> None) where T : struct { if (!self.HasValue) { return Observable.Return<R>(None()); } return Some(self.Value); } [Pure] public static IObservable<R> MatchObservable<T, R>(this IObservable<T?> self, Func<T, R> Some, Func<R> None) where T : struct { return Observable.Select<T?, R>(self, (Func<T?, R>)((T? nullable) => NullableExtensions.Match<T, R>(nullable, Some, None))); } [Pure] public static IObservable<R> MatchObservable<T, R>(this T? self, Func<T, IObservable<R>> Some, Func<IObservable<R>> None) where T : struct { if (!self.HasValue) { return None(); } return Some(self.Value); } } public static class OptionRxExtensions { public static IObservable<B> Choose<A, B>(this IObservable<A> ma, Func<A, Option<B>> f) { return Observable.Select<Option<B>, B>(Observable.Where<Option<B>>(Observable.Select<A, Option<B>>(ma, f), (Func<Option<B>, bool>)((Option<B> x) => x.IsSome)), (Func<Option<B>, B>)((Option<B> x) => (B)x)); } public static IObservable<A> ToObservable<A>(this Option<A> ma) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!ma.IsSome) { return Observable.Empty<A>(); } return Observable.Return<A>(ma.Cast<A>()); } [Pure] public static IObservable<B> MatchObservable<A, B>(this Option<A> ma, Func<A, IObservable<B>> Some, Func<B> None) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (!ma.IsSome) { return Observable.Return<B>(CheckNullNoneReturn(None())); } return Observable.Select<B, B>(Some(ma.Cast<A>()), (Func<B, B>)CheckNullSomeReturn); } [Pure] public static IObservable<B> MatchObservable<A, B>(this Option<A> ma, Func<A, IObservable<B>> Some, Func<IObservable<B>> None) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (!ma.IsSome) { return Observable.Select<B, B>(None(), (Func<B, B>)CheckNullNoneReturn); } return Observable.Select<B, B>(Some(ma.Cast<A>()), (Func<B, B>)CheckNullSomeReturn); } [Pure] internal static U CheckNullReturn<U>(U value, string location) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (!Prelude.isnull<U>(value)) { return value; } throw new ResultIsNullException("'" + location + "' result is null. Not allowed."); } [Pure] internal static U CheckNullNoneReturn<U>(U value) { return CheckNullReturn(value, "None"); } [Pure] internal static U CheckNullSomeReturn<U>(U value) { return CheckNullReturn(value, "Some"); } } public static class OptionUnsafeRxExtensions { public static IObservable<A> ToObservable<A>(this OptionUnsafe<A> ma) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!ma.IsSome) { return Observable.Empty<A>(); } return Observable.Return<A>(ma.Cast<A>()); } [Pure] public static IObservable<B> MatchObservable<A, B>(this OptionUnsafe<A> ma, Func<A, IObservable<B>> Some, Func<B> None) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (!ma.IsSome) { return Observable.Return<B>(None()); } return Some(ma.Cast<A>()); } [Pure] public static IObservable<B> MatchObservable<A, B>(this OptionUnsafe<A> ma, Func<A, IObservable<B>> Some, Func<IObservable<B>> None) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (!ma.IsSome) { return None(); } return Some(ma.Cast<A>()); } } public static class PreludeRx { public static IObservable<T> delay<T>(Func<T> f, TimeSpan delayFor) { if (!(delayFor.TotalMilliseconds < 1.0)) { return Observable.Take<T>(TaskObservableExtensions.ToObservable<T>(Task.Delay(delayFor).ContinueWith((Task _) => f())), 1); } return Observable.Take<T>(Observable.Return<T>(f()), 1); } public static IObservable<T> delay<T>(Func<T> f, DateTime delayUntil) { return delay(f, delayUntil.ToUniversalTime() - DateTime.UtcNow); } } public static class TaskTryRxExtensions { [Pure] public static IObservable<R> MatchObservable<A, R>(this Task<Try<A>> self, Func<A, IObservable<R>> Succ, Func<Exception, R> Fail) { return TaskTryExtensions.ToAsync<A>(self).MatchObservable(Succ, Fail); } [Pure] public static IObservable<R> MatchObservable<A, R>(this Task<Try<A>> self, Func<A, IObservable<R>> Succ, Func<Exception, IObservable<R>> Fail) { return TaskTryExtensions.ToAsync<A>(self).MatchObservable(Succ, Fail); } [Pure] public static IObservable<R> MatchObservable<A, R>(this Task<Try<A>> self, Func<A, R> Succ, Func<Exception, IObservable<R>> Fail) { return TaskTryExtensions.ToAsync<A>(self).MatchObservable(Succ, Fail); } } public static class TryRxExtensions { [Pure] public static IObservable<R> MatchObservable<A, R>(this Try<A> self, Func<A, IObservable<R>> Succ, Func<Exception, R> Fail) { return TryExtensionsAsync.ToAsync<A>(self).MatchObservable(Succ, Fail); } [Pure] public static IObservable<R> MatchObservable<A, R>(this Try<A> self, Func<A, IObservable<R>> Succ, Func<Exception, IObservable<R>> Fail) { return TryExtensionsAsync.ToAsync<A>(self).MatchObservable(Succ, Fail); } [Pure] public static IObservable<R> MatchObservable<A, R>(this Try<A> self, Func<A, R> Succ, Func<Exception, IObservable<R>> Fail) { return TryExtensionsAsync.ToAsync<A>(self).MatchObservable(Succ, Fail); } public static IObservable<R> MatchObservable<T, R>(this IObservable<Try<T>> self, Func<T, R> Succ, Func<Exception, R> Fail) { return Observable.Select<Try<T>, R>(self, (Func<Try<T>, R>)((Try<T> trySelf) => ((Result<R>)TryExtensions.Try<T>(trySelf)).Match<R>((Func<R, R>)(object)Succ, Fail))); } public static IObservable<R> MatchObservable<T, R>(this IObservable<Try<T>> self, Func<T, IObservable<R>> Succ, Func<Exception, R> Fail) { return Observable.SelectMany<IObservable<R>, R, R>(Observable.Select<Try<T>, IObservable<R>>(self, (Func<Try<T>, IObservable<R>>)((Try<T> trySelf) => ((Result<IObservable<R>>)TryExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Succ, (Func<Exception, IObservable<R>>)((Exception x) => Observable.Return<R>(Fail(x)))))), (Func<IObservable<R>, IObservable<R>>)((IObservable<R> tt) => tt), (Func<IObservable<R>, R, R>)((IObservable<R> tt, R t) => t)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<Try<T>> self, Func<T, IObservable<R>> Succ, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<IObservable<R>, R, R>(Observable.Select<Try<T>, IObservable<R>>(self, (Func<Try<T>, IObservable<R>>)((Try<T> trySelf) => ((Result<IObservable<R>>)TryExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Succ, Fail))), (Func<IObservable<R>, IObservable<R>>)((IObservable<R> tt) => tt), (Func<IObservable<R>, R, R>)((IObservable<R> tt, R t) => t)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<Try<T>> self, Func<T, R> Succ, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<IObservable<R>, R, R>(Observable.Select<Try<T>, IObservable<R>>(self, (Func<Try<T>, IObservable<R>>)((Try<T> trySelf) => ((Result<IObservable<R>>)TryExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)(Func<T, IObservable<R>>)((T x) => Observable.Return<R>(Succ(x))), Fail))), (Func<IObservable<R>, IObservable<R>>)((IObservable<R> tt) => tt), (Func<IObservable<R>, R, R>)((IObservable<R> tt, R t) => t)); } } public static class TryAsyncRxExtensions { public static IObservable<A> ToObservable<A>(this TryAsync<A> ma) { return Observable.Select<Result<A>, A>(Observable.Where<Result<A>>(TaskObservableExtensions.ToObservable<Result<A>>(TryAsyncExtensions.Try<A>(ma)), (Func<Result<A>, bool>)delegate(Result<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) Result<A> val2 = ra; return val2.IsSuccess; }), (Func<Result<A>, A>)delegate(Result<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) Result<A> val = ra; return val.IfFail(default(A)); }); } public unsafe static IObservable<B> MatchObservable<A, B>(this TryAsync<A> ma, Func<A, IObservable<B>> Succ, Func<Exception, B> Fail) { return Observable.SelectMany<Result<A>, B, B>(TaskObservableExtensions.ToObservable<Result<A>>(TryAsyncExtensions.Try<A>(ma)), (Func<Result<A>, IObservable<B>>)delegate(Result<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) Result<A> val = ra; return ((Result<IObservable<B>>*)(&val))->Match<IObservable<B>>((Func<IObservable<B>, IObservable<B>>)(object)Succ, (Func<Exception, IObservable<B>>)((Exception e) => Observable.Return<B>(Fail(e)))); }, (Func<Result<A>, B, B>)((Result<A> ra, B rb) => rb)); } public unsafe static IObservable<R> MatchObservable<A, R>(this TryAsync<A> ma, Func<A, IObservable<R>> Succ, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<Result<A>, R, R>(TaskObservableExtensions.ToObservable<Result<A>>(TryAsyncExtensions.Try<A>(ma)), (Func<Result<A>, IObservable<R>>)delegate(Result<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) Result<A> val = ra; return ((Result<IObservable<R>>*)(&val))->Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Succ, Fail); }, (Func<Result<A>, R, R>)((Result<A> ra, R rb) => rb)); } public unsafe static IObservable<R> MatchObservable<A, R>(this TryAsync<A> ma, Func<A, R> Succ, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<Result<A>, R, R>(TaskObservableExtensions.ToObservable<Result<A>>(TryAsyncExtensions.Try<A>(ma)), (Func<Result<A>, IObservable<R>>)delegate(Result<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) Result<A> val = ra; return ((Result<IObservable<R>>*)(&val))->Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)(Func<A, IObservable<R>>)((A x) => Observable.Return<R>(Succ(x))), Fail); }, (Func<Result<A>, R, R>)((Result<A> ra, R rb) => rb)); } } public static class TryOptionRxExtensions { public static IObservable<A> ToObservable<A>(this TryOption<A> ma) { return TryOptionExtensions.Match<A, IObservable<A>>(ma, (Func<A, IObservable<A>>)Observable.Return<A>, (Func<IObservable<A>>)(() => Observable.Empty<A>()), (Func<Exception, IObservable<A>>)((Exception e) => Observable.Empty<A>())); } public static IObservable<R> MatchObservable<A, R>(this TryOption<A> ma, Func<A, IObservable<R>> Some, Func<R> Fail) { return TryOptionExtensions.Match<A, IObservable<R>>(ma, Some, (Func<IObservable<R>>)(() => Observable.Return<R>(Fail()))); } public static IObservable<R> MatchObservable<A, R>(this TryOption<A> ma, Func<A, IObservable<R>> Some, Func<R> None, Func<Exception, R> Fail) { return TryOptionExtensions.Match<A, IObservable<R>>(ma, Some, (Func<IObservable<R>>)(() => Observable.Return<R>(None())), (Func<Exception, IObservable<R>>)((Exception e) => Observable.Return<R>(Fail(e)))); } public static IObservable<R> MatchObservable<A, R>(this TryOption<A> ma, Func<A, IObservable<R>> Some, Func<IObservable<R>> Fail) { return TryOptionExtensions.Match<A, IObservable<R>>(ma, Some, Fail); } public static IObservable<R> MatchObservable<A, R>(this TryOption<A> ma, Func<A, IObservable<R>> Some, Func<IObservable<R>> None, Func<Exception, IObservable<R>> Fail) { return TryOptionExtensions.Match<A, IObservable<R>>(ma, Some, None, Fail); } public static IObservable<R> MatchObservable<A, R>(this TryOption<A> ma, Func<A, R> Some, Func<IObservable<R>> Fail) { return TryOptionExtensions.Match<A, IObservable<R>>(ma, (Func<A, IObservable<R>>)((A x) => Observable.Return<R>(Some(x))), Fail); } public static IObservable<R> MatchObservable<A, R>(this TryOption<A> ma, Func<A, R> Some, Func<IObservable<R>> None, Func<Exception, IObservable<R>> Fail) { return TryOptionExtensions.Match<A, IObservable<R>>(ma, (Func<A, IObservable<R>>)((A x) => Observable.Return<R>(Some(x))), None, Fail); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, R> Some, Func<R> Fail) { return Observable.Select<TryOption<T>, R>(self, (Func<TryOption<T>, R>)((TryOption<T> trySelf) => ((OptionalResult<R>)TryOptionExtensions.Try<T>(trySelf)).Match<R>((Func<R, R>)(object)Some, Fail, (Func<Exception, R>)((Exception _) => Fail())))); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, IObservable<R>> Some, Func<R> Fail) { return Observable.Select<R, R>(Observable.SelectMany<TryOption<T>, R>(self, (Func<TryOption<T>, IObservable<R>>)((TryOption<T> trySelf) => ((OptionalResult<IObservable<R>>)TryOptionExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Some, (Func<IObservable<R>>)(() => Observable.Return<R>(Fail())), (Func<Exception, IObservable<R>>)((Exception _) => Observable.Return<R>(Fail()))))), (Func<R, R>)((R tt) => tt)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, IObservable<R>> Some, Func<IObservable<R>> Fail) { return Observable.Select<R, R>(Observable.SelectMany<TryOption<T>, R>(self, (Func<TryOption<T>, IObservable<R>>)((TryOption<T> trySelf) => ((OptionalResult<IObservable<R>>)TryOptionExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Some, Fail, (Func<Exception, IObservable<R>>)((Exception _) => Fail())))), (Func<R, R>)((R tt) => tt)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, R> Some, Func<IObservable<R>> Fail) { return Observable.Select<R, R>(Observable.SelectMany<TryOption<T>, R>(self, (Func<TryOption<T>, IObservable<R>>)((TryOption<T> trySelf) => ((OptionalResult<IObservable<R>>)TryOptionExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)(Func<T, IObservable<R>>)((T x) => Observable.Return<R>(Some(x))), Fail, (Func<Exception, IObservable<R>>)((Exception _) => Fail())))), (Func<R, R>)((R tt) => tt)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, R> Some, Func<R> None, Func<Exception, R> Fail) { return Observable.Select<TryOption<T>, R>(self, (Func<TryOption<T>, R>)((TryOption<T> trySelf) => ((OptionalResult<R>)TryOptionExtensions.Try<T>(trySelf)).Match<R>((Func<R, R>)(object)Some, None, Fail))); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, IObservable<R>> Some, Func<R> None, Func<Exception, R> Fail) { return Observable.Select<R, R>(Observable.SelectMany<TryOption<T>, R>(self, (Func<TryOption<T>, IObservable<R>>)((TryOption<T> trySelf) => ((OptionalResult<IObservable<R>>)TryOptionExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Some, (Func<IObservable<R>>)(() => Observable.Return<R>(None())), (Func<Exception, IObservable<R>>)((Exception e) => Observable.Return<R>(Fail(e)))))), (Func<R, R>)((R tt) => tt)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, IObservable<R>> Some, Func<IObservable<R>> None, Func<Exception, IObservable<R>> Fail) { return Observable.Select<R, R>(Observable.SelectMany<TryOption<T>, R>(self, (Func<TryOption<T>, IObservable<R>>)((TryOption<T> trySelf) => ((OptionalResult<IObservable<R>>)TryOptionExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Some, None, Fail))), (Func<R, R>)((R tt) => tt)); } public static IObservable<R> MatchObservable<T, R>(this IObservable<TryOption<T>> self, Func<T, R> Some, Func<IObservable<R>> None, Func<Exception, IObservable<R>> Fail) { return Observable.Select<R, R>(Observable.SelectMany<TryOption<T>, R>(self, (Func<TryOption<T>, IObservable<R>>)((TryOption<T> trySelf) => ((OptionalResult<IObservable<R>>)TryOptionExtensions.Try<T>(trySelf)).Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)(Func<T, IObservable<R>>)((T x) => Observable.Return<R>(Some(x))), None, Fail))), (Func<R, R>)((R tt) => tt)); } } public static class TryOptionAsyncRxExtensions { public static IObservable<A> ToObservable<A>(this TryOptionAsync<A> ma) { return Observable.Select<OptionalResult<A>, A>(Observable.Where<OptionalResult<A>>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, bool>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val2 = ra; return val2.IsSome; }), (Func<OptionalResult<A>, A>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return val.IfFailOrNone(default(A)); }); } public unsafe static IObservable<B> MatchObservable<A, B>(this TryOptionAsync<A> ma, Func<A, IObservable<B>> Some, Func<B> None, Func<Exception, B> Fail) { return Observable.SelectMany<OptionalResult<A>, B, B>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, IObservable<B>>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return ((OptionalResult<IObservable<B>>*)(&val))->Match<IObservable<B>>((Func<IObservable<B>, IObservable<B>>)(object)Some, (Func<IObservable<B>>)(() => Observable.Return<B>(None())), (Func<Exception, IObservable<B>>)((Exception e) => Observable.Return<B>(Fail(e)))); }, (Func<OptionalResult<A>, B, B>)((OptionalResult<A> ra, B rb) => rb)); } public unsafe static IObservable<B> MatchObservable<A, B>(this TryOptionAsync<A> ma, Func<A, IObservable<B>> Some, Func<IObservable<B>> None, Func<Exception, B> Fail) { return Observable.SelectMany<OptionalResult<A>, B, B>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, IObservable<B>>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return ((OptionalResult<IObservable<B>>*)(&val))->Match<IObservable<B>>((Func<IObservable<B>, IObservable<B>>)(object)Some, None, (Func<Exception, IObservable<B>>)((Exception e) => Observable.Return<B>(Fail(e)))); }, (Func<OptionalResult<A>, B, B>)((OptionalResult<A> ra, B rb) => rb)); } public unsafe static IObservable<R> MatchObservable<A, R>(this TryOptionAsync<A> ma, Func<A, IObservable<R>> Some, Func<R> None, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<OptionalResult<A>, R, R>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, IObservable<R>>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return ((OptionalResult<IObservable<R>>*)(&val))->Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Some, (Func<IObservable<R>>)(() => Observable.Return<R>(None())), Fail); }, (Func<OptionalResult<A>, R, R>)((OptionalResult<A> ra, R rb) => rb)); } public unsafe static IObservable<R> MatchObservable<A, R>(this TryOptionAsync<A> ma, Func<A, IObservable<R>> Some, Func<IObservable<R>> None, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<OptionalResult<A>, R, R>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, IObservable<R>>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return ((OptionalResult<IObservable<R>>*)(&val))->Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)Some, None, Fail); }, (Func<OptionalResult<A>, R, R>)((OptionalResult<A> ra, R rb) => rb)); } public unsafe static IObservable<R> MatchObservable<A, R>(this TryOptionAsync<A> ma, Func<A, R> Some, Func<R> None, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<OptionalResult<A>, R, R>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, IObservable<R>>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return ((OptionalResult<IObservable<R>>*)(&val))->Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)(Func<A, IObservable<R>>)((A x) => Observable.Return<R>(Some(x))), (Func<IObservable<R>>)(() => Observable.Return<R>(None())), Fail); }, (Func<OptionalResult<A>, R, R>)((OptionalResult<A> ra, R rb) => rb)); } public unsafe static IObservable<R> MatchObservable<A, R>(this TryOptionAsync<A> ma, Func<A, R> Some, Func<IObservable<R>> None, Func<Exception, IObservable<R>> Fail) { return Observable.SelectMany<OptionalResult<A>, R, R>(TaskObservableExtensions.ToObservable<OptionalResult<A>>(TryOptionAsyncExtensions.Try<A>(ma)), (Func<OptionalResult<A>, IObservable<R>>)delegate(OptionalResult<A> ra) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) OptionalResult<A> val = ra; return ((OptionalResult<IObservable<R>>*)(&val))->Match<IObservable<R>>((Func<IObservable<R>, IObservable<R>>)(object)(Func<A, IObservable<R>>)((A x) => Observable.Return<R>(Some(x))), None, Fail); }, (Func<OptionalResult<A>, R, R>)((OptionalResult<A> ra, R rb) => rb)); } } public static class ValidationRxExtensions { [Pure] public unsafe static IObservable<R2> MatchObservable<MonoidFail, FAIL, SUCCESS, R2>(this Validation<MonoidFail, FAIL, SUCCESS> ma, Func<SUCCESS, IObservable<R2>> Succ, Func<FAIL, R2> Fail) where MonoidFail : struct, Monoid<FAIL>, Eq<FAIL> { return ((Validation<IObservable<R2>, ?, ?>*)(&ma))->Match<IObservable<R2>>((Func<?, IObservable<R2>>)(object)Succ, (Func<?, IObservable<R2>>)(object)(Func<FAIL, IObservable<R2>>)((FAIL x) => Observable.Return<R2>(Fail(x)))); } [Pure] public unsafe static IObservable<R2> MatchObservable<MonoidFail, FAIL, SUCCESS, R2>(this Validation<MonoidFail, FAIL, SUCCESS> ma, Func<SUCCESS, IObservable<R2>> Succ, Func<FAIL, IObservable<R2>> Fail) where MonoidFail : struct, Monoid<FAIL>, Eq<FAIL> { return ((Validation<IObservable<R2>, ?, ?>*)(&ma))->Match<IObservable<R2>>((Func<?, IObservable<R2>>)(object)Succ, (Func<?, IObservable<R2>>)(object)Fail); } } public static class ValidationSeqRxExtensions { [Pure] public unsafe static IObservable<R2> MatchObservable<FAIL, SUCCESS, R2>(this Validation<FAIL, SUCCESS> ma, Func<SUCCESS, IObservable<R2>> Succ, Func<Seq<FAIL>, R2> Fail) { return ((Validation<IObservable<R2>, ?>*)(&ma))->Match<IObservable<R2>>((Func<?, IObservable<R2>>)(object)Succ, (Func<Seq<IObservable<R2>>, IObservable<R2>>)(object)(Func<Seq<FAIL>, IObservable<R2>>)((Seq<FAIL> x) => Observable.Return<R2>(Fail(x)))); } [Pure] public unsafe static IObservable<R2> MatchObservable<FAIL, SUCCESS, R2>(this Validation<FAIL, SUCCESS> ma, Func<SUCCESS, IObservable<R2>> Succ, Func<Seq<FAIL>, IObservable<R2>> Fail) { return ((Validation<IObservable<R2>, ?>*)(&ma))->Match<IObservable<R2>>((Func<?, IObservable<R2>>)(object)Succ, (Func<Seq<IObservable<R2>>, IObservable<R2>>)(object)Fail); } } }
BepInEx/plugins/LanguageExt/System.Threading.Tasks.Extensions.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Threading.Tasks; using System.Threading.Tasks.Sources; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("System.Threading.Tasks.Extensions")] [assembly: AssemblyDescription("System.Threading.Tasks.Extensions")] [assembly: AssemblyDefaultAlias("System.Threading.Tasks.Extensions")] [assembly: AssemblyCompany("Microsoft Corporation")] [assembly: AssemblyProduct("Microsoft® .NET Framework")] [assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")] [assembly: AssemblyFileVersion("4.6.28619.01")] [assembly: AssemblyInformationalVersion("4.6.28619.01 @BuiltBy: dlab14-DDVSOWINAGE069 @Branch: release/2.1 @SrcCode: https://github.com/dotnet/corefx/tree/7601f4f6225089ffb291dc7d58293c7bbf5c5d4f")] [assembly: CLSCompliant(true)] [assembly: AssemblyMetadata(".NETFrameworkAssembly", "")] [assembly: AssemblyMetadata("Serviceable", "True")] [assembly: AssemblyMetadata("PreferInbox", "True")] [assembly: AssemblyVersion("4.2.0.1")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } } namespace System { internal static class ThrowHelper { internal static void ThrowArgumentNullException(System.ExceptionArgument argument) { throw GetArgumentNullException(argument); } internal static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument) { throw GetArgumentOutOfRangeException(argument); } private static ArgumentNullException GetArgumentNullException(System.ExceptionArgument argument) { return new ArgumentNullException(GetArgumentName(argument)); } private static ArgumentOutOfRangeException GetArgumentOutOfRangeException(System.ExceptionArgument argument) { return new ArgumentOutOfRangeException(GetArgumentName(argument)); } [MethodImpl(MethodImplOptions.NoInlining)] private static string GetArgumentName(System.ExceptionArgument argument) { return argument.ToString(); } } internal enum ExceptionArgument { task, source, state } } namespace System.Threading.Tasks { [StructLayout(LayoutKind.Auto)] [AsyncMethodBuilder(typeof(AsyncValueTaskMethodBuilder))] public readonly struct ValueTask : IEquatable<ValueTask> { private sealed class ValueTaskSourceAsTask : TaskCompletionSource<bool> { private static readonly Action<object> s_completionAction = delegate(object state) { IValueTaskSource source; if (!(state is ValueTaskSourceAsTask valueTaskSourceAsTask) || (source = valueTaskSourceAsTask._source) == null) { System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument.state); return; } valueTaskSourceAsTask._source = null; ValueTaskSourceStatus status = source.GetStatus(valueTaskSourceAsTask._token); try { source.GetResult(valueTaskSourceAsTask._token); valueTaskSourceAsTask.TrySetResult(result: false); } catch (Exception exception) { if (status == ValueTaskSourceStatus.Canceled) { valueTaskSourceAsTask.TrySetCanceled(); } else { valueTaskSourceAsTask.TrySetException(exception); } } }; private IValueTaskSource _source; private readonly short _token; public ValueTaskSourceAsTask(IValueTaskSource source, short token) { _token = token; _source = source; source.OnCompleted(s_completionAction, this, token, ValueTaskSourceOnCompletedFlags.None); } } private static readonly Task s_canceledTask = Task.Delay(-1, new CancellationToken(canceled: true)); internal readonly object _obj; internal readonly short _token; internal readonly bool _continueOnCapturedContext; internal static Task CompletedTask { get; } = Task.Delay(0); public bool IsCompleted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { object obj = _obj; if (obj == null) { return true; } if (obj is Task task) { return task.IsCompleted; } return Unsafe.As<IValueTaskSource>(obj).GetStatus(_token) != ValueTaskSourceStatus.Pending; } } public bool IsCompletedSuccessfully { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { object obj = _obj; if (obj == null) { return true; } if (obj is Task task) { return task.Status == TaskStatus.RanToCompletion; } return Unsafe.As<IValueTaskSource>(obj).GetStatus(_token) == ValueTaskSourceStatus.Succeeded; } } public bool IsFaulted { get { object obj = _obj; if (obj == null) { return false; } if (obj is Task task) { return task.IsFaulted; } return Unsafe.As<IValueTaskSource>(obj).GetStatus(_token) == ValueTaskSourceStatus.Faulted; } } public bool IsCanceled { get { object obj = _obj; if (obj == null) { return false; } if (obj is Task task) { return task.IsCanceled; } return Unsafe.As<IValueTaskSource>(obj).GetStatus(_token) == ValueTaskSourceStatus.Canceled; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ValueTask(Task task) { if (task == null) { System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.task); } _obj = task; _continueOnCapturedContext = true; _token = 0; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ValueTask(IValueTaskSource source, short token) { if (source == null) { System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.source); } _obj = source; _token = token; _continueOnCapturedContext = true; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private ValueTask(object obj, short token, bool continueOnCapturedContext) { _obj = obj; _token = token; _continueOnCapturedContext = continueOnCapturedContext; } public override int GetHashCode() { return _obj?.GetHashCode() ?? 0; } public override bool Equals(object obj) { if (obj is ValueTask) { return Equals((ValueTask)obj); } return false; } public bool Equals(ValueTask other) { if (_obj == other._obj) { return _token == other._token; } return false; } public static bool operator ==(ValueTask left, ValueTask right) { return left.Equals(right); } public static bool operator !=(ValueTask left, ValueTask right) { return !left.Equals(right); } public Task AsTask() { object obj = _obj; object obj2; if (obj != null) { obj2 = obj as Task; if (obj2 == null) { return GetTaskForValueTaskSource(Unsafe.As<IValueTaskSource>(obj)); } } else { obj2 = CompletedTask; } return (Task)obj2; } public ValueTask Preserve() { if (_obj != null) { return new ValueTask(AsTask()); } return this; } private Task GetTaskForValueTaskSource(IValueTaskSource t) { ValueTaskSourceStatus status = t.GetStatus(_token); if (status != 0) { try { t.GetResult(_token); return CompletedTask; } catch (Exception exception) { if (status == ValueTaskSourceStatus.Canceled) { return s_canceledTask; } TaskCompletionSource<bool> taskCompletionSource = new TaskCompletionSource<bool>(); taskCompletionSource.TrySetException(exception); return taskCompletionSource.Task; } } ValueTaskSourceAsTask valueTaskSourceAsTask = new ValueTaskSourceAsTask(t, _token); return valueTaskSourceAsTask.Task; } [MethodImpl(MethodImplOptions.AggressiveInlining)] [StackTraceHidden] internal void ThrowIfCompletedUnsuccessfully() { object obj = _obj; if (obj != null) { if (obj is Task task) { task.GetAwaiter().GetResult(); } else { Unsafe.As<IValueTaskSource>(obj).GetResult(_token); } } } public ValueTaskAwaiter GetAwaiter() { return new ValueTaskAwaiter(this); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ConfiguredValueTaskAwaitable ConfigureAwait(bool continueOnCapturedContext) { return new ConfiguredValueTaskAwaitable(new ValueTask(_obj, _token, continueOnCapturedContext)); } } [StructLayout(LayoutKind.Auto)] [AsyncMethodBuilder(typeof(AsyncValueTaskMethodBuilder<>))] public readonly struct ValueTask<TResult> : IEquatable<ValueTask<TResult>> { private sealed class ValueTaskSourceAsTask : TaskCompletionSource<TResult> { private static readonly Action<object> s_completionAction = delegate(object state) { IValueTaskSource<TResult> source; if (!(state is ValueTaskSourceAsTask valueTaskSourceAsTask) || (source = valueTaskSourceAsTask._source) == null) { System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument.state); return; } valueTaskSourceAsTask._source = null; ValueTaskSourceStatus status = source.GetStatus(valueTaskSourceAsTask._token); try { valueTaskSourceAsTask.TrySetResult(source.GetResult(valueTaskSourceAsTask._token)); } catch (Exception exception) { if (status == ValueTaskSourceStatus.Canceled) { valueTaskSourceAsTask.TrySetCanceled(); } else { valueTaskSourceAsTask.TrySetException(exception); } } }; private IValueTaskSource<TResult> _source; private readonly short _token; public ValueTaskSourceAsTask(IValueTaskSource<TResult> source, short token) { _source = source; _token = token; source.OnCompleted(s_completionAction, this, token, ValueTaskSourceOnCompletedFlags.None); } } private static Task<TResult> s_canceledTask; internal readonly object _obj; internal readonly TResult _result; internal readonly short _token; internal readonly bool _continueOnCapturedContext; public bool IsCompleted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { object obj = _obj; if (obj == null) { return true; } if (obj is Task<TResult> task) { return task.IsCompleted; } return Unsafe.As<IValueTaskSource<TResult>>(obj).GetStatus(_token) != ValueTaskSourceStatus.Pending; } } public bool IsCompletedSuccessfully { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { object obj = _obj; if (obj == null) { return true; } if (obj is Task<TResult> task) { return task.Status == TaskStatus.RanToCompletion; } return Unsafe.As<IValueTaskSource<TResult>>(obj).GetStatus(_token) == ValueTaskSourceStatus.Succeeded; } } public bool IsFaulted { get { object obj = _obj; if (obj == null) { return false; } if (obj is Task<TResult> task) { return task.IsFaulted; } return Unsafe.As<IValueTaskSource<TResult>>(obj).GetStatus(_token) == ValueTaskSourceStatus.Faulted; } } public bool IsCanceled { get { object obj = _obj; if (obj == null) { return false; } if (obj is Task<TResult> task) { return task.IsCanceled; } return Unsafe.As<IValueTaskSource<TResult>>(obj).GetStatus(_token) == ValueTaskSourceStatus.Canceled; } } public TResult Result { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { object obj = _obj; if (obj == null) { return _result; } if (obj is Task<TResult> task) { return task.GetAwaiter().GetResult(); } return Unsafe.As<IValueTaskSource<TResult>>(obj).GetResult(_token); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ValueTask(TResult result) { _result = result; _obj = null; _continueOnCapturedContext = true; _token = 0; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ValueTask(Task<TResult> task) { if (task == null) { System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.task); } _obj = task; _result = default(TResult); _continueOnCapturedContext = true; _token = 0; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ValueTask(IValueTaskSource<TResult> source, short token) { if (source == null) { System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.source); } _obj = source; _token = token; _result = default(TResult); _continueOnCapturedContext = true; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private ValueTask(object obj, TResult result, short token, bool continueOnCapturedContext) { _obj = obj; _result = result; _token = token; _continueOnCapturedContext = continueOnCapturedContext; } public override int GetHashCode() { if (_obj == null) { if (_result == null) { return 0; } return _result.GetHashCode(); } return _obj.GetHashCode(); } public override bool Equals(object obj) { if (obj is ValueTask<TResult>) { return Equals((ValueTask<TResult>)obj); } return false; } public bool Equals(ValueTask<TResult> other) { if (_obj == null && other._obj == null) { return EqualityComparer<TResult>.Default.Equals(_result, other._result); } if (_obj == other._obj) { return _token == other._token; } return false; } public static bool operator ==(ValueTask<TResult> left, ValueTask<TResult> right) { return left.Equals(right); } public static bool operator !=(ValueTask<TResult> left, ValueTask<TResult> right) { return !left.Equals(right); } public Task<TResult> AsTask() { object obj = _obj; if (obj == null) { return Task.FromResult(_result); } if (obj is Task<TResult> result) { return result; } return GetTaskForValueTaskSource(Unsafe.As<IValueTaskSource<TResult>>(obj)); } public ValueTask<TResult> Preserve() { if (_obj != null) { return new ValueTask<TResult>(AsTask()); } return this; } private Task<TResult> GetTaskForValueTaskSource(IValueTaskSource<TResult> t) { ValueTaskSourceStatus status = t.GetStatus(_token); if (status != 0) { try { return Task.FromResult(t.GetResult(_token)); } catch (Exception exception) { if (status == ValueTaskSourceStatus.Canceled) { Task<TResult> task = s_canceledTask; if (task == null) { TaskCompletionSource<TResult> taskCompletionSource = new TaskCompletionSource<TResult>(); taskCompletionSource.TrySetCanceled(); task = (s_canceledTask = taskCompletionSource.Task); } return task; } TaskCompletionSource<TResult> taskCompletionSource2 = new TaskCompletionSource<TResult>(); taskCompletionSource2.TrySetException(exception); return taskCompletionSource2.Task; } } ValueTaskSourceAsTask valueTaskSourceAsTask = new ValueTaskSourceAsTask(t, _token); return valueTaskSourceAsTask.Task; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ValueTaskAwaiter<TResult> GetAwaiter() { return new ValueTaskAwaiter<TResult>(this); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ConfiguredValueTaskAwaitable<TResult> ConfigureAwait(bool continueOnCapturedContext) { return new ConfiguredValueTaskAwaitable<TResult>(new ValueTask<TResult>(_obj, _result, _token, continueOnCapturedContext)); } public override string ToString() { if (IsCompletedSuccessfully) { TResult result = Result; if (result != null) { return result.ToString(); } } return string.Empty; } } } namespace System.Threading.Tasks.Sources { [Flags] public enum ValueTaskSourceOnCompletedFlags { None = 0, UseSchedulingContext = 1, FlowExecutionContext = 2 } public enum ValueTaskSourceStatus { Pending, Succeeded, Faulted, Canceled } public interface IValueTaskSource { ValueTaskSourceStatus GetStatus(short token); void OnCompleted(Action<object> continuation, object state, short token, ValueTaskSourceOnCompletedFlags flags); void GetResult(short token); } public interface IValueTaskSource<out TResult> { ValueTaskSourceStatus GetStatus(short token); void OnCompleted(Action<object> continuation, object state, short token, ValueTaskSourceOnCompletedFlags flags); TResult GetResult(short token); } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false, AllowMultiple = false)] public sealed class AsyncMethodBuilderAttribute : Attribute { public Type BuilderType { get; } public AsyncMethodBuilderAttribute(Type builderType) { BuilderType = builderType; } } [StructLayout(LayoutKind.Auto)] public struct AsyncValueTaskMethodBuilder { private AsyncTaskMethodBuilder _methodBuilder; private bool _haveResult; private bool _useBuilder; public ValueTask Task { get { if (_haveResult) { return default(ValueTask); } _useBuilder = true; return new ValueTask(_methodBuilder.Task); } } public static AsyncValueTaskMethodBuilder Create() { return default(AsyncValueTaskMethodBuilder); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine { _methodBuilder.Start(ref stateMachine); } public void SetStateMachine(IAsyncStateMachine stateMachine) { _methodBuilder.SetStateMachine(stateMachine); } public void SetResult() { if (_useBuilder) { _methodBuilder.SetResult(); } else { _haveResult = true; } } public void SetException(Exception exception) { _methodBuilder.SetException(exception); } public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine { _useBuilder = true; _methodBuilder.AwaitOnCompleted(ref awaiter, ref stateMachine); } [SecuritySafeCritical] public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { _useBuilder = true; _methodBuilder.AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine); } } [StructLayout(LayoutKind.Auto)] public struct AsyncValueTaskMethodBuilder<TResult> { private AsyncTaskMethodBuilder<TResult> _methodBuilder; private TResult _result; private bool _haveResult; private bool _useBuilder; public ValueTask<TResult> Task { get { if (_haveResult) { return new ValueTask<TResult>(_result); } _useBuilder = true; return new ValueTask<TResult>(_methodBuilder.Task); } } public static AsyncValueTaskMethodBuilder<TResult> Create() { return default(AsyncValueTaskMethodBuilder<TResult>); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine { _methodBuilder.Start(ref stateMachine); } public void SetStateMachine(IAsyncStateMachine stateMachine) { _methodBuilder.SetStateMachine(stateMachine); } public void SetResult(TResult result) { if (_useBuilder) { _methodBuilder.SetResult(result); return; } _result = result; _haveResult = true; } public void SetException(Exception exception) { _methodBuilder.SetException(exception); } public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine { _useBuilder = true; _methodBuilder.AwaitOnCompleted(ref awaiter, ref stateMachine); } [SecuritySafeCritical] public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { _useBuilder = true; _methodBuilder.AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine); } } [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredValueTaskAwaitable { [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredValueTaskAwaiter : ICriticalNotifyCompletion, INotifyCompletion { private readonly ValueTask _value; public bool IsCompleted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return _value.IsCompleted; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal ConfiguredValueTaskAwaiter(ValueTask value) { _value = value; } [MethodImpl(MethodImplOptions.AggressiveInlining)] [StackTraceHidden] public void GetResult() { _value.ThrowIfCompletedUnsuccessfully(); } public void OnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task task) { task.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().OnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource>(obj).OnCompleted(ValueTaskAwaiter.s_invokeActionDelegate, continuation, _value._token, ValueTaskSourceOnCompletedFlags.FlowExecutionContext | (_value._continueOnCapturedContext ? ValueTaskSourceOnCompletedFlags.UseSchedulingContext : ValueTaskSourceOnCompletedFlags.None)); } else { ValueTask.CompletedTask.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().OnCompleted(continuation); } } public void UnsafeOnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task task) { task.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().UnsafeOnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource>(obj).OnCompleted(ValueTaskAwaiter.s_invokeActionDelegate, continuation, _value._token, _value._continueOnCapturedContext ? ValueTaskSourceOnCompletedFlags.UseSchedulingContext : ValueTaskSourceOnCompletedFlags.None); } else { ValueTask.CompletedTask.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().UnsafeOnCompleted(continuation); } } } private readonly ValueTask _value; [MethodImpl(MethodImplOptions.AggressiveInlining)] internal ConfiguredValueTaskAwaitable(ValueTask value) { _value = value; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ConfiguredValueTaskAwaiter GetAwaiter() { return new ConfiguredValueTaskAwaiter(_value); } } [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredValueTaskAwaitable<TResult> { [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredValueTaskAwaiter : ICriticalNotifyCompletion, INotifyCompletion { private readonly ValueTask<TResult> _value; public bool IsCompleted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return _value.IsCompleted; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal ConfiguredValueTaskAwaiter(ValueTask<TResult> value) { _value = value; } [MethodImpl(MethodImplOptions.AggressiveInlining)] [StackTraceHidden] public TResult GetResult() { return _value.Result; } public void OnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task<TResult> task) { task.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().OnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource<TResult>>(obj).OnCompleted(ValueTaskAwaiter.s_invokeActionDelegate, continuation, _value._token, ValueTaskSourceOnCompletedFlags.FlowExecutionContext | (_value._continueOnCapturedContext ? ValueTaskSourceOnCompletedFlags.UseSchedulingContext : ValueTaskSourceOnCompletedFlags.None)); } else { ValueTask.CompletedTask.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().OnCompleted(continuation); } } public void UnsafeOnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task<TResult> task) { task.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().UnsafeOnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource<TResult>>(obj).OnCompleted(ValueTaskAwaiter.s_invokeActionDelegate, continuation, _value._token, _value._continueOnCapturedContext ? ValueTaskSourceOnCompletedFlags.UseSchedulingContext : ValueTaskSourceOnCompletedFlags.None); } else { ValueTask.CompletedTask.ConfigureAwait(_value._continueOnCapturedContext).GetAwaiter().UnsafeOnCompleted(continuation); } } } private readonly ValueTask<TResult> _value; [MethodImpl(MethodImplOptions.AggressiveInlining)] internal ConfiguredValueTaskAwaitable(ValueTask<TResult> value) { _value = value; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public ConfiguredValueTaskAwaiter GetAwaiter() { return new ConfiguredValueTaskAwaiter(_value); } } public readonly struct ValueTaskAwaiter : ICriticalNotifyCompletion, INotifyCompletion { internal static readonly Action<object> s_invokeActionDelegate = delegate(object state) { if (!(state is Action action)) { System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument.state); } else { action(); } }; private readonly ValueTask _value; public bool IsCompleted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return _value.IsCompleted; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal ValueTaskAwaiter(ValueTask value) { _value = value; } [MethodImpl(MethodImplOptions.AggressiveInlining)] [StackTraceHidden] public void GetResult() { _value.ThrowIfCompletedUnsuccessfully(); } public void OnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task task) { task.GetAwaiter().OnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource>(obj).OnCompleted(s_invokeActionDelegate, continuation, _value._token, ValueTaskSourceOnCompletedFlags.UseSchedulingContext | ValueTaskSourceOnCompletedFlags.FlowExecutionContext); } else { ValueTask.CompletedTask.GetAwaiter().OnCompleted(continuation); } } public void UnsafeOnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task task) { task.GetAwaiter().UnsafeOnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource>(obj).OnCompleted(s_invokeActionDelegate, continuation, _value._token, ValueTaskSourceOnCompletedFlags.UseSchedulingContext); } else { ValueTask.CompletedTask.GetAwaiter().UnsafeOnCompleted(continuation); } } } public readonly struct ValueTaskAwaiter<TResult> : ICriticalNotifyCompletion, INotifyCompletion { private readonly ValueTask<TResult> _value; public bool IsCompleted { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return _value.IsCompleted; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal ValueTaskAwaiter(ValueTask<TResult> value) { _value = value; } [MethodImpl(MethodImplOptions.AggressiveInlining)] [StackTraceHidden] public TResult GetResult() { return _value.Result; } public void OnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task<TResult> task) { task.GetAwaiter().OnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource<TResult>>(obj).OnCompleted(ValueTaskAwaiter.s_invokeActionDelegate, continuation, _value._token, ValueTaskSourceOnCompletedFlags.UseSchedulingContext | ValueTaskSourceOnCompletedFlags.FlowExecutionContext); } else { ValueTask.CompletedTask.GetAwaiter().OnCompleted(continuation); } } public void UnsafeOnCompleted(Action continuation) { object obj = _value._obj; if (obj is Task<TResult> task) { task.GetAwaiter().UnsafeOnCompleted(continuation); } else if (obj != null) { Unsafe.As<IValueTaskSource<TResult>>(obj).OnCompleted(ValueTaskAwaiter.s_invokeActionDelegate, continuation, _value._token, ValueTaskSourceOnCompletedFlags.UseSchedulingContext); } else { ValueTask.CompletedTask.GetAwaiter().UnsafeOnCompleted(continuation); } } } [AttributeUsage(AttributeTargets.All)] internal class __BlockReflectionAttribute : Attribute { } } namespace System.Diagnostics { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method, Inherited = false)] internal sealed class StackTraceHiddenAttribute : Attribute { } }
BepInEx/plugins/LanguageExt/Microsoft.Bcl.AsyncInterfaces.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyMetadata(".NETFrameworkAssembly", "")] [assembly: AssemblyMetadata("Serviceable", "True")] [assembly: AssemblyMetadata("PreferInbox", "True")] [assembly: AssemblyDefaultAlias("Microsoft.Bcl.AsyncInterfaces")] [assembly: CLSCompliant(true)] [assembly: AssemblyMetadata("IsTrimmable", "True")] [assembly: DefaultDllImportSearchPaths(DllImportSearchPath.System32 | DllImportSearchPath.AssemblyDirectory)] [assembly: AssemblyCompany("Microsoft Corporation")] [assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")] [assembly: AssemblyDescription("Provides the IAsyncEnumerable<T> and IAsyncDisposable interfaces and helper types for .NET Standard 2.0. This package is not required starting with .NET Standard 2.1 and .NET Core 3.0.\r\n\r\nCommonly Used Types:\r\nSystem.IAsyncDisposable\r\nSystem.Collections.Generic.IAsyncEnumerable\r\nSystem.Collections.Generic.IAsyncEnumerator")] [assembly: AssemblyFileVersion("7.0.22.51805")] [assembly: AssemblyInformationalVersion("7.0.0+d099f075e45d2aa6007a22b71b45a08758559f80")] [assembly: AssemblyProduct("Microsoft® .NET")] [assembly: AssemblyTitle("Microsoft.Bcl.AsyncInterfaces")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/dotnet/runtime")] [assembly: AssemblyVersion("7.0.0.0")] [module: RefSafetyRules(11)] [module: System.Runtime.CompilerServices.NullablePublicOnly(false)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class NullablePublicOnlyAttribute : Attribute { public readonly bool IncludesInternals; public NullablePublicOnlyAttribute(bool P_0) { IncludesInternals = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace System { public interface IAsyncDisposable { ValueTask DisposeAsync(); } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] internal sealed class AllowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] internal sealed class DisallowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] internal sealed class MaybeNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] internal sealed class NotNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class MaybeNullWhenAttribute : Attribute { public bool ReturnValue { get; } public MaybeNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class NotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public NotNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)] internal sealed class NotNullIfNotNullAttribute : Attribute { public string ParameterName { get; } public NotNullIfNotNullAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Method, Inherited = false)] internal sealed class DoesNotReturnAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class DoesNotReturnIfAttribute : Attribute { public bool ParameterValue { get; } public DoesNotReturnIfAttribute(bool parameterValue) { ParameterValue = parameterValue; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } } namespace System.Collections.Generic { public interface IAsyncEnumerable<out T> { IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default(CancellationToken)); } public interface IAsyncEnumerator<out T> : IAsyncDisposable { T Current { get; } ValueTask<bool> MoveNextAsync(); } } namespace System.Runtime.InteropServices { [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] internal sealed class LibraryImportAttribute : Attribute { public string LibraryName { get; } public string EntryPoint { get; set; } public StringMarshalling StringMarshalling { get; set; } public Type StringMarshallingCustomType { get; set; } public bool SetLastError { get; set; } public LibraryImportAttribute(string libraryName) { LibraryName = libraryName; } } internal enum StringMarshalling { Custom, Utf8, Utf16 } } namespace System.Runtime.CompilerServices { [StructLayout(LayoutKind.Auto)] public struct AsyncIteratorMethodBuilder { private AsyncTaskMethodBuilder _methodBuilder; private object _id; internal object ObjectIdForDebugger => _id ?? Interlocked.CompareExchange(ref _id, new object(), null) ?? _id; public static AsyncIteratorMethodBuilder Create() { AsyncIteratorMethodBuilder result = default(AsyncIteratorMethodBuilder); result._methodBuilder = AsyncTaskMethodBuilder.Create(); return result; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void MoveNext<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine { _methodBuilder.Start(ref stateMachine); } public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine { _methodBuilder.AwaitOnCompleted(ref awaiter, ref stateMachine); } public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { _methodBuilder.AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine); } public void Complete() { _methodBuilder.SetResult(); } } [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)] public sealed class AsyncIteratorStateMachineAttribute : StateMachineAttribute { public AsyncIteratorStateMachineAttribute(Type stateMachineType) : base(stateMachineType) { } } [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredAsyncDisposable { private readonly IAsyncDisposable _source; private readonly bool _continueOnCapturedContext; internal ConfiguredAsyncDisposable(IAsyncDisposable source, bool continueOnCapturedContext) { _source = source; _continueOnCapturedContext = continueOnCapturedContext; } public ConfiguredValueTaskAwaitable DisposeAsync() { return _source.DisposeAsync().ConfigureAwait(_continueOnCapturedContext); } } [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredCancelableAsyncEnumerable<T> { [StructLayout(LayoutKind.Auto)] public readonly struct Enumerator { private readonly IAsyncEnumerator<T> _enumerator; private readonly bool _continueOnCapturedContext; public T Current => _enumerator.Current; internal Enumerator(IAsyncEnumerator<T> enumerator, bool continueOnCapturedContext) { _enumerator = enumerator; _continueOnCapturedContext = continueOnCapturedContext; } public ConfiguredValueTaskAwaitable<bool> MoveNextAsync() { return _enumerator.MoveNextAsync().ConfigureAwait(_continueOnCapturedContext); } public ConfiguredValueTaskAwaitable DisposeAsync() { return _enumerator.DisposeAsync().ConfigureAwait(_continueOnCapturedContext); } } private readonly IAsyncEnumerable<T> _enumerable; private readonly CancellationToken _cancellationToken; private readonly bool _continueOnCapturedContext; internal ConfiguredCancelableAsyncEnumerable(IAsyncEnumerable<T> enumerable, bool continueOnCapturedContext, CancellationToken cancellationToken) { _enumerable = enumerable; _continueOnCapturedContext = continueOnCapturedContext; _cancellationToken = cancellationToken; } public ConfiguredCancelableAsyncEnumerable<T> ConfigureAwait(bool continueOnCapturedContext) { return new ConfiguredCancelableAsyncEnumerable<T>(_enumerable, continueOnCapturedContext, _cancellationToken); } public ConfiguredCancelableAsyncEnumerable<T> WithCancellation(CancellationToken cancellationToken) { return new ConfiguredCancelableAsyncEnumerable<T>(_enumerable, _continueOnCapturedContext, cancellationToken); } public Enumerator GetAsyncEnumerator() { return new Enumerator(_enumerable.GetAsyncEnumerator(_cancellationToken), _continueOnCapturedContext); } } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] public sealed class EnumeratorCancellationAttribute : Attribute { } } namespace System.Threading.Tasks { public static class TaskAsyncEnumerableExtensions { public static ConfiguredAsyncDisposable ConfigureAwait(this IAsyncDisposable source, bool continueOnCapturedContext) { return new ConfiguredAsyncDisposable(source, continueOnCapturedContext); } public static ConfiguredCancelableAsyncEnumerable<T> ConfigureAwait<T>(this IAsyncEnumerable<T> source, bool continueOnCapturedContext) { return new ConfiguredCancelableAsyncEnumerable<T>(source, continueOnCapturedContext, default(CancellationToken)); } public static ConfiguredCancelableAsyncEnumerable<T> WithCancellation<T>(this IAsyncEnumerable<T> source, CancellationToken cancellationToken) { return new ConfiguredCancelableAsyncEnumerable<T>(source, continueOnCapturedContext: true, cancellationToken); } } } namespace System.Threading.Tasks.Sources { [StructLayout(LayoutKind.Auto)] public struct ManualResetValueTaskSourceCore<TResult> { private Action<object> _continuation; private object _continuationState; private ExecutionContext _executionContext; private object _capturedContext; private bool _completed; private TResult _result; private ExceptionDispatchInfo _error; private short _version; public bool RunContinuationsAsynchronously { get; set; } public short Version => _version; public void Reset() { _version++; _completed = false; _result = default(TResult); _error = null; _executionContext = null; _capturedContext = null; _continuation = null; _continuationState = null; } public void SetResult(TResult result) { _result = result; SignalCompletion(); } public void SetException(Exception error) { _error = ExceptionDispatchInfo.Capture(error); SignalCompletion(); } public ValueTaskSourceStatus GetStatus(short token) { ValidateToken(token); if (_continuation != null && _completed) { if (_error != null) { if (!(_error.SourceException is OperationCanceledException)) { return ValueTaskSourceStatus.Faulted; } return ValueTaskSourceStatus.Canceled; } return ValueTaskSourceStatus.Succeeded; } return ValueTaskSourceStatus.Pending; } public TResult GetResult(short token) { ValidateToken(token); if (!_completed) { throw new InvalidOperationException(); } _error?.Throw(); return _result; } public void OnCompleted(Action<object?> continuation, object? state, short token, ValueTaskSourceOnCompletedFlags flags) { if (continuation == null) { throw new ArgumentNullException("continuation"); } ValidateToken(token); if ((flags & ValueTaskSourceOnCompletedFlags.FlowExecutionContext) != 0) { _executionContext = ExecutionContext.Capture(); } if ((flags & ValueTaskSourceOnCompletedFlags.UseSchedulingContext) != 0) { SynchronizationContext current = SynchronizationContext.Current; if (current != null && current.GetType() != typeof(SynchronizationContext)) { _capturedContext = current; } else { TaskScheduler current2 = TaskScheduler.Current; if (current2 != TaskScheduler.Default) { _capturedContext = current2; } } } object obj = _continuation; if (obj == null) { _continuationState = state; obj = Interlocked.CompareExchange(ref _continuation, continuation, null); } if (obj == null) { return; } if (obj != System.Threading.Tasks.Sources.ManualResetValueTaskSourceCoreShared.s_sentinel) { throw new InvalidOperationException(); } object capturedContext = _capturedContext; if (capturedContext != null) { if (!(capturedContext is SynchronizationContext synchronizationContext)) { if (capturedContext is TaskScheduler scheduler) { Task.Factory.StartNew(continuation, state, CancellationToken.None, TaskCreationOptions.DenyChildAttach, scheduler); } } else { synchronizationContext.Post(delegate(object s) { Tuple<Action<object>, object> tuple = (Tuple<Action<object>, object>)s; tuple.Item1(tuple.Item2); }, Tuple.Create(continuation, state)); } } else { Task.Factory.StartNew(continuation, state, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); } } private void ValidateToken(short token) { if (token != _version) { throw new InvalidOperationException(); } } private void SignalCompletion() { if (_completed) { throw new InvalidOperationException(); } _completed = true; if (_continuation == null && Interlocked.CompareExchange(ref _continuation, System.Threading.Tasks.Sources.ManualResetValueTaskSourceCoreShared.s_sentinel, null) == null) { return; } if (_executionContext != null) { ExecutionContext.Run(_executionContext, delegate(object s) { ((ManualResetValueTaskSourceCore<TResult>)s).InvokeContinuation(); }, this); } else { InvokeContinuation(); } } private void InvokeContinuation() { object capturedContext = _capturedContext; if (capturedContext != null) { if (!(capturedContext is SynchronizationContext synchronizationContext)) { if (capturedContext is TaskScheduler scheduler) { Task.Factory.StartNew(_continuation, _continuationState, CancellationToken.None, TaskCreationOptions.DenyChildAttach, scheduler); } } else { synchronizationContext.Post(delegate(object s) { Tuple<Action<object>, object> tuple = (Tuple<Action<object>, object>)s; tuple.Item1(tuple.Item2); }, Tuple.Create(_continuation, _continuationState)); } } else if (RunContinuationsAsynchronously) { Task.Factory.StartNew(_continuation, _continuationState, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); } else { _continuation(_continuationState); } } } internal static class ManualResetValueTaskSourceCoreShared { internal static readonly Action<object> s_sentinel = CompletionSentinel; private static void CompletionSentinel(object _) { throw new InvalidOperationException(); } } }