Прерывания операторов Haskell в GHCi, кажется, нарушают cmd - PullRequest
0 голосов
/ 27 апреля 2018

Я только начинаю с Haskell и играю с GHCi в cmd. После попытки чего-то, что я видел на PPCG , я столкнулся с проблемой. Всякий раз, когда я прерываю fix с помощью control-C, все умирает:

C:\Users\Scrooble>ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Prelude> import Data.Function
Prelude Data.Function> fix (\x -> x + 1)
In^tCerrupte
d.
C:\Users\Scrooble>Prelude Data.Function> exit

(зависает)

^ и C были моим прерыванием клавиатуры. exit тоже мой.

Cerrupted правильно! Что здесь происходит?! Я, кажется, на полпути вышел из GHCi. Когда я прерываю exit (приглашение Prelude Data.Function> снова) и :q его, cmd иногда просто закрывается, а иногда запрашивает C:\Users\Scrooble еще раз; однако, когда это происходит, первый символ всех моих команд игнорируется!

C:\Users\Scrooble>exit
'xit' is not recognized as an internal or external command,
operable program, or batch file.

0.o

Я один в этом? Есть ли fix (га) (кроме глупостей)?

HP ProBook 4535s, с Windows 7 Professional, 64-разрядная. Процессор AMD A4-3300M APU.

То же самое происходит и в PowerShell. В Git Bash окно зависает после того, как я прерываю fix.

Edit:

Я испытал это, когда прерывал другую бесконечную рекурсию, например, мой метод слияния, который (упс!) Не рассматривал синглтоны как обязательно отсортированные.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Похоже, у вас установлена ​​ платформа Haskell , установленная в Windows. Я привык к этому, но сейчас я запускаю все через Stack , так что я могу вспомнить следующее неправильно.

IIRC, однако, когда вы пытаетесь запустить ghci в Windows, он явно печатает предупреждение о том, что ghci, как известно, имеет проблемы с командами прерывания в Windows, и что вместо этого вы должны запустить GHCi через пакетную команду ghcii.bat.

Когда я использовал платформу Haskell, я всегда работал с ghcii.bat, и, как правило, таких проблем не было. Я всегда использовал Haskell из Git Bash, который является моим CLI по умолчанию в Windows, так что это также может быть определяющим фактором.

В наши дни я использую стек в Windows 10, и из Git Bash я не могу воспроизвести проблему:

$ stack ghci
Prelude> :m +Data.Function
Prelude Data.Function> fix (\x -> x + 1)
Interrupted.
Prelude Data.Function>

В строке Interrupted. я нажимаю Ctrl + C . Когда я это сделал, приложение для блокировки fix немедленно закрылось, и REPL был готов к действию.

0 голосов
/ 27 апреля 2018

Я думаю, это может быть исправлено в ghc-8.2.2.

...