-
Notifications
You must be signed in to change notification settings - Fork 347
Repl hanging #447
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
Comments
I would start by setting |
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:
I find that if I just execute that find command, 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. |
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:
|
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. |
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. |
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 |
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) |
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. |
C-c C-c? |
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. |
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. |
I'm having the same problem myself. For me at least, it would seem that I can
It's after 4 when it locks up with no indication |
I'm seeing this issue as well. It looks like #536 might be a duplicate. (haskell-process-clear) |
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 |
@lukehoersten: next time it hangs can you check what is the output of |
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))) |
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. |
Here's one I got to happen in my test code.
|
The command that is stuck is this one:
I do not see why should it be stuck... @lukehoersten, @sritchie, @zovt, @MichaelXavier: can you |
I reinstalled I deleted the ELPA package, restarted emacs, reinstalled, restarted again and everything looks good. |
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. |
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))) |
@sritchie: Could you run the git, not compiled version? I do not think we can find more info in those binary dumps... |
The interesting part contains no information:
|
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))) |
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))) |
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. |
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. |
I'm also not providing that much info, but I did enable
|
@sritchie: can you disable 'stylish-haskell-on-safe', 'flycheck-haskell' and generally any automatic thing for the buffer and see if it still hangs? |
@sritchie: disable this also: haskell-doc-mode-print-current-symbol-info |
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:
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 Important notice: it is possible to make FlyCheck operates normally; to do that I've disabled (require 'haskell-flycheck)
(add-hook
'haskell-mode-hook
(lambda () (flycheck-disable-checker 'haskell-ghc))) |
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. |
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. |
@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 I think I've reproduced your frozen emacs issue. It seems to be caused by |
First of all excuse me for off topic in this case @lukehoersten your guess seems to be right. CompAny works well when |
@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? |
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. |
Lets declare defeat here. |
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 tohaskell-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 await4
.This doesn't seem to really happen on smaller project, which makes this hard to reproduce.
Some system info:
Any ideas on how I can troubleshoot this/get you more info?
Thanks!
The text was updated successfully, but these errors were encountered: