1 | module Data.BoundedQueue1.Unsized
3 | import Data.BoundedQueue.Unsized.Internal
4 | import Data.BoundedQueue1.Unsized.Internal
5 | import Data.Seq.Unsized
7 | import Data.Linear.Ref1
8 | import Derive.Prelude
10 | %language ElabReflection
17 | -> F1 s (BoundedQueue1 s a)
19 | let bq # t := ref1 ( MkBoundedQueue Data.Seq.Unsized.empty
23 | in (MkBoundedQueue1 bq) # t
27 | null : BoundedQueue1 s a
29 | null (MkBoundedQueue1 bq) t =
30 | let (MkBoundedQueue _ _ s) # t := read1 bq t
40 | fromList : (n : Nat)
42 | -> F1 s (BoundedQueue1 s a)
44 | let vs' := take n vs
45 | bq # t := ref1 ( MkBoundedQueue (Data.Seq.Unsized.fromList vs')
47 | (Prelude.List.length vs')
49 | in (MkBoundedQueue1 bq) # t
54 | fromSnocList : (n : Nat)
55 | -> (sv : SnocList a)
56 | -> F1 s (BoundedQueue1 s a)
57 | fromSnocList n sv t =
58 | let sv' := take n $
cast sv
59 | bq # t := ref1 ( MkBoundedQueue (Data.Seq.Unsized.fromList sv')
61 | (Prelude.List.length sv')
63 | in (MkBoundedQueue1 bq) # t
68 | toList : BoundedQueue1 s a
70 | toList (MkBoundedQueue1 bq) t =
71 | let (MkBoundedQueue q _ _) # t := read1 bq t
77 | toSnocList : BoundedQueue1 s a
78 | -> F1 s (SnocList a)
79 | toSnocList (MkBoundedQueue1 bq) t =
80 | let (MkBoundedQueue q _ _) # t := read1 bq t
81 | in (cast $
toList q) # t
87 | enqueue : BoundedQueue1 s a
90 | enqueue (MkBoundedQueue1 bq) v t =
92 | (\(MkBoundedQueue q l s) =>
95 | (MkBoundedQueue q l s, False)
97 | (MkBoundedQueue (q `snoc` v) l (s `plus` 1), True)
102 | dequeue : BoundedQueue1 s a
104 | dequeue (MkBoundedQueue1 bq) t =
106 | (\(MkBoundedQueue q l s) =>
109 | (MkBoundedQueue q l s, Nothing)
111 | ( MkBoundedQueue q' l (s `minus` 1)
122 | -> BoundedQueue1 s a
124 | prepend x (MkBoundedQueue1 bq) t =
126 | (\(MkBoundedQueue q l s) =>
129 | (MkBoundedQueue q l s, False)
131 | (MkBoundedQueue (x `cons` q) l (s `plus` 1), True)
142 | peekOldest : BoundedQueue1 s a
143 | -> F1 s (Maybe (a, BoundedQueue1 s a))
144 | peekOldest (MkBoundedQueue1 bq) t =
145 | let (MkBoundedQueue q l s) # t := read1 bq t
150 | Just (v, MkBoundedQueue1 bq) # t
154 | length : BoundedQueue1 s a
156 | length (MkBoundedQueue1 bq) t =
157 | let (MkBoundedQueue _ _ s) # t := read1 bq t