Я думаю о том, как использовать систему типа Haskell для обеспечения модульности в программе. Например, если у меня есть веб-приложение, мне любопытно, есть ли способ отделить весь код базы данных от кода CGI от кода файловой системы от чистого кода.
Например, я представляю монаду DB, поэтому я мог писать такие функции, как:
countOfUsers :: DB Int
countOfUsers = select "count(*) from users"
Я бы хотел, чтобы было невозможно использовать побочные эффекты, отличные от тех, которые поддерживаются монадой DB. Я представляю монаду более высокого уровня, которая была бы ограничена прямыми обработчиками URL-адресов и могла бы составлять вызовы в монаду БД и монаду IO.
Возможно ли это? Это мудрое?
Обновление. Я закончил достижение этого с помощью Scala вместо Haskell: http://moreindirection.blogspot.com/2011/08/implicit-environment-pattern.html p >