Я могу определить их, используя монады.
(<*) :: Monad m => m a -> m b -> m a
(<*) fa fb = fa >>= \a -> (fb >>= \_ -> return a)
(<*) fa fb = ??? -- In terms of pure & (<*>)
(*>) :: Monad m => m a -> m b -> m b
(*>) fa fb = fa >>= \_ -> (fb >>= \b -> return b)
(*>) fa fb = ??? -- In terms of pure & (<*>)
(\*>)
и (<\*)
считаются операторами последовательности. Могу ли я с уверенностью предположить, что заявители могут работать как в последовательном, так и в параллельном режиме? Монады - это лишь подкатегория аппликативов, способных только на последовательные действия. И даже если это не имеет значения, порядок операций для нескольких монад, таких как монада считывателя (пример чтения конфигураций из HashMap
настроек среды)?