पूर्णता के लिए, मुझे एक "बदसूरत" वैकल्पिक दृष्टिकोण जोड़ना चाहिए, जो कि हालांकि बुनियादी है।
स्मरण करो कि Maybe aएक प्रकार जिसका मान रूप Nothingया Just xकुछ के लिए है x :: a।
इसलिए, ऊपर दिए गए मूल्यों को फिर से परिभाषित करके, हम Maybe aएक "प्रतिबंधित सूची प्रकार" के रूप में मान सकते हैं, जहां सूचियों में शून्य या एक तत्व हो सकता है।
अब, (a, Maybe a)बस एक और तत्व जोड़ता है, इसलिए यह एक "सूची प्रकार" है जहां सूचियों में एक ( (x1, Nothing)) या दो ( (x1, Just x2)) तत्व हो सकते हैं।
इसलिए, Maybe (a, Maybe a)एक "सूची प्रकार" है जहां सूचियों में शून्य ( Nothing), एक ( Just (x1, Nothing)), या दो ( (Just (x1, Just x2)) तत्व हो सकते हैं।
अब आपको समझना चाहिए कि आगे कैसे बढ़ना है। मुझे फिर से तनाव दें कि यह उपयोग करने के लिए एक सुविधाजनक समाधान नहीं है, लेकिन यह (आईएमओ) वैसे भी इसे समझने के लिए एक अच्छा व्यायाम है।
हास्केल की कुछ उन्नत सुविधाओं का उपयोग करके, हम एक प्रकार के परिवार का उपयोग करके उपरोक्त को सामान्य कर सकते हैं:
type family List (n :: Nat) (a :: Type) :: Type where
List 0 a = ()
List n a = Maybe (a, List (n-1) a)