{"body":"class Actual {\n        has Iterator    $.rest is required\n}\n\nclass TurnOffIterator does Iterator {\n\n        has Iterator    $.orig;\n        has Iterator    $!actual;\n        has             $.cond          = { True };\n\n        method pull-one {\n                with $!orig {\n                        my \\r = .pull-one;\n                        say \"orig: \", r;\n                        return r if r =:= IterationEnd or r !~~ Actual;\n                        $!orig = Nil;\n                        $!actual = r.rest;\n                        return self.pull-one\n                } else {\n                        my \\r = $!actual.pull-one;\n                        say \"actual: \", r;\n                        return r if r =:= IterationEnd;\n                        return r if r ~~ $!cond;\n                        IterationEnd but Actual.new: :rest($!actual)\n                }\n        }\n}\n\nrole CondSeq {\n        method take-while($cond) {\n                my $iter = $.iterator;\n                Seq.new(TurnOffIterator.new: :orig(\n                        $iter ~~ TurnOffIterator\n                                ?? $iter\n                                !! class :: does Iterator {\n                                        method pull-one { Actual.new: :rest($iter) }\n                                }.new \n                        ), :$cond, :take) but CondSeq\n        }               \n}","name":"","extension":"txt","url":"https://www.irccloud.com/pastebin/XbfFizxy","modified":1531871149,"id":"XbfFizxy","size":1376,"lines":40,"own_paste":false,"theme":"","date":1531871149}