final class FunctionConverter[D, R] extends Converter[(D) => R]
MLValue.Converter for type D => R
.
- ML type:
d -> r
(ifd,r
are the ML types corresponding toD
,R
). - Encoding of a function
f
as an exception: E_Function (DObject o val2exnR o f o exn2valD o (fn DObject e => e))where
exn2valDis a function that converts an exception back to a value of type
d, and
val2exnRis a function that converts a value of type
rto an exception (as specified by the converters for types
d,
r).
Note that store is not supported by this converter. That means that MLValue(f)
for a Scala function f
will
fail (since a Scala function cannot be transferred to the Isabelle process). However, retrieve works,
thus mlF.retrieveNow
for mlF : MLValue[D=>R]
will return a function (that calls back to the Isabelle process whenever executed).
But the preferred way to invoke mlF
is to convert it into an MLFunction by mlF.function
and invoke the
resulting MLFunction. Another way to generate an MLValue[D=>R]
is using
MLValue.compileFunction to
compile the function from ML source code.
While the existence of this conversion makes it possible to use functions as arguments to other functions
(and thus do arbitrary higher order computations), we suspect that the presence of nested conversions (the
composition with val2exnR
and exn2valD
above) can make this slow in more complex cases. (We have not
benchmarked this, though.)
- Annotations
- @inline()
- Source
- FunctionConverter.scala
- See also
MLValue.Converter for explanations what Converters are for.
- Alphabetic
- By Inheritance
- FunctionConverter
- Converter
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
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
- FunctionConverter → Converter
- 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
- FunctionConverter → 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[(D) => R])(implicit isabelle: Isabelle, ec: ExecutionContext): Future[(D) => R]
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
- FunctionConverter → Converter
- def store(value: (D) => R)(implicit isabelle: Isabelle, ec: ExecutionContext): MLValue[(D) => R]
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
- FunctionConverter → 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
- FunctionConverter → Converter
- 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])