у меня есть функция
bar :: MyType -> MyType -> [MyType]
Я хотел бы иметь другую функцию:
foo :: [MyType] -> [MyType]
foo xs = do x <- xs
y <- xs
bar x y
Можно ли написать foo
без использования нотации do
? Я думал о чем-то вроде liftA2
, но это не сработает.
>>=
иreturn
, для этого даже есть специальная функция использования. - person Willem Van Onsem   schedule 06.09.2018Control.Applicative
илиControl.Monad
и без лямбда-выражений. Для перезаписи>>=
обычно требуется много лямбда-выражений. - person user1747134   schedule 06.09.2018bar
здесь является монадическим типом, это неreturn (bar x y)
, а простоbar x y
. - person Willem Van Onsem   schedule 06.09.2018liftA2
иjoin
хотя. - person Mor A.   schedule 06.09.2018foo xs = bar <$> xs <*> xs
, посколькуx
иy
не зависят друг от друга. Это то, что вы получите с расширениемApplicativeDo
. - person chepner   schedule 07.09.2018