簡體   English   中英

Purescript鹵素DeepPeek子級代替子級

[英]Purescript Halogen DeepPeek Child Instead of Grandchild

我正在嘗試改編此示例https://github.com/slamdata/purescript-halogen/blob/v0.12.0/examples/deep-peek/src/Main.purs#L58 (相關部分復制如下),但是偷看孫子,我只想偷看孩子,在本例中是peekList 我還想將插槽類型保留為peekList的peek函數中的peekList

peek :: forall a. H.ChildF ListSlot ListQueryP a -> H.ParentDSL State (ListStateP g) Query ListQueryP g ListSlot Unit
peek = coproduct peekList peekTicker <<< H.runChildF

peekList :: forall a. ListQuery a -> H.ParentDSL State (ListStateP g) Query ListQueryP g ListSlot Unit
peekList _ =
  -- we're not actually interested in peeking on the list.
  -- instead of defining a function like this, an alternative would be to use
  -- `(const (pure unit))` in place of `peekList` in the `coproduct` function
  pure unit

peekTicker :: forall a. H.ChildF TickSlot TickQuery a -> H.ParentDSL State (ListStateP g) Query ListQueryP g ListSlot Unit
peekTicker (H.ChildF _ (Tick _)) = H.modify (\st -> { count: st.count + 1 })
peekTicker _ = pure unit

我如何實際上可以在不丟失slot參數的情況下窺視peekList

我試着刪除H.runChildF

peek = coproduct peekList (const (pure unit))

然后將slot參數重新添加到peekList

peekList :: forall a. H.ChildF ListSlot ListQuery a -> H.ParentDSL State (ListStateP g) Query ListQueryP g ListSlot Unit

但是然后在peek我收到錯誤消息“嘗試將類型為Coproduct的ChildF ListSlot與(ChildF ListSlot ListQuery)類型匹配時,無法將類型為CoF的ChildF與類型F匹配”。

如果我只是嘗試使用peekList而不是peekpeekList收到錯誤消息“嘗試將類型為ChildF ListSlot的類型ChildF ListSlot(類型為CoFed ListQuery(ChildF TickSlot TickQuery))與類型為ListFlot的Coproduct ListQuery(ChildF TickSlot TickQuery)不匹配” ListQuery”

任何幫助將不勝感激,謝謝!

我仔細查看了這些類型,發現peekList的第二個參數是包裝了Either的共同產品,其中Left值是我要窺視的列表查詢。 因此,只需對它們進行模式匹配,然后將peekList添加到組件的peek參數。 另外,我還必須更改類型簽名以使用ListQueryP而不是ListQuery

  peekList :: forall a. H.ChildF ListSlot ListQueryP a -> H.ParentDSL State (ListStateP g) Query ListQueryP g ListSlot Unit
  peekList (H.ChildF _ (Coproduct queryEi)) =
    case queryEi of
      Left (AddTicker a) -> pure unit
      _ -> pure unit

暫無
暫無

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

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