String 的格式化

  • Text.Printf

    这个模块用来处理字符串格式化。
  • printf :: PrintfType r => String -> r

    printf 用于格式化字符串,注意这个函数的返回类型是多态的。
Prelude> :m +Text.Printf
Prelude Text.Printf> printf "%s, %d, %.4f\n" "hello" 123 pi
hello, 123, 3.1416
Prelude Text.Printf> :t printf "%s, %d, %.4f\n" "hello" 123 pi
printf "%s, %d, %.4f" "hello" 123 pi :: PrintfType t => t
Prelude Text.Printf> putStr $ printf "%s, %d, %.4f\n" "hello" 123 pi
hello, 123, 3.1416
Prelude Text.Printf> printf "%s, %d, %.4f\n" "hello" 123 pi :: IO()
hello, 123, 3.1416
Prelude Text.Printf> printf "%s, %d, %.4f\n" "hello" 123 pi :: String
"hello, 123, 3.1416\n"
Prelude Text.Printf> f = printf "%s, %d, %.4f\n" :: String -> Int -> Double -> String
Prelude Text.Printf> f "hello" 123 pi
"hello, 123, 3.1416\n"

String 的插值

安装 interpolate

$ cabal install interpolate
Installed interpolate-0.2.0
Prelude> :set -XQuasiQuotes
Prelude> import Data.String.Interpolate
Prelude Data.String.Interpolate>

interpolate 是一个处理字符串插值的模块。

该模块使用语言扩展 QuasiQuotes,#{...} 是插值部分。

Prelude Data.String.Interpolate> let name = "Marvin"
Prelude Data.String.Interpolate> putStrLn [i|name: #{name}|]
name: Marvin
Prelude Data.String.Interpolate> let age = 23
Prelude Data.String.Interpolate> putStrLn [i|age: #{age}|]
age: 23
Prelude Data.String.Interpolate> let profession = "\955-scientist"
Prelude Data.String.Interpolate> putStrLn [i|profession: #{unwords [name, "the", profession]}|]
profession: Marvin the λ-scientist

Text 的格式化

安装 formatting

$ cabal install formatting
Installed formatting-6.3.6
Prelude> :set -XOverloadedStrings
Prelude> import Formatting
Prelude Formatting>

formatting 是一个格式化 Text 字符串的库。

Prelude Formatting> format ("Person's name is " % text % ", age is " % hex) "Dave" 54
"Person's name is Dave, age is 36"
Prelude Formatting> sformat ("Person's name is " % stext % ", age is " % int) "Dave" 36
"Person's name is Dave, age is 36"

这里 format 和 sformat 分别用于结果为 lazy Text 和 strict Text 的格式化。

text, stext, hex, int 都是预定义的格式化占位符,分别代表参数为 lazy Text,strict Text,十六进制整数以及十进制整数类型。

(%) 则用于粘合字符串和格式化占位符。

Haskell语言学习笔记(86)字符串格式化与插值的更多相关文章

  1. C语言学习笔记---3.字符串格式化输入输出

    1.C语言字符串 字符串(character string)是一个或多个字符的序列,例如:"Zing went the strings of my heart!" C语言没有专门用 ...

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

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

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

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

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

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

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

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

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

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

  7. R语言学习笔记:字符串处理

    想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit&q ...

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

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

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

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

随机推荐

  1. [UE4]关于分支Sequence和条件分支的组合用法

    当需要不管条件语句是否成立的后面都需要执行的语句,可以使用“Sequence”来分支,达到简化蓝图连线的目的.如下图所示:

  2. [UE4]虚幻4蓝图使用小技巧

    不得不说,虚幻的蓝图系统还是非常方便强大的,大大的提高了开发效率.蓝图是一个很成熟的系统,也就有很多隐藏的小技巧,这些技巧谈不上多高深,却可以使人们在使用蓝图时更加得心应手,更加喜爱这个“可视化编程“ ...

  3. VMware同时使用三种网络模式的虚拟机,测试连通性

    参考资料: 虚拟机中桥接不自动分配IP与设置静态IP问题: https://blog.csdn.net/u013187057/article/details/80579211 腾讯课堂: https: ...

  4. Abp IRepository 方法解释(1)

    //    // 摘要:    //     This interface is implemented by all repositories to ensure implementation of ...

  5. centos找不到vim命令

    linux系统执行vim命令时,提示centos -bash : vim:command not found   这个时候需要检查vim编辑器是否安装:   输入rpm -qa|grep vim命令, ...

  6. Android Notification通知栏的使用,通知栏在Android8.0系统不显示的问题;

    1.正常使用通知栏: /** * 创建通知栏管理工具 */ NotificationManager notificationManager = (NotificationManager) getSys ...

  7. Solr中使用游标进行深度分页查询以提高效率(适用的场景下)

    通常,我们的应用系统,如果要做一次全量数据的读取,大多数时候,采用的方式会是使用分页读取的方式,然而 分页读取的方式,在大数据量的情况下,在solr里面表现并不是特别好,因为它随时可能会发生OOM的异 ...

  8. lunix salt 用法

    红蜘蛛软件 c/s client  : 学生端是客户端 ,装了红蜘蛛客户端-学生端 server端: 教师机  ,装了红蜘蛛软件-教师端  教师机,只能管理,  教师机和学生机,相互通信,相互知道的情 ...

  9. mysql大纲

    一.概述 1.1 关系型数据.非关系型数据.半关系型数据 1.2 关系型数据库和非关系型数据库 1.3 发展史 二.MySQL组件和安装 三.数据库语言和主要概念 3.1 数据库语言 DML.DDL. ...

  10. iOS第三方登录qq

    http://blog.sina.com.cn/s/blog_7b9d64af0101e5vj.html