上下文
《IHP指南》中有一节描述了他们对散列符号的使用:
https://ihp.digitallyinduced.com/Guide/helpful-tips.html
它提到以下内容:
写入#companyId
相当于写入fromLabel @"companyId"
。
实验
在示例blog应用程序中,如果我将以下内容添加到视图中:
{get #title 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"
1条答案
按热度按时间flvlnr441#
更新:此问题已在IHP v0.20中修复,现在可按预期工作
这是一个已知的错误:-)
请参阅https://github.com/digitallyinduced/ihp/issues/1049和https://github.com/digitallyinduced/ihp/issues/857
试着这样写:
在HSX表达式中,
{}
中的haskell代码是使用自定义haskell解析器(不是haskell编译器使用的解析器)解析的。自定义解析器有点过时,还不支持@SomeType
语法。解析器也不直接支持
#hash
语法。解析器认为#
符号是中缀运算符(如+
或-
)。HSX随后将带有#
的中缀表达式转换为正确的fromLabel
调用。有了haskell编译器的最新版本,我们实际上可以完全摆脱第三方解析器,直接使用haskell编译器的解析器。我们计划在未来这样做来解决这个问题。