在 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/