Stack 0.1.0 → 0.2.0
raw patch · 2 files changed
+32/−13 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.Stack: stackPeek :: Stack a -> a
+ Data.Stack: stackPeek :: Stack a -> Maybe a
- Data.Stack: stackPop :: Stack a -> (Stack a, a)
+ Data.Stack: stackPop :: Stack a -> Maybe (Stack a, a)
Files
- Stack.cabal +1/−1
- src/Data/Stack.hs +31/−12
Stack.cabal view
@@ -1,5 +1,5 @@ name: Stack-version: 0.1.0+version: 0.2.0 synopsis: Stack data structure type description: Please see README.md homepage: https://en.wikipedia.org/wiki/Stack_(abstract_data_type)
src/Data/Stack.hs view
@@ -1,11 +1,13 @@ -- | Abstract Stack data type+--+-- <https://en.wikipedia.org/wiki/Stack_(abstract_data_type)> module Data.Stack ( Stack, stackNew,- stackIsEmpty, stackPush, stackPeek, stackPop,+ stackIsEmpty, stackSize, ) where@@ -17,24 +19,41 @@ stackNew :: Stack a stackNew = Stack [] --- | Test if stack is empty-stackIsEmpty :: Stack a -> Bool-stackIsEmpty (Stack []) = True-stackIsEmpty (Stack _) = False- -- | Push item onto Stack+--+-- > (∀x)(∀s)(stackPop (stackPush s x) == Just (s,x)) stackPush :: Stack a -> a -> Stack a stackPush (Stack items) item = Stack (item : items) -- | Pop most recently added item without removing from the Stack-stackPeek :: Stack a -> a-stackPeek (Stack items) = head items+--+-- > stackPeek stackNew == Nothing+-- > (∀x)(∀s)(stackPeek (stackPush s x) == Just x)+-- > (∀s)(stackPeek s == fmap snd (stackPop s))+stackPeek :: Stack a -> Maybe a+stackPeek (Stack []) = Nothing+stackPeek (Stack items) = Just (head items) --- | Pop most recently item from Stack-stackPop :: Stack a -> (Stack a, a)-stackPop (Stack items) = (Stack (tail items), stackPeek (Stack items))+-- | Pop most recently added item from Stack+--+-- > stackPop stackNew == Nothing+-- > (∀x)(∀s)(stackPop (stackPush s x) == Just (s,x))+stackPop :: Stack a -> Maybe (Stack a, a)+stackPop (Stack []) = Nothing+stackPop (Stack items) = Just (Stack (tail items), head items) +-- | Test if stack is empty+--+-- > stackIsEmpty stackNew == True+-- > (∀x)(∀s)(stackIsEmpty (stackPush s x) == True)+-- > (∀s)((stackSize s == 0) ⇔ (stackIsEmpty s == True))+stackIsEmpty :: Stack a -> Bool+stackIsEmpty (Stack []) = True+stackIsEmpty (Stack _) = False+ -- | Compute number of elements contained in the Stack+--+-- > stackSize stackNew == 0+-- > (∀x)(∀s)((stackSize s == n) ⇒ (stackSize (stackPush s x) == n+1)) stackSize :: Stack a -> Int stackSize (Stack items) = length items-