1

リアクティブバナナでは、 が与えられたEvent t (a, b)場合、どのように に導きます(Event t a, Event t b)か?

Traversable#sequence提供されたMonadforのいくつかのインスタンスでそれを解決するようですが、それは.(,)Event tFunctor

4

1 に答える 1

3

これはうまくいくはずです:

import Control.Applicative

unzipEvent :: Event t (a, b) -> (Event t a, Event t b)
unzipEvent = liftA2 (,) (fmap fst) (fmap snd)

ノート:

  • 関数のインスタンスをliftA2 (,)使用しているだけなので、汎用的です。Applicativeこの場合、それと同等の代替手段は(&&&)fromになりますControl.Arrow。あまり派手ではない代替手段もあり\e -> (fst <$> e, snd <$> e)ます。
  • Event tだったとしてもTraversablesequenceA役に立ちません。ペアのFunctorおよびApplicativeインスタンスは、ペアの 2 番目のコンポーネントでのみパラメータ化されます。の制約は(a, Event t b)言うまでもなく、結果の型になってしまいます。Monoida
于 2015-07-28T08:34:42.217 に答える