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
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
install t i is the list of files installed by
t, using the build information
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
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
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
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
val start : string -> string list -> 'a code
start impl_name args is the code
val nice_name : (_, _) t -> string
nice_name d provides a identifier unique to
d which is a valid OCaml identifier.
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