Closed MichaelXavier closed 8 years ago
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.
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.
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'
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 (haskell-process)
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 https://github.com/haskell/haskell-mode/issues/536 might be a duplicate. (haskell-process-clear)unhangs my repl; I've bound that command to
f7` for now so I can at least keep moving. This happens a lot, and seems to be triggered by hasktags in my case.
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.
@LukeHoersten: next time it hangs can you check what is the output of (haskell-commands-process)
?
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Âcdà 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#Ì@\"AAGC¡+Ë" [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Âcdà 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#Ì@\"AAGC¡+Ë" [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Âcdà 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#Ì@\"AAGC¡+Ë" [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Âcdà 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#Ì@\"AAGC¡+Ë" [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.
((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)))
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?
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.
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Âcdà 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#Ì@\"AAGC¡+Ë" [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Âcdà 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#Ì@\"AAGC¡+Ë" [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Âcdà 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#Ì@\"AAGC¡+Ë" [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Âcdà 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#Ì@\"AAGC¡+Ë" [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:
(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]])
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 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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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@!!\304A!\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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@!!\304A!\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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@!!\304A!\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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@!!\304A!\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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\303A\"\203 \304\305A\"\202 \304\306A\"\"\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])
@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:
company-ghc
)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)))
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 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.
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 https://github.com/kazu-yamamoto/ghc-mod/issues/460. What is the best place to continue conversation of my issue?
@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!