Недавно я пытался изучить объектно-ориентированные аспекты F#, и мне стало любопытно, как ограничить доступ к типам/модулям в языке.
В частности, я хочу знать разницу между написанием этого:
Пример.fsi
module Stack =
val foo : string
Пример.fs
module Stack =
let foo = "foo"
let bar = "bar"
и альтернативно это:
module Stack =
let foo = "foo"
let private bar = "bar"
Разве они не достигают в конце концов одного и того же? Исходя из фона C #, я очень склонен просто использовать модификаторы доступа для файлов подписи (FSI). Они кажутся более универсальными (например, могут применяться к модулям/типам в пространствах имен), тогда как я не вижу ситуаций, в которых файлы сигнатур предлагают что-то, чего нет в модификаторах доступа.