@@ -119,20 +119,21 @@ isFull :: Deque a %1-> (Ur Bool, Deque a)
119119isFull d =
120120 size d & \ (Ur sz, Deque len ptr arr) -> (Ur (len == sz), Deque len ptr arr)
121121
122- peek :: HasCallStack => Face -> Deque a % 1 -> (Ur a , Deque a )
123- peek _ (Deque 0 _ arr) = error " Peeking a zero-length deque. " $ arr
122+ peek :: HasCallStack => Face -> Deque a % 1 -> (Ur ( Maybe a ) , Deque a )
123+ peek _ (Deque 0 p arr) = ( Ur Nothing , Deque 0 p arr)
124124peek face (Deque len ptr@ (Ptr p) arr) = case face of
125- Front -> Array. read arr p & \ (val, arr0) -> (val, Deque len ptr arr0)
125+ Front ->
126+ Array. read arr p & \ (Ur a, arr0) -> (Ur (Just a), Deque len ptr arr0)
126127 Back -> Array. size arr & \ (Ur sz, arr0) ->
127- Array. read arr0 (backPtr 0 len sz ptr) & \ (val , arr1) ->
128- (val , Deque len ptr arr1)
128+ Array. read arr0 (backPtr 0 len sz ptr) & \ (Ur a , arr1) ->
129+ (Ur ( Just a) , Deque len ptr arr1)
129130
130131-- | View the top of the left queue
131- peekFront :: HasCallStack => Deque a % 1 -> (Ur a , Deque a )
132+ peekFront :: HasCallStack => Deque a % 1 -> (Ur ( Maybe a ) , Deque a )
132133peekFront = peek Front
133134
134135-- | View the top of the right queue
135- peekBack :: HasCallStack => Deque a % 1 -> (Ur a , Deque a )
136+ peekBack :: HasCallStack => Deque a % 1 -> (Ur ( Maybe a ) , Deque a )
136137peekBack = peek Back
137138
138139
@@ -159,22 +160,22 @@ pushFront = push Front
159160pushBack :: HasCallStack => a -> Deque a % 1 -> Deque a
160161pushBack = push Back
161162
162- pop :: HasCallStack => Face -> Deque a % 1 -> (Ur a , Deque a )
163- pop _ (Deque 0 _ arr) = error " Popping from an empty deque " $ arr
163+ pop :: HasCallStack => Face -> Deque a % 1 -> (Ur ( Maybe a ) , Deque a )
164+ pop _ (Deque 0 p arr) = ( Ur Nothing , Deque 0 p arr)
164165pop face (Deque len ptr@ (Ptr p) arr) = case face of
165166 Front -> Array. size arr & \ (Ur sz, arr0) ->
166- Array. read arr0 p & \ (val , arr1) ->
167- (val , Deque (len- 1 ) (Ptr $ nextPtr sz ptr) arr1)
167+ Array. read arr0 p & \ (Ur a , arr1) ->
168+ (Ur ( Just a) , Deque (len- 1 ) (Ptr $ nextPtr sz ptr) arr1)
168169 Back -> Array. size arr & \ (Ur sz, arr0) ->
169- Array. read arr0 (backPtr 0 len sz ptr) & \ (val , arr1) ->
170- (val , Deque (len- 1 ) ptr arr1)
170+ Array. read arr0 (backPtr 0 len sz ptr) & \ (Ur a , arr1) ->
171+ (Ur ( Just a) , Deque (len- 1 ) ptr arr1)
171172
172173-- | Remove the last added element from the left queue
173- popFront :: HasCallStack => Deque a % 1 -> (Ur a , Deque a )
174+ popFront :: Deque a % 1 -> (Ur ( Maybe a ) , Deque a )
174175popFront = pop Front
175176
176177-- | Remove the last added element from the right queue
177- popBack :: HasCallStack => Deque a % 1 -> (Ur a , Deque a )
178+ popBack :: Deque a % 1 -> (Ur ( Maybe a ) , Deque a )
178179popBack = pop Back
179180
180181-- Note: We can't use a Prelude.Functor nor a Data.Functor
0 commit comments