Skip to content

Commit b3d68a4

Browse files
authored
feat(compiler)!: Change -> to => in type signatures (#1855)
* feat(compiler)!: Change `->` to `=>` in type signatures * allow `->`, add some tests
1 parent 46b8a5a commit b3d68a4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+1694
-1508
lines changed

compiler/src/formatting/format.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1792,7 +1792,7 @@ and print_type =
17921792
},
17931793
),
17941794
Doc.space,
1795-
Doc.text("->"),
1795+
Doc.text("=>"),
17961796
Doc.space,
17971797
print_type(~original_source, ~comments, parsed_type),
17981798
])

compiler/src/parsing/parser.messages

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ program: MODULE UIDENT EOL FOREIGN WASM LIDENT COLON UIDENT AS LIDENT YIELD
348348
## The known suffix of the stack is as follows:
349349
## FOREIGN WASM id_str COLON typ option(as_prefix(id_str))
350350
##
351-
program: MODULE UIDENT EOL FOREIGN WASM LIDENT COLON EOL LIDENT ARROW
351+
program: MODULE UIDENT EOL FOREIGN WASM LIDENT COLON EOL LIDENT THICKARROW
352352
##
353353
## Ends in an error in state: 757.
354354
##
@@ -366,7 +366,7 @@ program: MODULE UIDENT EOL FOREIGN WASM LIDENT COLON EOL UIDENT AS LIDENT YIELD
366366
## The known suffix of the stack is as follows:
367367
## FOREIGN WASM id_str COLON eols typ option(as_prefix(id_str))
368368
##
369-
program: MODULE UIDENT EOL FOREIGN WASM LIDENT COLON LIDENT ARROW
369+
program: MODULE UIDENT EOL FOREIGN WASM LIDENT COLON LIDENT THICKARROW
370370
##
371371
## Ends in an error in state: 749.
372372
##
@@ -2884,7 +2884,7 @@ program: MODULE UIDENT EOL UIDENT LPAREN COMMA WHILE
28842884
## In state 43, spurious reduction of production comma -> COMMA
28852885
## In state 275, spurious reduction of production option(comma) -> comma
28862886
##
2887-
program: MODULE UIDENT EOL UIDENT LPAREN UIDENT ARROW
2887+
program: MODULE UIDENT EOL UIDENT LPAREN UIDENT THICKARROW
28882888
##
28892889
## Ends in an error in state: 473.
28902890
##
@@ -3324,7 +3324,7 @@ program: MODULE UIDENT EOL LBRACE BREAK RBRACE LBRACK WASMI64 THICKARROW
33243324
## In state 243, spurious reduction of production non_stmt_expr -> annotated_expr
33253325
## In state 62, spurious reduction of production expr -> non_stmt_expr
33263326
##
3327-
program: MODULE UIDENT EOL PREFIX_150 LBRACK RBRACK LBRACK BIGINT ARROW
3327+
program: MODULE UIDENT EOL PREFIX_150 LBRACK RBRACK LBRACK BIGINT THICKARROW
33283328
##
33293329
## Ends in an error in state: 560.
33303330
##
@@ -3420,7 +3420,7 @@ program: MODULE UIDENT EOL LBRACE LIDENT COMMA EOL LIDENT COLON BREAK WHILE
34203420
## The known suffix of the stack is as follows:
34213421
## punned_record_field comma lseparated_nonempty_list_inner(comma,record_field)
34223422
##
3423-
program: MODULE UIDENT EOL LBRACE ELLIPSIS BIGINT COMMA ELLIPSIS BIGINT ARROW
3423+
program: MODULE UIDENT EOL LBRACE ELLIPSIS BIGINT COMMA ELLIPSIS BIGINT THICKARROW
34243424
##
34253425
## Ends in an error in state: 227.
34263426
##
@@ -3447,7 +3447,7 @@ program: MODULE UIDENT EOL LBRACE ELLIPSIS BIGINT COMMA ELLIPSIS BIGINT ARROW
34473447

34483448
Expected a comma followed by more record fields or an immediate `}` to complete the record expression.
34493449

