[Haskell-cafe] Default implementation of type class member function not working as expected.
hsyl20 at gmail.com
Wed May 21 18:04:34 UTC 2014
Are you trying to do something like that?
data Rose a = Rose a [Rose a]
class TreeLike t where
getNodes :: t a -> [t a]
getAllNodes :: t a -> [t a]
getAllNodes t = getNodes t ++ (concatMap getAllNodes (getNodes t))
instance TreeLike Rose where
getNodes (Rose _ xs) = xs
2014-05-21 15:12 GMT+02:00 David Banas <capn.freako at gmail.com>:
> That worked, Brandon; thanks!
> Gurus, I’d still love to understand exactly what I broke, trying to do it
> the other way. Any thoughts?
> On May 21, 2014, at 12:14 AM, haskell-cafe-request at haskell.org wrote:
> if there's only one definition, then define it
> *outside* the typeclass.
> 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.
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe