On 1/25/07, Brandon S. Allbery KF8NH <[EMAIL PROTECTED]> wrote:

I'm probably missing something, but:

(a) Why not:

data ANode = Branch { name :: String, description :: String,
children :: [AnyNode] }
            | Leaf { name :: String, value :: String } -- this reuse
is legal
-- leaving Node available if you still need it


Would I be able to this?

  getLeaves :: ANode -> [Leaf]

If not, is it the case that people generally don't bother and do this
instead?

  getLeaves :: ANode -> [ANode]

(b) I think you *can* do this with a class:

class Node a where
   name :: a -> String

data Branch = Branch { brName :: String, ... }
data Leaf = Leaf { lName :: String, ... }

instance Node Branch where
   name = brName

instance Node Leaf where
   name = lName


Okay, though it's a lot more wordy.

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

Reply via email to