I have created a working solution for concat, but I feel that I can reduce this using List.fold_lift.
Here is my current code:
let rec concat (lists : 'a list list) : 'a list = match lists with | [] -> [] | hd :: tl -> hd @ concat tl ;;
Here is what I have tried:
let concat (lists : 'a list list) : 'a list = List.fold_left @ lists ;;
This gives me the error: This expression has type 'a list list but an expression was expected of type'a list
I think this is because the return value of list.fold_left gives us a list, but we are feeding it a list of lists so it then returns a list of lists again. How can I get around this without matching?
I was also playing around with List.map but with no luck so far:
let concat (lists : 'a list list) : 'a list = List.map (fun x -> List.fold_left @ x) lists ;;