2011-04-15 11 views
11

पर हास्केल प्रोग्रामिंग के लिए टेक्स्टमैट सेट अप करना मै मैक के लिए नया हूं, और मेरे कंप्यूटर सेटअप को उन सभी कार्यक्रमों के साथ स्थापित करने की प्रक्रिया में हूं, जिनमें से एक हैस्केल है।मैक ओएस एक्स

मेरे आश्चर्य के लिए, ओएस एक्स के लिए हास्केल प्लेटफ़ॉर्म विंडोज़ में नहीं है (जहां प्लेटफ़ॉर्म इंस्टॉलेशन पर निर्मित एक जीयूआई संपादक है - winGHiC)। बहुत कुछ देखने के बाद, मुझे यह संपादक टेक्स्टमैट मिला जो कि हास्केल के साथ संगत होने वाला है लेकिन इसके लिए Haskell Bundle सेटअप करने में काफी जटिल लग रहा है।

मैं पहले से ही डाउनलोड किया है और निम्नलिखित स्थापित किया है:

    मैक के लिए
  • हास्केल मंच ओएस एक्स
  • Xcode 3.4 (हास्केल पूर्वापेक्षा)
  • TextMate
    • haskell.tmbundle फ़ाइलों (ऊपर उल्लिखित)

क्या कोई इसे काम करने के तरीके से परिचित है? इसका मतलब यह होगा कि मेरे लिए एक विस्तृत कदमवार स्पष्टीकरण होगा, जैसा कि मैंने कहा था, मैं केवल 1 दिन रहा हूं क्योंकि मैंने पहली बार ओएस एक्स का उपयोग किया था।

धन्यवाद एक गुच्छा।

+0

WinGHCi एक "जीयूआई संपादक" * प्रति * * नहीं है। आप कमांडलाइन से 'ghci' प्रोग्राम का उपयोग कर सकते हैं, जो काफी हद तक बराबर है; यही तो मैं करता हूं। मैं वास्तव में इसे WinGHCi को पसंद करता हूं, जिसका कमांड-पूरा प्रकार बेकार है। – Ezra

उत्तर

28

वैसे यह अच्छा काम है कि आपने पाया है कि आजकल गिथब पर टंबंडल है।

आपको Bundles पर क्लिक करके इनबिल्ट विकल्पों को खोजने में सक्षम होना चाहिए, फिर Haskell। मानक Haskell.tmbundle में काफी कम हैं। सबसे स्पष्ट रूप से उपयोगी एक है ... लोड फ़ाइल command-shift-r या command-R। यदि आपने .hs या .lhs को समाप्त करने वाला मॉड्यूल लिखा है, तो यह इसे ghci में खोलता है।

(टेक्स्टमैट II में एक एकीकृत टर्मिनल की कुछ बात थी, लेकिन कौन जानता है? एक गैर-एकीकृत टर्मिनल की एक कष्टप्रद विशेषता यह है कि कोई ऐसा करने के बजाए कमांड-आर पर क्लिक करके 'पुनः लोड' करने के लिए प्रेरित होता है: r ghci के अंदर; कुछ उन्मादों में यह विकसित होगा कि मेरे पास टर्मिनल ओपन की 15 प्रतियां हैं।)

कई अच्छी विशेषताएं सामान्य टेक्स्टमैट चीजें हैं, जो भाषा विवरण द्वारा निर्धारित होती हैं, इसलिए सामान्य विवरण पढ़ने के लिए अच्छा हो सकता है टेक्स्टमैट niceties के। उदाहरण के लिए, यदि कई रेखाएं ऊंची हैं, तो कमांड-/उन्हें -- एस के साथ टिप्पणियां दें; या, यदि वे पहले से ही टिप्पणी कर चुके हैं, तो उन्हें असम्बद्ध करता है। मैंने ऐसा करने के लिए कुछ एक साथ हैक किया था, इससे पहले कि मुझे एहसास हुआ कि यह पहले से ही था, मैन्युअल रूप से पर्याप्त मैनुअल का अध्ययन नहीं किया।

सब कुछ कीबाइंडिंग है, ज़ाहिर है, और छोटे स्क्रिप्ट चलाने और छोटे स्निपेट डालने के लिए अपना खुद का जोड़ना बहुत आसान है, इमाक्स की तुलना में कहीं ज्यादा।

BundlesBundle Editor पर क्लिक करें और विभिन्न प्रकार की चीजों के लिए पाठ की जांच करें।

