关于IO Action

  • 类型为IO t。
  • 运算时不执行,因而没有任何效果,只有执行时才会有效果,产生副作用。
  • 一个IO Action只有在其他IO Action中才能被执行。
  • 类型为IO t的IO Action被执行后的结果类型为t。

File IO 函数

  • openFile hClose 打开和关闭文件
    readMode, writeMode, readwriteMode, appendMode
  • hTell hSeek 文件当前读取位置
    AbsoluteSeek, RelativeSeek, SeekFromEnd
  • withFile 用回调函数读取文件
  • readFile writeFile 直接读取写入文件
import System.IO

inputPath = "input.txt"
openFile1 = do
handle <- openFile inputPath ReadMode
contents <- hGetContents handle
putStr contents
hClose handle
withFile1 = do
withFile inputPath ReadMode (\handle -> do
contents <- hGetContents handle
putStr contents)
readFile1 = do
contents <- readFile inputPath
putStr contents

以上代码使用三种不同的方法从文件中读取内容并打印到屏幕上。

UTF-8文件的读写

readWriteUTF8File = do
inputHandle <- openFile inputPath ReadMode
hSetEncoding inputHandle utf8
theInput <- hGetContents inputHandle
outputHandle <- openFile outputPath WriteMode
hSetEncoding outputHandle utf8
hPutStr outputHandle $ map toUpper theInput
hClose inputHandle
hClose outputHandle

UTF-8文件的读写(2)

安装 extra 模块。

$ cabal install extra
Installed extra-1.6
import Extra
readWriteUTF8File' = do
theInput <- readFileEncoding inputPath utf8
writeFileEncoding utf8 outputPath $ upper theInput

Haskell语言学习笔记(19)File IO的更多相关文章

  1. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  2. Haskell语言学习笔记(69)Yesod

    Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...

  3. Haskell语言学习笔记(20)IORef, STRef

    IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...

  4. Haskell语言学习笔记(79)lambda演算

    lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...

  5. Haskell语言学习笔记(39)Category

    Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...

  6. Haskell语言学习笔记(72)Free Monad

    安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...

  7. Haskell语言学习笔记(86)字符串格式化与插值

    String 的格式化 Text.Printf 这个模块用来处理字符串格式化. printf :: PrintfType r => String -> r printf 用于格式化字符串, ...

  8. Haskell语言学习笔记(85)Async

    安装 async $ cabal install async async-2.2.1 installed async / wait / concurrently async :: IO a -> ...

  9. Haskell语言学习笔记(84)Concurrent

    Control.Concurrent Prelude> import Control.Concurrent Prelude Control.Concurrent> Control.Conc ...

随机推荐

  1. [UE4]修改相机裁剪距离

    在UE4中,相机距离一个物体太近,物体就会被裁剪,这个距离是一个全局设定,无法单个相机设置. 项目设置:

  2. [UE4]射击产生弹孔:Spawn Decal At Location、Spawn Decal Attached

    Spawn Decal At Location.Spawn Decal Attached 在指定的位置生成一个材质贴上去 产生随意旋转角度

  3. MySQL 设置密码有效时间

    mysql> alter user 'xuaiqi'@'%' PASSWORD EXPIRE INTERVAL 30 DAY;

  4. vue2.0 中#$emit,$on的使用详解

    vue1.0中 vm.$dispatch 和 vm.$broadcast 被弃用,改用$emit,$on 1. vm.$on( event, callback ) 监听当前实例上的自定义事件.事件可以 ...

  5. C# 自己动手实现Spy++(一)

    因为项目要用到获取其他程序的标题,就想到了用Spy++,但是它是一个工具,并没有C#的源代码,所以就想探索下他的原理,网上搜索了下spy++的源代码,找到了一篇:http://blog.csdn.ne ...

  6. Activity取消默认转场动画;去掉默认转场动画;

    取消默认转场动画: 一般启动一个新的Activity都默认有切换的动画效果,比如打开界面时从右至左的移动.关闭时从右向左的移动,又或者是上下移动.但是有的时候我们不想要这个动画怎么办? 来上代码: m ...

  7. solr如何让全词匹配结果在最前面

    在全文搜索中默认排序是按照匹配度权值score排序的,权值越大位置越靠前,那为什么有很多时候全词匹配反而不在最前面那,其实很简单因为全词匹配权值也就是100,但是还有很多权值大于100的排在了前面. ...

  8. Python NLTK——代码重用,F5运行py文件cmd闪退,invalid syntax

    打开IDLE,对代码进行保存(Ctrl+S)后,代码都是可以运行的. 但是打开文件就会弹出cmd并闪退,截了好几次图发现报的是Invalid syntax的错. 后来发现应该在IDLE中新建一个fil ...

  9. nvm use 指定版本后无效 win7

    如图所示,nvm install 6.12.3之后,使用命令nvm use 6.12.3,提示切换成功,但是执行node app.js时,报错没有node命令,执行nvm ls查看,发现没有任何版本是 ...

  10. 关于{get;set;}访问器

    /// <summary> /// 此视频更新时间/创建时间 [生成时间,不手填] /// </summary> public System.String CreateTime ...