【发布时间】:2012-04-14 01:32:48
【问题描述】:
我正在考虑使用 Haskell 的类型系统在程序中强制执行模块化的方法。例如,如果我有一个 Web 应用程序,我很好奇是否有办法将所有数据库代码与 CGI 代码、文件系统代码与纯代码分开。
例如,我正在设想一个 DB monad,所以我可以编写如下函数:
countOfUsers :: DB Int
countOfUsers = select "count(*) from users"
我希望不可能使用 DB monad 支持的副作用之外的副作用。我正在描绘一个更高级别的 monad,它仅限于直接 URL 处理程序,并且能够组合对 DB monad 和 IO monad 的调用。
这可能吗?这是明智的吗?
更新:我最终用 Scala 而不是 Haskell 实现了这一点:http://moreindirection.blogspot.com/2011/08/implicit-environment-pattern.html
【问题讨论】:
标签: haskell types type-systems