diff options
author | Alec Theriault <alec.theriault@gmail.com> | 2018-10-04 18:10:21 -0400 |
---|---|---|
committer | Ryan Scott <ryan.gl.scott@gmail.com> | 2018-10-04 18:10:21 -0400 |
commit | bace26aadaafa4064e78f9ed088c1e2217221acc (patch) | |
tree | 6e70248df2b40fbebd9c4fe2742044df0c32792c /testsuite/tests/parser | |
parent | 85376570c5d34950b1bd8f6c575526e7ff789b84 (diff) | |
download | haskell-bace26aadaafa4064e78f9ed088c1e2217221acc.tar.gz |
Allow (unparenthesized) kind signatures
Summary: This allows for things like `[t :: MyKind]`, `(a :: k, b)`, and so on.
Test Plan: make TEST=T11622 && make TEST=T8708
Reviewers: RyanGlScott, bgamari, simonpj, goldfire, alanz
Reviewed By: RyanGlScott, simonpj
Subscribers: alanz, simonpj, rwbarton, mpickering, carter
GHC Trac Issues: #11622, #8708
Differential Revision: https://phabricator.haskell.org/D5173
Diffstat (limited to 'testsuite/tests/parser')
7 files changed, 646 insertions, 16 deletions
diff --git a/testsuite/tests/parser/should_compile/DumpParsedAst.stderr b/testsuite/tests/parser/should_compile/DumpParsedAst.stderr index 231017322f..edc66e0a2d 100644 --- a/testsuite/tests/parser/should_compile/DumpParsedAst.stderr +++ b/testsuite/tests/parser/should_compile/DumpParsedAst.stderr @@ -158,7 +158,7 @@ {OccName: Length})) (HsQTvs (NoExt) - [({ DumpParsedAst.hs:7:20-30 } + [({ DumpParsedAst.hs:7:21-29 } (KindedTyVar (NoExt) ({ DumpParsedAst.hs:7:21-22 } diff --git a/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr b/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr index 2c1a0ec7df..d27e6d96e0 100644 --- a/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr +++ b/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr @@ -205,7 +205,7 @@ [{Name: k}] {NameSet: []}) - [({ DumpRenamedAst.hs:8:20-30 } + [({ DumpRenamedAst.hs:8:21-29 } (KindedTyVar (NoExt) ({ DumpRenamedAst.hs:8:21-22 } @@ -288,27 +288,30 @@ ({ DumpRenamedAst.hs:15:18-20 } {Name: DumpRenamedAst.Nat}) [({ DumpRenamedAst.hs:15:22-34 } - (HsKindSig + (HsParTy (NoExt) - ({ DumpRenamedAst.hs:15:23 } - (HsTyVar + ({ DumpRenamedAst.hs:15:23-33 } + (HsKindSig (NoExt) - (NotPromoted) ({ DumpRenamedAst.hs:15:23 } - {Name: a}))) - ({ DumpRenamedAst.hs:15:28-33 } - (HsFunTy - (NoExt) - ({ DumpRenamedAst.hs:15:28 } (HsTyVar (NoExt) (NotPromoted) - ({ DumpRenamedAst.hs:15:28 } - {Name: k}))) - ({ DumpRenamedAst.hs:15:33 } - (HsStarTy + ({ DumpRenamedAst.hs:15:23 } + {Name: a}))) + ({ DumpRenamedAst.hs:15:28-33 } + (HsFunTy (NoExt) - (False)))))))] + ({ DumpRenamedAst.hs:15:28 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ DumpRenamedAst.hs:15:28 } + {Name: k}))) + ({ DumpRenamedAst.hs:15:33 } + (HsStarTy + (NoExt) + (False)))))))))] (Prefix) (HsDataDefn (NoExt) diff --git a/testsuite/tests/parser/should_compile/KindSigs.hs b/testsuite/tests/parser/should_compile/KindSigs.hs new file mode 100644 index 0000000000..aafe1a1e2b --- /dev/null +++ b/testsuite/tests/parser/should_compile/KindSigs.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE KindSignatures #-} +{-# LANGUAGE UnboxedSums #-} +{-# LANGUAGE UnboxedTuples #-} +{-# LANGUAGE TypeFamilies #-} +module KindSigs where + +import Data.Kind + +-- Kind annotation on type family instance equation +type family Foo a where + Foo a = Int :: Type + +-- Kind annotation on component of tuple type +type Bar a = ( Int :: Type, Bool, Maybe a :: Type ) +type Bar' a = (# Int :: Type, Bool, Maybe a :: Type #) + +-- Kind annotation on type of list +type Baz = [ Int :: Type ] + +-- Kind annotation inside paren type +qux :: (Int :: Type) -> Bool -> (() :: Type) +qux _ _ = () + +-- Kind annotation on promoted lists and tuples +type Quux = '[ True :: Bool ] +type Quux' = [ True :: Bool, False :: Bool ] +type Quuux b = '( [Int, Bool] :: [Type], b ) + +-- Note that 'true :: Bool :: Type' won't parse - you need some parens +true :: (Bool :: Type) +true = True diff --git a/testsuite/tests/parser/should_compile/KindSigs.stderr b/testsuite/tests/parser/should_compile/KindSigs.stderr new file mode 100644 index 0000000000..10dbd0dbf0 --- /dev/null +++ b/testsuite/tests/parser/should_compile/KindSigs.stderr @@ -0,0 +1,577 @@ + +==================== Parser AST ==================== + +({ KindSigs.hs:1:1 } + (HsModule + (Just + ({ KindSigs.hs:6:8-15 } + {ModuleName: KindSigs})) + (Nothing) + [({ KindSigs.hs:8:1-16 } + (ImportDecl + (NoExt) + (NoSourceText) + ({ KindSigs.hs:8:8-16 } + {ModuleName: Data.Kind}) + (Nothing) + (False) + (False) + (False) + (False) + (Nothing) + (Nothing)))] + [({ KindSigs.hs:11:1-17 } + (TyClD + (NoExt) + (FamDecl + (NoExt) + (FamilyDecl + (NoExt) + (ClosedTypeFamily + (Just + [({ KindSigs.hs:12:3-21 } + (HsIB + (NoExt) + (FamEqn + (NoExt) + ({ KindSigs.hs:12:3-5 } + (Unqual + {OccName: Foo})) + [({ KindSigs.hs:12:7 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:12:7 } + (Unqual + {OccName: a}))))] + (Prefix) + ({ KindSigs.hs:12:11-21 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:12:11-13 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:12:11-13 } + (Unqual + {OccName: Int})))) + ({ KindSigs.hs:12:18-21 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:12:18-21 } + (Unqual + {OccName: Type})))))))))])) + ({ KindSigs.hs:11:13-15 } + (Unqual + {OccName: Foo})) + (HsQTvs + (NoExt) + [({ KindSigs.hs:11:17 } + (UserTyVar + (NoExt) + ({ KindSigs.hs:11:17 } + (Unqual + {OccName: a}))))]) + (Prefix) + ({ <no location info> } + (NoSig + (NoExt))) + (Nothing))))) + ,({ KindSigs.hs:15:1-51 } + (TyClD + (NoExt) + (SynDecl + (NoExt) + ({ KindSigs.hs:15:6-8 } + (Unqual + {OccName: Bar})) + (HsQTvs + (NoExt) + [({ KindSigs.hs:15:10 } + (UserTyVar + (NoExt) + ({ KindSigs.hs:15:10 } + (Unqual + {OccName: a}))))]) + (Prefix) + ({ KindSigs.hs:15:14-51 } + (HsTupleTy + (NoExt) + (HsBoxedOrConstraintTuple) + [({ KindSigs.hs:15:16-26 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:15:16-18 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:15:16-18 } + (Unqual + {OccName: Int})))) + ({ KindSigs.hs:15:23-26 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:15:23-26 } + (Unqual + {OccName: Type})))))) + ,({ KindSigs.hs:15:29-32 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:15:29-32 } + (Unqual + {OccName: Bool})))) + ,({ KindSigs.hs:15:35-49 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:15:35-41 } + (HsAppTy + (NoExt) + ({ KindSigs.hs:15:35-39 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:15:35-39 } + (Unqual + {OccName: Maybe})))) + ({ KindSigs.hs:15:41 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:15:41 } + (Unqual + {OccName: a})))))) + ({ KindSigs.hs:15:46-49 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:15:46-49 } + (Unqual + {OccName: Type}))))))]))))) + ,({ KindSigs.hs:16:1-54 } + (TyClD + (NoExt) + (SynDecl + (NoExt) + ({ KindSigs.hs:16:6-9 } + (Unqual + {OccName: Bar'})) + (HsQTvs + (NoExt) + [({ KindSigs.hs:16:11 } + (UserTyVar + (NoExt) + ({ KindSigs.hs:16:11 } + (Unqual + {OccName: a}))))]) + (Prefix) + ({ KindSigs.hs:16:15-54 } + (HsTupleTy + (NoExt) + (HsUnboxedTuple) + [({ KindSigs.hs:16:18-28 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:16:18-20 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:16:18-20 } + (Unqual + {OccName: Int})))) + ({ KindSigs.hs:16:25-28 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:16:25-28 } + (Unqual + {OccName: Type})))))) + ,({ KindSigs.hs:16:31-34 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:16:31-34 } + (Unqual + {OccName: Bool})))) + ,({ KindSigs.hs:16:37-51 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:16:37-43 } + (HsAppTy + (NoExt) + ({ KindSigs.hs:16:37-41 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:16:37-41 } + (Unqual + {OccName: Maybe})))) + ({ KindSigs.hs:16:43 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:16:43 } + (Unqual + {OccName: a})))))) + ({ KindSigs.hs:16:48-51 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:16:48-51 } + (Unqual + {OccName: Type}))))))]))))) + ,({ KindSigs.hs:19:1-26 } + (TyClD + (NoExt) + (SynDecl + (NoExt) + ({ KindSigs.hs:19:6-8 } + (Unqual + {OccName: Baz})) + (HsQTvs + (NoExt) + []) + (Prefix) + ({ KindSigs.hs:19:12-26 } + (HsListTy + (NoExt) + ({ KindSigs.hs:19:14-24 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:19:14-16 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:19:14-16 } + (Unqual + {OccName: Int})))) + ({ KindSigs.hs:19:21-24 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:19:21-24 } + (Unqual + {OccName: Type}))))))))))) + ,({ KindSigs.hs:22:1-44 } + (SigD + (NoExt) + (TypeSig + (NoExt) + [({ KindSigs.hs:22:1-3 } + (Unqual + {OccName: qux}))] + (HsWC + (NoExt) + (HsIB + (NoExt) + ({ KindSigs.hs:22:8-44 } + (HsFunTy + (NoExt) + ({ KindSigs.hs:22:8-20 } + (HsParTy + (NoExt) + ({ KindSigs.hs:22:9-19 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:22:9-11 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:22:9-11 } + (Unqual + {OccName: Int})))) + ({ KindSigs.hs:22:16-19 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:22:16-19 } + (Unqual + {OccName: Type})))))))) + ({ KindSigs.hs:22:25-44 } + (HsFunTy + (NoExt) + ({ KindSigs.hs:22:25-28 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:22:25-28 } + (Unqual + {OccName: Bool})))) + ({ KindSigs.hs:22:33-44 } + (HsParTy + (NoExt) + ({ KindSigs.hs:22:34-43 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:22:34-35 } + (HsTupleTy + (NoExt) + (HsBoxedOrConstraintTuple) + [])) + ({ KindSigs.hs:22:40-43 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:22:40-43 } + (Unqual + {OccName: Type}))))))))))))))))) + ,({ KindSigs.hs:23:1-12 } + (ValD + (NoExt) + (FunBind + (NoExt) + ({ KindSigs.hs:23:1-3 } + (Unqual + {OccName: qux})) + (MG + (NoExt) + ({ KindSigs.hs:23:1-12 } + [({ KindSigs.hs:23:1-12 } + (Match + (NoExt) + (FunRhs + ({ KindSigs.hs:23:1-3 } + (Unqual + {OccName: qux})) + (Prefix) + (NoSrcStrict)) + [({ KindSigs.hs:23:5 } + (WildPat + (NoExt))) + ,({ KindSigs.hs:23:7 } + (WildPat + (NoExt)))] + (GRHSs + (NoExt) + [({ KindSigs.hs:23:9-12 } + (GRHS + (NoExt) + [] + ({ KindSigs.hs:23:11-12 } + (HsVar + (NoExt) + ({ KindSigs.hs:23:11-12 } + (Exact + {Name: ()}))))))] + ({ <no location info> } + (EmptyLocalBinds + (NoExt))))))]) + (FromSource)) + (WpHole) + []))) + ,({ KindSigs.hs:26:1-29 } + (TyClD + (NoExt) + (SynDecl + (NoExt) + ({ KindSigs.hs:26:6-9 } + (Unqual + {OccName: Quux})) + (HsQTvs + (NoExt) + []) + (Prefix) + ({ KindSigs.hs:26:13-29 } + (HsExplicitListTy + (NoExt) + (Promoted) + [({ KindSigs.hs:26:16-27 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:26:16-19 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:26:16-19 } + (Unqual + {OccName: True})))) + ({ KindSigs.hs:26:24-27 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:26:24-27 } + (Unqual + {OccName: Bool}))))))]))))) + ,({ KindSigs.hs:27:1-45 } + (TyClD + (NoExt) + (SynDecl + (NoExt) + ({ KindSigs.hs:27:6-10 } + (Unqual + {OccName: Quux'})) + (HsQTvs + (NoExt) + []) + (Prefix) + ({ KindSigs.hs:27:14-45 } + (HsExplicitListTy + (NoExt) + (NotPromoted) + [({ KindSigs.hs:27:16-27 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:27:16-19 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:27:16-19 } + (Unqual + {OccName: True})))) + ({ KindSigs.hs:27:24-27 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:27:24-27 } + (Unqual + {OccName: Bool})))))) + ,({ KindSigs.hs:27:30-42 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:27:30-34 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:27:30-34 } + (Unqual + {OccName: False})))) + ({ KindSigs.hs:27:39-42 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:27:39-42 } + (Unqual + {OccName: Bool}))))))]))))) + ,({ KindSigs.hs:28:1-44 } + (TyClD + (NoExt) + (SynDecl + (NoExt) + ({ KindSigs.hs:28:6-10 } + (Unqual + {OccName: Quuux})) + (HsQTvs + (NoExt) + [({ KindSigs.hs:28:12 } + (UserTyVar + (NoExt) + ({ KindSigs.hs:28:12 } + (Unqual + {OccName: b}))))]) + (Prefix) + ({ KindSigs.hs:28:16-44 } + (HsExplicitTupleTy + (NoExt) + [({ KindSigs.hs:28:19-39 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:28:19-29 } + (HsExplicitListTy + (NoExt) + (NotPromoted) + [({ KindSigs.hs:28:20-22 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:28:20-22 } + (Unqual + {OccName: Int})))) + ,({ KindSigs.hs:28:25-28 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:28:25-28 } + (Unqual + {OccName: Bool}))))])) + ({ KindSigs.hs:28:34-39 } + (HsListTy + (NoExt) + ({ KindSigs.hs:28:35-38 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:28:35-38 } + (Unqual + {OccName: Type})))))))) + ,({ KindSigs.hs:28:42 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:28:42 } + (Unqual + {OccName: b}))))]))))) + ,({ KindSigs.hs:31:1-22 } + (SigD + (NoExt) + (TypeSig + (NoExt) + [({ KindSigs.hs:31:1-4 } + (Unqual + {OccName: true}))] + (HsWC + (NoExt) + (HsIB + (NoExt) + ({ KindSigs.hs:31:9-22 } + (HsParTy + (NoExt) + ({ KindSigs.hs:31:10-21 } + (HsKindSig + (NoExt) + ({ KindSigs.hs:31:10-13 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:31:10-13 } + (Unqual + {OccName: Bool})))) + ({ KindSigs.hs:31:18-21 } + (HsTyVar + (NoExt) + (NotPromoted) + ({ KindSigs.hs:31:18-21 } + (Unqual + {OccName: Type}))))))))))))) + ,({ KindSigs.hs:32:1-11 } + (ValD + (NoExt) + (FunBind + (NoExt) + ({ KindSigs.hs:32:1-4 } + (Unqual + {OccName: true})) + (MG + (NoExt) + ({ KindSigs.hs:32:1-11 } + [({ KindSigs.hs:32:1-11 } + (Match + (NoExt) + (FunRhs + ({ KindSigs.hs:32:1-4 } + (Unqual + {OccName: true})) + (Prefix) + (NoSrcStrict)) + [] + (GRHSs + (NoExt) + [({ KindSigs.hs:32:6-11 } + (GRHS + (NoExt) + [] + ({ KindSigs.hs:32:8-11 } + (HsVar + (NoExt) + ({ KindSigs.hs:32:8-11 } + (Unqual + {OccName: True}))))))] + ({ <no location info> } + (EmptyLocalBinds + (NoExt))))))]) + (FromSource)) + (WpHole) + [])))] + (Nothing) + (Nothing))) diff --git a/testsuite/tests/parser/should_compile/T11622.hs b/testsuite/tests/parser/should_compile/T11622.hs new file mode 100644 index 0000000000..e7a8ff88d0 --- /dev/null +++ b/testsuite/tests/parser/should_compile/T11622.hs @@ -0,0 +1,7 @@ +{-# LANGUAGE TypeFamilies #-} +module T11622 where + +import Data.Kind (Type) + +type family F a where + F _ = Int :: Type diff --git a/testsuite/tests/parser/should_compile/T8708.hs b/testsuite/tests/parser/should_compile/T8708.hs new file mode 100644 index 0000000000..17d5b090f9 --- /dev/null +++ b/testsuite/tests/parser/should_compile/T8708.hs @@ -0,0 +1,7 @@ +{-# LANGUAGE KindSignatures #-} +module T808 where + +import Data.Kind (Type) + +foo :: (Int, Int :: Type) +foo = undefined diff --git a/testsuite/tests/parser/should_compile/all.T b/testsuite/tests/parser/should_compile/all.T index 50fa1a71e7..a22d5d0e62 100644 --- a/testsuite/tests/parser/should_compile/all.T +++ b/testsuite/tests/parser/should_compile/all.T @@ -101,6 +101,7 @@ test('T7776', normal, compile, ['']) test('RdrNoStaticPointers01', [], compile, ['']) test('T5682', normal, compile, ['']) test('T8258', normal, compile, ['']) +test('T8708', normal, compile, ['']) test('T9723a', normal, compile, ['']) test('T9723b', normal, compile, ['']) test('T10188', normal, compile, ['']) @@ -108,6 +109,7 @@ test('VtaParse', normal, compile, ['']) test('T10196', normal, compile, ['']) test('T10379', normal, compile, ['']) test('T10582', expect_broken(10582), compile, ['']) +test('T11622', normal, compile, ['']) test('DumpParsedAst', normal, compile, ['-dsuppress-uniques -ddump-parsed-ast']) test('DumpRenamedAst', normal, compile, ['-dsuppress-uniques -ddump-rn-ast']) test('DumpTypecheckedAst', normal, compile, ['-dsuppress-uniques -ddump-tc-ast']) @@ -117,6 +119,8 @@ test('T13986', normal, compile, ['']) test('T10855', normal, compile, ['']) test('T15139', normal, compile, ['-Wincomplete-patterns -fdiagnostics-show-caret']) test('T15323', normal, compile, ['-dsuppress-uniques -ddump-parsed-ast']) +test('KindSigs', normal, compile, ['-dsuppress-uniques -ddump-parsed-ast']) + def only_MG_loc(x): """ |