You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IHP中HSX转blaze-html时如何正确将PostsAction传入A.href

正确写法(符合IHP惯用法)

你应该使用IHP内置的pathTo函数将Action转换为对应的URL路径,再通过blaze提供的textValue函数转换为A.href接受的AttributeValue类型,这是官方推荐的标准方案:

H.a ! A.href (textValue $ pathTo PostsAction) $ "Posts"

如果当前环境未导入textValue,在导入段增加以下导入即可:

import Text.Blaze (textValue)

报错原因说明

  1. 第一次报错是因为PostsAction是控制器类型,直接传入A.href时与预期的AttributeValue类型不匹配。
  2. 第二次报错是因为IHP默认的show函数返回Text类型,而fromString要求输入String(即[Char])类型,二者类型不匹配。如果要临时修复该写法,可通过unpack将Text转为String:
-- 不推荐,仅用于解释错误原理
A.href (fromString . unpack $ show PostsAction)

该方式不建议在生产代码使用,因为show输出的内容仅用于调试,不保证和实际路由路径一致,pathTo才是生成路由的标准API。


完整修改后的代码

instance View EditView where
    html EditView { .. } = do
        H.nav $ do
            H.ol ! A.class_ "breadcrumb" $ do
                H.li ! A.class_ "breadcrumb-item" $ do
                    H.a ! A.href (textValue $ pathTo PostsAction) $ "Posts"
                H.li ! A.class_ "breadcrumb-item active" $ "Edit Post"
        H.h1 "Edit Post"
        renderForm post

内容的提问来源于stack exchange,提问作者dharmatech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:12:00