在Yesod中,在路由处理程序中使用whamletFile函数,我在$forall
构造中解决了记录问题。
我有这样的数据记录:
data Foo a = Foo (a, Int, Int)
在hamlet模板文件中,我尝试使用[Foo]
的实例并尝试使用解构语法:
$forall (Foo (a, b, c)) <- foos
<li>#{a}
在编译
时,此消息失败Not in scope: 'a'
虽然这不会失败并且会适当地处理forall构造:
$forall (Foo (a, b, c)) <- foos
<li>nothing special
任何想法为什么使用解构语法都无法将项目纳入范围?
答案 0 :(得分:4)
你的解构语法错了。试试这个:
$forall Foo (a, b, c) <- foos
<li>#{a}
此外,您的数据声明实际上声明了一个带有一个字段的类型 - 一个元组。如果要声明具有3个字段的类型,则语法应该不同:
data Foo a = Foo a Int Int
它更自然地解构:
$forall Foo a b c <- foos
<li>#{a}