2013-04-24 7 views
6

क्या आप कृपया मुझे बता सकते हैं कि एनम कक्षा के लिए हास्केल व्युत्पन्न तंत्र का कोई एक्सटेंशन है? मेरा मतलब है कि `'न्यूलरी कन्स्ट्रक्टर' केस के अलावा बहुत सी उचित परिस्थितियां हैं। क्या इस विषय पर कोई काम है?हास्केल में जीएडीटी का गणन

उत्तर

4

क्या आपको वास्तव में जीएडीटी की आवश्यकता है? या आप केवल एक नुकीले रचनाकारों के साथ एक सादा गणना प्रकार पर प्रतिबंध उठाना चाहते हैं? यदि उत्तरार्द्ध, तो विकल्प हैं। एक जीएचसी के Generic तंत्र का उपयोग एक उपयुक्त जेनेरिक गणना वर्ग के कार्यान्वयन के साथ करना है। यह generic-deriving पैकेज में उपलब्ध है।

{-# LANGUAGE DeriveGeneriC#-} 
import Generics.Deriving 

data Tree a = Leaf a | Node (Tree a) (Tree a) 
    deriving (Show, Generic) 

instance GEnum Bool 
instance GEnum a => GEnum (Tree a) 

test :: [Tree Bool] 
test = take 10 genum 

अब, test निम्नलिखित सूची है::

[ Leaf False 
, Node (Leaf False) (Leaf False) 
, Leaf True 
, Node (Leaf False) (Node (Leaf False) (Leaf False)) 
, Node (Node (Leaf False) (Leaf False)) (Leaf False) 
, Node (Leaf False) (Leaf True) 
, Node (Node (Leaf False) (Leaf False)) (Node (Leaf False) (Leaf False)) 
, Node (Leaf True) (Leaf False),Node (Leaf False) (Node (Leaf False) (Node (Leaf False) (Leaf False))) 
, Node (Node (Leaf False) (Leaf False)) (Leaf True) 
] 

genum के इस कार्यान्वयन विकर्णन का उपयोग करता उत्पादों विलय करने के लिए यहाँ एक उदाहरण है। यह गारंटी देता है कि प्रत्येक मूल्य वास्तव में सूची में कहीं दिखाई देता है, लेकिन बदले में एक आश्चर्यजनक आदेश हो सकता है।

+0

ओह, यही वह है जो मैं सोच रहा था। धन्यवाद। –

संबंधित मुद्दे