Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Repl hanging #447

Closed
MichaelXavier opened this issue Jan 23, 2015 · 39 comments
Closed

Repl hanging #447

MichaelXavier opened this issue Jan 23, 2015 · 39 comments

Comments

@MichaelXavier
Copy link
Contributor

Fair warning: this isn't going to have great details on how to reproduce this issue. I'm mostly looking for some guidance on how to tease out what's going on here.

I use the interactive haskell process in a large project. Pretty consistently now if I haskell-process-load-or-reload it will load the file fine, but then the repl will essentially get stuck. Subsequent calls to haskell-process-load-or-reload will just put in the minibuffer "No changes need to be saved" and not do anything. I also can't enter any commands on the repl. When I strace the repl process I see it hanging on a wait4.

This doesn't seem to really happen on smaller project, which makes this hard to reproduce.

Some system info:

The Glorious Glasgow Haskell Compilation System, version 7.6.3
cabal-install version 1.20.0.3
using version 1.20.0.0 of the Cabal library
haskell-mode version 20141130.1012

Any ideas on how I can troubleshoot this/get you more info?

Thanks!

@karljs
Copy link
Contributor

karljs commented Jan 27, 2015

I would start by setting haskell-process-log to t via customize or in your init file and then seeing what the log output looks like.

@MichaelXavier
Copy link
Contributor Author

I'm not sure if this is it but I just had a session fail and the last thing in the log is the usage for hasktags:

:!cd /home/michael/src/whatever && find . -name '*.hs' -or -name '*.lhs' -or -name '*.hsc' -print0 | xargs -0 hasktags -e -x
<- Usage: hasktags [OPTION...] [files or directories...]
   directories will be replaced by DIR/**/*.hs DIR/**/*.lhs
   Thus hasktags . tags all important files in the current
   directory.

   If directories are symlinks they will not be followed
   unless you pass -L.

<- 
   A special file "STDIN" will make hasktags read the line separated file
   list to be tagged from STDIN.

     -c            --ctags                        generate CTAGS file (ctags)
     -e            --etags                        generate ETAGS file (etags)
     -b            --both                         generate both CTAGS and ETAGS
     -a            --append                       append to existing CTAGS and/or ETAGS file(s). After this file will no longer be sorted!
                   --ignore-close-implementation  ignores found implementation if its closer than 7 lines  - so you can jump to definition in one shot
     -o            --output=                      output to given file, instead of 'tags', '-' file is stdout
     -f            --file=                        same as -o, but used as compatibility with ctags
     -x            --extendedctag                 Generate additional information in ctag file.
                   --cache                        Cache file data.
     -L            --follow-symlinks              follow symlinks when recursing directories
     -S[.hs,.lhs]  --suffixes[=.hs,.lhs]          list of hs suffixes including "."
     -R            --tags-absolute                make tags paths absolute. Useful when setting tags files in other directories
     -h            --help                         This help

I find that if I just execute that find command, find . -name '*.hs' -or -name '*.lhs' -or -name '*.hsc' -print0 with -print0 at the end, it produces nothing. Omitting it, it produces many lines of results. I've tried moving that -print0 around to no effect. I don't understand find's strange expression language. However, it looks like with hasktags we could eliminate print0 and xargs: find . -name '*.hs' -or -name '*.lhs' -or -name '*.hsc' | hasktags -e -x STDIN since according to the docs, the special filename STDIN will use stdin and expect line-delimited filenames, which is what find produces!

I'm going to modify my local copy of haskell-mode and see if this helps. Either way though, I think this would be a good change. I'd be happy to submit a PR for it if people agreed that it was appropriate.

@MichaelXavier
Copy link
Contributor Author

Unfortunately this didn't resolve the issue. The hanging seems to be at random. It happens to me often enough that if you need any diagnostics on the running process I should be able to get them. Right now its locked up in my session and the last entries in the log seem pretty uninteresting:

-> :info Milliseconds
<- newtype TrackerPacker.Types.Duration = Milliseconds Int
        -- Defined in `TrackerPacker.Types'
   �
-> :info n
<- 
   Top level: Not in scope: `n'

@chrisdone
Copy link
Member

It would be good if you clear your process log buffer and do a session from scratch and reproduce the problem. Everything you've pasted so far seems fine.

@MichaelXavier
Copy link
Contributor Author

The only problem there is that this doesn't seem to happen deterministically. Sometimes I can get through 20+ minutes of normal work before it crops up. Right now I'm actually (attempting to) debugger step through haskell-process-load-file. I wonder if there's any reflection I can do on the session or haskell process state that may illuminate things.

