14 | record Queue1 a where
20 | singleton : a -> Queue1 a
21 | singleton = MkQueue [<] . singleton
24 | add : a -> Queue1 a -> Queue1 a
25 | add x = { right $= (:< x) }
29 | pureLeftsFromSnoc : SnocList a -> Maybe $
Queue1 a
30 | pureLeftsFromSnoc = map (MkQueue [<]) . fromList . cast
33 | remove : Queue1 a -> (a, Lazy (Maybe $
Queue1 a))
34 | remove $
MkQueue r (head ::: l) = (head,) $
delay $
case l of
35 | [] => pureLeftsFromSnoc r
36 | (x::xs) => Just $
MkQueue r (x:::xs)
39 | Functor Queue1 where
40 | map f = { left $= map f, right $= map f }
43 | filter : (a -> Bool) -> Queue1 a -> Maybe $
Queue1 a
44 | filter f $
MkQueue r l = do
45 | let filteredR = filter f r
46 | let Just filteredL = fromList $
filter f $
toList l
47 | | Nothing => pureLeftsFromSnoc filteredR
48 | Just $
MkQueue filteredR filteredL
52 | toList1 : Queue1 a -> List1 a
53 | toList1 $
MkQueue r l = l `appendl` cast r