無論、副作用を使っても良いかもしれないが、

let rec take n xs = match n, xs with
| 0, _ | _, [] -> []
| n, _ when n < 0 -> []
| n, x::xs -> x :: take (n-1) xs

とかいう風にやるのが普通だと思う。