haskell - 绑定(bind)链中更平滑的类型注释

标签 haskell

所以我有这个工作示例(Snap + Postgres):

listBooks :: AppHandler ()
listBooks = do
  results <- query_ "select * from books"
  writeJSON $ (results :: [Book])

作为一个练习,我试图用 >>= 重写它。运算符,但需要注释类型会破坏美观。我想不出比这更好的了:
query_ "select * from books" >>= return.(\x -> x :: [Book]) >>= writeJSON

还有其他“更顺畅”的方式吗? (最好不指定包装单子(monad)类型)

最佳答案

你可以稍微缩短到

query_ "select * from books" >>= writeJSON . (\x -> x :: [Book])

除此之外,还没有,尽管有计划为快捷语法实现 GHC 扩展
(:: [Book]) = (\x -> x :: [Book])

@duplode's link
似乎它的代码是 3 天前开始编写的,所以应该在下一个 GHC 版本中。

关于haskell - 绑定(bind)链中更平滑的类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320818/

相关文章:

haskell - 将树转换为函数图库树的优雅方法?

Haskell 最佳实践 : Early termination in Haskeline

haskell - 为什么 GHCi 在此实例声明中报告 "A constraint must be a monotype"?

list - 为什么 Haskell 允许 Shape 列表,但不允许 Square 或 Circle 或 Triangle 列表

ruby - 使用 pandoc ruby​​ 将 HTML 和内联 Mathjax 数学转换为 LaTeX

string - 在 Haskell 中,如何检查一个字符串是否是另一个字符串的子字符串?

string - 在字符串 Haskell 之间交换字符

c - 将 C 代码翻译成 Haskell

haskell - 如何删除两个具有不同输出类型的相同 Haskell 函数中的重复代码?

haskell - 如何创建多变量 Haskell 函数?