Haskell语言学习笔记(48)Data.Tuple
Data.Tuple
fst :: (a,b) -> a
fst (x,_) = x
snd :: (a,b) -> b
snd (_,y) = y
curry :: ((a, b) -> c) -> a -> b -> c
curry f x y = f (x, y)
uncurry :: (a -> b -> c) -> ((a, b) -> c)
uncurry f p = f (fst p) (snd p)
swap :: (a,b) -> (b,a)
swap (a,b) = (b,a)
Data.Tuple 模块提供了针对元组的五个函数。
- fst 取二元组的第一个成员。
- snd 取二元组的第二个成员。
- swap 交换二元组的两个成员。
- curry :: ((a, b) -> c) -> a -> b -> c
curry 柯里化,将原来接收二元组的函数改为接收两个参数的柯里化函数。
curry ((x,y) -> x+y) = (\x y -> x+y) - uncurry :: (a -> b -> c) -> ((a, b) -> c)
uncurry 去柯里化,将原来接收两个参数的柯里化函数改为接收二元组的函数。
uncurry (\x y -> x+y) = ((x,y) -> x+y)
Prelude> fst (1,2)
1
Prelude> snd (1,2)
2
Prelude Data.Tuple> curry (\(x,y) -> x+y) 3 4
7
Prelude Data.Tuple> uncurry (\x y -> x+y) (3,4)
7
Prelude> uncurry max (1,2)
2
Prelude> uncurry min (1,2)
1
Prelude Data.Tuple> swap (1,2)
(2,1)
Data.Tuple.All
安装 tuple 模块。
$ cabal install tuple
Installed tuple-0.3.0.2
Prelude> :m +Data.Tuple.All
Prelude Data.Tuple.All>
tuple 模块提供了对多达32个成员的元组的支持。
同时该模块还引进了单个成员的元组 OneTuple 类型。
- selN 取出元组的第N个成员。
- updN 修改元组的第N个成员。
- curryN, uncurryN 是标准库中curry, uncurry函数针对N个成员的元组的版本。
- sequenceT 是标准库中 sequence 的元组版本。
Prelude Data.Tuple.All> sel1 (1,2,3,4)
1
Prelude Data.Tuple.All> sel4 (1,2,3,4)
4
Prelude Data.Tuple.All> upd1 5 (1,2,3,4)
(5,2,3,4)
Prelude Data.Tuple.All> upd4 5 (1,2,3,4)
(1,2,3,5)
Prelude Data.Tuple.All> sel1 (OneTuple 1)
1
Prelude Data.Tuple.All> upd1 5 (OneTuple 1)
OneTuple 5
Prelude Data.Tuple.All> curryN (\(x,y,z) -> x+y+z) 3 4 5
12
Prelude Data.Tuple.All> uncurryN (\x y z -> x+y+z) (3,4,5)
12
Prelude Data.Tuple.All> sequenceT (print 3, print 4)
3
4
((),())
Data.Tuple.Extra
安装 extra 模块。
$ cabal install extra
Installed extra-1.6
Prelude> :m +Data.Tuple.Extra
Prelude Data.Tuple.Extra>
Prelude Data.Tuple.Extra> first succ (1,"test")
(2,"test")
Prelude Data.Tuple.Extra> second reverse (1,"test")
(1,"tset")
Prelude Data.Tuple.Extra> (succ *** reverse) (1,"test")
(2,"tset")
Prelude Data.Tuple.Extra> (succ &&& pred) 1
(2,0)
Prelude Data.Tuple.Extra> dupe 12
(12,12)
Prelude Data.Tuple.Extra> both succ (1,2)
(2,3)
Prelude Data.Tuple.Extra> let a = (1,2,3)
Prelude Data.Tuple.Extra> print $ (fst3 a) + (snd3 a) + (thd3 a)
6
Haskell语言学习笔记(48)Data.Tuple的更多相关文章
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Haskell语言学习笔记(44)Lens(2)
自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...
- Haskell语言学习笔记(69)Yesod
Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...
- Haskell语言学习笔记(20)IORef, STRef
IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...
- Haskell语言学习笔记(79)lambda演算
lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- Haskell语言学习笔记(28)Data.Map
Map Prelude> import Data.Map as Map Prelude Map> :set -XOverloadedLists Prelude Map> Overlo ...
- Haskell语言学习笔记(93)Data.Text
Data.Text.Read Prelude> :set -XOverloadedStrings Prelude> :m +Data.Text.Read Prelude Data.Text ...
- Haskell语言学习笔记(81)Data.Typeable
Data.Typeable 利用 Data.Typeable,可以打印动态类型信息. class Typeable (a :: k) where typeRep# :: TypeRep a typeR ...
随机推荐
- php函数的实现
1.函数 汇编中函数对应的是一组独立的汇编指令,然后通过call指令实现函数的调用.PHP编译的opcode数组,与汇编指令对应. PHP用户自定义函数的实现就是将函数编译为独立的opcode ...
- phonegap 2.9 IOS Xcode 搭建环境
一:下载phoneGap2.9和安装Xcode5(目前最新版) 选择2.9是因为3.0以上坑爹版本编译神马的要在有网络情况. 二: 下载phonegap后解压到你的指定文件夹中,解压后找到create ...
- 【Spring-AOP-学习笔记-6】@AfterThrowing增强处理简单示例
项目结构 业务代码 @Component("hello") public class HelloImpl implements Hello { // 定义一个简单方法,模拟 ...
- Python网络爬虫-xpath模块
一.正解解析 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\ ...
- 自定义动画animate()
在上一节总结了一下3中类型的动画,其中show()和hide()方法会同时修改元素的多个属性,fadeOut()和fadeIn()方法只会修改元素的不透明度,而slideDown()和slideUp( ...
- unittest框架模版 (含智能执行类下面所有用例并出报告)
基础框架一: import unittest class denglu(unittest.TestCase): def setUp(self): #每次执行测试用例前操作步骤 self.verific ...
- nginx 限流配置
上配置 http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr ...
- [UE4]GetWorld()->GetDeltaSeconds()方法
void AAvatar::Yaw(float amount) { if (Controller && amount) { // AddControllerYawInput()函数用于 ...
- sql中存储过程打印返回的记录集
declare --返回结果,记录类型 ret sys_refcursor; --定义一种类型,用来存放返回的记录 type typ_row ), QUEUEID ), QUEUE_NAME )); ...
- Windows 8的用户模式Shim Engine小探及利用
转载: https://bbs.pediy.com/thread-175483.htm Windows Shim Engine,即Windows 兼容性模式实现引擎,在exe文件的属性对话框中有一个兼 ...