Example #1
0
 public static Lens <HashSet <A>, HashSet <A> > map <B>(Lens <A, A> lens) => Lens <HashSet <A>, HashSet <A> > .New(
     Get : la => la.Map(lens.Get),
     Set : lb => la =>
 {
     foreach (var item in lb)
     {
         la = la.Find(item).Match(Some: x => la.AddOrUpdate(lens.Set(x, item)), None: () => la);
     }
     return(la);
 });
Example #2
0
 public static Lens <Arr <A>, A> item(int index) => Lens <Arr <A>, A> .New(
     Get : la => la.Count == 0?throw new IndexOutOfRangeException() : la[index],
         Set : a => la => la.Count == 0?throw new IndexOutOfRangeException() : la.SetItem(index, a)
     );
Example #3
0
 public static Lens <HashSet <A>, bool> item(A key) => Lens <HashSet <A>, bool> .New(
     Get : la => la.Contains(key),
     Set : a => la => a?la.AddOrUpdate(key) : la.Remove(key)
     );
Example #4
0
 public static Lens <Arr <A>, Option <A> > itemOrNone(int index) => Lens <Arr <A>, Option <A> > .New(
     Get : la => la.Count < index - 1?None : Some(la[index]),
     Set : a => la => la.Count < index - 1 || a.IsSome?la : la.SetItem(index, a.Value)
     );
Example #5
0
 public static Lens <Arr <A>, Arr <B> > map <B>(Lens <A, B> lens) => Lens <Arr <A>, Arr <B> > .New(
     Get : la => la.Map(lens.Get),
     Set : lb => la => la.Zip(lb).Map(ab => lens.Set(ab.Item2, ab.Item1)).ToArr()
     );
Example #6
0
 /// <summary>
 /// Sequentially composes seven lenses
 /// </summary>
 public static Lens <A, H> lens <A, B, C, D, E, F, G, H>(Lens <A, B> la, Lens <B, C> lb, Lens <C, D> lc, Lens <D, E> ld, Lens <E, F> le, Lens <F, G> lf, Lens <G, H> lg) =>
 Lens <A, H> .New(
     Get : a => lg.Get(lf.Get(le.Get(ld.Get(lc.Get(lb.Get(la.Get(a))))))),
     Set : v => la.Update(lb.Update(lc.Update(ld.Update(le.Update(lf.Update(lg.SetF(v))))))));
Example #7
0
 /// <summary>
 /// Sequentially composes ten lenses
 /// </summary>
 public static Lens <A, K> lens <A, B, C, D, E, F, G, H, I, J, K>(Lens <A, B> la, Lens <B, C> lb, Lens <C, D> lc, Lens <D, E> ld, Lens <E, F> le, Lens <F, G> lf, Lens <G, H> lg, Lens <H, I> lh, Lens <I, J> li, Lens <J, K> lj) =>
 Lens <A, K> .New(
     Get : a => lj.Get(li.Get(lh.Get(lg.Get(lf.Get(le.Get(ld.Get(lc.Get(lb.Get(la.Get(a)))))))))),
     Set : v => la.Update(lb.Update(lc.Update(ld.Update(le.Update(lf.Update(lg.Update(lh.Update(li.Update(lj.SetF(v)))))))))));
Example #8
0
 /// <summary>
 /// Sequentially composes five lenses
 /// </summary>
 public static Lens <A, F> lens <A, B, C, D, E, F>(Lens <A, B> la, Lens <B, C> lb, Lens <C, D> lc, Lens <D, E> ld, Lens <E, F> le) =>
 Lens <A, F> .New(
     Get : a => le.Get(ld.Get(lc.Get(lb.Get(la.Get(a))))),
     Set : v => la.Update(lb.Update(lc.Update(ld.Update(le.SetF(v))))));
Example #9
0
 /// <summary>
 /// Sequentially composes three lenses
 /// </summary>
 public static Lens <A, D> lens <A, B, C, D>(Lens <A, B> la, Lens <B, C> lb, Lens <C, D> lc) =>
 Lens <A, D> .New(
     Get : a => lc.Get(lb.Get(la.Get(a))),
     Set : v => la.Update(lb.Update(lc.SetF(v))));
Example #10
0
 /// <summary>
 /// Sequentially composes two lenses
 /// </summary>
 public static Lens <A, C> lens <A, B, C>(Lens <A, B> la, Lens <B, C> lb) =>
 Lens <A, C> .New(
     Get : a => lb.Get(la.Get(a)),
     Set : v => la.Update(lb.SetF(v)));
Example #11
0
 public static State <A, Unit> put <A, B>(Lens <A, B> la, B value) =>
 from a in get <A>()
 from _ in put(la.Set(value, a))
 select unit;
Example #12
0
 public static State <A, B> get <A, B>(Lens <A, B> la) =>
 get <A>().Map(la.Get);