(*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *)

open! NS0
include Core.Option

let pp fmt pp_elt fs = function
  | Some x -> Format.fprintf fs fmt pp_elt x
  | None -> ()

let or_else ~f = function None -> f () | o -> o
let cons xo xs = match xo with Some x -> x :: xs | None -> xs

module Monad_syntax = struct
  let ( let+ ) x f = map ~f x
  let ( and+ ) x y = both x y
  let ( let* ) x f = bind ~f x
  let ( and* ) x y = both x y
end