@@ -21,8 +21,6 @@ object Test {
21
21
}
22
22
}
23
23
24
- type Id [A ] = A
25
-
26
24
trait Producer [A ] { self =>
27
25
type St
28
26
val card : Cardinality
@@ -356,10 +354,12 @@ object Test {
356
354
}
357
355
else {
358
356
~ currentAdvance.update(' {oldAdvance})
357
+ oldAdvance(_)
359
358
}
360
- ~ currentAdvance.update(' {newAdvance})
361
- newAdvance(_)
362
359
}}
360
+
361
+ ~ currentAdvance.update(' {newAdvance})
362
+ newAdvance(_)
363
363
})
364
364
}
365
365
case nested : Nested [A , bt] =>
@@ -379,7 +379,7 @@ object Test {
379
379
Var (' { (_ : Unit ) => ()}){ advf => {
380
380
Var (' { true }) { hasNext => {
381
381
Var (' { null .asInstanceOf [A ] }) { curr => ' {
382
- val adv : Unit => Unit = { _ =>
382
+ def adv : Unit => Unit = { _ =>
383
383
~ hasNext.update(producer.hasNext(st))
384
384
if (~ hasNext.get) {
385
385
~ producer.step(st, el => makeAdvanceFunction[Expr [A ]](advf, (a => curr.update(a)), nestedf(el)))
@@ -395,9 +395,19 @@ object Test {
395
395
}})
396
396
}
397
397
398
- def step (st : St , k : Expr [A ] => Expr [Unit ]): Expr [Unit ] = ???
398
+ def step (st : St , k : Expr [A ] => Expr [Unit ]): Expr [Unit ] = {
399
+ val (flag, current, advf) = st
400
+ var el : Var [A ] = current
401
+ val f : Expr [Unit => Unit ] = advf.get
402
+
403
+ f('())
404
+ k((el.get))
405
+ }
399
406
400
- def hasNext (st : St ): Expr [Boolean ] = ???
407
+ def hasNext (st : St ): Expr [Boolean ] = {
408
+ val (flag, _, _) = st
409
+ flag.get
410
+ }
401
411
}
402
412
}
403
413
}
@@ -460,9 +470,7 @@ object Test {
460
470
}
461
471
462
472
def zip [B : Type , C : Type ](f : (Expr [A ] => Expr [B ] => Expr [C ]), stream2 : Stream [B ]): Stream [C ] = {
463
-
464
473
val Stream (stream_b) = stream2
465
-
466
474
Stream (mapRaw[(Expr [A ], Expr [B ]), Expr [C ]]((t => k => ' { ~ k(f(t._1)(t._2)) }), zipRaw[A , Expr [B ]](stream, stream_b)))
467
475
}
468
476
}
@@ -548,6 +556,11 @@ object Test {
548
556
.zip(((a : Expr [Int ]) => (b : Expr [Int ]) => ' { ~ a + ~ b }), Stream .of(' {Array (1 , 2 , 3 )}) )
549
557
.fold(' {0 }, ((a : Expr [Int ], b : Expr [Int ]) => ' { ~ a + ~ b }))
550
558
559
+ def test10 () = Stream
560
+ .of(' {Array (1 , 2 , 3 )}).flatMap((d : Expr [Int ]) => Stream .of(' {Array (1 , 2 , 3 )}).map((dp : Expr [Int ]) => ' { ~ d + ~ dp }))
561
+ .zip(((a : Expr [Int ]) => (b : Expr [Int ]) => ' { ~ a + ~ b }), Stream .of(' {Array (1 , 2 , 3 )}).flatMap((d : Expr [Int ]) => Stream .of(' {Array (1 , 2 , 3 )}).map((dp : Expr [Int ]) => ' { ~ d + ~ dp })) )
562
+ .fold(' {0 }, ((a : Expr [Int ], b : Expr [Int ]) => ' { ~ a + ~ b }))
563
+
551
564
def main (args : Array [String ]): Unit = {
552
565
println(test1().run)
553
566
println
@@ -566,6 +579,8 @@ object Test {
566
579
println(test8().run)
567
580
println
568
581
println(test9().run)
582
+ println
583
+ println(test10().run)
569
584
}
570
585
}
571
586
0 commit comments