Val :: Int -> Expr a
для любой a
. Таким образом,
Val x <*> _ = Val x
является действительным, как и
_ <*> Val y = Val y
, как и
Val x <*> Val y = Val (something about x and y)
, поэтому, к сожалению, теперь у вас есть выбор, что означает, что вы собираетесь сделать неправильный К счастью, только один из них совместим с экземпляром Monad
(какой?).
Что касается рекурсивного случая, у вас есть
Add e e' <*> fb = ...
-- e :: Expr (a -> b)
-- e' :: Expr (a -> b)
-- fb :: Expr a
И вы должны использовать всю входящую информацию для создания Expr b
, а также для сохранения «структуры» (Add
). Каким образом вы можете сделать Expr b
из этого (помните, что вы можете использовать аппликативный оператор рекурсивно)?
Из-за ошибок в WebStart, да. WebStart запускает "безопасный поток" в своих собственных целях, который взаимодействует с EDT. Этот SecureThread предотвращает автоматическое завершение процесса Java, который можно было бы ожидать, когда все окна и ресурсы AWT расположены.
Для получения дополнительной информации см. http://www.pushing-pixels.org/?p=232
EDT AWT обычно является преступником. В течение нескольких лет теперь это имело некоторую логику для завершения работу, когда нет никаких не склонных окон. Однако существуют текущие проблемы с утечками, включая в рамках реализации AWT и Swing. Поэтому я настоятельно рекомендую использовать System.exit в производственных выпусках (Вы могли бы возможно хотеть пропустить его, чтобы некоторое тестирование обнаружило утечки).
Поток WebStart должен все быть демоном, когда нет никаких системных окон (консоль, javax.jnlp сервисы и другие диалоговые окна) показа.
Рассмотрите присоединение с jconsole и получите взгляд на то, что делает JVM.
Webstart запускает Консоль (Вы можете отключать это). Консоль используется для наблюдения stdout/err процесса webstart, а также элементарного журнала/отладки, но имеет побочный эффект созданных окно AWT/Swing верхнего уровня. Так как AWT/EDT только заканчивается, когда окно LAST расположено, консоль держит Ваше приложение. Необходимо, вероятно, назвать System.exit (), чтобы быть на 100% уверенными выходы приложения (если Вы не можете gurantee определенная клиентская конфигурация, webstart выключенная консоль),
Я испытываю ту же проблему с веб-запуском. Если я выключаю консоль Java, процесс не зависает. Какой-либо известный идентификатор ошибки от Sun?