data Stack a   = EmptyStk | Stk a (Stack a)

I find it amusing that the book defined a type that is exactly isomorphic to the standard list (EmptyStk === [] and Stk === (:)). I guess it's just for clarity?

On Thu, Feb 4, 2010 at 12:29 PM, Casey Hawthorne <caseyh@istar.ca> wrote:
On Thu, 4 Feb 2010 09:07:28 -0800 (PST), you wrote:

>Can't find a Stack datatype on Hoogle? Where should I look?
>
>Michael
>


From "Algorithms: a functional programming approach"
Second edition
Fethi Rabhi
Guy Lapalme


data Stack a                    = EmptyStk
                                                                       | Stk a (Stack a)

push x s                                        = Stk x s

pop EmptyStk                    = error "pop from an empty stack"
pop (Stk _ s)           = s

top EmptyStk                    = error "top from an empty stack"
top (Stk x _)           = x

emptyStack                              = EmptyStk

stackEmpty EmptyStk = True
stackEmpty _                            = False




newtype Stack a         = Stk [a]

push x (Stk xs)         = Stk (x:xs)

pop (Stk [])                    = error "pop from an empty stack"
pop (Stk (_:xs))        = Stk xs

top (Stk [])                    = error "top from an empty stack"
top (Stk (x:_))         = x

emptyStack                              = Stk []

stackEmpty (Stk []) = True
stackEmpty (Stk _ ) = False


--
Regards,
Casey
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe