Example #1
0
        private Union CreateUnion(Type t)
        {
            Union u = new Union();

            u.TagReader = FSharpFunc <object, int> .ToConverter(FSharpValue.PreComputeUnionTagReader(t, null));

            u.Cases = new List <UnionCase>();

            UnionCaseInfo[] cases = FSharpType.GetUnionCases(t, null);

            foreach (UnionCaseInfo unionCaseInfo in cases)
            {
                UnionCase unionCase = new UnionCase();
                unionCase.Tag         = unionCaseInfo.Tag;
                unionCase.Name        = unionCaseInfo.Name;
                unionCase.Fields      = unionCaseInfo.GetFields();
                unionCase.FieldReader = FSharpFunc <object, object[]> .ToConverter(FSharpValue.PreComputeUnionReader(unionCaseInfo, null));

                unionCase.Constructor = FSharpFunc <object[], object> .ToConverter(FSharpValue.PreComputeUnionConstructor(unionCaseInfo, null));

                u.Cases.Add(unionCase);
            }

            return(u);
        }
        public FSharpAsync <Unit> ExecuteAsyncJobOnUiContext(SynchronizationContext context, FSharpFunc <Unit, FSharpAsync <Unit> > action)
        {
            FSharpAsync.SwitchToContext(uiSynchronizationContext);

            var func = FSharpFunc <Unit, FSharpAsync <Unit> > .ToConverter(action);

            func.DynamicInvoke();

            return(FSharpAsync.SwitchToContext(context));
        }
Example #3
0
        public void FSharpFunc()
        {
            Equal(I.Module.ReturnsFunc().Invoke(3), 3);
            Equal(I.Module.ReturnsFunc2().Invoke(1).Invoke(2), 3);
            Func <int, int> f = I.Module.ReturnsFunc().Invoke;

            Equal(f(3), 3);
            Equal(I.Module.InvokeFunc(FSharpConvert.Fun((int x) => x + 1), 1), 2);
            Equal(I.Module.InvokeFunc2(FSharpConvert.Fun((int x, int y) => x + y), 1, 2), 3);
            Equal(I.Module.InvokeFunc(FuncConvert.FromFunc((int x) => x + 1), 1), 2);
            Equal(I.Module.InvokeFunc2(FuncConvert.FromFunc((int x, int y) => x + y), 1, 2), 3);
            Equal(I.Module.InvokeFunc(FuncConvert.ToFSharpFunc((int x) => x + 1), 1), 2);
            var c = FSharpFunc <int, int> .ToConverter(I.Module.ReturnsFunc());

            Equal(c(3), 3);
            var f2 = FSharpFunc <int, int> .FromConverter(c);

            Equal(f2.Invoke(3), 3);
        }