## OCaml and sequences from scratch, comment of part 2

My good friend Daniel Chambers (@danielchmbrs) pointed out an error in my code for `seq_append`

, and he was totally right! so I fixed it thanks to him, go and check it out, thanks buddy :)

Now, he mentioned something very important:

You should try to not make your functions partial (ie throw exceptions). Instead, use the Option type. So head is

`'a list -> 'a option`

instead of`'a list -> 'a`

In the standard Caml list module `hd`

, `tl`

and `nth`

throw `failure`

if the list is empty, but in the same module we have `nth_opt`

returning the *optional* type instead.

Let’s talk a little more about `option`

, it is defined like this:

```
type option 'a =
| None
| Some of 'a
```

Using this, implementing our `seq_nth_opt`

is an easy job:

```
let rec seq_nth_opt n l =
if n < 0 then None else
match l with
| End -> None
| Next (x, tl) -> if n = 0 then (Some x) else seq_nth_opt (n - 1) tl
;;
seq_nth_opt 0 sample ;;
seq_nth_opt 10 sample
```

val seq_nth_opt : int -> 'a seq -> 'a option = <fun> - : int option = Some 1 - : int option = None

So, our friend Daniel is right, and I let you as an exercise to implement your own `seq_hd_opt`

and `seq_tl_opt`

.