В недавнем ответе на вопрос о стиле записал я
main = untilM (isCorrect 42) (read `liftM` getLine)
и
isCorrect num guess =
case compare num guess of
EQ -> putStrLn "You Win!" >> return True
...
Martijn услужливо предложил альтернативы:
main = untilM (isCorrect 42) (read <$> getLine)
EQ -> True <$ putStrLn "You Win!"
Какие общие шаблоны в коде Haskell могут быть сделаны более четкими абстракциями использования из Управления. Применимый? Что полезные эмпирические правила состоят в том, чтобы иметь в виду для использования Управления. Применимый эффективно?
В основном монады также являются примерами функтора [1]. Итак, всякий раз, когда вы находитесь с использованием Liftm
, ,
,
,
Anteftm2
и т. Д., Вы могли бы цепить вычисление вместе с использованием <*>
. В некотором смысле вы можете подумать о заявительных функторах как аналогичных функциям. Чистая функция f
может быть поднята с помощью f <$> x <*> y <*> z
.
По сравнению с монамами, аппликативными функторами не могут выборочно выполнять свои аргументы. Побочные эффекты всех аргументов состоятся.
import Control.Applicative
ifte condition trueClause falseClause = do
c <- condition
if c then trueClause else falseClause
x = ifte (return True) (putStrLn "True") (putStrLn "False")
ifte' condition trueClause falseClause =
if condition then trueClause else falseClause
y = ifte' <$> (pure True) <*> (putStrLn "True") <*> (putStrLn "False")
x
ТОЛЬКО ВЫЗОВЫ TRUE
, тогда как y
выводы true
и false
последовательно.
[1] TypeClassopedia . Настоятельно рекомендуется.
[2] http://www.soi.city.ac.uk/~ross/Papers/applicative.html . Хотя это академическая статья, не сложно следовать.
[3] http://lelearnyouahaskell.com/functors-applative-fockors-and- Anmonoids#applative-bockors . Объясняет дело очень хорошо.
[4] http://book.realworldhaskell.org/read/using-parsec.html#id652399 . Показывает, как монадическую библиотеку Parsec
также можно использовать применительном образом.
См. Основы прикладных развлечений, положенные в практическую работу Брайана О'Салливана.