![](/img/trans.png)
[英]Purescript Halogen Component function: Passing spaced arguments instead of a Record?
[英]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
而不是peek
, peekList
收到錯誤消息“嘗試將類型為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.