List.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
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
Idem for the second argument of List.fold_left_map f e l
relatively to the second argument of f