package unmagic
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=365579df41ff676f949063480f9d9a57477ac8158b7c2eaec4387990d98bdc79
md5=bf81da1b8d3048edd5e6d5e25218a4bc
Description
Unmagic is a small library to runtime tag-check Obj.t values for type-secure Obj.magic, input_value, Marshal.from_channel. It uses typerep to give the target type, and follows the same limitations of it.
Published: 24 Jan 2018
README
Unmagic: runtime type checking of OCaml marshaled (streamed) data
Unmagic is a library to dynamically type check Obj.t
data to assure safety of their coercions to expected types. It uses Typerep for the representation of data types. Secured version of Obj.obj
, Unmagic.obj
has the following type:
val obj : sharing:bool -> 'a Typerep.t -> Obj.t -> 'a
obj ~sharing (tyrep : ty Typerep.t) o
checks the value of Obj.t
can be safely coerced to a value of type ty
. If the check succeeds it returns the coerced value of type ty
. Otherwise, it raises an exception Ill_typed
.
The parameter ~sharing:true
enables sharing and cycle detection: it avoids repeating type checks of shared nodes and cycles which are already visited with the same types. It makes the type checking very slow but is necessary for data with cycles. Type checking may never terminates for cyclic data with ~sharing:false
.
Dependencies (7)
-
ocaml-migrate-parsetree
< "2.0.0"
- ppx_deriving
- ppx_typerep_conv
-
typerep
>= "v0.10.0"
- spotlib
-
jbuilder
>= "1.0+beta7"
-
ocaml
>= "4.06.0"
Dev Dependencies
None
Used by
None
Conflicts
None