Вот реализация F # вставки списка Haskell:
let rec insertAt x ys n =
match n, ys with
| 1, _
| _, [] -> x::ys
| _, y::ys -> y::insertAt x ys (n-1)
let a = [1 .. 5]
let b = insertAt 0 a 3
let c = insertAt 0 [] 3
>
val a : int list = [1; 2; 3; 4; 5]
val b : int list = [1; 2; 0; 3; 4; 5]
val c : int list = [0]
Мой Haskell недостаточно хорош, чтобы знать, правильно ли обрабатывается случай передачи пустого списка в функции Haskell. В F # мы явно заботимся о пустом списке во втором случае совпадения.
Danny