let chunkStr size str = let rec loop (s:string) accum = let branch = size < s.Length match branch with | true -> loop (s.[size..]) (s.[0..size-1]::accum) | false -> s::accum (loop str []) |> List.rev //example "A man, a plan, a canal: Panama." |> chunkStr 3 //result: ["A m"; "an,"; " a "; "pla"; "n, "; "a c"; "ana"; "l: "; "Pan"; "ama"; "."]