частные функции против вложенных функций

вопрос в том:

когда использовать частные функции и когда использовать вложенные функции? (я спрашиваю оF # но, возможно, ответы могут быть актуальны на других функциональных языках)

маленький пример

namespace SomeName

module BinaryReaderExt =
    open System.IO

    let seek (reader : BinaryReader) positions =
        reader.BaseStream.Seek(positions, SeekOrigin.Current) |> ignore

module Mod =
    open System.IO

    let private prFun reader:BinaryReader =
        //do something
        BinaryReaderExt.seek reader 10L


    let outerFun (stream :System.IO.Stream) =
        let reader = new System.IO.BinaryReader(stream)
        let seek = BinaryReaderExt.seek reader

        let nestedFun, () =
            seek 10L
            //do something

        nestedFun()
        prFun reader

это большой бонус, что вложенная функция может использовать данные из более широкой области видимости. также не загрязняет окружающий модуль. но выглядит неуклюже, не так ли? особенно когда есть несколько больших вложенных функций

напротив, частные функции могут быть обнародованы и протестированы. и кажется, что они выглядят более читабельными

Каково ваше мнение?

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

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