Module Cudf_types

module Cudf_types: sig .. end
CUDF type library

Implement core CUDF types (see CUDF spec. ยง2.2.2).

For parsing and pretty printing of CUDF types see Cudf_types_pp.



CUDF types

type version = int 
type relop = [ `Eq | `Geq | `Gt | `Leq | `Lt | `Neq ] 
type constr = (relop * version) option 

CUDF spec. types

type pkgname = string 
type vpkg = pkgname * constr 
type vpkglist = vpkg list 
type enum_keep = [ `Keep_feature | `Keep_none | `Keep_package | `Keep_version ] 
type vpkgformula = vpkg list list 
CNF formula. Inner lists are OR-ed, outer AND-ed. E.g.:
type veqpkg = pkgname * ([ `Eq ] * version) option 
type veqpkglist = veqpkg list 
type typ = [ `Bool
| `Enum of string list
| `Ident
| `Int
| `Nat
| `Pkgname
| `Posint
| `String
| `Typedecl
| `Veqpkg
| `Veqpkglist
| `Vpkg
| `Vpkgformula
| `Vpkglist ]
CUDF types
val keep_type : typ
val keep_enums : string list
type typedecl1 = [ `Bool of bool option
| `Enum of string list * string option
| `Ident of string option
| `Int of int option
| `Nat of int option
| `Pkgname of string option
| `Posint of int option
| `String of string option
| `Typedecl of typedecl option
| `Veqpkg of veqpkg option
| `Veqpkglist of veqpkglist option
| `Vpkg of vpkg option
| `Vpkgformula of vpkgformula option
| `Vpkglist of vpkglist option ]
(Single) type declaration: each variant denotes a type, its argument the default value, None if missing
type typedecl = (string * typedecl1) list 
type typed_value = [ `Bool of bool
| `Enum of string list * string
| `Ident of string
| `Int of int
| `Nat of int
| `Pkgname of string
| `Posint of int
| `String of string
| `Typedecl of typedecl
| `Veqpkg of veqpkg
| `Veqpkglist of veqpkglist
| `Vpkg of vpkg
| `Vpkgformula of vpkgformula
| `Vpkglist of vpkglist ]
Typed value in the value space of all CUDF types

Manipulation of typed values

val type_of_typedecl : typedecl1 -> typ
extract the type of a (single) type declaration
val typedecl_of_value : typed_value -> typedecl1
Create a (single) type declaration having as default value the given typed value (i.e. apply the "Some" monad to typed values)
val value_of_typedecl : typedecl1 -> typed_value option
Extract the default value from a type declaration (or return None)
val typedecl_of_type : typ -> typedecl1
Create a (single) type declaration with no default value
val type_of_value : typed_value -> typ
Returns the type of a given value
val cast : typ -> typed_value -> typed_value
cast ty v attempt a runtime cast of a given (typed) value to a different type.
Raises Type_error if casting is not possible

CUDF syntactic types

Types used in parsing, before values are injected into the CUDF type system.

type 'ty stanza = (string * 'ty) list 
RFC-822-like stanza, i.e. an associative list mapping property names to property values.

Values are typed according to the type variable 'ty. Usually, libCUDF uses either string stanza (for untyped stanzas) or Cudf_types.typed_value stanza (for typed stanzas).


Various errors

exception Parse_error_822 of string * loc
Error while parsing RFC822-like syntax of CUDF documents.

arguments: error message and file range, respectively.

exception Syntax_error of string * loc
Syntax error while parsing some literal value

arguments: error message and file range, respectively

exception Type_error of typ * typed_value * loc
Type error: mismatch between typed value and expected type

arguments: expected type, found value


Accessors, predicates, etc.

val is_eq_formula : vpkgformula -> bool
Check whether a formula uses only equality tests over package versions.