读书人

回答: Monad浅析(Java伪代码)

发布时间: 2012-09-23 10:28:11 作者: rapoo

答复: Monad浅析(Java伪代码)
http://www.iteye.com/topic/1114416
今天来看到这篇帖子。先说明我没详细把楼主的原文细读完了。我也分享一些我对Monad的简单的理解。其实我觉得楼主所讲的Monad侧重于StateMonad

我先说说Monad,其实这东西理解起来我觉得很简单,类似于一个Box的理念
程序代码是运行在机器中的,外面的世界就像在盒子外一样。
程序自身的世界是可推导的,而外面的世界是不可知的,可推导的世界,都可以用纯函数来描述,而不可知的世界就要变通一下了。

比如IO,我们可以看成,程序要到RealWorld中取一个东西,所以,RealWorld就像一个不可知的Box。所以,比如,我要取当前机器的IP,那个IP地址类型,在Haskell中可以用这样的类型来表示

test1 :: Int -> Int test1 = do    a <- (*2)    b <- (+10)    return ( a +  b ) test2 :: Int -> Int test2 = (*2) >>= \a -> (+10) >>= \b -> return (a+b){-命令式语言中的写法  test1(n) {    a=n*2    b=n+10    return a+b  }}-




个人的肤浅理解,MonadState看上去像在命令式编程,其实是do的语法糖+Monad的盒子理念而已,不信你试试在do block写一句与当前上下文(Monad Context)不相干的代码(比如,在返回类型为Maybe Int的函数的do block中间写一句无厘头的3+4 ),就不能通过编译。我觉得这也正是Haskell强大的地方,彻底从语法上强制性的让程序员避免犯错


http://www.jamcode.org

读书人网 >编程

热点推荐