@chrisdone
Copy link
Member

It'll usually happen if some commmand (like tags) or whatever locks up the queue. Any subsequent commands in the queue won't be run, including any REPL commands. You can see what it was trying to do when it looks up by looking at the contents of (haskell-process)

@MichaelXavier
Copy link
Contributor Author

Ah now this is getting interesting. That produced about 3400 lines of output but I see several times this snippet:

   (inferior-process . #<process dynaweb>)
   (is-restarting)
   (current-command .
                    [cl-struct-haskell-command
                     (#0)
                     (lambda
                       (state)
                       (haskell-process-send-string
                        (car state)
                        (if
                            (string-match "^[A-Za-z_]"
                                          (cdr state))
                            (format ":info %s"
                                    (cdr state))
                          (format ":info (%s)"
                                  (cdr state)))))
                     nil
                     (lambda
                       (state response)
                       (if
                           (or
                            (string-match "^Top level" response)
                            (string-match "^<interactive>" response))
                           nil
                         (haskell-mode-message-line response)))])
   (suggested-imported)
   (sent-stdin)
   (evaluating)

@MichaelXavier
Copy link
Contributor Author

Is there some way a command can either be timed out or aborted by the repl? I'm kind of at a loss here. When this feature is working well it saves me tons of time.

@chrisdone
Copy link
Member

C-c C-c?

@MichaelXavier
Copy link
Contributor Author

On a whim when watching the log I saw that i was using flymake-haskell-multi, which in turn was using flymake alongside flycheck on my haskell code. I saw interleaved calls from haskell-mode and flymake and figured this could be the source of a race condition. I've uninstalled that package and so far so good. I figure by the end of the day if I don't get any lockups, that must have been the issue.

@MichaelXavier
Copy link
Contributor Author

Damn. Unfortunately the problem still persists. Is there anything I can do to provide more info? I'm happy to do as much work as necessary to get this figured out, its just that my elisp debugging skills aren't where they need to be at yet to debug it myself.

@zovt
Copy link

zovt commented Mar 3, 2015

I'm having the same problem myself. For me at least, it would seem that I can

  1. Load a haskell file into a new GHCi session using C-c C-l
  2. Use the REPL at this point to evaluate functions, etc.
  3. Switch back to the source code using either C-c C-z or C-x o
  4. Make some changes, save source. Use C-c C-b to switch to the REPl

It's after 4 when it locks up with no indication

@gracjan gracjan changed the title Repl Hanging Repl hanging Mar 9, 2015
@sritchie
Copy link

I'm seeing this issue as well. It looks like #536 might be a duplicate. (haskell-process-clear)unhangs my repl; I've bound that command tof7` for now so I can at least keep moving. This happens a lot, and seems to be triggered by hasktags in my case.

@lukehoersten
Copy link
Member

This happens a lot for me. It does seem to happen related to saving though I don't use hasktags so I think it's unrelated to that. @chrisdone helped me confirm that stuff is getting stuck in my haskell-process queue so (haskell-process-clear) clears things out for me as well though the real question is: why is the queue getting jammed up? Weirdly I can continue to use the haskell-process repl when this occurs.

@gracjan
Copy link
Contributor

gracjan commented Mar 30, 2015

@lukehoersten: next time it hangs can you check what is the output of (haskell-commands-process)?

@sritchie
Copy link

Here's the output for me. I cleared the process, moved some text around, saved the file and noticed a freeze.

((name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0 . "P.String") #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[... "�Â=���à   @ÄÅÆÇ   @!!\"\"�à @ÄÈÆÇ   @!!ÉÊ$\"�" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[... "�A���ÂÃ�@!!�Ä�A!�)ÅÆ!�" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (... #0 "1:type IsString" 0) #[... "db�Âc�d�à �A@²�Ä   AA@!\"�Å  �A@²�Æ\"�" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]] [cl-struct-haskell-command (... #0 "1" 0) #[... "db�Âc�d�à    �A@²�Ä   AA@!\"�Å  �A@²�Æ\"" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"�" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 1460 in *course*> . #<marker (moves after insertion) at 1460 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command ... #[... "�Â=���à    @ÄÅÆÇ   @!!\"\"�à @ÄÈÆÇ   @!!ÉÊ$\"�" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[... "�A���ÂÃ�@!!�Ä�A!�)ÅÆ!�" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command ... #[... "db�Âc�d�à  �A@²�Ä   AA@!\"�Å  �A@²�Æ\"�" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]] [cl-struct-haskell-command ... #[... "db�Âc�d�à   �A@²�Ä   AA@!\"�Å  �A@²�Æ\"" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1)))

@lukehoersten
Copy link
Member

Mine looked very similar to that last time I captured it during a freeze. I had a whole bunch of binary output in mine as well. I'll capture it next time it happens.

@lukehoersten
Copy link
Member

Here's one I got to happen in my test code.

((name . "test") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (:process #0 :session ... :filename "/Users/lhoersten/Code/haskell/test/Test.hs" :callback #[128 "ÁÂÀ�#�" [[cl-struct-flycheck-syntax-check #<buffer Test.hs> haskell-process nil] apply flycheck-report-buffer-checker-status] 5 "

(fn &rest ARGS)"] :buffer #<buffer Test.hs> :original #("{-# LANGUAGE OverloadedStrings #-}

module Test where

import           Control.Applicative
import           Data.Attoparsec.ByteString.Char8
import           Data.ByteString                  (ByteString)
import           Data.Word
import           Prelude                          hiding (takeWhile)

import           Control.Monad.Trans.Reader       (ReaderT (..), )
import           Control.Monad.Trans.State        (StateT (..))


test :: IO ()
test = print (feed (parse tagParser \"#hey #there\") \"\")

tagParser :: Parser [ByteString]
tagParser = word `sepBy1` space
  where word = char '#' *> takeWhile (not . isSpace)


stateToReaderT :: (Monad m) => ReaderT s (StateT s m) a -> StateT s m a
stateToReaderT m = get >>= runReaderT m


runMyReaderTStack :: (Monad m) => ReaderT s1 (ReaderT s2 m) a -> StateT s1 (StateT s2 m) a
runMyReaderTStack = undefined" 0 2 ... 2 34 ... 34 36 ... 36 42 ... 42 43 ... 43 47 ... 47 48 ... 48 53 ... 53 55 ... 55 61 ... 61 72 ... 72 91 ... 91 92 ... 92 98 ... 98 109 ... 109 141 ... 141 142 ... 142 148 ... 148 159 ... 159 174 ... 174 192 ... 192 193 ... 193 203 ... 203 204 ... 204 205 ... 205 211 ... 211 222 ... 222 231 ... 231 232 ... 232 238 ... 238 249 ... 249 256 ... 256 282 ... 282 288 ... 288 289 ... 289 290 ... 290 299 ... 299 300 ... 300 301 ... 301 302 ... 302 308 ... 308 319 ... 319 326 ... 326 332 ... 332 338 ... 338 345 ... 345 346 ... 346 352 ... 352 353 ... 353 360 ... 360 361 ... 361 362 ... 362 364 ... 364 365 ... 365 366 ... 366 367 ... 367 368 ... 368 369 ... 369 375 ... 375 386 ... 386 411 ... 411 418 ... 418 419 ... 419 420 ... 420 426 ... 426 427 ... 427 428 ... 428 430 ... 430 431 ... 431 432 ... 432 433 ... 433 434 ... 434 435 ... 435 439 ... 439 440 ... 440 442 ... 442 443 ... 443 445 ... 445 446 ... 446 447 ... 447 448 ... 448 449 ... 449 453 ... 453 454 ... 454 455 ... 455 462 ... 462 463 ... 463 468 ... 468 469 ... 469 485 ... 485 498 ... 498 499 ... 499 500 ... 500 502 ... 502 503 ... 503 505 ... 505 514 ... 514 515 ... 515 517 ... 517 518 ... 518 524 ... 524 525 ... 525 526 ... 526 536 ... 536 537 ... 537 538 ... 538 547 ... 547 548 ... 548 549 ... 549 555 ... 555 563 ... 563 572 ... 572 577 ... 577 583 ... 583 584 ... 584 590 ... 590 591 ... 591 592 ... 592 593 ... 593 594 ... 594 596 ... 596 607 ... 607 608 ... 608 612 ... 612 613 ... 613 621 ... 621 622 ... 622 623 ... 623 624 ... 624 625 ... 625 639 ... 639 640 ... 640 642 ... 642 643 ... 643 644 ... 644 649 ... 649 651 ... 651 652 ... 652 653 ... 653 655 ... 655 656 ... 656 663 ... 663 666 ... 666 667 ... 667 673 ... 673 677 ... 677 678 ... 678 681 ... 681 683 ... 683 684 ... 684 690 ... 690 697 ... 697 711 ... 711 714 ... 714 715 ... 715 720 ... 720 723 ... 723 739 ... 739 756 ... 756 757 ... 757 759 ... 759 760 ... 760 761 ... 761 766 ... 766 768 ... 768 769 ... 769 770 ... 770 772 ... 772 773 ... 773 780 ... 780 784 ... 784 785 ... 785 792 ... 792 797 ... 797 798 ... 798 801 ... 801 803 ... 803 804 ... 804 810 ... 810 814 ... 814 815 ... 815 821 ... 821 826 ... 826 827 ... 827 830 ... 830 847 ... 847 848 ... 848 849 ... 849 860 ... 860 863 ... 863 884 ... 884 885 ...)) (lambda ... ...) (lambda ... ...) (lambda ... ...)] [cl-struct-haskell-command (#0) #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (... #0 "load \"/Users/lhoersten/Code/haskell/test/Test.hs\"" nil #<buffer Test.hs>) #[... "Á��A@²�ÂÃ�AA@\"\"�" [state haskell-process-send-string format ":%s"] 5] #[... "Â��A@²�  Ã#�" [state buffer haskell-process-live-build nil] 4] #[... "Â�@��A@²� �AAA@�AAAA@%�" [state response haskell-process-load-complete] 6]] [cl-struct-haskell-command (... #0 "load \"/Users/lhoersten/Code/haskell/test/Test.hs\"" nil #<buffer Test.hs>) #[... "Á��A@²�ÂÃ�AA@\"\"�" [state haskell-process-send-string format ":%s"] 5] #[... "Â��A@²�   Ã#�" [state buffer haskell-process-live-build nil] 4] #[... "Â�@��A@²� �AAA@�AAAA@%�" [state response haskell-process-load-complete] 6]]) (inferior-process . #<process test>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "test") (next-error-region #<marker at 124 in *test*> . #<marker (moves after insertion) at 124 in *test*>) (next-error-locus) (interactive-buffer . #<buffer *test*>) (target . "") (current-dir . "/Users/lhoersten/Code/haskell/test/") (cabal-checksum . "f4182843bba98f8a3c88c77eb09ce4a0") (cabal-dir . "/Users/lhoersten/Code/haskell/test/") (process (name . "test") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command ... ... ... ...] [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command ... #[... "Á��A@²�ÂÃ�AA@\"\"�" [state haskell-process-send-string format ":%s"] 5] #[... "Â��A@²�  Ã#�" [state buffer haskell-process-live-build nil] 4] #[... "Â�@��A@²� �AAA@�AAAA@%�" [state response haskell-process-load-complete] 6]] [cl-struct-haskell-command ... #[... "Á��A@²�ÂÃ�AA@\"\"�" [state haskell-process-send-string format ":%s"] 5] #[... "Â��A@²�    Ã#�" [state buffer haskell-process-live-build nil] 4] #[... "Â�@��A@²� �AAA@�AAAA@%�" [state response haskell-process-load-complete] 6]]) (inferior-process . #<process test>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1)))

@gracjan
Copy link
Contributor

gracjan commented Mar 30, 2015

The command that is stuck is this one:

(current-command .
  [cl-struct-haskell-command
     ...
     #[... "Á@ÂÃA\"� ÄÅA\"� ÄÆA\"\"�"
          [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5]
     nil
     #[... "ÁÂ\"� ÁÃ\"?� Ä!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]
  ])

I do not see why should it be stuck...

@lukehoersten, @sritchie, @zovt, @MichaelXavier: can you rm *.elc to remove all compiled haskell-mode elisp and try to get same output from not-compiled haskell-mode?

@sritchie
Copy link

I reinstalled haskell-mode from ELPA and it looks like the issue might be fixed! I haven't had the REPL hang in the last 20 minutes. Previously it would hang every few commands. We might be in business.

I deleted the ELPA package, restarted emacs, reinstalled, restarted again and everything looks good.

@sritchie
Copy link

I've had issues before with installing a new version of some package when an old version was still around. Emacs uses some old function definition when compiling instead of the new one, and some busted error gets locked into the compiled files.

@sritchie
Copy link

Nope, I was wrong. Still hanging.

((name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0 . "s") #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[... "�Â=���à  @ÄÅÆÇ   @!!\"\"�à @ÄÈÆÇ   @!!ÉÊ$\"�" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[... "�A���ÂÃ�@!!�Ä�A!�)ÅÆ!�" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (#0) #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "s") #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[... "�Â=���à    @ÄÅÆÇ   @!!\"\"�à @ÄÈÆÇ   @!!ÉÊ$\"�" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[... "�A���ÂÃ�@!!�Ä�A!�)ÅÆ!�" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (nil ... ... ... #1 ... ... ... ... ... ... ...) (lambda ... ...) nil setcar] [cl-struct-haskell-command (... #0 "1" 0) #[... "db�Âc�d�à  �A@²�Ä   AA@!\"�Å  �A@²�Æ\"�" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]] [cl-struct-haskell-command (nil ... ... ... #1 ... ... ... ... ... ... ...) (lambda ... ...) nil setcar] [cl-struct-haskell-command (nil ... ... ... #1 ... ... ... ... ... ... ...) (lambda ... ...) nil setcar] [cl-struct-haskell-command (nil ... ... ... #1 ... ... ... ... ... ... ...) (lambda ... ...) nil setcar] [cl-struct-haskell-command (... #0 "1" 0) #[... "db�Âc�d�à �A@²�Ä   AA@!\"�Å  �A@²�Æ\"" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"�" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]] ...) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 691 in *course*> . #<marker (moves after insertion) at 691 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command ... #[... "�Â=���à  @ÄÅÆÇ   @!!\"\"�à @ÄÈÆÇ   @!!ÉÊ$\"�" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[... "�A���ÂÃ�@!!�Ä�A!�)ÅÆ!�" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"�" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command ... #[... "�Â=���à @ÄÅÆÇ   @!!\"\"�à @ÄÈÆÇ   @!!ÉÊ$\"�" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[... "�A���ÂÃ�@!!�Ä�A!�)ÅÆ!�" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command ... ... nil setcar] [cl-struct-haskell-command ... #[... "db�Âc�d�à   �A@²�Ä   AA@!\"�Å  �A@²�Æ\"�" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]] [cl-struct-haskell-command ... ... nil setcar] [cl-struct-haskell-command ... ... nil setcar] [cl-struct-haskell-command ... ... nil setcar] [cl-struct-haskell-command ... #[... "db�Âc�d�à  �A@²�Ä   AA@!\"�Å  �A@²�Æ\"" [haskell-interactive-mode-result-end state "
" haskell-process-send-string haskell-interactive-mode-multi-line haskell-process-set-evaluating t] 4] #[... "ÆÇ�AA@\"���Æ�AA@È\"?�6��AAA@�É
Ê� ËO#�Ì�@\"��AA���GC¡�+Ë�" [state cursor haskell-process-prompt-regex buffer next v string-prefix-p ":q" ":quit" replace-regexp-in-string "" nil ...] 7] #[... "Â��A@²�Ã\"�Ä�  \"?���Å�  \"" [state response haskell-process-set-evaluating nil haskell-interactive-mode-trigger-compile-error haskell-interactive-mode-expr-result] 3]] ...) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "Á�@ÂÃ�A\"���ÄÅ�A\"���ÄÆ�A\"\"" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "ÁÂ�\"���ÁÃ�\"?���Ä�!�" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1)))

@gracjan
Copy link
Contributor

gracjan commented Mar 30, 2015

@sritchie: Could you run the git, not compiled version? I do not think we can find more info in those binary dumps...

@gracjan
Copy link
Contributor

gracjan commented Mar 30, 2015

The interesting part contains no information:

(current-command .
   [cl-struct-haskell-command
       ...
       #[... "Á@ÂÃA\"� ÄÅA\"� ÄÆA\"\"�"
       [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5]
       nil
       #[... "ÁÂ\"� ÁÃ\"?� Ä!�"
           [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]])

@sritchie
Copy link

here's what I get when I kill all *.elc files. Unfortunately it doesn't look that helpful either. Seems like emacs lisp hides the lambda bodies. Checking if there's some way I can force these to print. (I'm in the #haskell IRC channel as sritchie if you're on, btw, happy to give you better turnaround time on this stuff)

((name . "course")
 (current-response-cursor . 0)
 (current-response . "")
 (command-queue
  [cl-struct-haskell-command (#0) (lambda ... ...) nil (lambda ... ... ...)]
  [cl-struct-haskell-command (... #0 "1" 0) (lambda ... ... ... ... ... ...) (lambda ... ...) (lambda ... ... ...)]
  [cl-struct-haskell-command (... #0 "1" 0) (lambda ... ... ... ... ... ...) (lambda ... ...) (lambda ... ... ...)]
  [cl-struct-haskell-command (... #0 "1" 0) (lambda ... ... ... ... ... ...) (lambda ... ...) (lambda ... ... ...)]
  [cl-struct-haskell-command (... #0 "1" 0) (lambda ... ... ... ... ... ...) (lambda ... ...) (lambda ... ... ...)]
  [cl-struct-haskell-command (... #0 "1" 0) (lambda ... ... ... ... ... ...) (lambda ... ...) (lambda ... ... ...)])
 (inferior-process . #<process course>) (is-restarting)
 (current-command . [cl-struct-haskell-command
                     (#0) (lambda ... ...) nil (lambda ... ...)])
 (suggested-imported)
 (sent-stdin)
 (evaluating)
 (session (name . "course")
          (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion)
                             at 300 in *course*>)
          (next-error-locus)
          (interactive-buffer . #<buffer *course*>)
          (current-dir . "/Users/sritchie/code/haskell/course/")
          (target . "")
          (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853")
          (cabal-dir . "/Users/sritchie/code/haskell/course/")
          (process (name . "course")
                   (current-response-cursor . 0)
                   (current-response . "")
                   (command-queue [cl-struct-haskell-command ... ... nil ...] [cl-struct-haskell-command ... ... ... ...] [cl-struct-haskell-command ... ... ... ...] [cl-struct-haskell-command ... ... ... ...] [cl-struct-haskell-command ... ... ... ...] [cl-struct-haskell-command ... ... ... ...])
                   (inferior-process . #<process course>)
                   (is-restarting)
                   (current-command . [cl-struct-haskell-command ... ... nil ...])
                   (suggested-imported)
                   (sent-stdin)
                   (evaluating)
                   #1)))

@sritchie
Copy link

Boom, adjusted the print depth and level and now I get this:

((name . "course")
 (current-response-cursor . 0)
 (current-response . "")
 (command-queue [cl-struct-haskell-command (#0) (lambda (state) (if (eq system-type (quote windows-nt)) (haskell-process-send-string (car state) (format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" (haskell-session-cabal-dir (haskell-process-session (car state))))) (haskell-process-send-string (car state) (format ":!cd %s && %s | %s" (haskell-session-cabal-dir (haskell-process-session (car state))) "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x")))) nil (lambda (state response) (if (cdr state) (progn (let ((tags-file-name (haskell-session-tags-filename (haskell-process-session (car state))))) (find-tag (cdr state))))) (haskell-mode-message-line "Tags generated."))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #5))) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #5))) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #5))) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #5))) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #5))) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #4))) (lambda (s) (haskell-process-send-string (cdr s) ":type isHappy")) nil setcar] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #4))) (lambda (s) (haskell-process-send-string (cdr s) ":type isHappy")) nil setcar] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #4))) (lambda (s) (haskell-process-send-string (cdr s) ":type isHappy")) nil setcar]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0) (lambda (state) (if (eq system-type (quote windows-nt)) (haskell-process-send-string (car state) (format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" (haskell-session-cabal-dir (haskell-process-session (car state))))) (haskell-process-send-string (car state) (format ":!cd %s && %s | %s" (haskell-session-cabal-dir (haskell-process-session (car state))) "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x")))) nil (lambda (state response) (if (cdr state) (progn (let ((tags-file-name (haskell-session-tags-filename (haskell-process-session (car state))))) (find-tag (cdr state))))) (haskell-mode-message-line "Tags generated."))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #2) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #2) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #2) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #2) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (((name . "course") (next-error-region #<marker at 300 in *course*> . #<marker (moves after insertion) at 300 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") #2) #0 "1" 0) (lambda (state) (goto-char (point-max)) (insert "
") (setq haskell-interactive-mode-result-end (point-max)) (haskell-process-send-string (cadr state) (haskell-interactive-mode-multi-line (car (cdr (cdr state))))) (haskell-process-set-evaluating (cadr state) t)) (lambda (state buffer) (if (and (string-prefix-p ":q" (car (cdr (cdr state)))) (string-prefix-p (car (cdr (cdr state))) ":quit")) nil (let* ((cursor (car (cdr (cdr (cdr state))))) (next (replace-regexp-in-string haskell-process-prompt-regex "" (substring buffer cursor)))) (haskell-interactive-mode-eval-result (car state) next) (let* ((v (cdr (cdr state)))) (setcdr v (list (length buffer)))) nil))) (lambda (state response) (haskell-process-set-evaluating (cadr state) nil) (if (haskell-interactive-mode-trigger-compile-error state response) nil (haskell-interactive-mode-expr-result state response)))] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #3 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #1) (lambda (s) (haskell-process-send-string (cdr s) ":type isHappy")) nil setcar] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #3 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #1) (lambda (s) (haskell-process-send-string (cdr s) ":type isHappy")) nil setcar] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #3 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #1) (lambda (s) (haskell-process-send-string (cdr s) ":type isHappy")) nil setcar]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) (lambda (state) (haskell-process-send-string (car state) (if (string-match "^[A-Za-z_]" (cdr state)) (format ":info %s" (cdr state)) (format ":info (%s)" (cdr state))))) nil (lambda (state response) (if (or (string-match "^Top level" response) (string-match "^<interactive>" response)) nil (haskell-mode-message-line response)))]) (suggested-imported) (sent-stdin) (evaluating) #1)))

@sritchie
Copy link

sritchie commented Apr 2, 2015

Not sure if it's related to this bug, but ever since upgrading to the latest haskell-mode (the 3-30 build on git) I'm getting freezes almost every other character. Not sure what process is hogging. These go away if I kill the interactive process.

@sritchie
Copy link

sritchie commented Apr 2, 2015

It seems like before, the main buffer would keep running when the repl locked. Now if the repl locks, the main buffer gets stuck as well.

This issue DOES go away if I back off to 13.12 from melpa-stable.

@sritchie
Copy link

sritchie commented Apr 2, 2015

I'm also not providing that much info, but I did enable toggle-debug-on-quit, which gave me a trace when I had to kill the process that was stopping up my Haskell buffer:

Debugger entered--Lisp error: (quit)
  accept-process-output(#<process course> 1)
  haskell-process-queue-flush(((name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0 . "Num") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "square") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "�\302=\203��\303    @\304\305\306\307   @!!\"\"\207\303 @\304\310\306\307   @!!\311\312$\"\207" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[(state response) "�A\203��\302\303�@!!�\304�A!\210)\305\306!\207" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 282 in *course*> . #<marker (moves after insertion) at 282 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #4))) (lambda (s) (haskell-process-send-string (cdr s) ":type square")) nil setcar]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 282 in *course*> . #<marker (moves after insertion) at 282 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0 . "Num") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "square") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "�\302=\203��\303    @\304\305\306\307   @!!\"\"\207\303 @\304\310\306\307   @!!\311\312$\"\207" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[(state response) "�A\203��\302\303�@!!�\304�A!\210)\305\306!\207" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #3 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1) (lambda (s) (haskell-process-send-string (cdr s) ":type square")) nil setcar]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1))))
  haskell-process-queue-sync-request(((name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0 . "Num") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "square") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "�\302=\203��\303 @\304\305\306\307   @!!\"\"\207\303 @\304\310\306\307   @!!\311\312$\"\207" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[(state response) "�A\203��\302\303�@!!�\304�A!\210)\305\306!\207" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 282 in *course*> . #<marker (moves after insertion) at 282 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") #1 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #4))) (lambda (s) (haskell-process-send-string (cdr s) ":type square")) nil setcar]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) (session (name . "course") (next-error-region #<marker at 282 in *course*> . #<marker (moves after insertion) at 282 in *course*>) (next-error-locus) (interactive-buffer . #<buffer *course*>) (current-dir . "/Users/sritchie/code/haskell/course/") (target . "") (cabal-checksum . "6b98f5fe887cf741a9a9382f63a93853") (cabal-dir . "/Users/sritchie/code/haskell/course/") (process (name . "course") (current-response-cursor . 0) (current-response . "") (command-queue [cl-struct-haskell-command (#0 . "Num") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "a") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "square") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0 . "x") #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]] [cl-struct-haskell-command (#0) #[(state) "�\302=\203��\303    @\304\305\306\307   @!!\"\"\207\303 @\304\310\306\307   @!!\311\312$\"\207" [system-type state windows-nt haskell-process-send-string format ":!powershell -Command \"& { cd %s ; hasktags -e -x (ls -fi *.hs *.lhs *.hsc -exclude \\\"#*#\\\" -name -r) ; exit }\"" haskell-session-cabal-dir haskell-process-session ":!cd %s && %s | %s" "find . -name '*.hs' -print0 -or -name '*.lhs' -print0 -or -name '*.hsc' -print0" "xargs -0 hasktags -e -x"] 7] nil #[(state response) "�A\203��\302\303�@!!�\304�A!\210)\305\306!\207" [state tags-file-name haskell-session-tags-filename haskell-process-session find-tag haskell-mode-message-line "Tags generated."] 3]] [cl-struct-haskell-command (nil (name . "course") (current-response-cursor . 0) (current-response . "") #3 (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command ... #[... "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[... "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1) (lambda (s) (haskell-process-send-string (cdr s) ":type square")) nil setcar]) (inferior-process . #<process course>) (is-restarting) (current-command . [cl-struct-haskell-command (#0) #[(state) "\301�@\302\303�A\"\203��\304\305�A\"\202��\304\306�A\"\"\207" [state haskell-process-send-string string-match "^[A-Za-z_]" format ":info %s" ":info (%s)"] 5] nil #[(state response) "\301\302�\"\206��\301\303�\"?\205��\304�!\207" [response string-match "^Top level" "^<interactive>" haskell-mode-message-line] 3]]) (suggested-imported) (sent-stdin) (evaluating) #1))) ":type square")
  haskell-process-get-type("square" identity t)
  haskell-doc-current-info--interaction(t)
  haskell-doc-show-type()
  haskell-doc-mode-print-current-symbol-info()
  apply(haskell-doc-mode-print-current-symbol-info nil)
  byte-code("r\301�\302H�\303H\"\210)\301\207" [timer apply 5 6] 4)
  timer-event-handler([t 0 0 500000 t haskell-doc-mode-print-current-symbol-info nil idle 0])

@gracjan
Copy link
Contributor

gracjan commented Apr 3, 2015

@sritchie: can you disable 'stylish-haskell-on-safe', 'flycheck-haskell' and generally any automatic thing for the buffer and see if it still hangs?

@gracjan
Copy link
Contributor

gracjan commented Apr 3, 2015

@sritchie: disable this also: haskell-doc-mode-print-current-symbol-info

@geraldus
Copy link
Contributor

geraldus commented Apr 8, 2015

I've faced similar issue: when I type haskell code and make very short delay Emacs hangs for couple of seconds. During that hangs all I can do is wait. After a long investigation I can claim that this is because FlyCheck. Finally I have this setup:

  • haskell-mode
  • company-mode (completions via ghc-mod backend — company-ghc)
  • interactive-haskell-mode
  • structured-haskell-mode
  • haskell-decl-scan
  • haskell-doc-mode
  • haskell-stylish-on-save t
  • haskell-tags-on-save t

which works flawlessly and quite smooth. I had to test almost everything mentioned above disabling to and fro, finally the last thing I disabled was flycheck-mode, and this resolved hanging issue completely (thus above combination become possible again).

Important notice: it is possible to make FlyCheck operates normally; to do that I've disabled haskell-ghc checker and «plugged—in» haskell-flycheck from Chris' repository:

(require 'haskell-flycheck)
(add-hook
 'haskell-mode-hook
 (lambda () (flycheck-disable-checker 'haskell-ghc)))

@chrisdone
Copy link
Member

I think the problem with this issue is that we're lacking an isolated reproducible test-case. Failing that I don't anticipate solving it any time soon as I'm unable to reproduce these lock-ups.

@geraldus
Copy link
Contributor

geraldus commented Apr 9, 2015

Don't mind me, now I have hangs back, and can't beat them in fast way (I mean I need to recked all that stuff again). I'll make isolated environment using docker or vagrant and see could I reproduce this behaviour there.

@lukehoersten
Copy link
Member

@geraldus I think the issue you're seeing is different than what this issue is about. For example, your whole emacs is freezing while this issue #447 is about the haskell-process ceasing to respond. Emacs keeps responding.

I think I've reproduced your frozen emacs issue. It seems to be caused by company-mode for some reason. Turning company mode off alleviates all emacs freezing issues for me.

@geraldus
Copy link
Contributor

I think the issue you're seeing is different than what this issue is about

First of all excuse me for off topic in this case

@lukehoersten your guess seems to be right. CompAny works well when ghc-mod works properly, and it hangs when ghc-mod gives unusual output. This is related to version of ghc-mod I'm using, see DanielG/ghc-mod#460. What is the best place to continue conversation of my issue?

@MichaelXavier
Copy link
Contributor Author

@chrisdone I don't think anyone in this thread is trying to drag their feet about a reproducible test case. I won't speak for others but for myself I don't know how to boil this complicated integration into a test case. The best I can say is that it happens frequently enough that I'd have no trouble catching the problem in the act and dumping state, but this thread may need more guidance to whittle this down. What steps would you take if you were experiencing this issue like we are?

@geraldus
Copy link
Contributor

Sorry guys, there was some unforeseen circumstances which make me out of business for some time. Now I facing «No space left on device» with my docker, I hope I will be able handle this tomorrow and finish image for Emacs + Haskell-mode testings.

@gracjan
Copy link
Contributor

gracjan commented Nov 20, 2015

Lets declare defeat here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants