是否可以在Haskell中构建Restful API而不使用阅读器/编写器/状态Monad或Monad Transformer

时间:2018-07-16 17:51:15

标签: haskell

作为一个初学者,我觉得阅读器/写入/状态Monad很难理解。而Monad变形金刚则更加困难。我看不到它们在其他语言中的用法,这使我很难将它们与我现有的Web开发经验联系起来。

是否有可能在对初学者友好的Haskell中构建与Postgres对话的Restful API?无需使用诸如Monads / Monad Transformers之类的高级内容的含义。

1 个答案:

答案 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转换器有用并且会使您的代码更简单,那么以后可以随时尝试。但是它们绝不是必需的。