object Composite_In_2_Factory2 extends Composite_In_2_Factory2
- Grouped
- Alphabetic
- By Inheritance
- Composite_In_2_Factory2
- Composite_In_2_Factory2
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
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()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
macro
def
m[I1, I2, T1, T2](dsl: Composite_In_2_02[I1, I2, T1, T2]): InputMolecule_2_02[I1, I2, T1, T2]
Macro creation of composite input molecule awaiting 2 inputs from user-defined DSL with 2 output groups (arity 2).
Macro creation of composite input molecule awaiting 2 inputs from user-defined DSL with 2 output groups (arity 2).
The builder pattern is used to add one or more attributes to an initial namespace likePerson
from the example below. Further non-related attributes can be tied together with the+
method to form "composite molecules" that is basically just attributes sharing the same entity id.
Applying the?
marker to attributes changes the semantics of the composite molecule to become a "composite input molecule" that awaits input at runtime for the attributes marked with?
.
Once the composite input molecule models the desired data structure and has been resolved with input we can call various actions on it, likeget
that retrieves matching data from the database.// Apply `?` to `age` and `score` attributes to create composite input molecule val personsAgeScore = m(Person.name.age_(?) + Tag.score(?)) // At runtime, `age` and `score` values are applied to get the Person's name personsAgeScore(42, 7).get.head === ("Ben", 7)
Composite input molecules of arity 2 has two sub-molecules with output attribute(s). If a sub-molecule has multiple output attributes, a tuple is returned, otherwise just the single value. The two groups of either a single type or tuple are then tied together in an outer composite tuple:
Composite input molecule Composite type (2 output groups) A.a1(?) + B.b1(?) => (a1, b1) A.a1(?) + B.b1(?).b2 => (a1, (b1, b2)) A.a1.a2(?) + B.b1(?) => ((a1, a2), b1) A.a1.a2(?) + B.b1(?).b2 => ((a1, a2), (b1, b2)) etc... We could even have additional non-output sub-molecules: A.a1.a2 + B.b1(?).b2 + C.c1_(?) => ((a1, a2), (b1, b2)) etc...
Translating into the example:
m(Person.name(?) + Tag.score(?) )("Ben", 7).get.head === ("Ben", 7) m(Person.name(?) + Tag.score(?).flags)("Ben", 7).get.head === ("Ben", (7, 3)) m(Person.name.age(?) + Tag.score(?) )(42, 7) .get.head === (("Ben", 42), 7) m(Person.name.age(?) + Tag.score(?).flags)(42, 7) .get.head === (("Ben", 42), (7, 3)) m(Person.name.age + Tag.score(?).flags + Cat.name_(?))(7, "pitcher").get.head === (("Ben", 42), (7, 3))
- I1
Type of input attribute 1 (
name
: String orage
: Int)- I2
Type of input attribute 2 (
score
: Int)- T1
Type of output group 1
- T2
Type of output group 2
- dsl
User-defined DSL structure modelling the composite input molecule awaiting 2 inputs
- returns
Composite input molecule awaiting 2 inputs
- Definition Classes
- Composite_In_2_Factory2
-
macro
def
m[I1, I2, T1](dsl: Composite_In_2_01[I1, I2, T1]): InputMolecule_2_01[I1, I2, T1]
Macro creation of composite input molecule awaiting 2 inputs from user-defined DSL with 1 output group (arity 1).
Macro creation of composite input molecule awaiting 2 inputs from user-defined DSL with 1 output group (arity 1).
The builder pattern is used to add one or more attributes to an initial namespace likePerson
from the example below. Further non-related attributes can be tied together with the+
method to form "composite molecules" that is basically just attributes sharing the same entity id.
Applying the?
marker to attributes changes the semantics of the composite molecule to become a "composite input molecule" that awaits input at runtime for the attributes marked with?
.
Once the composite input molecule models the desired data structure and has been resolved with input we can call various actions on it, likeget
that retrieves matching data from the database.// Apply `?` to `age` and `score` attributes to create composite input molecule val personsAgeScore = m(Person.name.age_(?) + Tag.score_(?)) // At runtime, `age` and `score` values are applied to get the Person's name personsAgeScore(42, 7).get.head === "Ben"
Composite input molecules of arity 1 has only one sub-molecule with output attribute(s). If the sub-molecule has multiple output attributes, a tuple is returned, otherwise just the single value:
Composite input molecule Composite type (1 output group) A.a1(?) + B.b1_(?) => a1 A.a1.a2(?) + B.b1_(?) => (a1, a2) A.a1.a2.a3(?) + B.b1_(?) => (a1, a2, a3) A.a1_(?) + B.b1(?) => b1 A.a1_(?) + B.b1.b2(?) => (b1, b2) A.a1_(?) + B.b1.b2.b3(?) => (b1, b2, b3) We could even have multiple tacit sub-molecules with multiple tacit attributes A.a1_(?).a2_ + B.b1_(?) + C.c1.c2_.c3 => (c1, c3)
So, given 2 output attributes, a tuple is returned:
m(Person.name.age(?) + Tag.score_(?))(42, 7).get.head === ("Ben", 42) // A . a1 . a2(?) + B . b1_(?) => ( a1 , a2)
- I1
Type of input attribute 1 (
age
: Int)- I2
Type of input attribute 2 (
score
: Int)- T1
Type of output group
- dsl
User-defined DSL structure modelling the composite input molecule awaiting 2 inputs
- returns
Composite input molecule awaiting 2 inputs
- Definition Classes
- Composite_In_2_Factory2
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
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()
Documentation/API for the Molecule library - a meta DSL for the Datomic database.
Manual | scalamolecule.org | Github | Forum