2012-09-20 17 views
5

मैं वर्तमान में पुस्तक में अभ्यास का पालन कर रहा हूं: "हास्केल स्कूल ऑफ़ एक्सप्रेशन" और ग्राफिक्स बनाने पर तीसरे अध्याय तक पहुंच गया है। पुस्तक SOEGraphics मॉड्यूल का उपयोग करती है और एक विंडो में कुछ साधारण पाठ खींचने और फिर बटन दबाकर इसे बंद करने का प्रदर्शन करती है।हास्केल सोग्राफिक्स विंडो बंद नहीं होगा

हालांकि, जब संकलन और निष्पादन के बाद, मुझे लगता है कि हालांकि स्क्रीन पर पाठ के साथ खिड़की दिखाई देती है, फिर भी खिड़की किस कुंजी को दबाती है या फोकस कमांड लाइन या खिड़की पर है या नहीं।

module Main where 
import SOE 
main = runGraphics(
     do w <- openWindow 
       "My First Graphics Program" (300, 300) 
      drawInWindow w (text(100,200) "HelloGraphicsWorld") 
      k <- getKey w 
      closeWindow w 
     ) 

केवल बंद करने के लिए खिड़की पाने के लिए जिस तरह से यह CTRL-C के साथ छोड़ने के लिए मजबूर कर रहा है:

यहाँ किताब से स्रोत कोड है। क्या मेरे पास कुछ कोड है जो मैंने अपने कोड से अनदेखा किया है? कार्यक्रम जीएचसी 7.4.1 का उपयोग करके संकलित किया गया था और उबंटू पर चलाया गया था।

+0

आपको मॉड्यूल कहां से मिला? हैकेज पर एचजीएल पैकेज जीएचसी> = 7 के साथ नहीं बना है, जहां तक ​​मैं देख सकता हूं। –

+0

शायद मैं उलझन में हूं कि किस पुस्तकालय का मैं जिक्र कर रहा हूं? मैंने सोग्राफिक्स काम करने के निर्देशों का पालन किया [यहां] (http://www.cs.yale.edu/homes/hudak/SOE/software1.htm) –

+0

ठीक है, यह एक बिल्कुल हालिया स्रोत है, इसलिए यह _should_ काम करता है।मुझे नहीं पता था कि एसओई कोड फिर से एचजीएल से बाहर हो गया है, और गले के डॉक्स से जुड़ा हुआ है (गले की आखिरी रिलीज सितंबर 2006 थी!) ने मुझे आश्चर्यचकित कर दिया। मुझे नहीं पता कि क्या लटका हो सकता है, यद्यपि। क्या यह बफरिंग हो सकता है, ताकि कुंजीपटल केवल 'दबाकर भेजा जा सके? (असंभव है, लेकिन एकमात्र अनुमान है कि मैं पेशकश कर सकता हूं।) –

उत्तर

2

getKeyChargetKey के पूर्णांक का प्रयास करें। ऐसा लगता है कि कुछ ओएस में व्यवहार और/या व्यवहार के लिए पसंदीदा विधि में बदलाव आया है।

0

मैं एसओई पैकेज के current release का उपयोग कर रहा हूं, जिसे प्रश्न की तारीख से 9 महीने पहले जारी किया गया था। प्रश्न के पोस्टर की तरह, मैं उबंटू (12.04) पर जीएचसीआई 7.4.1 चला रहा हूं। मैं इस मुद्दे पर भाग गया, लेकिन डकमेस्टरो का जवाब लागू नहीं हुआ:

getKeyChar एसओई पैकेज में किसी भी मॉड्यूल में परिभाषित नहीं किया गया है। हालांकि, getKeyEx है:

हालांकि SOE पैकेज अपने आप में undocumented, इस समारोह में अपनी namesake में Graphics.HGL.Utils मॉड्यूल का अनुकरण करने के लिए प्रकट होता है।

हालांकि, जबकि getKey एसओई मॉड्यूल से निर्यात किया जाता है, getKeyEx नहीं है।

क्रम संकलन और विंडो बंद एक कुंजी दबाने घटना

  1. पर है करने के लिए सवाल में उद्धृत कोड में SOE मॉड्यूल
  2. से getKeyEx निर्यात किया, k <- getKeyEx w True
0

को k <- getKey w बदल डैनियल सही है लेकिन मुझे यह अजीब लगता है कि प्राप्त करने के लिए KeyEx काम करता है जो कि केवल उपयोग करता है KeyEx नहीं करता है। तो मैंने देखा। समस्या बहुत स्पष्ट है। यहाँ getKey

getKey win = do 
    ch <- getKeyEx win True 
    if ch == '\x0' then return ch 
    else getKeyEx win False 

के लिए मौजूदा कोड यहाँ यह क्या होना चाहिए

getKey win = do 
    ch <- getKeyEx win True 
    if ch /= '\x0' then return ch 
    else getKeyEx win False 

यह सुधार करें और getKey काम करता है है।

+0

कोड "Haskell School of Expression" के लिए स्रोत कोड डाउनलोड की SOE/src निर्देशिका में SOE.hs में है –

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