リアクティブバナナでは、 が与えられたEvent t (a, b)
場合、どのように に導きます(Event t a, Event t b)
か?
Traversable#sequence
提供されたMonad
forのいくつかのインスタンスでそれを解決するようですが、それは.(,)
Event t
Functor
リアクティブバナナでは、 が与えられたEvent t (a, b)
場合、どのように に導きます(Event t a, Event t b)
か?
Traversable#sequence
提供されたMonad
forのいくつかのインスタンスでそれを解決するようですが、それは.(,)
Event t
Functor
これはうまくいくはずです:
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
だったとしてもTraversable
、sequenceA
役に立ちません。ペアのFunctor
およびApplicative
インスタンスは、ペアの 2 番目のコンポーネントでのみパラメータ化されます。の制約は(a, Event t b)
言うまでもなく、結果の型になってしまいます。Monoid
a