3450-
program: MODULE UIDENT EOL UIDENT LBRACE ELLIPSIS UIDENT ARROW
3450+
program: MODULE UIDENT EOL UIDENT LBRACE ELLIPSIS UIDENT THICKARROW
34513451
##
34523452
## Ends in an error in state: 488.
34533453
##
@@ -3535,7 +3535,7 @@ program: MODULE UIDENT EOL LBRACE LIDENT COMMA LIDENT COMMA EOL WHILE
35353535

35363536
Expected more record fields or an immediate `}` to complete the record expression.
35373537

3538-
program: MODULE UIDENT EOL LBRACE ELLIPSIS BIGINT ARROW
3538+
program: MODULE UIDENT EOL LBRACE ELLIPSIS BIGINT THICKARROW
35393539
##
35403540
## Ends in an error in state: 222.
35413541
##
@@ -4402,7 +4402,7 @@ program: MODULE UIDENT EOL LET UIDENT DOT EOL WHILE
44024402
##
44034403
## Ends in an error in state: 92.
44044404
##
4405-
## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ARROW ]
4405+
## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS THICKARROW ]
44064406
##
44074407
## The known suffix of the stack is as follows:
44084408
## lseparated_nonempty_list_inner(dot,type_id_str) DOT eols
@@ -4418,8 +4418,8 @@ program: MODULE UIDENT EOL LET UIDENT DOT WHILE
44184418
##
44194419
## Ends in an error in state: 90.
44204420
##
4421-
## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ARROW ]
4422-
## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ARROW ]
4421+
## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS THICKARROW ]
4422+
## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS THICKARROW ]
44234423
##
44244424
## The known suffix of the stack is as follows:
44254425
## lseparated_nonempty_list_inner(dot,type_id_str) DOT
@@ -4603,7 +4603,7 @@ program: MODULE UIDENT EOL LPAREN WASMI64 EOL WHILE
46034603
##
46044604
## Ends in an error in state: 113.
46054605
##
4606-
## rparen -> eols . RPAREN [ WHILE WHEN WASMI64 WASMI32 WASMF64 WASMF32 VOID UIDENT TYPE TRUE THROW THICKARROW STRING STAR SLASH SEMI RPAREN RECORD RCARET RBRACK RBRACE PREFIX_150 PIPE NUMBER_INT NUMBER_FLOAT MATCH LPAREN LIDENT LET LCARET LBRACKRCARET LBRACK LBRACE INT64 INT32 INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 INCLUDE IF GETS FUN FROM FOR FLOAT64 FLOAT32 FALSE FAIL PROVIDE EQUAL EOL EOF ENUM ELSE DOT DASH CONTINUE COMMA COLON CHAR BREAK BIGINT AT ASSERT AS ARROW ]
4606+
## rparen -> eols . RPAREN [ WHILE WHEN WASMI64 WASMI32 WASMF64 WASMF32 VOID UIDENT TYPE TRUE THROW THICKARROW STRING STAR SLASH SEMI RPAREN RECORD RCARET RBRACK RBRACE PREFIX_150 PIPE NUMBER_INT NUMBER_FLOAT MATCH LPAREN LIDENT LET LCARET LBRACKRCARET LBRACK LBRACE INT64 INT32 INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 INCLUDE IF GETS FUN FROM FOR FLOAT64 FLOAT32 FALSE FAIL PROVIDE EQUAL EOL EOF ENUM ELSE DOT DASH CONTINUE COMMA COLON CHAR BREAK BIGINT AT ASSERT AS THICKARROW ]
46074607
##
46084608
## The known suffix of the stack is as follows:
46094609
## eols
@@ -5082,7 +5082,7 @@ program: MODULE UIDENT EOL RECORD UIDENT LCARET LIDENT EOL WHILE
50825082
##
50835083
## Ends in an error in state: 86.
50845084
##
5085-
## rcaret -> eols . RCARET [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET LBRACE INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ARROW ]
5085+
## rcaret -> eols . RCARET [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET LBRACE INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS THICKARROW ]
50865086
##
50875087
## The known suffix of the stack is as follows:
50885088
## eols
@@ -5875,7 +5875,7 @@ program: MODULE UIDENT EOL WASMI64 COLON WHILE
58755875

58765876
Expected a type to complete the type annotation.
58775877

