Skip to content

Commit 1dc2043

Browse files
committed
Allow function application on the right side of fast pipe.
Fast pipe desugars to |. Why? It's easy stub-able like: let (|.) = (a, f) => f(a); This results into the rhs of -> not taking function application to make this work: a->f(b) is parsed as (a->f)(b). The fact that there isn't function application on the rhs, has resulted into a wide range of problems with fastpipe. In printing you actually want the layout to break as if there was a function application on the rhs! The printing problems were fixed at the cost of a tremendous amount of complexity in the printer. Are the semantics (evaluation order etc) identical when defined in user space like this, as opposed to ppx? No, they aren't… ``` let fn1 = (~foo=?, ()) => 1; let fn2 = (~bar=?, x) => 2; /* Ok */ fn1(~foo=1, ())->(fn2(~bar=2)) /* Ok */ fn1(~foo=1,()) |. fn2(~bar=2) /* Error: This expression has type int. It is not a function. */ fn1(~foo=1, ())->fn2(~bar=2) /* Explanation */ fn1(~foo=1, ())->fn2(~bar=2) /* this translates to: */ fn2(1)(~bar=2) /* however, because `~bar` is optional, `fn2(1)` already produced a value. Therefore: */ 2(~bar=2) ``` In retrospect, not having function application on the rhs was a terrible mistake. Fast pipe is all about function application in its current form. If it was done via ppx, then you wouldn't get the error in the example above.
1 parent 221c40a commit 1dc2043

File tree

15 files changed

+92
-42083
lines changed

15 files changed

+92
-42083
lines changed

esy.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"install": [
3333
["esy-installer", "reason.install"],
3434
["esy-installer", "rtop.install"]
35-
]
35+
],
36+
"buildsInSource": "_build"
3637
}
3738
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
File "reservedField.re", line 1, characters 11-15:
2-
Error: 1050: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
2+
Error: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
File "reservedRecord.re", line 1, characters 24-28:
2-
Error: 1821: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
2+
Error: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
File "reservedRecordPunned.re", line 1, characters 22-26:
2-
Error: 3369: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
2+
Error: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
File "reservedRecordType.re", line 1, characters 11-15:
2-
Error: 766: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
2+
Error: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
File "reservedRecordTypePunned.re", line 1, characters 11-15:
2-
Error: 766: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead
2+
Error: type is a reserved keyword, it cannot be used as an identifier. Try `type_` or `_type` instead

formatTest/typeCheckedTests/expected_output/fastPipe.re

Lines changed: 0 additions & 190 deletions
This file was deleted.

formatTest/typeCheckedTests/input/fastPipe.re

Lines changed: 0 additions & 168 deletions
This file was deleted.

0 commit comments

Comments
 (0)