final class MLValueConverter[A] extends Converter[MLValue[A]]
A special MLValue.Converter that allows us to create MLValues that contain MLValues.
- MLType:
exn
. - Constraint on the values: only
exn
's that are the encoding of a value of type aas an exception are allowed. (
ais the type associated with
A)
- Encoding of
exn
as an exception: itself
The benefit of this special converter is probably best illustrated by an example. Say Huge
is an Scala type
corresponding to an ML type huge
. And assume transferring huge
between the Isabelle process and Scala is
expensive (or maybe even impossible). And say we have an myValue : MLValue[List[Huge]]
which contains a long list of huge
in the Isabelle
process. We can get a List[Huge]
by calling myValue.retrieveNow
, but this might be too expensive, especially if
we do not need the whole list. Instead, we can do:
val myValue2 : MLValue[List[MLValue[Huge]]] = myValue.asInstanceOf[MLValue[List[MLValue[Huge]]]] val myList : List[MLValue[Huge]] = myValue2.retrieveNow
myList
now is a list of MLValue[Huge]
and is constructed efficiently (because an MLValue[Huge]
just references
an object in the Isabelle process's object store). And then one can retrieve individual Huge
objects in that list
with additional calls .retrieveNow (or just use the values without ever retrieving them
as arguments to other functions that reside in the ML process).
An instance of MLValueConverter can be constructed without using a Converter for A
. This
means the above approach (except for retrieving values of type huge
) can even be used if no converter for A
has not actually been implemented. (As long as we consistently imagine a specific ML type and encoding for A
.)
- Annotations
- @inline()
- Source
- MLValueConverter.scala
- Alphabetic
- By Inheritance
- MLValueConverter
- Converter
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new MLValueConverter()
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def exnToValue(implicit isabelle: Isabelle, ec: ExecutionContext): String
Returns ML code for an (anonymous) function of type
exn -> a
that converts a value encoded as an exception back into the original value.Returns ML code for an (anonymous) function of type
exn -> a
that converts a value encoded as an exception back into the original value.It is recommended that this function produces informative match failures in case of invalid inputs. MLValue.matchFailExn is a helper function that facilitates this.
This function should always return the same value, at least for the same
isabelle
.- Definition Classes
- MLValueConverter → Converter
- Annotations
- @inline()
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def mlType(implicit isabelle: Isabelle, ec: ExecutionContext): String
Returns the ML type corresponding to
A
.Returns the ML type corresponding to
A
.This function should always return the same value, at least for the same
isabelle
.- Definition Classes
- MLValueConverter → Converter
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def retrieve(value: MLValue[MLValue[A]])(implicit isabelle: Isabelle, ec: ExecutionContext): Future[MLValue[A]]
Given an mlvalue.MLValue
value
, retrieves and returns the value referenced byvalue
in the Isabelle object store.Given an mlvalue.MLValue
value
, retrieves and returns the value referenced byvalue
in the Isabelle object store.Must not invoke
value.
retrieve orvalue.
retrieveNow because those functions invokethis.
retrieve. (But calling retrieve or retrieveNow on other MLValues is allowed as long as no cyclic dependencies are created.)- Definition Classes
- MLValueConverter → Converter
- def store(value: MLValue[A])(implicit isabelle: Isabelle, ec: ExecutionContext): MLValue[MLValue[A]]
Given a
value : A
, transfers and storesvalue
in the Isabelle object store and returns an mlvalue.MLValue referencing the value in the object store.Given a
value : A
, transfers and storesvalue
in the Isabelle object store and returns an mlvalue.MLValue referencing the value in the object store.Must not invoke MLValue
(value)
because that functions invokesthis.
store. (But calling MLValue(...)
on other values is allowed as long as no cyclic dependencies are created.)- Definition Classes
- MLValueConverter → Converter
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- def valueToExn(implicit isabelle: Isabelle, ec: ExecutionContext): String
Returns ML code for an (anonymous) function of type
a -> exn
that converts a value into its encoding as an exception.Returns ML code for an (anonymous) function of type
a -> exn
that converts a value into its encoding as an exception.It is recommended that this function produces informative match failures in case of invalid inputs. MLValue.matchFailExn is a helper function that facilitates this.
This function should always return the same value, at least for the same
isabelle
.- Definition Classes
- MLValueConverter → Converter
- Annotations
- @inline()
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])