sig
  val ( |> ) : 'a -> ('a -> 'b) -> 'b
  val compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
  val compose_binop : ('a -> 'b) -> ('b -> 'b -> 'c) -> 'a -> 'a -> 'c
  val ( %> ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
  val ( @@ ) : ('a -> 'b) -> 'a -> 'b
  val id : 'a -> 'a
  val const : 'a -> 'b -> 'a
  val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c
  val curry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c
  val uncurry : ('a -> 'b -> 'c) -> 'a * 'b -> 'c
  val tap : ('a -> 'b) -> 'a -> 'a
  val ( % ) : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
  val lexicographic :
    ('a -> 'a -> int) -> ('a -> 'a -> int) -> 'a -> 'a -> int
  val finally : h:(unit -> 'b) -> f:(unit -> 'a) -> 'a
  val finally1 : h:(unit -> 'c) -> ('a -> 'b) -> 'a -> 'b
  val finally2 : h:(unit -> 'd) -> ('a -> 'b -> 'c) -> 'a -> 'b -> 'c
  val opaque_identity : 'a -> 'a
  module Monad :
    functor (X : sig type t end) ->
      sig
        type 'a t = X.t -> 'a
        val return : 'a -> 'a CCFun.Monad.t
        val ( >|= ) : 'a CCFun.Monad.t -> ('a -> 'b) -> 'b CCFun.Monad.t
        val ( >>= ) :
          'a CCFun.Monad.t -> ('a -> 'b CCFun.Monad.t) -> 'b CCFun.Monad.t
      end
end