3

私のカスタム Halogen/Purescript プロジェクトでは、アクションを純粋なs と効果的な s に分割するAJAX の例のパターンに従います。InputRequest

この動作を使用するようにイベント ハンドラーを変更したいのですが、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

preventDefaultこの時点で、UI 関数の型シグネチャを調整する必要があるのか​​、修飾子を間違った方法で適用する必要があるのか​​、少し迷っています。

4

1 に答える 1

8

のタイプは$>次のようになります。

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

のタイプはpure次のようになります。

pure :: forall a. a -> EventHandler a

したがって、問題は両方を一緒に使用することであり、次のような型を作成しています。

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

しかし、あなたはそれを望んでおらず、 が欲しいだけですEventHandler bbは のE.Event型ですhandler code

最善の解決策は、使用しないことpureです:

E.preventDefault $> handler code

EventHandlerこのように一緒に使用したい2 つの値がある場合、使用する関数は*>ではなく です$>

于 2015-04-19T14:13:34.783 に答える