我知道在某些情况下我必须为某个isString实例提供类型注释,但我不完全确定我必须在哪里以及为什么这样做。
我有一个表格,我想根据following documentation
使用Bootstrap3进行渲染在我的表单中,如果我将其保留为bootstrapSubmit "Register"
,我将获得以下内容:
No instance for (Data.String.IsString msg0)
arising from the literal `"Register"'
The type variable `msg0' is ambiguous
如果我将其更改为(bootstrapSubmit ("add" :: BootstrapSubmit Text))
,则会进行编译。为什么它不像文档那样对我有用?
以下是其他一些我感到困惑的例子:
bfs函数,我希望在我的表单中使用如下:
areq intField (bfs "Weight") Nothing
让我的字段获得额外的form-control
课程。与No instance for...
相同的故事将其更改为areq intField (bfs ("Weight"::Text)) Nothing
可修复类型问题。
为什么在没有类型注释的情况下,这对我来说不起作用?
答案 0 :(得分:0)
bootstrapSubmit msg
或bfs msg
中的消息必须是可呈现的消息,类RenderMessage的实例。
bootstrapSubmit
:: (RenderMessage site msg, HandlerSite m ~ site, MonadHandler m)
=> BootstrapSubmit msg -> AForm m ()
bfs :: RenderMessage site msg => msg -> FieldSettings site
这可以是
messages/en.msg
中有一个条目