IHP 中的重载标签
OverloadedLabels in IHP
上下文
IHP 指南中有一节描述了它们对井号的使用:
https://ihp.digitallyinduced.com/Guide/helpful-tips.html
它提到了以下内容:
Writing #companyId
is equivalent to writing fromLabel @"companyId"
.
实验
在示例博客应用程序中,如果我将以下内容添加到视图:
{get #title post}
post 的标题按预期显示。
现在,如果我将以下内容添加到视图中:
{get (fromLabel @"title") post}
该页面无法正确呈现,并显示以下消息:
Web/View/Posts/Show.hs:11:33
• 12:40:
|
12 | {get (fromLabel @"title") post}
| ^
"0\nSrcLoc \"\" 1 30\nParse error in expression: fromLabel@\"title\"\n"
问题
根据上面引用的文档中提到的内容,我似乎可以写:
get (fromLabel @"title") post
而不是:
get #title post
但这显然行不通。 :-)
那么,我在这里缺少什么?有没有办法写:
get #title post
根据fromLabel
?
更新 1
按照 Fyodor 在下面评论中的建议,我尝试了以下操作:
{show @Int 42}
这是结果:
Web/View/Posts/Show.hs:11:33
• 12:23:
|
12 | {show @Int 42}
| ^
"0\nSrcLoc \"\" 1 13\nParse error in expression: show@Int\n"
这是一个已知错误:-)
见https://github.com/digitallyinduced/ihp/issues/1049 and https://github.com/digitallyinduced/ihp/issues/857
试试这样写:
[hsx|{title}|]
where
title = get (fromLabel @"title") post
在 HSX 表达式中,{}
中的 haskell 代码使用自定义 haskell 解析器(不是 haskell 编译器使用的解析器)进行解析。自定义解析器有点过时并且还不支持 @SomeType
语法。
解析器也不直接支持 #hash
语法。解析器认为 #
符号是中缀运算符(如 +
或 -
)。 HSX 随后将带有 #
的中缀表达式转换为正确的 fromLabel
调用。
使用最新版本的 haskell 编译器,我们实际上可以完全摆脱第三方解析器并直接使用 haskell 编译器解析器。我们计划在未来这样做以解决此问题。
上下文
IHP 指南中有一节描述了它们对井号的使用:
https://ihp.digitallyinduced.com/Guide/helpful-tips.html
它提到了以下内容:
Writing
#companyId
is equivalent to writingfromLabel @"companyId"
.
实验
在示例博客应用程序中,如果我将以下内容添加到视图:
{get #title post}
post 的标题按预期显示。
现在,如果我将以下内容添加到视图中:
{get (fromLabel @"title") post}
该页面无法正确呈现,并显示以下消息:
Web/View/Posts/Show.hs:11:33
• 12:40:
|
12 | {get (fromLabel @"title") post}
| ^
"0\nSrcLoc \"\" 1 30\nParse error in expression: fromLabel@\"title\"\n"
问题
根据上面引用的文档中提到的内容,我似乎可以写:
get (fromLabel @"title") post
而不是:
get #title post
但这显然行不通。 :-)
那么,我在这里缺少什么?有没有办法写:
get #title post
根据fromLabel
?
更新 1
按照 Fyodor 在下面评论中的建议,我尝试了以下操作:
{show @Int 42}
这是结果:
Web/View/Posts/Show.hs:11:33
• 12:23:
|
12 | {show @Int 42}
| ^
"0\nSrcLoc \"\" 1 13\nParse error in expression: show@Int\n"
这是一个已知错误:-)
见https://github.com/digitallyinduced/ihp/issues/1049 and https://github.com/digitallyinduced/ihp/issues/857
试试这样写:
[hsx|{title}|]
where
title = get (fromLabel @"title") post
在 HSX 表达式中,{}
中的 haskell 代码使用自定义 haskell 解析器(不是 haskell 编译器使用的解析器)进行解析。自定义解析器有点过时并且还不支持 @SomeType
语法。
解析器也不直接支持 #hash
语法。解析器认为 #
符号是中缀运算符(如 +
或 -
)。 HSX 随后将带有 #
的中缀表达式转换为正确的 fromLabel
调用。
使用最新版本的 haskell 编译器,我们实际上可以完全摆脱第三方解析器并直接使用 haskell 编译器解析器。我们计划在未来这样做以解决此问题。