haskell - $forall : why it doesn't bring deconstructed members in scope? 中的小村庄模板和解构数据

标签 haskell yesod hamlet

在 Yesod 中,在路由处理程序中使用 whamletFile 函数时,我在 $forall 构造中解构记录时遇到问题。

我有这个数据记录:

data Foo a = Foo (a, Int, Int)

在 hamlet 模板文件中,我遍历 [Foo] 的实例并尝试使用解构语法:

$forall (Foo (a, b, c)) <- foos
  <li>#{a}

编译时失败并显示此消息Not in range: 'a'

虽然这不会失败并且会正确处理 forall 构造:

$forall (Foo (a, b, c)) <- foos
  <li>nothing special

知道为什么使用解构语法无法将项目纳入范围吗?

最佳答案

你的解构语法是错误的。试试这个:

$forall Foo (a, b, c) <- foos
    <li>#{a}

此外,您的数据声明实际上声明了一种具有一个字段的类型 - 一个元组。如果您想声明具有 3 个字段的类型,您的语法应该有所不同:

data Foo a = Foo a Int Int

它的解构更加自然:

$forall Foo a b c <- foos
    <li>#{a}

关于haskell - $forall : why it doesn't bring deconstructed members in scope? 中的小村庄模板和解构数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19143820/

相关文章:

database - Yesod 从数据库中获取一对多关系

haskell - 小村庄模板中的 $forall 问题

haskell - 使用利修斯+哈姆雷特+朱利叶斯作为仆人

haskell - 在 Hamlet 模板中测试用户是否登录

rest - Haskell Yesod - 执行 POST 请求时浏览器 OPTIONS 请求的 CORS 问题

haskell - 用于显示类型类函数特化的 GHCi 语法

haskell - marshaller 中的 c2hs 与 gtk2hsC2hs

haskell - 在 Haskell 中使用附加数据注释嵌套 ADT

Haskell:非 IO monad 中的异常处理

haskell - 如何根据 Reader 环境中的设置有条件地解析 JSON?