pas*_*ssy 3 purescript halogen
在我自定义的Halogen/Purescript项目中,我遵循AJAX示例中的模式,在这里我将我的行为分解为纯粹Input
的和有效Request
的.
我想更改我的事件处理程序以使用该preventDefault
行为,但不明白这会对UI函数的类型产生什么影响.
我通过以下方式更改事件处理程序,对AJAX示例进行了相同的更改:
之前:
H.button [ A.classes [B.btn, B.btnPrimary]
, A.disabled busy
, A.onclick (\_ -> pure (handler code))
] [ H.text "Compile" ]
Run Code Online (Sandbox Code Playgroud)
后:
H.a [ A.classes [B.btn, B.btnPrimary]
, A.href "#compile"
, A.disabled busy
, A.onclick (\_ -> E.preventDefault $> pure (handler code))
] [ H.text "Compile" ]
Run Code Online (Sandbox Code Playgroud)
(完全差异在这里可用)
我最终得到这种类型的错误:
Cannot unify type
Example.Ajax.Input
with type
Halogen.HTML.Events.Monad.Event Halogen.HalogenEffects<(http ::
Example.Ajax.HTTP | u32519)> Example.Ajax.Input
Run Code Online (Sandbox Code Playgroud)
此时,我有点迷失是否需要调整UI函数的类型签名或者我preventDefault
以错误的方式应用修饰符.
$>
看起来像这样的类型:
($>) :: forall a. EventHandler a -> b -> EventHandler b
Run Code Online (Sandbox Code Playgroud)
pure
看起来像这样的类型:
pure :: forall a. a -> EventHandler a
Run Code Online (Sandbox Code Playgroud)
所以问题是通过一起使用,你正在制作一个如下所示的类型:
EventHandler a -> EventHandler b -> EventHandler (EventHandler b)
Run Code Online (Sandbox Code Playgroud)
但是你不想要那个,你只想要一个EventHandler b
,b
它的E.Event
类型在哪里handler code
.
最好的解决方案是不使用pure
:
E.preventDefault $> handler code
Run Code Online (Sandbox Code Playgroud)
如果有时你EventHandler
想要像这样使用两个值,那么使用的函数就是*>
代替$>
.
归档时间: |
|
查看次数: |
447 次 |
最近记录: |