簡體   English   中英

如何在purescript-halogen中組合有效的事件處理程序和自定義EventUpdates?

[英]How do I combine effectful event handlers and custom EventUpdates in 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" ]

后:

H.a [ A.classes [B.btn, B.btnPrimary]
    , A.href "#compile"
    , A.disabled busy
    , A.onclick (\_ -> E.preventDefault $> pure (handler code))
    ] [ H.text "Compile" ]

(完全差異在這里可用)

我最終得到這種類型的錯誤:

Cannot unify type
    Example.Ajax.Input
    with type
        Halogen.HTML.Events.Monad.Event Halogen.HalogenEffects<(http ::
        Example.Ajax.HTTP | u32519)> Example.Ajax.Input

此時,我有點迷失是否需要調整UI函數的類型簽名,或者我以錯誤的方式應用preventDefault修飾符。

$>的類型如下:

($>) :: forall a. EventHandler a -> b -> EventHandler b

pure的類型看起來像:

pure :: forall a. a -> EventHandler a

所以問題是通過一起使用,你正在制作一個如下所示的類型:

EventHandler a -> EventHandler b -> EventHandler (EventHandler b)

但是你不希望這樣,你只需要一個EventHandler b ,其中bE.Event類型的handler code

最好的解決方案是不使用pure

E.preventDefault $> handler code

如果有時你想要像這樣使用兩個EventHandler值,那么使用的函數是*>而不是$>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM