कल Wikibender जो this stackoverflow qestion के साथ शुरू हुआ था, MarkCC'sFinger Trees पर आलेख समाप्त हुआ।फिंगर ट्री से गुमशुदा 'कम करें' टाइपक्लास ढूंढना आलेख
लेख में वह Reduce
प्रकार वर्ग का व्यापक उपयोग करता है। वह इस टाइपक्लास के बारे में लिखता है जैसे कि यह एक बहुत आम और अक्सर उपयोग पुस्तकालय है, लेकिन मुझे इसे हैकेज पर नहीं मिल रहा है, और न ही मुझे कोड को वास्तव में समझने के लिए पर्याप्त दस्तावेज मिल सकता है।
किसी की मदद कर सकते हैं मुझे समझने क्या Reduce
typeclass कर रहा है, कैसे (-<)
और (>-)
ऑपरेटरों काम है, और क्या मुझे लेख (नीचे की नकल की) में कोड के बारे में बताना चाहिए?
कोड लिस्टिंग Finger Trees Done Right (I hope) से:
लिस्टिंग 1: नोड के लिए उदाहरण घोषणा
instance Reduce Node where
reducer (-<) (Node2 a b) z = a -< (b -< z)
reducer (-<) (Node3 a b c) z = a -< (b -< (c -< z))
reducer (>-) (Node2 b a) = (z >- b) >- a
reducer (>-) (Node3 c b a) = ((z >- c) >- b) >- a
लिस्टिंग 2: FingerTree
के लिए उदाहरण घोषणाinstance Reduce FingerTree where
reducer (-<) Empty zero = zero
reducer (-<) (Single x) zero = x -< zero
reducer (-<) Deep left mid right zero = left -<' (mid -<'' (right -<' zero))
where (-<') = reducer (-<)
(-<'') = reducer (reducer (-<))
reducel (>-) zero Empty = zero
reducel (>-) zero (Single x) = zero >- x
reducel (>-) zero (Deep left mid right) = ((zero >-' left) >-'' mid) >-' right
where (>-') = reducel (>-)
(>-'') = reducel (reducel (>-))
सूची 3: डेटा प्रकार
data Node s = Node2 s s | Node3 s s s
data FingerTree a = Empty
| Single a
| Deep (Digit a) (FingerTree (Node a)) (Digit a)
data Digit a = [ a ]