Packages

c

de.unruh.isabelle.mlvalue

MLValueConverter

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 a as an exception are allowed. (a is 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
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MLValueConverter
  2. Converter
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new MLValueConverter()

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  8. 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
    MLValueConverterConverter
    Annotations
    @inline()
  9. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  10. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  11. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  12. 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
    MLValueConverterConverter
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  16. 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 by value in the Isabelle object store.

    Given an mlvalue.MLValue value, retrieves and returns the value referenced by value in the Isabelle object store.

    Must not invoke value.retrieve or value.retrieveNow because those functions invoke this.retrieve. (But calling retrieve or retrieveNow on other MLValues is allowed as long as no cyclic dependencies are created.)

    Definition Classes
    MLValueConverterConverter
  17. def store(value: MLValue[A])(implicit isabelle: Isabelle, ec: ExecutionContext): MLValue[MLValue[A]]

    Given a value : A, transfers and stores value in the Isabelle object store and returns an mlvalue.MLValue referencing the value in the object store.

    Given a value : A, transfers and stores value 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 invokes this.store. (But calling MLValue(...) on other values is allowed as long as no cyclic dependencies are created.)

    Definition Classes
    MLValueConverterConverter
  18. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  19. def toString(): String
    Definition Classes
    AnyRef → Any
  20. 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
    MLValueConverterConverter
    Annotations
    @inline()
  21. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  22. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  23. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated
    Deprecated

Inherited from Converter[MLValue[A]]

Inherited from AnyRef

Inherited from Any

Ungrouped