fork download
  1. open System.Collections
  2.  
  3. let rec flatten (items: IEnumerable) =
  4. seq {
  5. for x in items do
  6. match x with
  7. | :? 'T as v -> yield v
  8. | :? IEnumerable as e -> yield! flatten e
  9. | _ -> failwithf "Expected IEnumerable or %A" typeof<'T>
  10. }
  11.  
  12. let (!) (l: obj list) = l
  13. let y = ![["1";"2"];"3";[!["4";["5"];["6"]];["7"]];"8"]
  14. let z : string list = flatten y |> Seq.toList
  15. printfn "%A" z
Success #stdin #stdout 0.22s 12984KB
stdin
Standard input is empty
stdout
["1"; "2"; "3"; "4"; "5"; "6"; "7"; "8"]