из этой темы
http://groups.google.com/group/leksah/browse_thread/thread/7d3e3bf64e56f190/30278795c23b2168
Это известная проблема, которую мы еще не рассмотрели. Мы посылаем команды GCHi на его стандартный ввод, но у нас нет и хорошего способа отправить туда пользовательский ввод.
Я не уверен, как мы должны это исправить. Мы не можем отправить пользовательский ввод в процесс, который отлаживается с помощью нашего командного канала (наш код ожидает приглашения от ghci перед отправкой команд).
Если мы настроим какой-либо способ отправки данных на стандартный ввод без ожидания, это может помешать отправляемым нами командам GHCi (потому что они все еще идут по одному каналу).
Нам нужно выяснить, есть ли какой-нибудь способ, которым мы можем иметь отдельные каналы stdin / stdout / stderr для самого GHCi, и программа GHCi отлаживается.
В то же время вы можете сделать так, чтобы ваше приложение открывало сокет или именованный канал и записывало входные данные с другого терминала. Как то так (не проверено) ...
main = do
sock <- listenOn (PortNumber 8000)
-- Start a new terminal window (this command needs to be changed for OS X or Windows)
forkIO $ system "gnome-terminal -e \"telnet localhost 8000\""
(handle, _, _) <- accept sock -- Wait for the new terminal to connect
-- You might want to add a call to hSetBuffering here
line <- hGetLine handle
print line
sClose sock
(Вам нужно будет добавить процесс и сеть к зависимостям вашего пакета. Затем Ctrl + R должен добавить необходимые операторы импорта.)
Это позволит взаимодействовать, но держите лекды в чистоте, чтобы лексы могли разговаривать с ghci. В идеале вы должны держать stdout и stderr в чистоте и вместо этого писать в этот сокет, но Leksah должен довольно хорошо справляться с произвольным выводом.