5878-
program: MODULE UIDENT EOL WASMI64 COLON FUN LIDENT ARROW EOL WHILE
5878+
program: MODULE UIDENT EOL WASMI64 COLON FUN LIDENT THICKARROW EOL WHILE
58795879
##
58805880
## Ends in an error in state: 78.
58815881
##
@@ -5890,9 +5890,9 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LIDENT ARROW EOL WHILE
58905890
## may provide an INCOMPLETE view of the future (what was expected next).
58915891
## In state 3, spurious reduction of production nonempty_list(eol) -> EOL
58925892
## In state 5, spurious reduction of production eols -> nonempty_list(eol)
5893-
## In state 77, spurious reduction of production arrow -> ARROW eols
5893+
## In state 77, spurious reduction of production arrow -> THICKARROW eols
58945894
##
5895-
program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN RPAREN ARROW EOL WHILE
5895+
program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN RPAREN THICKARROW EOL WHILE
58965896
##
58975897
## Ends in an error in state: 122.
58985898
##
@@ -5907,7 +5907,22 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN RPAREN ARROW EOL WHILE
59075907
## may provide an INCOMPLETE view of the future (what was expected next).
59085908
## In state 3, spurious reduction of production nonempty_list(eol) -> EOL
59095909
## In state 5, spurious reduction of production eols -> nonempty_list(eol)
5910-
## In state 77, spurious reduction of production arrow -> ARROW eols
5910+
## In state 77, spurious reduction of production arrow -> THICKARROW eols
5911+
##
5912+
program: MODULE UIDENT EOL UIDENT COLON FUN UIDENT THICKARROW YIELD
5913+
##
5914+
## Ends in an error in state: 217.
5915+
##
5916+
## typ -> FUN data_typ thickarrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS AND ]
5917+
##
5918+
## The known suffix of the stack is as follows:
5919+
## FUN data_typ thickarrow
5920+
##
5921+
## WARNING: This example involves spurious reductions.
5922+
## This implies that, although the LR(1) items shown above provide an
5923+
## accurate view of the past (what has been recognized so far), they
5924+
## may provide an INCOMPLETE view of the future (what was expected next).
5925+
## In state 37, spurious reduction of production thickarrow -> THICKARROW
59115926
##
59125927

59135928
Expected a type for the result of the function type.
@@ -6095,31 +6110,31 @@ program: MODULE UIDENT EOL WASMI64 COLON LPAREN UIDENT WHEN
60956110

60966111
Expected `)` for a grouped type or a comma followed by more types for a tuple type.
60976112

6098-
program: MODULE UIDENT EOL WASMI64 COLON UIDENT ARROW EOL WHILE
6113+
program: MODULE UIDENT EOL UIDENT COLON FUN UIDENT YIELD
60996114
##
6100-
## Ends in an error in state: 107.
6115+
## Ends in an error in state: 216.
61016116
##
6102-
## typ -> data_typ arrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ]
6117+
## typ -> FUN data_typ . thickarrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS AND ]
61036118
##
61046119
## The known suffix of the stack is as follows:
6105-
## data_typ arrow
6120+
## FUN data_typ
61066121
##
61076122
## WARNING: This example involves spurious reductions.
61086123
## This implies that, although the LR(1) items shown above provide an
61096124
## accurate view of the past (what has been recognized so far), they
61106125
## may provide an INCOMPLETE view of the future (what was expected next).
6111-
## In state 3, spurious reduction of production nonempty_list(eol) -> EOL
6112-
## In state 5, spurious reduction of production eols -> nonempty_list(eol)
6113-
## In state 77, spurious reduction of production arrow -> ARROW eols
6126+
## In state 106, spurious reduction of production qualified_uid -> lseparated_nonempty_list_inner(dot,type_id_str)
6127+
## In state 167, spurious reduction of production data_typ -> qualified_uid
61146128
##
61156129

6116-
Expected a type for the result of the function type.
6130+
# This error can't appear as the FUN token wouldn't have been injected.
6131+
Expected `=>` followed by the function type's result type.
61176132

