Module CList.Smart

When returning a list of same type as the input, maximally shares the suffix of the output which is physically equal to the corresponding suffix of the input

val map : ('a -> 'a) -> 'a list -> 'a list

Like List.map but sharing with the input the longest suffix of the output which is physically the same as the input; in particular, Smart.map f l == l (physically) if f a == a (physically) for all members of the list

val fold_left_map : ('a -> 'b -> 'a * 'b) -> 'a -> 'b list -> 'a * 'b list

Idem for the second argument of List.fold_left_map f e l relatively to the second argument of f

val fold_right_map : ('b -> 'a -> 'b * 'a) -> 'b list -> 'a -> 'b list * 'a

Idem for the first argument of List.fold_right_map f l e relatively to the second argument of f