Вы можете сделать что-то подобное в OCaml, используя модули вместо типов и функторы (модули высшего порядка) вместо типов высшего порядка. Но это выглядит намного уродливее и не имеет возможности определения типа, поэтому вам придется вручную указывать много вещей.
module type Type = sig
type t
end
module Char = struct
type t = char
end
module List (X:Type) = struct
type t = X.t list
end
module Maybe (X:Type) = struct
type t = X.t option
end
(* In the following, I decided to omit the redundant
single constructors "Id of ...", "Compose of ...", since
they don't help in OCaml since we can't use inference *)
module Id (X:Type) = X
module Compose
(F:functor(Z:Type)->Type)
(G:functor(Y:Type)->Type)
(X:Type) = F(G(X))
let l : Compose(List)(Maybe)(Char).t = [Some 'a']
module Example2 (F:functor(Y:Type)->Type) (X:Type) = struct
(* unlike types, "free" module variables are not allowed,
so we have to put it inside another functor in order
to scope F and X *)
let iso (a:Compose(Id)(F)(X).t) : F(X).t = a
end
Контроль версий необходим, но недостаточен для управления конфигурацией. Контроль версий происходит в каком-то центральном или распределенном репозитории, но ничего не говорится о том, где какая-либо конкретная версия развертывается или используется.
Управление конфигурацией заботится о том, как взять то, что находится в системе контроля версий, и последовательно развернуть это в соответствующих местах, в первую очередь для контроля качества и производства, но и в достаточно крупных операциях разработки разработчиков.
Например, вы можете сохранить все свои SQL-запросы в системе контроля версий, включая сценарии изменения таблиц, но это не влияет на то, когда эти сценарии развертываются в соответствующий сервер базы данных и синхронизируется с развертыванием любого другого кода, который полагается на эту структуру базы данных.
Version control is saving files and keeping different versions of them, so you can see the change over time.
Configuration management is generally referred to as an overall process of which keeps track of what version of the code is on what server, how the servers are setup (and the install scripts to do so at many places). It is how process of what happens after the code goes into source control and how gets to deployed to the servers/desktops etc.
Управление конфигурацией включает, но не ограничивается, контроль версий.
Управление конфигурацией - это все, что вам нужно для управления с точки зрения проекта. Это включает программное обеспечение, оборудование, тесты, документацию, управление выпусками и многое другое. Он идентифицирует каждый компонент конечного пользователя и отслеживает каждое предложенное и утвержденное изменение к нему с первого дня проекта до дня его завершения.
Контроль версий специально применяется к компьютерным файлам. Сюда входят документы, электронные таблицы, электронные письма, исходный код и многое другое.
Грубо говоря, контроль версий означает, что вы можете проверить исходный код любой конкретной версии. Управление конфигурацией означает, что вы можете собрать и развернуть и, возможно, протестировать любую конкретную версию.