【问题标题】:Purescript Halogen DeepPeek Child Instead of GrandchildPurescript Halogen DeepPeek Child 而不是 Grandchild
【发布时间】:2017-03-28 21:24:32
【问题描述】:

我正在尝试修改此示例https://github.com/slamdata/purescript-halogen/blob/v0.12.0/examples/deep-peek/src/Main.purs#L58(相关部分复制如下),但不是偷看孙子,我只想偷看孩子,或者在这种情况下是peekList。我还想将插槽类型作为参数保留在peekList 的 peek 函数中。

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

我怎样才能真正偷看peekList而不丢失槽参数?

我试过删除H.runChildF:

peek = coproduct peekList (const (pure unit))

然后将槽参数添加回peekList

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

但是在peek 中,我收到错误“在尝试将 ChildF ListSlot 类型与 Coproduct (ChildF ListSlot ListQuery) 类型匹配时,无法将 ChildF 类型与 Coproduct 类型匹配”

如果我只是尝试使用peekList 而不是peek,我会收到错误“在尝试匹配类型 ChildF ListSlot(Coproduct ListQuery (ChildF TickSlot TickQuery)) 类型为 ChildF ListSlot ListQuery"

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: purescript halogen


    【解决方案1】:

    我仔细查看了这些类型,发现 peekList 的第二个参数是包装 Either 的 Coproduct,其中 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
    

    【讨论】:

    • 您的回答是对的,但可能值得注意的是,卤素中不再存在 peek 机制! (自 v1.0.0 起)
    • @gb。是的,我决定使用 0.12.0,因为 2 周前没有更新的卤素/纯脚本路由示例。现在有,但我太远了
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 2017-11-16
    • 2019-10-02
    • 2017-06-02
    • 2016-02-04
    • 2017-03-06
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多