let rec split ?(squeeze=true) ?(d:char=' ') (s:string) = try
let l = String.length s in
let p = String.index s d in
let rest = split ~squeeze ~d (StringLabels.sub ~pos:(p+1) ~len:(l-p-1) s) in
if squeeze && (p=0) then rest else (StringLabels.sub ~pos:0 ~len:p s)::rest
with
_ -> if (s="") then [] else [s]