61186133
program: MODULE UIDENT EOL WASMI64 COLON UIDENT LCARET EOL WHILE
61196134
##
61206135
## Ends in an error in state: 82.
61216136
##
6122-
## data_typ -> type_id lcaret . typs rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ARROW ]
6137+
## data_typ -> type_id lcaret . typs rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS THICKARROW ]
61236138
##
61246139
## The known suffix of the stack is as follows:
61256140
## type_id lcaret
@@ -6139,7 +6154,7 @@ program: MODULE UIDENT EOL WASMI64 COLON UIDENT LCARET UIDENT RPAREN
61396154
##
61406155
## Ends in an error in state: 83.
61416156
##
6142-
## data_typ -> type_id lcaret typs . rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ARROW ]
6157+
## data_typ -> type_id lcaret typs . rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS THICKARROW ]
61436158
##
61446159
## The known suffix of the stack is as follows:
61456160
## type_id lcaret typs

compiler/src/parsing/parser.mly

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ arrow:
195195
thickarrow:
196196
| THICKARROW opt_eols {}
197197

198+
either_arrow:
199+
| arrow {}
200+
| thickarrow {}
201+
198202
equal:
199203
| EQUAL opt_eols {}
200204

@@ -299,9 +303,9 @@ data_typ:
299303
| qualified_uid %prec _below_infix { Type.constr ~loc:(to_loc $loc) $1 [] }
300304

301305
typ:
302-
| data_typ arrow typ { Type.arrow ~loc:(to_loc $loc) [TypeArgument.mk ~loc:(to_loc $loc($1)) Unlabeled $1] $3 }
303-
| FUN LIDENT arrow typ { Type.arrow ~loc:(to_loc $loc) [TypeArgument.mk ~loc:(to_loc $loc($2)) Unlabeled (Type.var $2)] $4 }
304-
| FUN lparen arg_typs? rparen arrow typ { Type.arrow ~loc:(to_loc $loc) (Option.value ~default:[] $3) $6 }
306+
| FUN data_typ either_arrow typ { Type.arrow ~loc:(to_loc $loc) [TypeArgument.mk ~loc:(to_loc $loc($2)) Unlabeled $2] $4 }
307+
| FUN LIDENT either_arrow typ { Type.arrow ~loc:(to_loc $loc) [TypeArgument.mk ~loc:(to_loc $loc($2)) Unlabeled (Type.var $2)] $4 }
308+
| FUN lparen arg_typs? rparen either_arrow typ { Type.arrow ~loc:(to_loc $loc) (Option.value ~default:[] $3) $6 }
305309
| lparen tuple_typs rparen { Type.tuple ~loc:(to_loc $loc) $2 }
306310
| lparen typ rparen { $2 }
307311
| LIDENT { Type.var ~loc:(to_loc $loc) $1 }

compiler/src/parsing/wrapped_lexer.re

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ let fake_triple = (t, (_, pos, _)) => (t, pos, pos);
5858

5959
exception Lex_balanced_failed(list(positioned(token)), option(exn));
6060
exception Lex_fast_forward_failed(list(positioned(token)), option(exn));
61+
exception Lex_data_typ_failed(list(positioned(token)), option(exn));
6162

6263
let inject_fun =
6364
fun
@@ -144,12 +145,29 @@ and check_id_fn = (state, closing, acc) => {
144145
lex_balanced_step(state, closing, acc, tok);
145146
}
146147

