Затенение и Вложенная функция

Я хочу понять, как работает механизм Shadowing и Nested function. Например:

let func y =
    let dup y = y + y
    let z = dup y
    let dup y =
        let dup z =
            let y = y * z
            y
        let z = y
        y
    dup z + z;;

val func : int -> int

> func 3;;
val it : int = 12

Может кто-нибудь объяснить, что здесь происходит?

Ответы на вопрос(2)

Ваш ответ на вопрос