Skip to content

Exact-print not working for LinearTypes

While working on migrating HsArrow to the new design described in #19623 (closed), I tried to understand how multiplicity annotations and Unicode arrows were handled today. Turns out, not very well (unless I'm missing something). Here's a test case I added:

commit 78f44124b3cf6be912146447036b8b832da4f4b7
Author: Vladislav Zavialov <vlad.z.4096@gmail.com>
Date:   Wed May 26 23:02:02 2021 +0300

    Add PprLinearArrow test case

diff --git a/testsuite/tests/printer/Makefile b/testsuite/tests/printer/Makefile
index 1d0fc14f87..7222341e5b 100644
--- a/testsuite/tests/printer/Makefile
+++ b/testsuite/tests/printer/Makefile
@@ -558,6 +558,11 @@ InTreeAnnotations1:
 	$(CHECK_PPR)   $(LIBDIR) InTreeAnnotations1.hs
 	$(CHECK_EXACT) $(LIBDIR) InTreeAnnotations1.hs
 
+.PHONY: PprLinearArrow
+PprLinearArrow:
+	$(CHECK_PPR)   $(LIBDIR) PprLinearArrow.hs
+	$(CHECK_EXACT) $(LIBDIR) PprLinearArrow.hs
+
 .PHONY: Test19784
 Test19784:
 	$(CHECK_PPR)   $(LIBDIR) Test19784.hs
diff --git a/testsuite/tests/printer/PprLinearArrow.hs b/testsuite/tests/printer/PprLinearArrow.hs
new file mode 100644
index 0000000000..1bf995ce6d
--- /dev/null
+++ b/testsuite/tests/printer/PprLinearArrow.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE LinearTypes, DataKinds, UnicodeSyntax #-}
+
+module PprLinearArrow where
+
+import GHC.Types (Multiplicity(One, Many))
+
+n1 :: a %1 -> b
+n1 = undefined
+
+u1 :: a %1 → b
+u1 = undefined
+
+n2 :: a  %(Many) -> b
+n2 = undefined
+
+u2 :: a  %(Many) → b
+u2 = undefined
+
+m3 :: a ⊸ b
+m3 = undefined
+
+n4 :: a %p  -> b
+n4 = undefined
+
+u4 :: a %p  → b
+u4 = undefined
diff --git a/testsuite/tests/printer/all.T b/testsuite/tests/printer/all.T
index 916ed6bbee..2a24324ee4 100644
--- a/testsuite/tests/printer/all.T
+++ b/testsuite/tests/printer/all.T
@@ -123,6 +123,7 @@ test('PprRecordDotSyntax4', ignore_stderr, makefile_test, ['PprRecordDotSyntax4'
 test('PprRecordDotSyntaxA', ignore_stderr, makefile_test, ['PprRecordDotSyntaxA'])
 test('CommentsTest', ignore_stderr, makefile_test, ['CommentsTest'])
 test('InTreeAnnotations1', ignore_stderr, makefile_test, ['InTreeAnnotations1'])
+test('PprLinearArrow', ignore_stderr, makefile_test, ['PprLinearArrow'])
 
 test('Test19784', ignore_stderr, makefile_test, ['Test19784'])
 test('Test19798', ignore_stderr, makefile_test, ['Test19798'])

To my surprise, it does not pass in master. Test output here: https://gitlab.haskell.org/-/snippets/2824

@alanz Is this a known issue? I suppose I could fix it in my branch, but then it wouldn't be solely a refactoring, more of bugfix.

Edited by Vladislav Zavialov
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information