148+
and check_data_typ = (state, closing, acc) => {
149+
switch (lex_data_typ(state)) {
150+
| exception (Lex_data_typ_failed([token, ...rest], exn)) =>
151+
lex_balanced_step(state, closing, rest @ acc, token)
152+
| [token, ...rest] =>
153+
let acc =
154+
if (is_triggering_token(token)) {
155+
inject_fun(acc);
156+
} else {
157+
acc;
158+
};
159+
lex_balanced_step(state, closing, rest @ acc, token);
160+
| _ => failwith("Impossible: wrapped_lexer check_data_typ not matched")
161+
};
162+
}
163+
147164
and lex_balanced_step = (state, closing, acc, tok) => {
148165
let acc = [tok, ...acc];
149166
switch (tok, closing) {
150167
| ((RPAREN, _, _), RPAREN)
151168
| ((RBRACE, _, _), RBRACE)
152-
| ((RBRACK, _, _), RBRACK) =>
169+
| ((RBRACK, _, _), RBRACK)
170+
| ((RCARET, _, _), RCARET) =>
153171
pop_fn_ctx(state);
154172
acc;
155173
| ((RPAREN | RBRACE | RBRACK | EOF, _, _), _) =>
@@ -182,6 +200,7 @@ and lex_balanced_step = (state, closing, acc, tok) => {
182200
| LPAREN => check_lparen_fn(state, closing, [triple', ...tokens @ acc])
183201
| LIDENT(_)
184202
| UNDERSCORE => check_id_fn(state, closing, [triple', ...tokens @ acc])
203+
| UIDENT(_) => check_data_typ(state, closing, [triple', ...tokens @ acc])
185204
| _ =>
186205
// Recurse normally
187206
lex_balanced_step(state, closing, tokens @ acc, triple')
@@ -208,6 +227,8 @@ and lex_balanced_step = (state, closing, acc, tok) => {
208227
)
209228
| ((LIDENT(_) | UNDERSCORE, _, _), _) when !ignore_fns(state) =>
210229
check_id_fn(state, closing, acc)
230+
| ((UIDENT(_), p, _), _) when !ignore_fns(state) =>
231+
check_data_typ(state, closing, acc)
211232
| _ => lex_balanced(state, closing, acc)
212233
};
213234
}
@@ -244,6 +265,52 @@ and lookahead_fun = (state, (tok, _, _) as lparen) =>
244265
}
245266
}
246267

268+
and lex_qualified_uid = (state, acc) => {
269+
switch (token(state)) {
270+
| exception exn => raise(Lex_data_typ_failed(acc, Some(exn)))
271+
| (DOT, _, _) as dot =>
272+
switch (token(state)) {
273+
| exception exn => raise(Lex_data_typ_failed(acc, Some(exn)))
274+
| (UIDENT(_), _, _) as uident =>
275+
lex_qualified_uid(state, [uident, dot, ...acc])
276+
| tok => raise(Lex_data_typ_failed([tok, dot, ...acc], None))
277+
}
278+
| token => [token, ...acc]
279+
};
280+
}
281+
282+
and lex_data_typ = state => {
283+
switch (lex_qualified_uid(state, [])) {
284+
| [(LCARET, _, _), ..._] as quid_tokens =>
285+
switch (lex_balanced(~push=DiscoverFunctions, state, RCARET, [])) {
286+
| exception (Lex_balanced_failed(tokens, exn)) =>
287+
raise(Lex_data_typ_failed(tokens, exn))
288+
| brack_tokens =>
289+
let tokens = brack_tokens @ quid_tokens;
290+
switch (token(state)) {
291+
| exception exn => raise(Lex_data_typ_failed(tokens, Some(exn)))
292+
| tok => [tok, ...tokens]
293+
};
294+
}
295+
| tokens => tokens
296+
};
297+
}
298+
299+
and lookahead_fun_data_typ = (state, uident) => {
300+
switch (lex_data_typ(state)) {
301+
| exception (Lex_data_typ_failed(tokens, exn)) =>
302+
state.queued_tokens = List.rev(tokens);
303+
state.queued_exn = exn;
304+
uident;
305+
| [token, ..._] as tokens when is_triggering_token(token) =>
306+
state.queued_tokens = [uident, ...List.rev(tokens)];
307+
fake_triple(FUN, uident);
308+
| tokens =>
309+
state.queued_tokens = List.rev(tokens);
310+
uident;
311+
};
312+
}
313+
247314
and lookahead_match = state => {
248315
switch (lex_fast_forward(state, LPAREN, [])) {
249316
| exception (Lex_fast_forward_failed(tokens, exn)) =>
@@ -307,6 +374,7 @@ let token = state => {
307374
tok;
308375
}
309376
}
377+
| (UIDENT(_), _, _) as tok => lookahead_fun_data_typ(state, tok)
310378
| token => token
311379
}
312380
| ([x, ...xs], _) =>

compiler/src/typed/oprint.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ and print_out_type_1 = ppf =>
367367
if (parens) {
368368
pp_print_char(ppf, ')');
369369
};
370-
pp_print_string(ppf, " ->");
370+
pp_print_string(ppf, " =>");
371371
pp_print_space(ppf, ());
372372
print_out_type_1(ppf, ty2);
373373
pp_close_box(ppf, ());

compiler/test/graindoc/descriptions.expected.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Value Doc
4949
### DescriptionGrainDoc.**docFunction**
5050

5151
```grain
52-
docFunction : (x: Number) -> Number
52+
docFunction : (x: Number) => Number
5353
```
5454

5555
Function Doc

0 commit comments

Comments
 (0)