Прежде всего, я не считаю, что node.js делает правильные вещи, выставляя все эти обратные вызовы. Вы заканчиваете тем, что пишете свою программу в CPS (стиль передачи продолжения), и я думаю, что это преобразование должно быть задачей компилятора.
События: без манипуляций с потоками, программист обеспечивает только обратные вызовы (как в Snap Framework)
Итак, помня об этом, вы можете писать, используя асинхронный стиль, если хотите, но при этом вы упустите запись в эффективном синхронном стиле, с одним потоком на запрос. Haskell невероятно эффективен в синхронном коде, особенно по сравнению с другими языками. Это все события внизу.
Обратные вызовы гарантированно выполняются в одном потоке: условия гонки невозможны.
У вас все еще может быть состояние гонки в node.js, но это сложнее.
Каждый запрос находится в отдельной теме. Когда вы пишете код, который должен взаимодействовать с другими потоками, очень просто сделать его потокобезопасным благодаря примитивам параллелизма haskell.
Приятный и простой UNIX-дружественный API. Бонус: отличная поддержка HTTP. DNS также доступен.
Взгляните на хакерство и убедитесь сами.
Каждый ввод / вывод по умолчанию является асинхронным (хотя иногда это может раздражать). Это позволяет избежать замков. Однако слишком большая загрузка ЦП в обратном вызове повлияет на другие соединения (в этом случае задача должна быть разбита на более мелкие подзадачи и перепланирована).
У вас нет таких проблем, ghc будет распределять вашу работу среди реальных потоков ОС.
Один и тот же язык для клиентской и серверной сторон. (Однако я не вижу в этом особого смысла. JQuery и Node.js разделяют модель программирования событий, но остальное сильно отличается. Я просто не вижу, как совместное использование кода на стороне сервера и на стороне клиента может быть полезным на практике.)
Хаскелл не может здесь выиграть ... верно? Подумайте еще раз, http://www.haskell.org/haskellwiki/Haskell_in_web_browser.
Все это упаковано в один продукт.
Скачать GHC, запустить клику. Есть пакет для каждой потребности.