AST-38: Significant parenthesis around tuple patterns in func arguments#178
AST-38: Significant parenthesis around tuple patterns in func arguments#178
Conversation
and guide it through to type checker. Parser still not done, instead we explicitly write a 1-ary pattern at toplevel.
|
I am sufficiently confident that I am doing the right thing, so let's make this a proper pull request.
I'd like to find answers/comments to the above. |
I suppose so.
Which failure is that?
Correct.
Yes. At calls there is an implicit coercion between tuples and n-ary arguments (same for results). The difference really only matters in higher-order cases, (()) -> () is a different function type than () -> (), and they cannot be coerced. |
Note that “in I need to include the phase in the “issue38.as:46.1-46.15: IR type error, subtype violation:” message to see clearly if this arose after desugaring (indicating a bug in |
|
The IR is already ill-typed after desugaring (the following is the output with #179) Unrelatedly, the build now says is that something that ought to worry us? |
|
Gabor, is you set OCAMLRUNPARAM="b" in your environment, then you should get a stack trace that pinpoints where the error occurred in the IR checker. |
|
And yes, parsing ambiguities should be removed, especially reduce/reduce ones. |
|
Working on a fix... Done. |
|
I think the right fix is not to handle the parameter parens case in parsing but in typing. |
so that `pat_top` and `pat_nullary` can share the common innards. This avoids the reduce/reduce conflicts reported by `menhir`. CAVEAT: I am not a grammar expert, so there may be better ways to accomplish this. Suggestions welcome.
|
@ggreif Did you get issue38 above working? I checked out the branch but cannot reproduce it.... |
|
FTR Never mind - the bug is still there, but you need to run the test manually to see it … |
src/desugar.ml
Outdated
| | S.TupP [p1], Type.Tup [n] -> { p with it = p1.it; note = n } | ||
| | _ -> p in | ||
| let param p = match p.it with | ||
| | S.ParP p1 -> pat (fix_unary { p with it = S.TupP [p1]; note = Type.Tup [p.note] }) |
There was a problem hiding this comment.
In the S.ParP p1 case, would it not be make more sense to just continue with pat p1 - or is there something more subtle going on here.
There was a problem hiding this comment.
Agreed with @crusso, not sure why there are two levels of special casing.
There was a problem hiding this comment.
Will fold. There is nothing subtle going on besides "separation of concerns". See my previous explanation.
src/operator.ml
Outdated
| | T.Word32 -> fun v -> Word32 (fword32 (as_word32 v)) | ||
| | T.Word64 -> fun v -> Word64 (fword64 (as_word64 v)) | ||
| | _ -> raise (Invalid_argument "unop") | ||
| | _ -> raise (Invalid_argument "word_unop") |
There was a problem hiding this comment.
Are these unrelated changes that snuck into the branch? I wouldn't bother reverting, just wanted to draw your attention...
There was a problem hiding this comment.
I would prefer reverting that change, since word_unop is an implementation detail of the module, and only unop is meaningful outside.
There was a problem hiding this comment.
I am happy to revert. I did this because there are two raise (Invalid_argument "unop") defaults in that file, and when I made an attempt to always wrap ParP around inner patterns I got this exception. Here is the dump:
switch: [tc] [run] [run-low] [run-ir] [wasm]
--- switch.tc (expected)
+++ switch.tc (actual)
@@ -1,6 +1,4 @@
-switch.as:87.33-87.34: warning, this pattern is never matched
-switch.as:75.11-77.2: warning, the cases in this switch do not cover all possible values
-switch.as:81.3-81.14: warning, the cases in this switch do not cover all possible values
-switch.as:87.3-87.40: warning, the cases in this switch do not cover all possible values
-switch.as:92.11-94.2: warning, the cases in this switch do not cover all possible values
-switch.as:97.11-99.2: warning, the cases in this switch do not cover all possible values
+(unknown location): internal error, Invalid_argument("unop")
+
+Last environment:
+It is kind-of hard to figure which function threw, when two are throwing the same thing :-)
(Cursory debugging of the issue did not give any helpful clues, only that it is not word_unop who is throwing.)
Anyway, if we go forward (with a distinct PR) to equate unary tuples and values in the parser, then the ParP wrapping will be moot anyway, so I prefer to leave the parser as-is for now.
Also my (not pushed) experiment to always add ParP resulted in a bunch of changed source locations (parens around AltP) making the reporting less precise:
-coverage.as:5.8-5.14: warning, this pattern does not cover all possible values
+coverage.as:5.7-5.15: warning, this pattern does not cover all possible valuesI could fix that by inheriting the inner srcloc, but I don't see the benefit.
crusso
left a comment
There was a problem hiding this comment.
I've added some comment inline. I still think we are only masking the problem with unit tuples, but for now, I think this is almost good to merge (see comments)
src/desugar.ml
Outdated
| and dec d = phrase' dec' d | ||
| and dec' at n d = match d with | ||
| and dec' at n d = | ||
| let fix_unary p = match p.it, p.note with |
There was a problem hiding this comment.
Hm, it looks fishy to me to only apply such a special case in one place. If the solution is to essentially remove unary tuples then the right place to do this normalisation is in the parser, in the productions for tuples, so that the AST never contains a unary tuple type/exp/pat in the first place.
There was a problem hiding this comment.
When I wrote this, my intention was not to equate values with the unary tuple formed from them. I was bending to the (empirical) observation that the later stages (i.e. coverage analyser, interpreter) seem to insist that single arguments should not be wrapped by an extra layer of TupP. Please note that at this point both the type system as well as the runtime values do have the notion of unary tuple, the only place where I strip them is here for unary function arguments, with the fix_unary function. The separation I chose arose from the consideration, that I wanted to make clear that we first lower to a canonical form (i.e. TupP around arguments) and then fix the single argument case that causes trouble downstream. As already discussed with @crusso I plan to write a new story for cleaning up the status quo. For this PR I'll fold the two levels into one.
src/desugar.ml
Outdated
| let fix_unary p = match p.it, p.note with | ||
| | S.TupP [p1], Type.Tup [n] -> { p with it = p1.it; note = n } | ||
| | _ -> p in | ||
| let param p = match p.it with |
There was a problem hiding this comment.
Nit: avoid nesting functions unless they actually close over something.
There was a problem hiding this comment.
Okay, this seems to be a stylistic issue. Are there any such conventions written down somewhere? My notion used to be "define utilities in the closest possible scope", which I do here. I'll try to lift this out to top-level when folding the two functions into one. I wonder however, if that will export the function from the module?
src/desugar.ml
Outdated
| | S.TupP [p1], Type.Tup [n] -> { p with it = p1.it; note = n } | ||
| | _ -> p in | ||
| let param p = match p.it with | ||
| | S.ParP p1 -> pat (fix_unary { p with it = S.TupP [p1]; note = Type.Tup [p.note] }) |
There was a problem hiding this comment.
Agreed with @crusso, not sure why there are two levels of special casing.
src/operator.ml
Outdated
| | T.Word32 -> fun v -> Word32 (fword32 (as_word32 v)) | ||
| | T.Word64 -> fun v -> Word64 (fword64 (as_word64 v)) | ||
| | _ -> raise (Invalid_argument "unop") | ||
| | _ -> raise (Invalid_argument "word_unop") |
There was a problem hiding this comment.
I would prefer reverting that change, since word_unop is an implementation detail of the module, and only unop is meaningful outside.
There was a problem hiding this comment.
This is getting waaay bigger than originally thought. I have motivated my decisions to my best knowledge, please ask if something is still unclear. This is on my plate:
- revert the
unop(and friends) change - fold
fix_unaryintoparamand move to toplevel - (optionally) investigate the root cause for the internal error when
ParPwraps anAnnP(if you insist) - write follow-on story to rectify the single-argument mess.
src/desugar.ml
Outdated
| and dec d = phrase' dec' d | ||
| and dec' at n d = match d with | ||
| and dec' at n d = | ||
| let fix_unary p = match p.it, p.note with |
There was a problem hiding this comment.
When I wrote this, my intention was not to equate values with the unary tuple formed from them. I was bending to the (empirical) observation that the later stages (i.e. coverage analyser, interpreter) seem to insist that single arguments should not be wrapped by an extra layer of TupP. Please note that at this point both the type system as well as the runtime values do have the notion of unary tuple, the only place where I strip them is here for unary function arguments, with the fix_unary function. The separation I chose arose from the consideration, that I wanted to make clear that we first lower to a canonical form (i.e. TupP around arguments) and then fix the single argument case that causes trouble downstream. As already discussed with @crusso I plan to write a new story for cleaning up the status quo. For this PR I'll fold the two levels into one.
src/desugar.ml
Outdated
| let fix_unary p = match p.it, p.note with | ||
| | S.TupP [p1], Type.Tup [n] -> { p with it = p1.it; note = n } | ||
| | _ -> p in | ||
| let param p = match p.it with |
There was a problem hiding this comment.
Okay, this seems to be a stylistic issue. Are there any such conventions written down somewhere? My notion used to be "define utilities in the closest possible scope", which I do here. I'll try to lift this out to top-level when folding the two functions into one. I wonder however, if that will export the function from the module?
src/desugar.ml
Outdated
| | S.TupP [p1], Type.Tup [n] -> { p with it = p1.it; note = n } | ||
| | _ -> p in | ||
| let param p = match p.it with | ||
| | S.ParP p1 -> pat (fix_unary { p with it = S.TupP [p1]; note = Type.Tup [p.note] }) |
There was a problem hiding this comment.
Will fold. There is nothing subtle going on besides "separation of concerns". See my previous explanation.
| { LitP(ref l) @! at $sloc } | ||
| | LPAR p=pat RPAR | ||
| { p } | ||
| { match p.it with |
There was a problem hiding this comment.
I tried to get away with the distinction, but it caused the
+(unknown location): internal error, Invalid_argument("unop")failure. I have analysed it and it originates from:
let x2 : Int = switch (-3) {
case (0) 0;
case (-1) 2; // <<< problem
case (-3) 1;
case (x) x;
};so the unop is -. The switch expression case legs end up with (ParP ...). There is a bug somewhere handling this case. Seems like unop does not handle Type.Pre.
Note that the parse tree now contains all the extra ParPs:
(LetD
(VarP x2)
(AnnotE
(SwitchE
(UnE ??? NegOp (LitE (PreLit 3 Nat)))
(case (ParP (LitP (PreLit 0 Nat))) (LitE (PreLit 0 Nat)))
(case (ParP (SignP NegOp (PreLit 1 Nat))) (LitE (PreLit 2 Nat)))
(case (ParP (SignP NegOp (PreLit 3 Nat))) (LitE (PreLit 1 Nat)))
(case (ParP (VarP x)) (VarE x))
)
(VarT Int)
)
)Update: cracked it. infer_pat' should always call infer_pat when descending, but I was calling infer_pat' from the PatP case, thus not updating references.
Also, in the desugarer I am assuming that The new ParP only wraps (TupP ...). See the param (and fix_unary conversation above).param is indifferent.
The other reason for not using { ParP p @! at $sloc } is the loss of precision when pointing out non-coverage warnings. I explained this in my previous comment.
and move to toplevel
This reverts commit 9c29a48.
by calling `infer_pat`, so that the note gets updated for the subpattern
now that we correctly typecheck it.
| and param p = | ||
| pat (match p.it, p.note with | ||
| | S.ParP p1, _ -> p1 | ||
| | S.TupP [p1], Type.Tup [n] -> { p with it = p1.it; note = n } |
There was a problem hiding this comment.
To this is normalizing patterns on unary tuples to unary arguments - which is different from what Andreas was suggesting, but I'm ok with that for now.
There was a problem hiding this comment.
As there will be a bigger clean-up AST soon, I'll defer to that.
| h1(()); | ||
| gh[0](()); | ||
| gh[1](()); | ||
| gh[2](()); |
There was a problem hiding this comment.
nice tests! Would it make sense to add a couple of negative ones in test/fail too, eg distinguishing unary functions on pairs from binary functions etc
There was a problem hiding this comment.
I'll do a little follow-on for this, as I actually have a few stashed tests that fail lying around.
crusso
left a comment
There was a problem hiding this comment.
I'm good with this. I suggested added some negative tests but I'll leave compliance up to you. Sorry I took so long to review.
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...a1b3f670](dfinity/ic-hs@406decf...a1b3f67) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178))
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...d3812ffc](dfinity/ic-hs@406decf...d3812ff) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178)) * [`d3812ffc`](dfinity/ic-hs@d3812ff) increase delegation expiry in tests ([dfinity/ic-hs#182](https://github.com/dfinity/ic-hs/issues/182))
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...7a6259c2](dfinity/ic-hs@406decf...7a6259c) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178)) * [`d3812ffc`](dfinity/ic-hs@d3812ff) increase delegation expiry in tests ([dfinity/ic-hs#182](https://github.com/dfinity/ic-hs/issues/182)) * [`40a46e2f`](dfinity/ic-hs@40a46e2) sync universal-canister with IC repo ([dfinity/ic-hs#177](https://github.com/dfinity/ic-hs/issues/177)) * [`7a6259c2`](dfinity/ic-hs@7a6259c) decrease number of threads and request submission latency ([dfinity/ic-hs#179](https://github.com/dfinity/ic-hs/issues/179))
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...a9f73dba](dfinity/ic-hs@406decf...a9f73db) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178)) * [`d3812ffc`](dfinity/ic-hs@d3812ff) increase delegation expiry in tests ([dfinity/ic-hs#182](https://github.com/dfinity/ic-hs/issues/182)) * [`40a46e2f`](dfinity/ic-hs@40a46e2) sync universal-canister with IC repo ([dfinity/ic-hs#177](https://github.com/dfinity/ic-hs/issues/177)) * [`7a6259c2`](dfinity/ic-hs@7a6259c) decrease number of threads and request submission latency ([dfinity/ic-hs#179](https://github.com/dfinity/ic-hs/issues/179)) * [`a9f73dba`](dfinity/ic-hs@a9f73db) fix decoding compressed WASM modules during snapshotting ([dfinity/ic-hs#184](https://github.com/dfinity/ic-hs/issues/184))
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...a9f73dba](dfinity/ic-hs@406decf...a9f73db) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178)) * [`d3812ffc`](dfinity/ic-hs@d3812ff) increase delegation expiry in tests ([dfinity/ic-hs#182](https://github.com/dfinity/ic-hs/issues/182)) * [`40a46e2f`](dfinity/ic-hs@40a46e2) sync universal-canister with IC repo ([dfinity/ic-hs#177](https://github.com/dfinity/ic-hs/issues/177)) * [`7a6259c2`](dfinity/ic-hs@7a6259c) decrease number of threads and request submission latency ([dfinity/ic-hs#179](https://github.com/dfinity/ic-hs/issues/179)) * [`a9f73dba`](dfinity/ic-hs@a9f73db) fix decoding compressed WASM modules during snapshotting ([dfinity/ic-hs#184](https://github.com/dfinity/ic-hs/issues/184))
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...a9f73dba](dfinity/ic-hs@406decf...a9f73db) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178)) * [`d3812ffc`](dfinity/ic-hs@d3812ff) increase delegation expiry in tests ([dfinity/ic-hs#182](https://github.com/dfinity/ic-hs/issues/182)) * [`40a46e2f`](dfinity/ic-hs@40a46e2) sync universal-canister with IC repo ([dfinity/ic-hs#177](https://github.com/dfinity/ic-hs/issues/177)) * [`7a6259c2`](dfinity/ic-hs@7a6259c) decrease number of threads and request submission latency ([dfinity/ic-hs#179](https://github.com/dfinity/ic-hs/issues/179)) * [`a9f73dba`](dfinity/ic-hs@a9f73db) fix decoding compressed WASM modules during snapshotting ([dfinity/ic-hs#184](https://github.com/dfinity/ic-hs/issues/184))
## Changelog for ic-hs: Branch: master Commits: [dfinity/ic-hs@406decfa...9152a0ff](dfinity/ic-hs@406decf...9152a0f) * [`d4db8d07`](dfinity/ic-hs@d4db8d0) bump nixpkgs to 7c786944f801745310578d1cfc019923396f830c ([dfinity/ic-hs#163](https://github.com/dfinity/ic-hs/issues/163)) * [`31d535d2`](dfinity/ic-hs@31d535d) increase the number of allowed delegations in a request from 4 to 20 ([dfinity/ic-hs#166](https://github.com/dfinity/ic-hs/issues/166)) * [`4a310c0d`](dfinity/ic-hs@4a310c0) support ic0.is_controller ([dfinity/ic-hs#169](https://github.com/dfinity/ic-hs/issues/169)) * [`5fc27bdc`](dfinity/ic-hs@5fc27bd) do not include keep-alive header in httpbin response ([dfinity/ic-hs#170](https://github.com/dfinity/ic-hs/issues/170)) * [`96448083`](dfinity/ic-hs@9644808) drop nix-build-uncached ([dfinity/ic-hs#175](https://github.com/dfinity/ic-hs/issues/175)) * [`c6fbe1f7`](dfinity/ic-hs@c6fbe1f) increase ingress_expiry in reference test suite ([dfinity/ic-hs#176](https://github.com/dfinity/ic-hs/issues/176)) * [`a1b3f670`](dfinity/ic-hs@a1b3f67) add Connection: close header to httpbin ([dfinity/ic-hs#178](https://github.com/dfinity/ic-hs/issues/178)) * [`d3812ffc`](dfinity/ic-hs@d3812ff) increase delegation expiry in tests ([dfinity/ic-hs#182](https://github.com/dfinity/ic-hs/issues/182)) * [`40a46e2f`](dfinity/ic-hs@40a46e2) sync universal-canister with IC repo ([dfinity/ic-hs#177](https://github.com/dfinity/ic-hs/issues/177)) * [`7a6259c2`](dfinity/ic-hs@7a6259c) decrease number of threads and request submission latency ([dfinity/ic-hs#179](https://github.com/dfinity/ic-hs/issues/179)) * [`a9f73dba`](dfinity/ic-hs@a9f73db) fix decoding compressed WASM modules during snapshotting ([dfinity/ic-hs#184](https://github.com/dfinity/ic-hs/issues/184)) * [`64c19a95`](dfinity/ic-hs@64c19a9) bump nixpkgs to eaf03591711b46d21abc7082a8ebee4681f9dbeb ([dfinity/ic-hs#189](https://github.com/dfinity/ic-hs/issues/189)) * [`9152a0ff`](dfinity/ic-hs@9152a0f) add date header to httpbin responses and make http header names lower-case ([dfinity/ic-hs#188](https://github.com/dfinity/ic-hs/issues/188)) Includes and closes #3915. Reason: `ic-hs` and `nixpkgs` must be in sync, so that the artefact caching can work.
This now passes tests, I assume that return types are already fixed by #111.
I might remove the new test as it does not add extra value.However now I get an assertion failure with
which worries me a bit.This is now AST-56.