Default implementation of type class member function not working as expected.

Hi all, I have a typeclass, which defines the following two member functions: (t is a Rose Tree.) getCompNodes :: t -> [CompNode a] getAllCompNodes :: t -> [CompNode a] getAllCompNodes t = getCompNodes t ++ (concatMap getAllCompNodes (subForest t)) The first one must be defined uniquely by each instance, but the second never needs a unique definition. So, I provided its implementation in the typeclass definition, as shown. However, I don’t get the expected behavior! If I copy and paste the code, above, for getAllCompNodes into my instance definition, then I get the expected results. Does anyone know why this is happening? Thanks, -db

On Tue, May 20, 2014 at 9:34 PM, David Banas
The first one must be defined uniquely by each instance, but the second never needs a unique definition. So, I provided its implementation in the typeclass definition, as shown.
This makes no sense; if there's only one definition, then define it *outside* the typeclass. A definition *inside* the class is there to be overridden by specific instances that need to do so. That said, you haven't said what you are getting that is not expected, and there isn't enough information here to really say what might or might not be going on. -- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
participants (2)
-
Brandon Allbery
-
David Banas