final class FunctionConverter[D, R] extends Converter[(D) ⇒ R]
MLValue.Converter for type D => R.
- ML type:
d -> r(ifd,rare the ML types corresponding toD,R). - Encoding of a function
fas an exception: E_Function (DObject o val2exnR o f o exn2valD o (fn DObject e => e))whereexn2valDis a function that converts an exception back to a value of typed, andval2exnRis a function that converts a value of typerto an exception (as specified by the converters for typesd,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
- All
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( ... ) @native() @HotSpotIntrinsicCandidate()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
exnToValue(implicit isabelle: Isabelle, ec: ExecutionContext): String
Returns ML code for an (anonymous) function of type
exn -> athat converts a value encoded as an exception back into the original value.Returns ML code for an (anonymous) function of type
exn -> athat 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[_]
- 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 byvaluein the Isabelle object store.Given an mlvalue.MLValue
value, retrieves and returns the value referenced byvaluein 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 storesvaluein the Isabelle object store and returns an mlvalue.MLValue referencing the value in the object store.Given a
value : A, transfers and storesvaluein 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 -> exnthat converts a value into its encoding as an exception.Returns ML code for an (anonymous) function of type
a -> exnthat 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( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )