作为一个初学者,我觉得阅读器/写入/状态Monad很难理解。而Monad变形金刚则更加困难。我看不到它们在其他语言中的用法,这使我很难将它们与我现有的Web开发经验联系起来。
是否有可能在对初学者友好的Haskell中构建与Postgres对话的Restful API?无需使用诸如Monads / Monad Transformers之类的高级内容的含义。
答案 0 :(得分:7)
通常可以编写Haskell程序而无需处理monad转换器或诸如Reader,Writer和State之类的monad。你无法避免的一个单子是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中或net.http在Go中工作的方式相同。
如果在某个时候您认为monad转换器有用并且会使您的代码更简单,那么以后可以随时尝试。但是它们绝不是必需的。