예제 #1
0
        //ICategory<C, B> ICategory<A, B>.Left<C>(ICategory<C, A> cat)
        //{
        //    return Left((SimpleFunc<C, A>)cat);
        //}

        public SimpleFunc <A, C> Right <C>(SimpleFunc <B, C> s)
        {
            return(new SimpleFunc <A, C>(a => s.RunF(RunF(a))));
        }
예제 #2
0
        //ICategory<A, C> ICategory<A, B>.Right<C>(ICategory<B, C> cat)
        //{
        //    return Right((SimpleFunc<B, C>)cat);
        //}

        public SimpleFunc <Tuple <A, Ap>, Tuple <B, Bp> > Split <Ap, Bp>(SimpleFunc <Ap, Bp> prime)
        {
            return(First <Ap>(this).Right(SimpleFunc <Ap, Bp> .Second <B>(prime)));
        }
예제 #3
0
        //Func<ICategory<C, A>, ICategory<C, B>> ICategory<A, B>.Dot<C>(ICategory<A, B> cat)
        //{
        //    return ca => Dot<C>((SimpleFunc<A, B>)cat)((SimpleFunc<C,A>)ca);
        //}

        public SimpleFunc <C, B> Dot <C>(SimpleFunc <C, A> s)
        {
            return(Dot <C>(this)(s));
        }
예제 #4
0
        //ICategory<C, B> ICategory<A, B>.Dot<C>(ICategory<C, A> cat)
        //{
        //    return Dot((SimpleFunc<C, A>)cat);
        //}

        SimpleFunc <C, B> Left <C>(SimpleFunc <C, A> s)
        {
            return(new SimpleFunc <C, B>(c => RunF(s.RunF(c))));
        }
예제 #5
0
        //ICategory<A, B> ICategory<A, B>.Id()
        //{
        //    return Id();
        //}

        public static Func <SimpleFunc <C, A>, SimpleFunc <C, B> > Dot <C>(SimpleFunc <A, B> cat)
        {
            return(s => new SimpleFunc <C, B>(c => cat.RunF(s.RunF(c))));
        }
예제 #6
0
        //IArrow<Tuple<A, C>, Tuple<B, C>> IArrow<A, B>.First<C>(IArrow<A, B> arrow)
        //{
        //    return First<C>((SimpleFunc<A, B>)arrow);
        //}

        public static SimpleFunc <Tuple <C, A>, Tuple <C, B> > Second <C>(SimpleFunc <A, B> s)
        {
            return(new SimpleFunc <Tuple <C, A>, Tuple <C, B> >(t => new Tuple <C, B>(t.Item1, s.RunF(t.Item2))));
        }
예제 #7
0
        //IArrow<A, B> IArrow<A, B>.Arr(Func<A, B> func) { return Arr(func); }

        public static SimpleFunc <Tuple <A, C>, Tuple <B, C> > First <C>(SimpleFunc <A, B> s)
        {
            return(new SimpleFunc <Tuple <A, C>, Tuple <B, C> >(t => new Tuple <B, C>(s.RunF(t.Item1), t.Item2)));
        }
예제 #8
0
 public static SimpleFunc <Tuple <A, B>, C> Unspl <C>(Func <A, Func <B, C> > f)
 {
     return(SimpleFunc <Tuple <A, B>, C> .Arr(Uncurry(f)));
 }
예제 #9
0
        //IArrow<Tuple<A, Ap>, Tuple<B, Bp>> IArrow<A, B>.Split<Ap, Bp>(IArrow<Ap, Bp> arrow)
        //{
        //    return Split((SimpleFunc<Ap, Bp>)arrow);
        //}

        public SimpleFunc <A, Tuple <B, Bp> > Fan <Bp>(SimpleFunc <A, Bp> prime)
        {
            return(SimpleFunc <A, Tuple <A, A> > .Spl().Right(this.Split(prime)));
        }