///|
fn Map::get_number(self : Map[String, Json], key : String) -> Double? {
guard self.get(key) is Some(Number(n, ..)) else { None }
Some(n)
}
///|
fn Map::get_string(self : Map[String, Json], key : String) -> String? {
guard self.get(key) is Some(String(s)) else { None }
Some(s)
}
///|
fn[K : Eq + Hash, V, V2] Map::map_raise(
self : Map[K, V],
f : (K, V) -> V2 raise?,
) -> Map[K, V2] raise? {
[ for k, v in self => (k, f(k, v)) ] |> Map::from_array
}
///|
fn[T, T2] Array::map_raise(
self : Array[T],
f : (T) -> T2 raise?,
) -> Array[T2] raise? {
[
for x in self => f(x)
]
}