let nmap_filter f map = nmap_fold (fun map n v ->
    if f n v then
      nmap_add map n v
    else
      map) nmap_empty map