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 # Changelog
## main ## main
- change the semantic of CCFloat.{min,max} with respect to NaN to follow the Stdlib - breaking: invert the argument of CCFun.compose to align it with the Stdlib
- change the semantic of CCInt.rem with respect to negative number to follow 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 ## 3.15

View file

@ -10,7 +10,13 @@ include Fun
let[@inline] and_pred f g x = f x && g x let[@inline] and_pred f g x = f x && g x
let[@inline] or_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] compose_binop f g x y = g (f x) (f y)
let[@inline] curry f x y = f (x, y) let[@inline] curry f x y = f (x, y)
let[@inline] uncurry 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 module Infix = struct
(* default implem for some operators *) (* default implem for some operators *)
let ( %> ) = compose let ( %> ) f g = compose g f
let[@inline] ( % ) f g x = f (g x) let[@inline] ( % ) f g x = f (g x)
let ( let@ ) = ( @@ ) let ( let@ ) = ( @@ )
let ( ||> ) (a, b) f = f a b 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 @since 3.13.1
*) *)
val compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c [@@@iflt 5.2]
(** [compose f g x] is [g (f x)]. Composition. *)
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 val compose_binop : ('a -> 'b) -> ('b -> 'b -> 'c) -> 'a -> 'a -> 'c
(** [compose_binop f g] is [fun x y -> g (f x) (f y)]. (** [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 module Infix : sig
val ( %> ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c 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 val ( % ) : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
(** [(f % g) x] or [(%) f g x] is [f (g x)]. Mathematical composition. *) (** [(f % g) x] or [(%) f g x] is [f (g x)]. Mathematical composition. *)