2017-03-28 5 views
0

私はこの例をhttps://github.com/slamdata/purescript-halogen/blob/v0.12.0/examples/deep-peek/src/Main.purs#L58(下記の関連部分)に適合させようとしていますが、孫を覗くのではなく、ちょうど子供を覗きたい、この場合はpeekListです。私はまた、peekListのpeek関数のパラメータとしてスロットタイプを保持したいと思います。Purescript Halogen DeepPeek Child(孫の代わりに)

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)を一致させようとしているときにタイプCoproductを持つChildF "

peekListの代わりにpeekを使用しようとすると、タイプChildF ListSlot(Coproduct ListQuery(ChildF TickSlot TickQuery))とタイプChildFを一致させようとしているときに、ListQueryタイプのタイプCoproduct ListQuery(ChildF TickSlot TickQuery) ListSlot ListQuery "

本当にありがとうございました!

答えて

0

peekListの2番目の引数がをラップしたCoproductであることを見て、ここでLeftの値が私が覗きたいリストクエリであることが分かりました。したがって、これらのパターンを一致させ、peekListをコンポーネントのpeekパラメータに追加してください。また、ListQueryの代わりにListQueryPを使用するようにタイプシグネチャを変更する必要がありました。

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 
+0

この回答は正しいですが、「peek」メカニズムはもはやハロゲンには存在しません! (v1.0.0以降) –

+0

@gb。うん、2週間前に更新されたハロゲン/ purescript-routingの例がなかったので、私は0.12.0を使うことに決めました。今はありますが、私はあまりにも遠すぎます – sportanova

関連する問題