Action

转载 2015年07月07日 23:28:44

之前学scala时有个不解的问题,现在在haskell里找到答案了

-- file: ch07/actions.hs
str2action :: String -> IO ()
str2action input = putStrLn ("Data: " ++ input)

list2actions :: [String] -> [IO ()]
list2actions = map str2action

numbers :: [Int]
numbers = [1..10]

strings :: [String]
strings = map show numbers

actions :: [IO ()]
actions = list2actions strings

printitall :: IO ()
printitall = runall actions

-- Take a list of actions, and execute each of them in turn.
runall :: [IO ()] -> IO ()
runall [] = return ()
runall (firstelem:remainingelems) =
    do firstelem
       runall remainingelems

main = do str2action "Start of the program"
          printitall
          str2action "Done!"

str2action 这个函数接受一个参数并返回 IO () ,就像你在 main 结尾看到的那样,你可以直接在另一个操作里使用这个函数,它会立刻打印出一行。或者你可以保存(不是执行)纯代码中的操作。你可以在 list2actions 里看到保存的例子,我们在 str2action  map ,返回一个操作的列表,就和操作其他纯数据一样。所有东西都通过 printall 显示出来, 而 printall 是用纯代码写的。

虽然我们定义了 printall ,但是直到它的操作在其他地方被求值的时候才会执行。现在注意,我们是怎么在 main 里把str2action 当做一个I/O操作使用,并且执行了它。但是先前我们在I/O Monad外面使用它,只是把结果收集进一个列表。

你可以这样来思考: do 代码块中的每一个声明,除了 let ,都要产生一个I/O操作,这个操作在将来被执行。

 printall 的调用最后会执行所有这些操作。实际上,因为Haskell是惰性的,所以这些操作直到这里才会被生成。

相关文章推荐

Intent中的四个重要属性——Action、Data、Category、Extras

本文来自http://blog.csdn.net/liuxian13183/ ,引用请注明出处!All Rights Reserved !         Intent作为联系各Ac...

解析请求参数调用Action中的方法的struts1.x完整实例

1、简介         通过扩展DispatchAction类,并复写其中的execute方法,来通过解析请求地址中的Method=?参数来调用相应Action中的方法,从而很好地实现了控制器的请...

struts2中如何根据请求路径定位到详细的访问action

在struts2中在访问一个菜单链接时,我们只需要将相应的package 命名空间和 action的name进行组合,并加上相应的后缀,就可以直接访问到相应的Action了,那么这个过程是如何进行的,...

Struts2学习之Action接收参数方法二(用DomainModel接收参数(模型驱动))

用DomainModel接收参数(模型驱动) 如果要接受的参数的个数很多,可以不用定义属性而是直接定义一个对象。 前台代码: …… DoMainModel?user.userName...

Struts2中Action的动态调用方法

在Struts2中,Action执行的时候并不一定要执行execute,我们可以指定Action执行哪个方法,下面分别介绍三种方法来指定Action执行哪个方法: 1.第一种方法,通过Action...

action提交表单路径两种方法:web.xml设置和注解

action提交表单给servlet的方法:    ********** A代表servlet名字,不能写前边的各种包名字,前面的斜杠  /  也不能写。 方法一:web.xml法 首先...

对web项目的执行过程的理解,从一个http请求如http://localhost:8080/test/login.action开始

对web项目的执行过程的理解,内容包括1 http url  2 html、servlet、jsp 3 tomcat等。web项目的整个执行过程,从一个http请求如http://localhost:...

安卓时间相关的广播(Intent.ACTION_TIME_TICK)

1.Intent.ACTION_TIME_TICK 含义:系统每分钟会发出该广播2.用法: IntentFilter filter = new IntentFilter(); filt...

layer.js 弹出层提交form表单,action重定向

layer.js,一个jquery的插件,可以用它来做信息提示,弹出层等。  官方demo地址:http://layer.layui.com/ 官方api地址:http://layer.layui.c...
  • AHAU10
  • AHAU10
  • 2016年04月28日 19:33
  • 21044

actionBar添加action图片和点击事件

Action bar允许你为与当前应用上下文相关的最重要的action items添加action按钮。那些直接显示在action bar上的icon或者文字都被称作action buttons。那些...
  • god2030
  • god2030
  • 2016年04月13日 09:45
  • 1539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Action
举报原因:
原因补充:

(最多只允许输入30个字)