Library
Module
Module type
Parameter
Class
Class type
Signature for functoria devices. A device
is a module implementation which contains a runtime state which can be set either at configuration time (by the application builder) or at runtime, using command-line arguments.
The type for devices whose runtime state is of type 'a
and having extra data-dependencies of type 'b
.
val module_name : ('a, 'b) t -> string
module_name t
is t
's module name.
packages t
is the list of OPAM packages that are needed by t
.
install t i
is the list of files installed by t
, using the build information i
.
val extra_deps : ('a, 'b) t -> 'b list
extra_deps t
is the list of dependencies that be initialized before running the code generated by connect t
.
val pp : 'b Fmt.t -> ('a, 'b) t Fmt.t
pp pp_dep
is the pretty-printer for devices, using pp_dep
to pretty-print the extra data-dependencies.
witness a b
provides an equality witness.
val hash : ('a, 'b) t -> int
hash t
is t
's hash.
files t info s
is the list of files generated configure-time.
keys t
is the list of command-line keys which can be used to configure t
.
connect t info impl_name args
is the code to execute in order to create a new state (usually calling <module_name t>.connect
) with the arguments args
, in the context of the project information info
. The freshly created state will be made available in var_name t
val start : string -> string list -> 'a code
start impl_name args
is the code <impl_name>.start <args>
.
val nice_name : (_, _) t -> string
nice_name d
provides a identifier unique to d
which is a valid OCaml identifier.
val dune : ('a, 'b) t -> Info.t -> Dune.stanza list
Actions
dune t info
are the dune stanza which needs to be generated to build the application.
configure t info
is configure hook for t
the device and the files it generates. During the configure phase, you cannot rely on packages t
being installed.
To run code during the build
phase, generate a dune
fragment instead.
val v :
?packages:Package.t list ->
?packages_v:Package.t list Key.value ->
?install:(Info.t -> Install.t) ->
?install_v:(Info.t -> Install.t Key.value) ->
?keys:Key.t list ->
?extra_deps:'b list ->
?connect:(Info.t -> string -> string list -> 'a code) ->
?dune:(Info.t -> Dune.stanza list) ->
?configure:(Info.t -> unit Action.t) ->
?files:(Info.t -> Fpath.t list) ->
string ->
'a Type.t ->
('a, 'b) t
module Graph : sig ... end