关于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]AWP组合

    AWP狙击枪可以由主枪和镜头模型组合而成. 一.主枪 二.镜头组合

  2. [UE4]IsValid方法妙用

    由于UE4中各个对象的创建顺序无法保证,因此可以使用IsValid方法判断一个对象是否有效,如果无效则初始化,如果有效则直接可以使用.

  3. rtpproxy 配置

    1.下载rtpproxy并安装 cd /home/hi 下载rtpproxy最新版,比如rtpproxy-2.1.0.tar.gz tar –xzvf rtpproxy-2.1.0.tar.gz cd ...

  4. OpenCV安装教程(Ubuntu 18.04)

    视频教程 带字幕版: https://www.youtube.com/watch?v=0vjC2UHptU4 无带字幕版:https://fzhshared-1252154746.cos.ap-gua ...

  5. pthread线程特定数据

    举个栗子 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/t ...

  6. CS229 6.17 Neurons Networks convolutional neural network(cnn)

    之前所讲的图像处理都是小 patchs ,比如28*28或者36*36之类,考虑如下情形,对于一副1000*1000的图像,即106,当隐层也有106节点时,那么W(1)的数量将达到1012级别,为了 ...

  7. 《Linux性能及调优指南》1.3 Linux文件系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  8. nvm-windows安装

    linux上的nvm太好用了,windows也出了,不过需要手动下载安装 地址: https://github.com/coreybutler/nvm-windows/releases 博主安装的是 ...

  9. Python网络爬虫之requests模块

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  10. tornado-版本迁移工具alembic

    pip install pymysql pip install sqlalchemy pip install alembic 1.connect db_config.py #coding=utf-8 ...