@@ -9,6 +9,8 @@ type ('c, 'a) t = {
9
9
encode : ('c , 'a ) Encoder .t ;
10
10
}
11
11
12
+ type 'a value = ('a , 'a ) t
13
+
12
14
let ( let+ ) x f = Option. map f x
13
15
let ( let * ) = Option. bind
14
16
@@ -75,37 +77,37 @@ open Sized_numbers
75
77
76
78
(* Integer conversion formats *)
77
79
78
- let int_to_i32 : ( int, int) t -> ( int32, int32) t =
80
+ let int_to_i32 : int value -> int32 value =
79
81
dimap Int32. of_int Int32. to_int
80
82
81
- let int_to_i64 : ( int, int) t -> ( int64, int64) t =
83
+ let int_to_i64 : int value -> int64 value =
82
84
dimap Int64. of_int Int64. to_int
83
85
84
86
85
87
(* Integer formats *)
86
88
87
- let int8 : ( int, int) t = (* FIXME: int8 *)
89
+ let int8 : int value = (* FIXME: int8 *)
88
90
let decode buf pos = if pos < Bytes. length buf then Some (Bytes. get_int8 buf pos, pos + 1 ) else None
89
91
and encode buf c = Buffer. add_int8 buf c; Some c in
90
92
{ decode; encode }
91
93
92
- let int16_be : ( int, int) t = (* FIXME: int16 *)
94
+ let int16_be : int value = (* FIXME: int16 *)
93
95
let open Syntax in
94
96
95
97
let + b0 = int8 |> dimap (fun x -> x lsl 8 ) (fun x -> x lsr 8 )
96
98
and + b1 = int8 in
97
99
98
100
b0 lor b1
99
101
100
- let int16_le : ( int, int) t = (* FIXME: int16 *)
102
+ let int16_le : int value = (* FIXME: int16 *)
101
103
let open Syntax in
102
104
103
105
let + b0 = int8
104
106
and + b1 = int8 |> dimap (fun x -> x lsl 8 ) (fun x -> x lsr 8 ) in
105
107
106
108
b0 lor b1
107
109
108
- let int32_be : ( int32, int32) t =
110
+ let int32_be : int32 value =
109
111
let open Syntax in
110
112
let open Int32.O in
111
113
@@ -116,7 +118,7 @@ let int32_be : (int32, int32) t =
116
118
117
119
b0 lor b1 lor b2 lor b3
118
120
119
- let int32_le : ( int32, int32) t =
121
+ let int32_le : int32 value =
120
122
let open Syntax in
121
123
let open Int32.O in
122
124
@@ -127,7 +129,7 @@ let int32_le : (int32, int32) t =
127
129
128
130
b0 lor b1 lor b2 lor b3
129
131
130
- let int64_be : ( int64, int64) t =
132
+ let int64_be : int64 value =
131
133
let open Syntax in
132
134
let open Int64.O in
133
135
@@ -142,7 +144,7 @@ let int64_be : (int64, int64) t =
142
144
143
145
b0 lor b1 lor b2 lor b3 lor b4 lor b5 lor b6 lor b7
144
146
145
- let int64_le : ( int64, int64) t =
147
+ let int64_le : int64 value =
146
148
let open Syntax in
147
149
let open Int64.O in
148
150
@@ -162,7 +164,7 @@ module List = struct
162
164
163
165
open Syntax
164
166
165
- let repeat_len (type a ) (elem : (a, a) t ) (len : int ) : ( a list, a list) t =
167
+ let repeat_len (type a ) (elem : a value ) (len : int ) : a list value =
166
168
let rec repeat_len i =
167
169
if i < len then
168
170
(* FIXME: List.hd and List.tl fail on the empty list*)
178
180
179
181
module Array = struct
180
182
181
- let repeat_len (type a ) (elem : (a, a) t ) (len : int ) : ( a array, a array) t =
183
+ let repeat_len (type a ) (elem : a value ) (len : int ) : a array value =
182
184
(* FIXME: No clue if this actually works... and it’s really ugly! write some tests! *)
183
185
let decode buf pos =
184
186
if len < = 0 then Some ([||], pos) else
0 commit comments