From f4dce6cfd71d2a1dc2e281f19cae85e62aaf6b8e Mon Sep 17 00:00:00 2001 From: Ryan Scott <ryan.gl.scott@gmail.com> Date: Tue, 19 Jun 2018 23:16:39 -0400 Subject: [PATCH] Allow :info for (~) in GHCi `(~)` is not an identifier according to GHC's parser, which is why GHCi's `:info` command wouldn't work on it. To rectify this, we apply the same fix that was put in place for `(->)`: add `(~)` to GHC's `identifier` parser production. Test Plan: make test TEST=T10059 Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, mpickering, carter GHC Trac Issues: #10059 Differential Revision: https://phabricator.haskell.org/D4877 --- compiler/parser/Parser.y | 4 +++- testsuite/tests/ghci/scripts/T10059.script | 5 +++++ testsuite/tests/ghci/scripts/T10059.stdout | 9 +++++++++ testsuite/tests/ghci/scripts/all.T | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 testsuite/tests/ghci/scripts/T10059.script create mode 100644 testsuite/tests/ghci/scripts/T10059.stdout diff --git a/compiler/parser/Parser.y b/compiler/parser/Parser.y index 066ee421fb07..0e93dd043b38 100644 --- a/compiler/parser/Parser.y +++ b/compiler/parser/Parser.y @@ -626,7 +626,9 @@ identifier :: { Located RdrName } | qvarop { $1 } | qconop { $1 } | '(' '->' ')' {% ams (sLL $1 $> $ getRdrName funTyCon) - [mj AnnOpenP $1,mu AnnRarrow $2,mj AnnCloseP $3] } + [mop $1,mu AnnRarrow $2,mcp $3] } + | '(' '~' ')' {% ams (sLL $1 $> $ eqTyCon_RDR) + [mop $1,mj AnnTilde $2,mcp $3] } ----------------------------------------------------------------------------- -- Backpack stuff diff --git a/testsuite/tests/ghci/scripts/T10059.script b/testsuite/tests/ghci/scripts/T10059.script new file mode 100644 index 000000000000..d352b9f15c87 --- /dev/null +++ b/testsuite/tests/ghci/scripts/T10059.script @@ -0,0 +1,5 @@ +:set -XTypeOperators +:i (~) +:k (~) +:set -fprint-equality-relations +:i (~) diff --git a/testsuite/tests/ghci/scripts/T10059.stdout b/testsuite/tests/ghci/scripts/T10059.stdout new file mode 100644 index 000000000000..26e1e7e28f24 --- /dev/null +++ b/testsuite/tests/ghci/scripts/T10059.stdout @@ -0,0 +1,9 @@ +class (a ~ b) => (~) (a :: k) (b :: k) + -- Defined in ‘Data.Type.Equality’ +instance [incoherent] forall k (a :: k) (b :: k). (a ~ b) => a ~ b + -- Defined in ‘Data.Type.Equality’ +(~) :: k -> k -> Constraint +class (a ~~ b) => (~) (a :: k) (b :: k) + -- Defined in ‘Data.Type.Equality’ +instance [incoherent] forall k (a :: k) (b :: k). (a ~~ b) => a ~ b + -- Defined in ‘Data.Type.Equality’ diff --git a/testsuite/tests/ghci/scripts/all.T b/testsuite/tests/ghci/scripts/all.T index 163ff0c2da91..29fbdf85c5a3 100755 --- a/testsuite/tests/ghci/scripts/all.T +++ b/testsuite/tests/ghci/scripts/all.T @@ -201,6 +201,7 @@ test('T9878', [], ghci_script, ['T9878.script']) test('T9878b', [extra_run_opts('-fobject-code')], ghci_script, ['T9878b.script']) test('T10018', normal, ghci_script, ['T10018.script']) +test('T10059', normal, ghci_script, ['T10059.script']) test('T10122', normal, ghci_script, ['T10122.script']) test('T10321', normal, ghci_script, ['T10321.script']) -- GitLab