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); });
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) );
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) );
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) );
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() );
/// <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)))))))))));
/// <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))))))));
/// <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))))));
/// <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))));
/// <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)));