2011-10-25 5 views
15

जैसा कि कई बार कई बार उल्लेख किया गया है (उदाहरण के लिए 1, 2, ...) हैकेल में स्क्रिप्टिंग काफी शक्तिशाली हो सकती है।
एक त्वरित तरीका भी ghc expression evaluation mode हो सकता है। यही वह है जो मैं वास्तव में अपने आप को अधिक से अधिक उपयोग करके ढूंढता हूं (मुझे वास्तव में रूबी में यह सुविधा पसंद है)।
एक छोटी सी उदाहरण कार्य:
स्क्रिप्टिंग के लिए हैकेल में अभिव्यक्ति मूल्यांकन मोड

git diff --stat 9e2b68 | ghc -e \ 
    "getContents >>= return.(Data.List.nub).map(fst.break('/'==).head.words).lines" 

यह एक छोटे से भद्दा लग रहा है "सभी फ़ोल्डर कि सिर और एक विशिष्ट संशोधन के बीच Git डिफ निहित जानकारी प्राप्त करें", शायद इसलिए क्योंकि मैं वास्तव में विवरण पता नहीं है ghc -e का उपयोग करने के लिए।
देखते हुए कि सभी दिलचस्प हिस्सा सिर्फ nub.map(fst.break('/'==).head.words).lines वास्तविक अभिव्यक्ति है एक छोटे से अधिक शब्दों वाले लगती है।

  • मैं उन मॉड्यूल के बारे में ghc कैसे कहूं जिन्हें मुझे उपयोग करने की आवश्यकता है, इसलिए मुझे पूर्ण नाम का उपयोग करके उन्हें अर्हता प्राप्त करने की आवश्यकता नहीं है?
  • मैं GHC एक विन्यास फाइल कि मॉड्यूल मैं अक्सर उपयोग होता है किसी तरह का लेने के कर सकते हैं?

मैं वास्तव में अन्य उपयोगकाजों से कुछ उदाहरण देखने की सराहना करता हूं जो कि उन प्रकार की छोटी लिपियों के लिए हैकेल का उपयोग करने में मेरी मदद करने में मदद करेगा!

सिडेनोट: कमांडलाइन-फू विज़ार्ड शायद इस पर हंसेंगे लेकिन मुझे हैकेल का उपयोग करके और अधिक आरामदायक महसूस होता है, फिर स्क्रिप्टिंग को तोड़ना, इसलिए मैं यही उपयोग करना चाहता हूं।

+0

स्ट्रिंग → स्ट्रिंग कार्यों मुझे लगता है के लिए 'interact' थोड़ा कम भद्दा होने के लिए:' -e GHC '" $ स्ट्रिंग समारोह> सहभागिता करें "। यह अक्सर 'ghc -e' इंटरैक्ट $ के रूप में समाप्त होता है। नक्शा ( स्ट्रिंग func>)। लाइनें "'। – Nefrubyr

+1

दोनों Git और हास्केल के एक प्रशंसक है, जो एक "कमांडलाइन-foo जादूगर" के ज्यादा नहीं है के रूप में, एक ब्लॉग पोस्ट है जहां आप अपने Git से संबंधित हास्केल लिपियों के एक झुंड की सूची निश्चित रूप से मेरी रुचि के होगा! – MatrixFrog

+1

@MatrixFrog गिट तक सीमित नहीं है लेकिन शायद आपके लिए अभी भी दिलचस्प है: [जीएचसी मूल्यांकन मोड के साथ स्क्रिप्टिंग] (http://blog.coldflake.com/post/12412650749/scripting-with-ghcs-evaluation-mode) – oliver

उत्तर

8

मॉड्यूल के बारे में: ghc -e अपने ~/.ghci फ़ाइल का उपयोग करता है, इसलिए इस मामले में, आप इसे करने :m +Data.List जोड़ना होगा (import Data.List(nub) भी GHC 7 या तो के बाद से समर्थित है)।

पैकेजों के संबंध में: आप ghc-pkg hide somepackage और ghc-pkg expose somepackage का उपयोग कर सकते हैं दृश्यमान संकुल के डिफ़ॉल्ट सेट को परिभाषित करने के लिए (संकुल डिफ़ॉल्ट रूप से सामने आते हैं; शायद मैं आपके प्रश्न को गलत समझ सकता हूं)।

आप eddie उपयोगी लग सकते।

+0

अच्छी कॉल के साथ .ghci फ़ाइल! पता नहीं था कि 'ghc -e' एक ही फ़ाइल का उपयोग करता है। पैकेज के संबंध में – oliver

+0

: नहीं, छुपाएं और उजागर करना मेरा मतलब नहीं था। – oliver

+1

एडी के बारे में: वास्तव में अच्छा लग रहा है ... यहां तक ​​कि एक कैबल इंस्टॉल विकल्प भी है। इस बारे में काफी जानकारी नहीं है कि इसे कैसे पाइप करें लेकिन मैं जांच करूंगा! वैसे ... FunctorSalad ... बहुत रचनात्मक नाम :) – oliver

5

फ़ैक्टर सलद की तरह, ghc -e~/.ghci लोड करता है ताकि आप किसी भी बॉयलरप्लेट को जोड़ने के लिए इसका उपयोग कर सकें जिसका आप अपनी स्क्रिप्ट में उपयोग कर सकते हैं। अपने वैश्विक ~/.ghci से अलग .ghci फ़ाइल प्रति मानक विन्यास को

git diff ... | ghc -e "script.nub.map(fst.break(=='/').head.words).lines" 
+0

+1: मैं सोच रहा था कि '((==) /)' प्रश्न में क्या मतलब था। – rampion

+0

अच्छा! यह वास्तव में उपयोगी है! पारितोषिक के लिए धन्यवाद! एक बहुत आसान एकीकरण के लिए अनुमति देता है ... – oliver

+0

'((==) '/')' '('/' ==)' जैसा ही है। – augustss

5

इसके अलावा (, आप: अपनी मामले में आप

let script f = getContents >>= return f 
import Data.List 
आप के लिए

~/.ghci फ़ाइल जोड़ सकते हैं और फिर से चलाने के कुछ निर्देशिकाओं में विशेष .ghci फ़ाइलें हो सकती हैं, जिन्हें उसके बाद पढ़ा जाएगा), आप हास्केल स्रोत फ़ाइल को कमांड लाइन तर्क, ghc -e "expression" path/to/Source.hs के रूप में भी पास कर सकते हैं। expression का मूल्यांकन module Source के संदर्भ में किया जाएगा।

+0

ठंडा ... आपके वर्तमान निर्देशिका में एक विशेष .ghci फ़ाइल रखने के विकल्प के बारे में नहीं पता था। – oliver

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