haskell - emacs में हैकेल repl
read-eval-print-loop haskell-mode (1)
2017 अपडेट करें
अब जब कि हम इंटरऑस हैं I सुझाव देंगे कि आप इंटरो / स्टैक की कोशिश करें - यह अच्छी तरह से काम करता है
इसके साथ मेरी कॉन्फ़िग अधिक पतली है:
;; ----------------------------------------------------------------------
;; HASKELL
(require 'haskell-mode)
(require 'intero)
(add-hook 'haskell-mode-hook 'intero-mode)
(require 'flycheck)
(setq flycheck-check-syntax-automatically '(save new-line))
(flycheck-add-next-checker 'intero '(warning . haskell-hlint))
आरईपीएल के बारे में आप मूल रूप से फ़ाइल को लोड करते हैं और फिर Cc Cl
लोड करते हैं (आप हमेशा Cc Cz
साथ दो विंडो के बीच स्विच कर सकते हैं और आप Cc Ck
(जब अंदर) के साथ रिप-बफर को साफ़ कर सकते हैं।
एकमात्र दोष यह है कि इंटरो को आमतौर पर आपके प्रोजेक्ट में स्थानीय रूप से इंस्टॉल किया जाता है, इसलिए एक नई परियोजना में पहला स्टार्टअप इंटरो को डाउनलोड / संकलन / बूट-अप के लिए थोड़ी देर लगेगा - लेकिन यह कोई बड़ा सौदा नहीं है और आपको ज्यादा फायदा मिलता है
अद्यतन करें
अब यह stack
बाहर है और अच्छा चल रहा है, मैं auto
ghc-mod
haskell-process-type
सेट करने की सलाह देता हूं और संभवत: स्टैक का उपयोग करके ghc-mod
इंस्टॉल कर रहा ghc-mod
।
यहाँ वर्तमान सेटअप है जो मैं उपयोग कर रहा हूं:
(require 'haskell-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'linum-mode)
(add-to-list 'exec-path "~/.local/bin")
(eval-after-load 'haskell-mode '(progn
(define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
(define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
(define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
(define-key haskell-mode-map "\C-ch" 'haskell-hoogle)))
(eval-after-load 'haskell-cabal '(progn
(define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
(define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))
(require 'company-ghci)
(push 'company-ghci company-backends)
(add-hook 'haskell-mode-hook 'company-mode)
(add-hook 'haskell-interactive-mode-hook 'company-mode)
जैसा कि आप देख सकते हैं कि मैं मूल रूप से सभी ghc-mod
संबंधित सामान (वर्तमान haskell-mode
साथ के रूप में स्टैक काम करता है) से छुटकारा मिल ghc-mod
और company
बैकेंड को बदल दिया है (हालांकि यह वाकई धीमा है और मुझे कुछ बेहतर खोजने की उम्मीद है)
चर
सामान्यतः आप एमएसीएस / हास्केल-मोड के कॉन्फ़िगरेशन के भीतर सेट करते हैं
(custom-set-variables
;; there is of course more in here - these are the Haskell related:
'(haskell-font-lock-symbols (quote unicode))
'(haskell-hoogle-command nil)
'(haskell-mode-hook
(quote
(linum-mode turn-on-haskell-indentation turn-on-haskell-doc-mode)) t)
'(haskell-process-auto-import-loaded-modules t)
'(haskell-process-load-or-reload-prompt t)
'(haskell-process-log t)
'(haskell-process-suggest-language-pragmas nil)
'(haskell-process-suggest-no-warn-orphans t)
'(haskell-process-type (quote auto))
'(haskell-process-use-presentation-mode t)
'(haskell-tags-on-save t)
'(inferior-haskell-wait-and-jump t)
'(safe-local-variable-values
(quote
((haskell-process-use-ghci . t)
(haskell-indent-spaces . 4))))
(uniquify)))
ये मैं जोड़े गए पैकेज हैं:
- Haskell मोड
- कंपनी (हस्सेल से संबंधित नहीं बल्कि निर्भरता है)
- कंपनी-कबाल
- कंपनी-GHCi
- GHCi-पूर्ण
- शेक्सपियर-मोड (हाँसोड के लिए)
- company-quickhelp (अच्छे प्रदर्शन के लिए
:i
)
प्रथम
अगर यह आपकी कैबिल निर्देशिका के लिए पूछता है - यह जानना चाहता है कि आपकी myProject.cabal
फ़ाइल कहां है - अगर आपके पास कोई फ़ोल्डर नहीं है जहां आपकी फ़ाइल है (डिफ़ॉल्ट - मुझे लगता है कि डिफ़ॉल्ट / खोज मुझे अभी तक विफल नहीं हुई )।
अगर आपको कुछ नमूनों की आवश्यकता है - .emacs-setup
मेरे .emacs
फ़ाइल से ये भाग हैं जो मेरे लिए काम करता है:
(autoload 'ghc-init "ghc" nil t)
(autoload 'ghc-debug "ghc" nil t)
(add-hook 'haskell-mode-hook (lambda () (ghc-init)))
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(eval-after-load 'haskell-mode '(progn
(define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
(define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
(define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
(define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
(define-key haskell-mode-map (kbd "C-c C-n C-c") 'haskell-process-cabal-build)
(define-key haskell-mode-map (kbd "C-c C-n c") 'haskell-process-cabal)))
(eval-after-load 'haskell-cabal '(progn
(define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
(define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
(define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))
(custom-set-variables
'(haskell-interactive-mode-hide-multi-line-errors nil)
'(haskell-process-log t)
'(haskell-process-type (quote cabal-repl)))
कृपया भाग के साथ (quote cabal-repl)
नोट करें - यह कैबिल सैंडबॉक्सेज़ के साथ काम करना चाहिए। इसके अलावा यह हैकेल-प्रोसेस-लॉग नामक बफ़र को अधिक लॉगिंग जानकारी जोड़ देगा, जहां आपको अपनी समस्या के बारे में अधिक जानकारी मिल सकती है।
मैं इसे ghc-mod version 5.1.0.2 compiled by GHC 7.8.3
साथ ghc-mod version 5.1.0.2 compiled by GHC 7.8.3
और जीएचसी 7.8.3 ghc-mod version 5.1.0.2 compiled by GHC 7.8.3
।
बेशक आपको यह सुनिश्चित करना है कि आपका। .cabal
फ़ोल्डर और वह स्थान जहां ghc-mod
आपके रास्ते में है (मुझे लगता है कि आप इसे कहीं भी एएमएसीएस सेटिंग्स में कॉन्फ़िगर कर सकते हैं - लेकिन यह बहुत आसान है)।
टिप्पणियों
- आपको emacs में पैकेज
ghc
को स्थापित नहीं करना हैghc-mod
- मुझे ghc-mod और emacs के पैकेज के पहले संस्करण के साथ समस्याएं हैं - इसलिए सुनिश्चित करें कि आप cabal-install के साथ नवीनतम प्राप्त करें और फिर emacs-package को पुनः स्थापित करें (केवल मेरे भाग पर ghc- आउटपुट को पार्स करने में समस्या है )
अग्रिम जानकारी
अगर यह आपकी सहायता नहीं करता है, तो कृपया मुफ़्त में महसूस करें
- एक टिप्पणी जोड़ने
- खुश हैस्केल प्रोग्रामिंग पृष्ठ पर एक नज़र डालें
- emacs पर ghc विकी पर एक नजर है
नमूना मेरे मशीन पर चलते हैं
मैंने इस तरह एक नमूना फाइल संपादित की:
फिर मैं सीसी सीएल मारा और y दबाएं:
और फ़ोल्डर को स्वीकार करें (यह वह जगह है जहां फाइल स्थित है) और रेट के साथ कोई अन्य प्रश्न - अब आपको *haskell*
बफर को मैत्रीपूर्ण संदेश / लैम्ब्डा के साथ देखना चाहिए:
अंत में मैं यह देख सकता हूं कि फ़ाइल लोड हो गई है:
नमस्ते मैं हैस्केल से शुरुआत कर रहा हूं और अपने विकास के लिए अपने emacs को स्थापित करने का प्रयास कर रहा हूं।
मेरे पास ghc-mod
haskell-mod
और ghc-mod
में emacs 24.3.1
। जीएचसी 7.6.3
मैंने एक हैस्केल फ़ाइल first.hs बनाई है और जब मैं Cc Cl
करता हूँ तो यह पूछता है:
start a new project named haskell ? y or n
मेरी निर्देशिका का नाम हैसकेल है मैं y दबाता हूं
Set the cabal directory
मैंने दोनों ~ / .cabal और मेरे वर्तमान निर्देशिका में हैस्केल नाम की कोशिश की है
Set the current directory
बस दबाए गए प्रवेश के रूप में इसे हैस्केल निर्देशिका है
यह त्रुटि संदेश दिखाता है:
haskell-process-start: cl-ecase failed: cabal-rep, (ghci quote cabal-repl quote cabal-ghci quote cabal-dev quote)
मैं कैसे प्रतिक प्राप्त कर सकता हूँ?
मैंने पढ़ा है कि मुझे यह काम करने के लिए ghc संस्करण डाउनग्रेड करना पड़ सकता है। क्या यह अच्छा समाधान है?
समाधान :
मेरे पास init.el में एकाधिक custom-set-variables
थे और इससे समस्या उत्पन्न हुई।