#haskell #monadplus
#хаскелл #monadplus
Вопрос:
Я был вдохновлен поиграть с FizzBuzz после того, как взглянул на codepad.org , и обнаружил, что мне нужна какая-то функция:
mwhen :: MonadPlus m => Bool -> a -> m a
mwhen b = if b then return else const mzero
просто чтобы я мог сделать mwhen (n /? 3) "Foo" `mappend` mwhen (n /? 5) "Bar"
Я ожидал, что это будет на hoogle, но Bool -> a -> m a» rel=»nofollow»>без кубиков.
Это не так полезно, как я думаю?
Комментарии:
1. Это только я или, кажется, много вопросов на Хаскеле, в которых говорится: «Я не нашел его в Hoogle. Так это полезно? «. Я сделал это сам. Ответы, тем не менее, интересны.
Ответ №1:
mwhen b a
точно guard b >> return a
. Когда вы делаете больше вещей после guard
, вы обычно связали бы a перед mwhen и не нуждаетесь в возврате. Таким образом, полезность mwhen, по-видимому, заключается в основном в сохранении нескольких нажатий клавиш в конце do-блоков.
Ответ №2:
Причина, по которой он не существует, заключается в том, что обычно в этом комбинаторе нет необходимости. Вы можете просто перезаписать результат a when
с <$
помощью или >>
, и, как обычно, у вас есть много других монадических операций после a when
.