public static HMap <A, HMap <B, HMap <C, HMap <D, V> > > > MapRemoveT <A, B, C, D, T, V>(this HMap <A, HMap <B, HMap <C, HMap <D, T> > > > self, Func <HMap <D, T>, HMap <D, V> > map)
 {
     return(self.Map((ka, va) => va.Map((kb, vb) => vb.Map((kc, vc) => map(vc))
                                        .Filter((kc, vc) => vc.Count > 0))
                     .Filter((kb, vb) => vb.Count > 0))
            .Filter((ka, va) => va.Count > 0));
 }
 public static HMap <A, HMap <B, HMap <C, HMap <D, T> > > > FilterT <A, B, C, D, T>(this HMap <A, HMap <B, HMap <C, HMap <D, T> > > > self, Func <T, bool> pred)
 {
     return(self.Map((ka, va) => va.FilterT(pred)));
 }
 public static HMap <A, HMap <B, HMap <C, HMap <D, V> > > > MapT <A, B, C, D, T, V>(this HMap <A, HMap <B, HMap <C, HMap <D, T> > > > self, Func <T, V> map)
 {
     return(self.Map((ka, va) => va.MapT(map)));
 }
 public static HMap <A, HMap <B, V> > MapRemoveT <A, B, T, V>(this HMap <A, HMap <B, T> > self, Func <HMap <B, T>, HMap <B, V> > map)
 {
     return(self.Map((ka, va) => map(va))
            .Filter((ka, va) => va.Count > 0));
 }
 public static HMap <K, U> Select <K, V, U>(this HMap <K, V> self, Func <K, V, U> mapper) =>
 self.Map(mapper);