
What's "going on" is that data structures in Haskell are immutable. Thus,
when you call "push" on a stack, you get a new stack with the new element
pushed onto it, and the original stack is left un-touched.
On Fri, Feb 5, 2010 at 10:56 AM, michael rice
Not using Stack for anything, just trying to understand how things can be done in Haskell.
To that end...
What's going on here? I'm not even calling function POP.
Michael
======================
module Data.Stack (Stack, emptyStack, isEmptyStack, push, pop, top) where
newtype Stack a = Stack [a]
emptyStack = Stack [] isEmptyStack (Stack xs) = null xs push x (Stack xs) = Stack (x:xs) pop (Stack (_:xs)) = Stack xs top (Stack (x:_)) = x
======================
[michael@localhost ~]$ ghci Stack.hs GHCi, version 6.10.4: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer ... linking ... done. Loading package base ... linking ... done. [1 of 1] Compiling Data.Stack ( Stack.hs, interpreted ) Ok, modules loaded: Data.Stack. *Data.Stack> let s1 = emptyStack *Data.Stack> top (push 1 s1) 1 *Data.Stack> top (push 2 s1) 2 *Data.Stack> top (push 3 s1) 3 *Data.Stack> let s2 = pop s1 *Data.Stack> top s2 *** Exception: Stack.hs:8:0-28: Non-exhaustive patterns in function pop
*Data.Stack>
--- On *Fri, 2/5/10, Casey Hawthorne
* wrote: From: Casey Hawthorne
Subject: Re: [Haskell-cafe] Stack ADT? To: haskell-cafe@haskell.org Date: Friday, February 5, 2010, 10:36 AM You could also implement stacks with mutable data structures, e.g. STArray, etc.
What do you want to use a stack ADT for?
Usually stacks are discussed for pedagogical purposes but usually recursion is used if you need a stack like operation. -- Regards, Casey _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mc/compose?to=Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe