पर विचार करें द्विआधारी पेड़ों के लिए निम्नलिखित परिभाषा:एक हे लागू हास्केल
data Tree a = Nil | Node (Tree a) a (Tree a)
Foldable
उदाहरण में परिभाषित किया जा सकता है:
instance Foldable Tree where
foldr _ z Nil = z
foldr f z (Node l d r) = foldr f (f d (foldr f z l)) r
लेकिन समस्या यह है कि elem
फ़ंक्शन O(log n)
के बजाय O(n)
में चलता है। जब मैं एक कस्टम elem
लागू करने के लिए प्रयास करें:
elem x Nil = False
elem x (Node l d r)
| x == d = True
| x < d = elem x l
| otherwise = elem x r
मैं Could not deduce (Ord a) arising from a use of ‘<’
मिलता है। इस समस्या को कैसे ठीक किया जा सकता है?
इसके लायक होने के लिए: 'मोनो-ट्रैवर्सबल' में संबंधित फ़ंक्शन ['oelem'] है (https://hackage.haskell.org/package/mono-traversable-1.0.5.0/docs/Data-MonoTraversable। एचटीएमएल # वी: ओलेम), और संस्करण 1.0.5.0 के रूप में यह 'सेट' के लिए एक कुशल कार्यान्वयन है। –