Monads 和liftM

Kev*_*vin 1 monads haskell functional-programming

我在使用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 Infinity 而我期待Nothing

Wil*_*ess 9

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

liftM2 :: Monad m => (a -> b -> c) -> m a -> m b -> m c
Run Code Online (Sandbox Code Playgroud)

以及Maybemonad的特定版本,

liftM2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c
Run Code Online (Sandbox Code Playgroud)

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

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

Haskell 不是智能代码编写 AI 代理。它只是另一种编程语言,由程序员而不是计算机编写程序。再说,为什么要决定是否喜欢的运行时间除以零错误发生或不!