首页 > 解决方案 > 单子和liftM

问题描述

我在使用liftM. 因为(+)它工作正常,该函数 madd a b = liftM2 (+) a b给了我预期的结果Just 5 `madd` Just 7 = Just 12 ,但现在尝试它(/)给了我奇怪的结果。

mdiv a b = liftM2 (/) a b现在手术 在我期待的时候Just 12 `mdiv` Just 0给了我。Just InfinityNothing

标签: haskellfunctional-programmingmonads

解决方案


Monad 不是魔法,它们只是封装了某些计算模式。

liftM2 :: Monad m => (a -> b -> c) -> m a -> m b -> m c

以及Maybemonad 的特定版本,

liftM2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c

这里没有关于数字和被零除错误的内容。我们在这里只知道一元值是Just something还是Nothing

这允许我们定义一个安全的除法函数,但它不会自己我们所有人做这件事。

Haskell 不是智能代码编写 AI 代理。它只是另一种编程语言,由程序员而不是计算机编写程序。此外,它为什么要为您决定是否希望发生运行时除零错误!


推荐阅读