let flatMap (f : 'a -> 'b option) (xs : 'a Js.Array.t) : 'b Js.Array.t = xs |> Js.Array.map f |> Js.Array.filter (fun maybe -> match maybe with Some _ -> true | None -> false) |> Js.Array.map (fun maybe -> match maybe with | Some x -> x | None -> Js.Exn.raiseError "Unexpected None")