在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 《Haskell 2010 Language Report》

《Haskell 2010 Language Report》

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:1.43M
  • 下载次数:3
  • 浏览次数:19
  • 发布时间:2023-01-16
  • 实例类别:一般编程问题
  • 发 布 人:老刘
  • 文件格式:.pdf
  • 所需积分:0
 相关标签:

实例介绍

【实例简介】《Haskell 2010 Language Report》

【实例截图】

【核心代码】

Contents
I The Haskell 2010 Language 1
1 Introduction 3
1.1 Program Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 The Haskell Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Values and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Lexical Structure 7
2.1 Notational Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Lexical Program Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Identifiers and Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Numeric Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Character and String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Expressions 15
3.1 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Variables, Constructors, Operators, and Literals . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Curried Applications and Lambda Abstractions . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4 Operator Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5 Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
i
ii CONTENTS
3.6 Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.7 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.8 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.9 Unit Expressions and Parenthesized Expressions . . . . . . . . . . . . . . . . . . . . . . . . 21
3.10 Arithmetic Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.11 List Comprehensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.12 Let Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.13 Case Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.14 Do Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.15 Datatypes with Field Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.15.1 Field Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.15.2 Construction Using Field Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.15.3 Updates Using Field Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.16 Expression Type-Signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.17 Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.17.1 Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.17.2 Informal Semantics of Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . 29
3.17.3 Formal Semantics of Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Declarations and Bindings 35
4.1 Overview of Types and Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.1 Kinds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.2 Syntax of Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.3 Syntax of Class Assertions and Contexts . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.4 Semantics of Types and Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2 User-Defined Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.1 Algebraic Datatype Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.2 Type Synonym Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.3 Datatype Renamings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
CONTENTS iii
4.3 Type Classes and Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.1 Class Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.2 Instance Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.3 Derived Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.4 Ambiguous Types, and Defaults for Overloaded Numeric Operations . . . . . . . . 48
4.4 Nested Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4.1 Type Signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4.2 Fixity Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.4.3 Function and Pattern Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.3.1 Function bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4.3.2 Pattern bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5 Static Semantics of Function and Pattern Bindings . . . . . . . . . . . . . . . . . . . . . . . 53
4.5.1 Dependency Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.5.2 Generalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.5.3 Context Reduction Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.4 Monomorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.5.5 The Monomorphism Restriction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.6 Kind Inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5 Modules 61
5.1 Module Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.2 Export Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3 Import Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.1 What is imported . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.2 Qualified import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.3 Local aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.4 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.4 Importing and Exporting Instance Declarations . . . . . . . . . . . . . . . . . . . . . . . . 67
5.5 Name Clashes and Closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
iv CONTENTS
5.5.1 Qualified names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.5.2 Name clashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.5.3 Closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.6 Standard Prelude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6.1 The Prelude Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6.2 Shadowing Prelude Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.7 Separate Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.8 Abstract Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6 Predefined Types and Classes 73
6.1 Standard Haskell Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.1.1 Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.1.2 Characters and Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.1.3 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.1.4 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.1.5 The Unit Datatype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.1.6 Function Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.1.7 The IO and IOError Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.1.8 Other Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.2 Strict Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.3 Standard Haskell Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.3.1 The Eq Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3.2 The Ord Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3.3 The Read and Show Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3.4 The Enum Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.3.5 The Functor Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.3.6 The Monad Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.3.7 The Bounded Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.4 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
CONTENTS v
6.4.1 Numeric Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.4.2 Arithmetic and Number-Theoretic Operations . . . . . . . . . . . . . . . . . . . . . 82
6.4.3 Exponentiation and Logarithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.4.4 Magnitude and Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.4.5 Trigonometric Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.4.6 Coercions and Component Extraction . . . . . . . . . . . . . . . . . . . . . . . . . 85
7 Basic Input/Output 87
7.1 Standard I/O Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.2 Sequencing I/O Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.3 Exception Handling in the I/O Monad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8 Foreign Function Interface 91
8.1 Foreign Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.2 Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.2.1 Cross Language Type Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.3 Lexical Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.4 Foreign Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.4.1 Calling Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.4.2 Foreign Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.4.3 Import Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.4.4 Export Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.5 Specification of External Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.5.1 Standard C Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.5.2 Win32 API Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.6 Marshalling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.7 The External C Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9 Standard Prelude 105
9.1 Prelude PreludeList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.2 Prelude PreludeText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
9.3 Prelude PreludeIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
vi CONTENTS
10 Syntax Reference 129
10.1 Notational Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
10.2 Lexical Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
10.3 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.4 Literate comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.5 Context-Free Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.6 Fixity Resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
11 Specification of Derived Instances 145
11.1 Derived instances of Eq and Ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
11.2 Derived instances of Enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
11.3 Derived instances of Bounded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.4 Derived instances of Read and Show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.5 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
12 Compiler Pragmas 151
12.1 Inlining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
12.2 Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
12.3 Language extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
II The Haskell 2010 Libraries 153
13 Control.Monad 155
13.1 Functor and monad classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
13.2 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
13.2.1 Naming conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
13.2.2 Basic Monad functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
13.2.3 Generalisations of list functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
13.2.4 Conditional execution of monadic expressions . . . . . . . . . . . . . . . . . . . . 159
13.2.5 Monadic lifting operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
CONTENTS vii
14 Data.Array 161
14.1 Immutable non-strict arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
14.2 Array construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
14.3 Accessing arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
14.4 Incremental array updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
14.5 Derived arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
14.6 Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
15 Data.Bits 167
16 Data.Char 171
16.1 Characters and strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
16.2 Character classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
16.2.1 Subranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
16.2.2 Unicode general categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
16.3 Case conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.4 Single digit characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.5 Numeric representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
16.6 String representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
17 Data.Complex 177
17.1 Rectangular form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
17.2 Polar form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
17.3 Conjugate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
17.4 Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
18 Data.Int 181
18.1 Signed integer types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
19 Data.Ix 185
19.1 The Ix class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
19.2 Deriving Instances of Ix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
viii CONTENTS
20 Data.List 189
20.1 Basic functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
20.2 List transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
20.3 Reducing lists (folds) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
20.3.1 Special folds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
20.4 Building lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
20.4.1 Scans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
20.4.2 Accumulating maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
20.4.3 Infinite lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
20.4.4 Unfolding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
20.5 Sublists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
20.5.1 Extracting sublists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
20.5.2 Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
20.6 Searching lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
20.6.1 Searching by equality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
20.6.2 Searching with a predicate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
20.7 Indexing lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
20.8 Zipping and unzipping lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
20.9 Special lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
20.9.1 Functions on strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
20.9.2 ”Set” operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
20.9.3 Ordered lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
20.10Generalized functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
20.10.1 The ” By ” operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
20.10.1.1 User-supplied equality (replacing an Eq context) . . . . . . . . . . . . . 202
20.10.1.2 User-supplied comparison (replacing an Ord context) . . . . . . . . . . . 203
20.10.2 The ” generic ” operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
CONTENTS ix
21 Data.Maybe 205
21.1 The Maybe type and operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
21.2 Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
22 Data.Ratio 209
22.1 Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
23 Data.Word 213
23.1 Unsigned integral types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
24 Foreign 217
25 Foreign.C 219
26 Foreign.C.Error 221
26.1 Haskell representations of errno values . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
26.1.1 Common errno symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
26.1.2 Errno functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
26.1.3 Guards for IO operations that may fail . . . . . . . . . . . . . . . . . . . . . . . . 226
27 Foreign.C.String 229
27.1 C strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
27.1.1 Using a locale-dependent encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 230
27.1.2 Using 8-bit characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
27.2 C wide strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
28 Foreign.C.Types 235
28.1 Representations of C types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
28.1.1 Integral types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
28.1.2 Numeric types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
28.1.3 Floating types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
28.1.4 Other types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
x CONTENTS
29 Foreign.ForeignPtr 245
29.1 Finalised data pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
29.1.1 Basic operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
29.1.2 Low-level operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
29.1.3 Allocating managed memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
30 Foreign.Marshal 249
31 Foreign.Marshal.Alloc 251
31.1 Memory allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
31.1.1 Local allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
31.1.2 Dynamic allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
32 Foreign.Marshal.Array 255
32.1 Marshalling arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
32.1.1 Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
32.1.2 Marshalling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
32.1.3 Combined allocation and marshalling . . . . . . . . . . . . . . . . . . . . . . . . . 256
32.1.4 Copying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
32.1.5 Finding the length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
32.1.6 Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
33 Foreign.Marshal.Error 259
34 Foreign.Marshal.Utils 261
34.1 General marshalling utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
34.1.1 Combined allocation and marshalling . . . . . . . . . . . . . . . . . . . . . . . . . 261
34.1.2 Marshalling of Boolean values (non-zero corresponds to True ) . . . . . . . . . . . 262
34.1.3 Marshalling of Maybe values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
34.1.4 Marshalling lists of storable objects . . . . . . . . . . . . . . . . . . . . . . . . . . 262
34.1.5 Haskellish interface to memcpy and memmove . . . . . . . . . . . . . . . . . . . . 262
CONTENTS xi
35 Foreign.Ptr 263
35.1 Data pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
35.2 Function pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
35.3 Integral types with lossless conversion to and from pointers . . . . . . . . . . . . . . . . . 265
36 Foreign.StablePtr 267
36.1 Stable references to Haskell values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
36.1.1 The C-side interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
37 Foreign.Storable 269
38 Numeric 273
38.1 Showing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
38.2 Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
38.3 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
39 System.Environment 277
40 System.Exit 279
41 System.IO 281
41.1 The IO monad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
41.2 Files and handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
41.2.1 Standard handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
41.3 Opening and closing files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
41.3.1 Opening files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
41.3.2 Closing files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
41.3.3 Special cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
41.3.4 File locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
41.4 Operations on handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
41.4.1 Determining and changing the size of a file . . . . . . . . . . . . . . . . . . . . . . 284
41.4.2 Detecting the end of input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
xii CONTENTS
41.4.3 Buffering operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
41.4.4 Repositioning handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
41.4.5 Handle properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
41.4.6 Terminal operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
41.4.7 Showing handle state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
41.5 Text input and output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
41.5.1 Text input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
41.5.2 Text output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
41.5.3 Special cases for standard input and output . . . . . . . . . . . . . . . . . . . . . . 290
42 System.IO.Error 293
42.1 I/O errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
42.1.1 Classifying I/O errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
42.1.2 Attributes of I/O errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
42.2 Types of I/O error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
42.3 Throwing and catching I/O errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
References 297
Index 299

标签:

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警