@@ -18,102 +18,105 @@ import wdl.transforms.biscayne.linking.expression.types.BiscayneTypeEvaluators._
1818
1919package object types {
2020 implicit val expressionTypeEvaluator : TypeEvaluator [ExpressionElement ] = new TypeEvaluator [ExpressionElement ] {
21- override def evaluateType (a : ExpressionElement , linkedValues : Map [UnlinkedConsumedValueHook , GeneratedValueHandle ])(
22- implicit typeEvaluator : TypeEvaluator [ExpressionElement ]
21+ override def evaluateType (a : ExpressionElement ,
22+ linkedValues : Map [UnlinkedConsumedValueHook , GeneratedValueHandle ],
23+ typeAliases : Map [String , WomType ]
24+ )(implicit
25+ typeEvaluator : TypeEvaluator [ExpressionElement ]
2326 ): ErrorOr [WomType ] =
2427 a match {
2528 // Literals:
26- case a : PrimitiveLiteralExpressionElement => a.evaluateType(linkedValues)(typeEvaluator)
27- case a : NoneLiteralElement .type => a.evaluateType(linkedValues)(typeEvaluator)
29+ case a : PrimitiveLiteralExpressionElement => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
30+ case a : NoneLiteralElement .type => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
2831
29- case a : StringLiteral => a.evaluateType(linkedValues)(typeEvaluator)
30- case a : StringExpression => a.evaluateType(linkedValues)(typeEvaluator)
31- case a : ObjectLiteral => a.evaluateType(linkedValues)(typeEvaluator)
32- case a : StructLiteral => a.evaluateType(linkedValues)(typeEvaluator)
33- case a : MapLiteral => a.evaluateType(linkedValues)(typeEvaluator)
34- case a : ArrayLiteral => a.evaluateType(linkedValues)(typeEvaluator)
35- case a : PairLiteral => a.evaluateType(linkedValues)(typeEvaluator)
32+ case a : StringLiteral => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
33+ case a : StringExpression => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
34+ case a : ObjectLiteral => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
35+ case a : StructLiteral => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
36+ case a : MapLiteral => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
37+ case a : ArrayLiteral => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
38+ case a : PairLiteral => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
3639
3740 // Lookups and member accesses:
38- case a : IdentifierLookup => a.evaluateType(linkedValues)(typeEvaluator)
39- case a : ExpressionMemberAccess => a.evaluateType(linkedValues)(typeEvaluator)
40- case a : IdentifierMemberAccess => a.evaluateType(linkedValues)(typeEvaluator)
41- case a : IndexAccess => a.evaluateType(linkedValues)(typeEvaluator)
41+ case a : IdentifierLookup => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
42+ case a : ExpressionMemberAccess => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
43+ case a : IdentifierMemberAccess => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
44+ case a : IndexAccess => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
4245
4346 // Unary operators:
44- case a : UnaryNegation => a.evaluateType(linkedValues)(typeEvaluator)
45- case a : UnaryPlus => a.evaluateType(linkedValues)(typeEvaluator)
46- case a : LogicalNot => a.evaluateType(linkedValues)(typeEvaluator)
47+ case a : UnaryNegation => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
48+ case a : UnaryPlus => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
49+ case a : LogicalNot => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
4750
4851 // Binary operators (at some point we might want to split these into separate cases):
49- case a : LogicalOr => a.evaluateType(linkedValues)(typeEvaluator)
50- case a : LogicalAnd => a.evaluateType(linkedValues)(typeEvaluator)
51- case a : Equals => a.evaluateType(linkedValues)(typeEvaluator)
52- case a : NotEquals => a.evaluateType(linkedValues)(typeEvaluator)
53- case a : LessThan => a.evaluateType(linkedValues)(typeEvaluator)
54- case a : LessThanOrEquals => a.evaluateType(linkedValues)(typeEvaluator)
55- case a : GreaterThan => a.evaluateType(linkedValues)(typeEvaluator)
56- case a : GreaterThanOrEquals => a.evaluateType(linkedValues)(typeEvaluator)
57- case a : Add => a.evaluateType(linkedValues)(typeEvaluator)
58- case a : Subtract => a.evaluateType(linkedValues)(typeEvaluator)
59- case a : Multiply => a.evaluateType(linkedValues)(typeEvaluator)
60- case a : Divide => a.evaluateType(linkedValues)(typeEvaluator)
61- case a : Remainder => a.evaluateType(linkedValues)(typeEvaluator)
52+ case a : LogicalOr => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
53+ case a : LogicalAnd => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
54+ case a : Equals => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
55+ case a : NotEquals => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
56+ case a : LessThan => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
57+ case a : LessThanOrEquals => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
58+ case a : GreaterThan => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
59+ case a : GreaterThanOrEquals => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
60+ case a : Add => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
61+ case a : Subtract => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
62+ case a : Multiply => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
63+ case a : Divide => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
64+ case a : Remainder => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
6265
63- case a : TernaryIf => a.evaluateType(linkedValues)(typeEvaluator)
66+ case a : TernaryIf => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
6467
6568 // Engine functions:
66- case a : ReadLines => a.evaluateType(linkedValues)(typeEvaluator)
67- case a : ReadTsv => a.evaluateType(linkedValues)(typeEvaluator)
68- case a : ReadMap => a.evaluateType(linkedValues)(typeEvaluator)
69- case a : ReadObject => a.evaluateType(linkedValues)(typeEvaluator)
70- case a : ReadObjects => a.evaluateType(linkedValues)(typeEvaluator)
71- case a : ReadJson => a.evaluateType(linkedValues)(typeEvaluator)
72- case a : ReadInt => a.evaluateType(linkedValues)(typeEvaluator)
73- case a : ReadString => a.evaluateType(linkedValues)(typeEvaluator)
74- case a : ReadFloat => a.evaluateType(linkedValues)(typeEvaluator)
75- case a : ReadBoolean => a.evaluateType(linkedValues)(typeEvaluator)
76- case a : WriteLines => a.evaluateType(linkedValues)(typeEvaluator)
77- case a : WriteTsv => a.evaluateType(linkedValues)(typeEvaluator)
78- case a : WriteMap => a.evaluateType(linkedValues)(typeEvaluator)
79- case a : WriteObject => a.evaluateType(linkedValues)(typeEvaluator)
80- case a : WriteObjects => a.evaluateType(linkedValues)(typeEvaluator)
81- case a : WriteJson => a.evaluateType(linkedValues)(typeEvaluator)
82- case a : Range => a.evaluateType(linkedValues)(typeEvaluator)
83- case a : Transpose => a.evaluateType(linkedValues)(typeEvaluator)
84- case a : Length => a.evaluateType(linkedValues)(typeEvaluator)
85- case a : Flatten => a.evaluateType(linkedValues)(typeEvaluator)
86- case a : Prefix => a.evaluateType(linkedValues)(typeEvaluator)
87- case a : Suffix => a.evaluateType(linkedValues)(typeEvaluator)
88- case a : SelectFirst => a.evaluateType(linkedValues)(typeEvaluator)
89- case a : SelectAll => a.evaluateType(linkedValues)(typeEvaluator)
90- case a : Defined => a.evaluateType(linkedValues)(typeEvaluator)
91- case a : Floor => a.evaluateType(linkedValues)(typeEvaluator)
92- case a : Ceil => a.evaluateType(linkedValues)(typeEvaluator)
93- case a : Round => a.evaluateType(linkedValues)(typeEvaluator)
94- case a : Glob => a.evaluateType(linkedValues)(typeEvaluator)
95- case a : Quote => a.evaluateType(linkedValues)(typeEvaluator)
96- case a : SQuote => a.evaluateType(linkedValues)(typeEvaluator)
97- case a : Size => a.evaluateType(linkedValues)(typeEvaluator)
98- case a : Basename => a.evaluateType(linkedValues)(typeEvaluator)
69+ case a : ReadLines => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
70+ case a : ReadTsv => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
71+ case a : ReadMap => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
72+ case a : ReadObject => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
73+ case a : ReadObjects => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
74+ case a : ReadJson => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
75+ case a : ReadInt => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
76+ case a : ReadString => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
77+ case a : ReadFloat => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
78+ case a : ReadBoolean => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
79+ case a : WriteLines => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
80+ case a : WriteTsv => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
81+ case a : WriteMap => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
82+ case a : WriteObject => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
83+ case a : WriteObjects => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
84+ case a : WriteJson => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
85+ case a : Range => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
86+ case a : Transpose => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
87+ case a : Length => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
88+ case a : Flatten => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
89+ case a : Prefix => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
90+ case a : Suffix => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
91+ case a : SelectFirst => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
92+ case a : SelectAll => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
93+ case a : Defined => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
94+ case a : Floor => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
95+ case a : Ceil => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
96+ case a : Round => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
97+ case a : Glob => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
98+ case a : Quote => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
99+ case a : SQuote => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
100+ case a : Size => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
101+ case a : Basename => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
99102
100- case a : Zip => a.evaluateType(linkedValues)(typeEvaluator)
101- case a : Cross => a.evaluateType(linkedValues)(typeEvaluator)
102- case a : Unzip => a.evaluateType(linkedValues)(typeEvaluator)
103+ case a : Zip => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
104+ case a : Cross => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
105+ case a : Unzip => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
103106
104- case a : SubPosix => a.evaluateType(linkedValues)(typeEvaluator)
107+ case a : SubPosix => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
105108
106- case a : StdoutElement .type => a.evaluateType(linkedValues)(typeEvaluator)
107- case a : StderrElement .type => a.evaluateType(linkedValues)(typeEvaluator)
109+ case a : StdoutElement .type => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
110+ case a : StderrElement .type => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
108111
109- case a : Keys => a.evaluateType(linkedValues)(typeEvaluator)
110- case a : AsMap => a.evaluateType(linkedValues)(typeEvaluator)
111- case a : AsPairs => a.evaluateType(linkedValues)(typeEvaluator)
112- case a : CollectByKey => a.evaluateType(linkedValues)(typeEvaluator)
113- case a : Sep => a.evaluateType(linkedValues)(typeEvaluator)
112+ case a : Keys => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
113+ case a : AsMap => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
114+ case a : AsPairs => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
115+ case a : CollectByKey => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
116+ case a : Sep => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
114117
115- case a : Min => a.evaluateType(linkedValues)(typeEvaluator)
116- case a : Max => a.evaluateType(linkedValues)(typeEvaluator)
118+ case a : Min => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
119+ case a : Max => a.evaluateType(linkedValues, typeAliases )(typeEvaluator)
117120
118121 case other =>
119122 s " Unable to process ${other.getClass.getSimpleName}: No evaluateType exists for that type. " .invalidNel
0 commit comments