Esempio n. 1
0
 public Pair <X, List <B> > TraversePair <X, B>(Func <A, Pair <X, B> > f, Monoid <X> m)
 {
     return(FoldRight <Pair <X, List <B> > >(
                (a, b) => f(a).Constrain(m).ZipWith <List <B>, List <B> >(b.Constrain(m), aa => bb => aa + bb).Pair
                , m.Id.And(List <B> .Empty)
                ));
 }
Esempio n. 2
0
 public Pair <X, Tree <B> > TraversePair <X, B>(Func <A, Pair <X, B> > f, Monoid <X> m)
 {
     return(f(root).Constrain(m).ZipWith <List <Tree <B> >, Tree <B> >(
                children.TraversePair(w => w.TraversePair(f, m), m).Constrain(m)
                , b => bs => b.TreeNode(bs)
                ).Pair);
 }
Esempio n. 3
0
 public A SumLeft(Monoid <A> m) => FoldLeft(m.Op, m.Id);
Esempio n. 4
0
 public A SumRight(Monoid <A> m) => FoldRight(m.Op, m.Id);
Esempio n. 5
0
 public PairAndMonoid <A, B> Constrain(Monoid <A> m)
 {
     return(new PairAndMonoid <A, B>(this, m));
 }
Esempio n. 6
0
 internal PairAndMonoid(Pair <A, B> pair, Monoid <A> m)
 {
     this.pair = pair;
     this.m    = m;
 }
Esempio n. 7
0
 public Monoid <A> Monoid(A id) => Monoid <A> .monoid(op, id);
Esempio n. 8
0
 public A SumLeft(Monoid <A> m)
 {
     return(FoldLeft <A>(m.Op, m.Id));
 }
Esempio n. 9
0
 public Pair <X, NonEmptyList <B> > TraversePair <X, B>(Func <A, Pair <X, B> > f, Monoid <X> m) =>
 f(head).Constrain(m).ZipWith <List <B>, NonEmptyList <B> >(tail.TraversePair(f, m).Constrain(m), h => t => h & t).Pair;
Esempio n. 10
0
 public Monoid <Pair <A, B> > Pair <B>(Monoid <B> s) => Semigroup.Pair(s.Semigroup).Monoid(id.And(s.Id));
Esempio n. 11
0
 public PairAndMonoid <A, B> Constrain(Monoid <A> m) => new PairAndMonoid <A, B>(this, m);
Esempio n. 12
0
        public Pair <X, ListZipper <B> > TraversePair <X, B>(Func <A, Pair <X, B> > f, Monoid <X> m)
        {
            var t = this;
            var r =
                from ll in lefts.Reverse.TraversePair(f, m).Constrain(m)
                from xx in f(t.focus).Constrain(m)
                from rr in t.rights.TraversePair(f, m).Constrain(m)
                select new ListZipper <B>(ll, xx, rr);

            return(r.Pair);
        }
Esempio n. 13
0
 public B SumMapRight <B>(Func <A, B> f, Monoid <B> m)
 {
     return(FoldRight <B>((a, b) => m.Op(f(a), b), m.Id));
 }
Esempio n. 14
0
 public B SumMapRight <B>(Func <A, B> f, Monoid <B> m) => FoldRight((a, b) => m.Op(f(a), b), m.Id);
Esempio n. 15
0
 public Pair <W, Either <A, X> > TraversePair <W, X>(Func <B, Pair <W, X> > f, Monoid <W> m)
 {
     return(Fold(a => m.Id.And(a.Left <A, X>()), b => f(b).Select(x => x.Right <A, X>())));
 }
Esempio n. 16
0
 public B SumMapLeft <B>(Func <A, B> f, Monoid <B> m)
 {
     return(FoldLeft <B>((a, b) => m.Op(a, f(b)), m.Id));
 }
Esempio n. 17
0
 public Pair <X, Input <B> > TraversePair <X, B>(Func <E, Pair <X, B> > f, Monoid <X> m)
 {
     return(val.TraversePair(o => o.TraversePair(f, m), m).Select(o => new Input <B>(o)));
 }
Esempio n. 18
0
 public Monoid <A> Monoid(A id)
 {
     return(Monoid <A> .monoid(op, id));
 }
Esempio n. 19
0
 public A SumRight(Monoid <A> m)
 {
     return(FoldRight <A>(m.Op, m.Id));
 }