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]