haskell - 是否可以在不使用 Reader/Writer/State Monad 或 Monad Transformer 的情况下在 Haskell 中构建 Restful API
问题描述
作为一个初学者,我觉得 Reader/Write/State Monad 很难理解。而 Monad Transformers 更是难上加难。我看不到它们在其他语言中的用法,这让我有点难以将它们与我现有的 Web 开发经验联系起来。
是否可以在初学者友好的 Haskell 中构建一个与 Postgres 对话的 Restful API?意思是不使用像 Monads/Monad Transformers 这样的高级东西。
解决方案
通常可以在不处理 monad 转换器或各种 monad(如 Reader、Writer 和 State)的情况下编写 Haskell 程序。你无法避免的一个单子是 IO。
例如,查看Warp文档中的示例代码:
app :: Application
app req respond = bracket_
(putStrLn "Allocating scarce resource")
(putStrLn "Cleaning up")
$ respond $ responseStream status200 [] $ \write flush -> do
write $ byteString "Hello\n"
flush
write $ byteString "World\n"
这一切都是由函数调用和 IO monad 组成的。你也可以自由地用这种风格编写代码……它的某些部分看起来与你用其他语言编写的相同代码非常相似。基本上,您编写一个带有两个参数的函数:一个是 HTTP 请求,另一个参数是您可以用来编写响应的东西。这与WSGI在 Python 中的工作方式或在 Go 中的net.http工作方式相同。
如果在某些时候您认为 monad 转换器很有用并且可以使您的代码更简单,那么您可以稍后再尝试。但无论如何,它们都不是必需的。
推荐阅读
- android - 如何以编程方式从服务(背景)的任何位置在移动设备(android)上截取屏幕截图?
- python - 为什么 Python "is" 运算符对包含相同字符串的变量给出不同的结果
- javascript - 为什么分配给对象 __proto__ 不起作用?
- ruby-on-rails - package.json 中是否有相当于 `^version` 的 Gemfile?
- reactjs - 从输入组件中获取值并在 React 中的另一个组件中使用它
- r - 从季度到年度数据
- php - 为什么我可以在 PHP5 中传递不带引号的回调函数?
- django - 如何为 WSGIPassAuthorization On 设置配置文件以在 django 中使用 apache 进行令牌身份验证
- php - 包含另一个 php 文件后页面不显示内容
- c# - Powershell 字符串插值是否支持格式说明符