तो, उदाहरण के लिए, एक टैब ट्रिगर एक भाषा विस्तार pragma {-#LANGUAGE ... #-} जहां कर्सर अंतरिक्ष में है शुरू करने के लिए बनाने के लिए ... एक Snippet की एक प्रतिलिपि बनाने और स्थानापन्न

{-#LANGUAGE ${1}#-} 

Activation: Tab Trigger का चयन करके और (जैसे कि) LANG ट्रिगर के रूप में।

एक अच्छी बात यह है कि वे सभी शैल स्क्रिप्ट हैं, या अन्यथा (इस तरह की) आंशिक शैल स्क्रिप्ट्स के साथ कुछ टेक्स्टमैट चर के साथ, और आप उन्हें अपनी पसंदीदा भाषा में बहुत अधिक लिख सकते हैं। (हास्केल बंडल के लिए मेरे पास कोई और बात नहीं है, लेकिन अन्य बंडलों के लिए मैं करता हूं।)

सिंटैक्स हाइलाइटिंग आश्चर्यजनक रूप से ध्वनि है, लेकिन कुछ फैंसी एक्सटेंशन पर यात्रा करता है, उदा। "पैकेज आयात", जीएडीटी वाक्यविन्यास, हैडॉक दस्तावेज प्रणाली के लिए मार्कअप, और कुछ अन्य विषमताएं। मैंने अपना खुद का हैक किया है, लेकिन मुझे सिंटैक्स फ़ाइलों का प्रारूप बहुत ही समझदार लगता है, इसलिए यह आपको एक प्रतिलिपि भेजने का कोई उपयोग नहीं है। पिछले दो या तीन वर्षों में Haskell.tmbundle कुछ जानकार हास्केलर्स द्वारा अनुशंसित किया गया है। जिस व्यक्ति ने इसे पहले बनाया था वह सिर्फ हास्केल सीख रहा था, और उदाहरण नहीं था हैडॉक मॉड्यूल बनाये, लेकिन दूसरी तरफ, वह सौभाग्य से बहुत कुशल रहा है और टेक्स्टमैट मशीनरी का घनिष्ठ ज्ञान रखने के लिए प्रतीत होता है।

टेक्स्टमैट Bundle Editor में आपके द्वारा किए गए संशोधन को अजीब तरीके से संग्रहीत करने के तरीके से ध्यान दें। टेक्स्टमैट के साथ आने वाले बंडल, उदा। C, Ruby, HTML, LaTeX, आदि /Applications/Textmate.app/.../Bundles में हैं। आपके द्वारा इंस्टॉल किए गए लोग /Library/Application\ Support/TextMate/Bundles में हैं। जब आप Bundle Editor के माध्यम से संशोधन करते हैं, तो वे आपके स्थानीय ~/Library/Application\ Support/TextMate/Bundles. में संग्रहीत होते हैं, यह समझ में आता है लेकिन यह थोड़ा जटिल है, और हास्केल बंडल के सार्वजनिक सुधार में बाधा डालता है। (एक बंडल जिसे मैं लोगों के साथ साझा करता हूं, हास्केल नहीं, मैं गिट संशोधन के तहत सबसे पुरानी निर्देशिका में रहता हूं, इसलिए मूल और मेरे संशोधन एक साथ हैं।)

"होलॉग पर लुकअप" कीबाइंडिंग/विकल्प कार्य हाइलाइट किए गए शब्दों पर; यहाँ hayoo वेबसाइट के लिए एक प्रतिकृति है, जो एक प्रकार हस्ताक्षर

echo "<meta http-equiv=\"refresh\" content=\"0; 
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}\">" 

का उपयोग करता है के लिए खोज कर सकते हैं hoogle स्थापित कबाल अगर है, तो आप इतना की तरह एक स्क्रिप्ट के साथ hoogle के लिए एक स्थानीय कॉल कर सकते हैं:

hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}' 

चुनने सहेजें: कुछ नहीं, इनपुट: चयनित पाठ, या: वर्ड, आउटपुट: { `के लिए HTML के रूप में दिखाएँ

अन्य emendations मैं कर रहे हैं ज्यादातर तुच्छ बना दिया है, एक टैब ट्रिगर स्निपेट कैसा - # भाषा ... # -} या अन्यथा खुद की सनकी।

एक बात यह उल्लेख करने योग्य है कि मैं एकीकृत करने में कामयाब रहा हूं typeof हैकेज, cabal install typeof से निष्पादन योग्य है, जो अनुमानित प्रकार के हस्ताक्षर के लिए ghci तक चलता है। मेरे पास अनुमानित प्रकार को HTML के प्रदर्शित बिट के रूप में दिखाने के लिए एक बाध्यकारी है, लेकिन इसे सम्मिलित करने के लिए भी।यह थोड़ा नाजुक है, लेकिन यहाँ प्रकार

#!/bin/bash 
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} 
module="${TM_FILEPATH}" 
echo $word | typeof $module 

की displayer के लिए पाठ Input: Selected Text, Or: Line चुनने है; Output: Show as Tool Tip, Activation : Key Equivalenttypeof के माध्यम से (फिर एक की बाइंडिंग चुनते हैं, तो मेरा control-option-command-j है) इसी प्रकार, प्रकार प्रविष्टि की ओर बढ़ एक नया सी (आदेश फ़ाइल) बनाने के लिए और इस में शामिल हैं:

#!/bin/bash 
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} 
module="${TM_FILEPATH}" 
echo $word | typeof $module | typeof_wordorder 

# typeof_wordorder is the following hack compiled 
# in my local ~/bin 
# module Main where 
# main = interact reword where 
# reword :: String -> String 
# reword xs = 
#  xs ++ (head . words . concat . lines $ xs) 

यहाँ typeof और typeof_worderorder हास्केल निष्पादनयोग्य, पहले कर रहे हैं कैबल-स्थापित, दूसरा उपर्युक्त टिप्पणी है जो मेरे स्थानीय ~\bin में संकलित कुछ बकवास बकवास करने के लिए संकलित है। यहां आपको Output : Insert as Snippet

क्षमा करें, मैं बस यादृच्छिक चीज़ों के बारे में सोच रहा हूं। आपको इस शीर्षक के तहत प्रश्न पोस्ट करना जारी रखना चाहिए, क्योंकि मुझे लगता है कि यह देखने के लिए उपयुक्त होगा कि कोई कैसे यात्रा कर सकता है, लेकिन हमारे चतुर हास्केलर दोस्तों के बारे में क्या सोच सकता है। मैं गिटूब पर अपने टंबंडल का 'कांटा' लगाने का अर्थ रखता हूं, लेकिन यह बहुत रोमांचकारी नहीं है, और बंडल निर्देशिकाओं का संगठन हमेशा मुझे पराजित करता है।

+0

वाह धन्यवाद! आपको पता नहीं है कि मैंने आपके द्वारा कवर किए गए सभी स्तरों की सराहना की कितनी सराहना की है। ट्रिपल "स्वीकार्य उत्तर" अगर मैं कर सकता था – Panicos