I don't know exactly what types you have as base types in your implementation, but here's a small code fragment that of what I had in mind.

data Value = D Double | S String | B Bool

type Stack = [Value]

-- Add top stack elements
plus :: Stack -> Stack
plus (D x : D y : vs) = D (x+y) : vs
plus (  _ :   _ :  _) = error "Bad operands to plus"
plus                _ = error "Not enough operands on stack"

equal :: Stack -> Stack
equal (D x : D y : vs) = B (x == y) : vs
equal (S x : S y : vs) = B (x == y) : vs
equal (B x : B y : vs) = B (x == y) : vs
equal (  _ :   _ :  _) = error "Bad operands to equal"
equal                _ = error "Not enough operands on stack"

        -- Lennart

On Aug 21, 2006, at 04:42 , Gene A wrote:

Lennart and all,

On 8/19/06, Lennart Augustsson <[EMAIL PROTECTED]> wrote:
There are much better ways than storing strings on the stack.
Like using a data type with constructors for the different types that
you can store.

        -- Lennart

Off topic, but .... this is important info for me!
Okay then, by doing that you can define a new type that "encodes" the
other types.. such that you can actually end up storing the different
types such as Int, Integer,Real, String, etc into a list ..... using
this new type to so that even though you are in effect storing
differing types to a list.. they are actually of the same type and
thus legal... without doing an explicit bunch of "read"/"show"
combinations.. to actually convert.. .... like Num for example... and
being able to use +,* on any of the numeric types... but can you have
a list of type [Num] ?? I thought that it had to be the base types of
Int, Integer, Float, Double  etc..  No?

thanks,
gene
_______________________________________________
Haskell-Cafe mailing list
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

Reply via email to