


We might want to combine all the values in ascending or descending order. Here the "" arguments to fold_left and fold_right are the initial values for the result accumulators:
linux$ my
eval: include string_map;
eval: m = (empty: Map( String ));
eval: m $= ("Key1", "Value1");
eval: m $= ("Key2", "Value2");
eval: m $= ("Key3", "Value3");
eval: fold_forward (fn (value,result) = sprintf "%s,%s" value result) "" m;
"Value3,Value2,Value1,"
eval: fold_backward (fn (value,result) = sprintf "%s,%s" value result) "" m;
"Value1,Value2,Value3,"
Or the same as the above but with the keys added into the mix:
linux$ my
eval: include string_map;
eval: m = (empty: Map( String ));
eval: m $= ("Key1", "Value1");
eval: m $= ("Key2", "Value2");
eval: m $= ("Key3", "Value3");
eval: keyed_fold_forward (fn (key,value,result) = sprintf "(%s,%s),%s" key value result) "" m;
"(Key3,Value3),(Key2,Value2),(Key1,Value1),"
eval: keyed_fold_backward (fn (key,value,result) = sprintf "(%s,%s),%s" key value result) "" m;
"(Key1,Value1),(Key2,Value2),(Key3,Value3),"


