do a <- as bs pure a
>>> data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz}
>>> produceFoo :: Applicative f => f Foo >>> produceBar :: Applicative f => f Bar >>> produceBaz :: Applicative f => f Baz
>>> mkState :: Applicative f => f MyState >>> mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz
>>> (<**>) (print 1) (id <$ print 2) 1 2
>>> flip (<*>) (print 1) (id <$ print 2) 2 1
>>> ZipList [4, 5, 6] <**> ZipList [(+1), (*2), (/3)] ZipList {getZipList = [5.0,10.0,2.0]}
(<**=) :: (MonadState s m, Floating a) => Lens' s a -> a -> m a (<**=) :: (MonadState s m, Floating a) => Iso' s a -> a -> m a
(<*=) :: (MonadState s m, Num a) => Lens' s a -> a -> m a (<*=) :: (MonadState s m, Num a) => Iso' s a -> a -> m a
>>> data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz}
>>> produceFoo :: Applicative f => f Foo
>>> produceBar :: Applicative f => f Bar >>> produceBaz :: Applicative f => f Baz
>>> mkState :: Applicative f => f MyState >>> mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz