Задать вопрос

Как реализуется GUI на чистом функциональном языке без состояния (например, на Haskell)?

Скажите, как на чистом функциональном языке без состояния (например, на Haskell) можно реализовать GUI? Ведь для GUI необходимо состояние (например, для поля ввода нужна переменная, в которую будет сохраняться вводимый в поле ввода текст).

Я не беру в расчёт ситуации, когда для Haskell пишутся GUI библиотеки на другом, более низкоуровневом языке (с состоянием). Мне интересно, как можно реализовать работоспособный GUI элемент (то же поле ввода) на чистом Haskell? И возможно ли это? Видел в обсуждениях упоминание о GUI на Haskell, но какая техника стоит за этим так и не понял.
  • Вопрос задан
  • 7098 просмотров
Подписаться 7 Оценить Комментировать
Решения вопроса 1
leventov
@leventov
C чего вы взяли, что в Хаскеле «нет состояния»? С состоянием позволяют работать монады ST, State (трансформер StateT), и, конечно, IO. Это может работать местами менее производительно, без каких-то доп. гарантий, но это полноценная рабочая часть языка — факт. И да, ST и IO вполне можно реализовать на самом Хаскеле.

Вместо изменения значения поля в структуре создается новая структура, дублирующая все поля из старой, кроме поля, которое надо изменить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@egorinsk
Можно сделать чистую функцию, которая вернет состояние формы в зависимости от текста других полей, состояния чекбоксов, передвижения мыши и прочих внешних переменных.
Ответ написан
@potan
Функциональный программист
Смотрите "Functional Reactive Programming". Упрощенно говоря программа получает поток событий и возвращает поток ответных действий.
Ответ написан
Комментировать
youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM
Для любого языка имеются библиотеки, написанные на более низком уровне. Для одних языков их больше, для других — меньше.
Как делаются библиотеки под Haskell я не знаю, но Вас интересует именно аспект, связанный с сохранением чистоты при работе с GUI. На уровне использования языка, сохранить чистоту можно, оборачивая все «нечистые» вычисления в монады, например, в IO. Удобно использовать представление, которое в математике называется категорией Клейсли, когда «нечистая» функция A -> B превращается в чистую A -> IO B. Примеры привёл egorinsk комментарием выше.
Ответ написан
afiskon
@afiskon
Лучше поздно, чем никогда.

Например. Дело в том, что состояние на самом деле есть, даже в Haskell.
Ответ написан
Комментировать
@Maverik
Думаю, неплохой ответ на этот вопрос можно найти тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы