11prelude
22import Std.Data.Ranges.Basic
3+ import Std.Data.Ranges.General
34import Std.Data.Ranges.Slice
45import Std.Data.Iterators.Combinators.Monadic.Lineage
56
@@ -23,100 +24,37 @@ instance : RangeSize ⟨.none, .closed⟩ Nat where
2324instance : RangeSize ⟨.none, .open⟩ Nat where
2425 size r := r.upper + 1
2526
26- instance : RangeIter ⟨.closed, .closed⟩ Nat :=
27- .of fun r => Iter.repeat (init := r.lower) (· + 1 ) |>.take r.size
27+ instance : Succ? Nat where
28+ succ? n := some (n + 1 )
2829
29- instance : RangeIter ⟨.closed, .open⟩ Nat :=
30- .of fun r => Iter.repeat (init := r.lower) (· + 1 ) |>.take r.size
30+ instance (stepSize : Nat) (h) :
31+ Finite (Range.SuccIterator (α := Nat) stepSize (· ≤ n) h) Id := by
32+ unfold Range.SuccIterator
33+ sorry
3134
32- instance : RangeIter ⟨.closed, .none⟩ Nat :=
33- .of fun r => Iter.repeat (init := r.lower) (· + 1 )
35+ instance (stepSize : Nat) (h) :
36+ Finite (Range.SuccIterator (α := Nat) stepSize (· < n) h) Id := by
37+ unfold Range.SuccIterator
38+ sorry
3439
35- instance : RangeIter ⟨.open, .closed⟩ Nat :=
36- .of fun r => Iter.repeat (init := r.lower) (· + 1 ) |>.take r.size
40+ #eval "b" ∈ ("a" ,,"c" )
3741
38- instance : RangeIter ⟨.open, .open⟩ Nat :=
39- .of fun r => Iter.repeat (init := r.lower + 1 ) (· + 1 ) |>.take r.size
42+ #eval "a"
4043
41- instance : RangeIter ⟨.open, .none⟩ Nat :=
42- .of fun r => Iter.repeat (init := r.lower + 1 ) (· + 1 )
43-
44- instance : RangeIter ⟨.none, .closed⟩ Nat :=
45- .of fun r => Iter.repeat (init := 0 ) (· + 1 ) |>.take r.size
46-
47- instance : RangeIter ⟨.none, .open⟩ Nat :=
48- .of fun r => Iter.repeat (init := 0 ) (· + 1 ) |>.take r.size
49-
50- instance : RangeIter ⟨.none, .none⟩ Nat :=
51- .of fun r => Iter.repeat (init := 0 ) (· + 1 )
52-
53- instance : Membership Nat (PRange shape Nat) where
54- mem r n := match shape with
55- | ⟨sl, su, ss⟩ => (match sl with
56- | .open => r.lower < n
57- | .closed => r.lower ≤ n
58- | .none => True) ∧
59- (match su with
60- | .open => n < r.upper
61- | .closed => n ≤ r.upper
62- | .none => True)
63-
64- instance {n : Nat} {r : PRange shape Nat} : Decidable (n ∈ r) := by
65- simp only [Membership.mem]
66- split <;> split <;> infer_instance
44+ #eval ! (1 <,,<4 ).iter.toList
6745
6846#eval (2 <,,<5 ).size
6947
70- #eval (2 ,,→0 →,,10 ).iter.toList
71-
72- #eval (,,<5 ).iter.toList
48+ -- #eval (,,<5).iter.toList
7349
7450#eval 1 ∈ (1 ,,5 )
7551
76- #eval 1 ∈ (1 ,,→2 →,,5 )
52+ -- TODO:
53+ instance [Pure m] : MonadLiftT Id m where
54+ monadLift := pure
7755
7856def f : IO Unit := do
7957 for x in ((2 : Nat),,8 ) do -- ugly: For some reason, we need a type hint here
8058 IO.println x
8159
8260#synth ForIn IO (type_of% (2 ,,8 )) _ -- Note that we don't need the type hint this time
83-
84- -- Slices
85-
86-
87- instance : Sliceable shape (Array α) Nat α where
88-
89- instance [i : SliceIter ⟨sl, su, .custom Nat⟩ (Array α) Nat] : SliceIter ⟨sl, su, .default⟩ (Array α) Nat where
90- State s := i.State ⟨s.collection, ⟨s.range.lower, s.range.upper, 1 ⟩⟩
91- iter s := i.iter ⟨s.collection, ⟨s.range.lower, s.range.upper, 1 ⟩⟩
92-
93- instance : SliceIter ⟨.none, .none, .default⟩ (Array α) Nat :=
94- .of (·.collection.iter)
95-
96- instance : SliceIter ⟨.closed, .none, .default⟩ (Array α) Nat :=
97- .of (fun s => s.collection.iter.drop s.range.lower)
98-
99- instance : SliceIter ⟨.open, .none, .default⟩ (Array α) Nat :=
100- .of (fun s => s.collection.iter.drop (s.range.lower + 1 ))
101-
102- instance : SliceIter ⟨.none, .closed, .default⟩ (Array α) Nat :=
103- .of (fun s => s.collection.iter.take (s.range.upper + 1 ))
104-
105- instance : SliceIter ⟨.closed, .closed, .default⟩ (Array α) Nat :=
106- .of (fun s => s.collection.iter.take (s.range.upper + 1 ) |>.drop s.range.lower)
107-
108- instance : SliceIter ⟨.open, .closed, .default⟩ (Array α) Nat :=
109- .of (fun s => s.collection.iter.take (s.range.upper + 1 ) |>.drop (s.range.lower + 1 ))
110-
111- instance : SliceIter ⟨.none, .open, .default⟩ (Array α) Nat :=
112- .of (fun s => s.collection.iter.take s.range.upper)
113-
114- instance : SliceIter ⟨.closed, .open, .default⟩ (Array α) Nat :=
115- .of (fun s => s.collection.iter.take s.range.upper |>.drop s.range.lower)
116-
117- instance : SliceIter ⟨.open, .open, .default⟩ (Array α) Nat :=
118- .of (fun s => s.collection.iter.take s.range.upper |>.drop (s.range.lower + 1 ))
119-
120- def testArray := (0 ,,<10 ).iter.toArray
121-
122- #eval testArray[[2 <,,]].iter.toList
0 commit comments