From 2386bcfe7f9973c8781c92b047fe085cd9b2b718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Inf=C3=BChr?= Date: Sat, 15 Feb 2025 10:19:05 +0100 Subject: [PATCH] frontend: Start with DoubleEndedIterator --- dora-frontend/src/traitdefck.rs | 14 ++++++++++++++ pkgs/std/traits.dora | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/dora-frontend/src/traitdefck.rs b/dora-frontend/src/traitdefck.rs index 2e9a99dfa..88e29cad8 100644 --- a/dora-frontend/src/traitdefck.rs +++ b/dora-frontend/src/traitdefck.rs @@ -610,4 +610,18 @@ mod tests { } "); } + + #[test] + #[ignore] + fn assoc_type_of_super_trait() { + ok(" + trait Foo { + type Item; + } + + trait Bar: Foo { + fn f(): Self::Item; + } + "); + } } diff --git a/pkgs/std/traits.dora b/pkgs/std/traits.dora index 4546ba74f..3940ee1c8 100644 --- a/pkgs/std/traits.dora +++ b/pkgs/std/traits.dora @@ -169,6 +169,15 @@ pub trait Iterator { fn collect[T](): T where T: FromIterator[Self::Item] { T::fromIter[Self](self) } + + @TraitObjectIgnore + fn rev(): Rev[Self] where Self: DoubleEndedIterator { + Rev[Self](self) + } +} + +pub trait DoubleEndedIterator: Iterator { + // fn nextBack(): Option[Self::Item]; } pub trait IntoIterator { @@ -212,6 +221,10 @@ impl[I: Iterator, R] Iterator for Map[I, R] { } } +pub class Rev[I: Iterator] { + it: I, +} + pub trait FromIterator[A] { static fn fromIter[T](iter: T): Self where T: Iterator[Item=A]; }