equal
deleted
inserted
replaced
635 sig |
635 sig |
636 datatype 'a pred = Seq of (unit -> 'a seq) |
636 datatype 'a pred = Seq of (unit -> 'a seq) |
637 and 'a seq = Empty | Insert of 'a * 'a pred | Join of 'a pred * 'a seq |
637 and 'a seq = Empty | Insert of 'a * 'a pred | Join of 'a pred * 'a seq |
638 val yield: 'a pred -> ('a * 'a pred) option |
638 val yield: 'a pred -> ('a * 'a pred) option |
639 val yieldn: int -> 'a pred -> 'a list * 'a pred |
639 val yieldn: int -> 'a pred -> 'a list * 'a pred |
|
640 val map: ('a -> 'b) -> 'a pred -> 'b pred |
640 end; |
641 end; |
641 |
642 |
642 structure Predicate : PREDICATE = |
643 structure Predicate : PREDICATE = |
643 struct |
644 struct |
644 |
645 |
658 | SOME (v, y) => let |
659 | SOME (v, y) => let |
659 val (vs, z) = anamorph f (k - 1) y |
660 val (vs, z) = anamorph f (k - 1) y |
660 in (v :: vs, z) end) |
661 in (v :: vs, z) end) |
661 |
662 |
662 fun yieldn P = anamorph yield P; |
663 fun yieldn P = anamorph yield P; |
|
664 |
|
665 fun map f = @{code map} f; |
663 |
666 |
664 end; |
667 end; |
665 *} |
668 *} |
666 |
669 |
667 code_reserved Eval Predicate |
670 code_reserved Eval Predicate |