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- आउटपुट को पार्स करने में समस्या है )

अग्रिम जानकारी

अगर यह आपकी सहायता नहीं करता है, तो कृपया मुफ़्त में महसूस करें

नमूना मेरे मशीन पर चलते हैं

मैंने इस तरह एक नमूना फाइल संपादित की:

फिर मैं सीसी सीएल मारा और 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 थे और इससे समस्या उत्पन्न हुई।





haskell-mode