public static IEnumerable <JoinResult <Datum, bool, Option <Datum> > > FullJoin(SetDatum left, DictionaryDatum right) { SetDatum keys = SetDatum.Union(left, right.Keys); return(keys.Select(k => new JoinResult <Datum, bool, Option <Datum> >(k, left.Contains(k), right.TryGet(k)))); }
public static IEnumerable <JoinResult <Datum, Option <Datum>, Datum> > RightJoin(DictionaryDatum left, DictionaryDatum right) { return(right.Keys.Select(k => new JoinResult <Datum, Option <Datum>, Datum>(k, left.TryGet(k), right[k]))); }
public static IEnumerable <JoinResult <Datum, Option <Datum>, Nothing> > RightJoin(DictionaryDatum left, SetDatum right) { return(right.Select(k => new JoinResult <Datum, Option <Datum>, Nothing>(k, left.TryGet(k), Nothing.Value))); }
public static IEnumerable <JoinResult <Datum, Nothing, Option <Datum> > > LeftJoin(SetDatum left, DictionaryDatum right) { return(left.Select(k => new JoinResult <Datum, Nothing, Option <Datum> >(k, Nothing.Value, right.TryGet(k)))); }