मैं थोड़ा हास्केल कंपाइलर लिख रहा हूं, और मैं जितना संभव हो उतना हास्केल 2010 को कार्यान्वित करना चाहता हूं। मेरा कंपाइलर एक मॉड्यूल पार्स कर सकता है, लेकिन एक प्रोग्राम में मॉड्यूल को पूरा करना एक गैर-मामूली कार्य लगता है। मैं मुश्किल, लेकिन शायद वैध, हास्केल मॉड्यूल के कुछ उदाहरण बना हुआ: मॉड्यूल F
निर्यात G.x
एज-केस हास्केल मॉड्यूल आयात और निर्यात को हल करना
module F(G.x) where
import F as G
x = 2
यहाँ, लेकिन G.x
F.x
रूप में एक ही है, इसलिए मॉड्यूल F
निर्यात x
अगर और वह भी तब, यह निर्यात करता है x
।
module A(a) where
import B(a)
a = 2
module B(a) where
import A(a)
इस उदाहरण में, मॉड्यूल A
के निर्यात संकलक अगर a
B
से आयात घोषित a = 2
रूप में ही है की जाँच करने के है, लेकिन B
निर्यात a
अगर और वह भी तब, A
निर्यात a
को हल करने।
module A(f) where
import B(f)
module B(f) where
import A(f)
मॉड्यूल A
को हल करने के दौरान, संकलक may've मान लिया है कि f
B
से आयात मौजूद है, जिसका अर्थ है कि A
निर्यात f
, इस प्रकार B
A(f)
आयात और निर्यात f
कर सकते हैं। एकमात्र समस्या यह है कि कहीं भी f
परिभाषित नहीं है :)।
module A(module X) where
import A as X
import B as X
import C as X
a = 2
module B(module C, C.b) where
import C
b = 3
module C(module C)
import B as C
c = 4
यहाँ, module
निर्यात का कारण यह है कि निर्यात सूचियों एक दूसरे पर और खुद पर निर्भर हैं।
हास्केल 2010 spec द्वारा परिभाषित अनुसार ये सभी उदाहरण वैध हास्केल होना चाहिए।
मैं पूछना चाहता हूं कि क्या कोई विचार है कि हास्केल मॉड्यूल को सही तरीके से और पूरी तरह से कैसे कार्यान्वित किया जाए?
मान लें कि एक मॉड्यूल बस (सरल) चर बाइंडिंग, import
रों (संभवतः as
या qualified
के साथ), और संभवतः योग्य चर के निर्यात सूची और module ...
संक्षिप्त रूपों में शामिल है।
- गणना प्रत्येक मॉड्यूल
- लिंक अपने बाध्यकारी
- लिंक हर (शायद योग्य) अपने बाध्यकारी के लिए हर मॉड्यूल में इस्तेमाल किया चर के लिए हर निर्यात चर का निर्यात किया चर के परिमित सूची: एल्गोरिथ्म करने में सक्षम हो गया है
वाह, धन्यवाद, मुझे उम्मीद नहीं थी कि वास्तव में इस समस्या को लक्षित करने वाले कागजात और पुस्तकालय हैं :) –