Haskell语言学习笔记(86)字符串格式化与插值
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)字符串格式化与插值的更多相关文章
- C语言学习笔记---3.字符串格式化输入输出
1.C语言字符串 字符串(character string)是一个或多个字符的序列,例如:"Zing went the strings of my heart!" C语言没有专门用 ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Haskell语言学习笔记(79)lambda演算
lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...
- Haskell语言学习笔记(69)Yesod
Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...
- Haskell语言学习笔记(20)IORef, STRef
IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- R语言学习笔记:字符串处理
想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit&q ...
- Haskell语言学习笔记(84)Concurrent
Control.Concurrent Prelude> import Control.Concurrent Prelude Control.Concurrent> Control.Conc ...
- Haskell语言学习笔记(72)Free Monad
安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...
随机推荐
- vue 父组件主动获取子组件的数据和方法 子组件主动获取父组件的数据和方法
Header.vue <template> <div> <h2>我是头部组件</h2> <button @click="getParen ...
- [深度分析] Python Web 开发框架 Bottle
[深度分析] Python Web 开发框架 Bottle(这个真的他妈的经典!!!) 作者:lhf2009913 Bottle 是一个非常精致的WSGI框架,它提供了 Python Web开发中需要 ...
- NT平台ADSL拨号连接密码恢复原理
NT平台拨号连接密码恢复原理 创建时间:2004-11-08 更新时间:2004-11-12文章属性:原创文章提交:eyas (eyas_at_xfocus.org)NT平台拨号连接密码恢复原理Aut ...
- (转)C#连接Oracle数据库(直接引用dll使用)
原文地址:http://www.cnblogs.com/gguozhenqian/p/4262813.html 项目中有个功能需要从一台Oracle数据库获取数据,本以为是很简单的事情,直接将原来的S ...
- C++ 调用 Lua
直接上代码: 1:c++代码 #include <lua.hpp> #include <LuaBridge/LuaBridge.h> #include <iostream ...
- gulp 使用案例
1.gulp 配置: // 引入 gulp var gulp = require('gulp'); var watch = require('gulp-watch'), //导入所有gulp需要的模块 ...
- 为什么TCP比UDP可靠真正原因,以及并发编程的基础问题
一 为什么TCP协议比UDP协议传输数据可靠: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程涉及到计算机硬件,也就是物 ...
- linux下用命令修改文件内容
修改test_modify.sh中的LICENSE_INFO test_modify.sh #!/bin/bash licenseInfo=LICENSE_INFO licenseProduct=LI ...
- css写复选框
前面讲过<完全使用css编写复选框>,后来在深入学习sass过程中,发现:这种写法虽然也能达到目的,但是稍嫌复杂了一点.这里介绍一种可以说更简单一点的方法,其实也就是html结构更简单一点 ...
- [java] 屏蔽ie浏览器中F1帮助
实现某一功能时需要屏蔽IE浏览器中的F1,F2快捷键. 百度后发现如下代码 var jq$ = jQuery.noConflict(); //防止$符号与其他的冲突 jq$(document).rea ...