CCFun(cleanup): align CCFun.compose with the stdlib

Conditionally define CCFun.compose and align its definition with the
stdlib. The arguments are now swapped.
This commit is contained in:
Fardale 2024-12-25 14:27:47 +01:00
parent 931b28ec47
commit 2aa8416b1c
3 changed files with 20 additions and 7 deletions

View file

@ -1,8 +1,9 @@
# Changelog
## main
- change the semantic of CCFloat.{min,max} with respect to NaN to follow the Stdlib
- change the semantic of CCInt.rem with respect to negative number to follow the Stdlib
- breaking: invert the argument of CCFun.compose to align it with the Stdlib
- breaking: change the semantic of CCFloat.{min,max} with respect to NaN to follow the Stdlib
- breaking: change the semantic of CCInt.rem with respect to negative number to follow the Stdlib
## 3.15

View file

@ -10,7 +10,13 @@ include Fun
let[@inline] and_pred f g x = f x && g x
let[@inline] or_pred f g x = f x || g x
let[@inline] compose f g x = g (f x)
[@@@iflt 5.2]
let[@inline] compose f g x = f (g x)
[@@@endif]
let[@inline] compose_binop f g x y = g (f x) (f y)
let[@inline] curry f x y = f (x, y)
let[@inline] uncurry f (x, y) = f x y
@ -63,7 +69,7 @@ let rec iterate n f x =
module Infix = struct
(* default implem for some operators *)
let ( %> ) = compose
let ( %> ) f g = compose g f
let[@inline] ( % ) f g x = f (g x)
let ( let@ ) = ( @@ )
let ( ||> ) (a, b) f = f a b

View file

@ -17,8 +17,13 @@ val or_pred : ('a -> bool) -> ('a -> bool) -> 'a -> bool
@since 3.13.1
*)
val compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
(** [compose f g x] is [g (f x)]. Composition. *)
[@@@iflt 5.2]
val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
(** [compose f g x] is [f (g x)]. Composition.
@since NEXT_RELEASE arguments are inversted *)
[@@@endif]
val compose_binop : ('a -> 'b) -> ('b -> 'b -> 'c) -> 'a -> 'a -> 'c
(** [compose_binop f g] is [fun x y -> g (f x) (f y)].
@ -84,7 +89,8 @@ val iterate : int -> ('a -> 'a) -> 'a -> 'a
module Infix : sig
val ( %> ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
(** [(f %> g) x] or [(%>) f g x] is [g (f x)]. Alias to [compose]. *)
(** [(f %> g) x] or [(%>) f g x] is [g (f x)]. Infix version of [compose].
The order of the arguments of [%>] and {!compose} are inverted. *)
val ( % ) : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
(** [(f % g) x] or [(%) f g x] is [f (g x)]. Mathematical composition. *)