Skip to content

Commit bfedfc2

Browse files
committed
Add Generic representations of # -> * and * -> * args.
A comment in Prelude observes that higher-kinded args can't be handled in general; my interpretation is that this is because the lack of poly-kinded constructors means we can't have a `ConArg :: (k -> *) -> *`. But if we really want them, we can have any particular kind. I really want these two particular kinds, so I added them.
1 parent df39c3d commit bfedfc2

File tree

4 files changed

+14
-3
lines changed

4 files changed

+14
-3
lines changed

src/Libraries/Base1/Prelude.bs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ package Prelude(
254254

255255
-- Generics
256256
Generic(..), Conc(..), ConcPrim(..), ConcPoly(..),
257-
Meta(..), MetaData(..), StarArg(..), NumArg(..), StrArg(..), ConArg(..),
257+
Meta(..), MetaData(..), StarArg(..), NumArg(..), StrArg(..),
258+
NumConArg(..), StarConArg(..), ConArg(..),
258259
MetaConsNamed(..), MetaConsAnon(..), MetaField(..),
259260

260261
primMethod, WrapField(..), WrapMethod(..), WrapPorts(..),
@@ -4414,6 +4415,10 @@ data (NumArg :: # -> *) i = NumArg
44144415
deriving (FShow)
44154416
data (StrArg :: $ -> *) i = StrArg
44164417
deriving (FShow)
4418+
data (StarConArg :: (* -> *) -> *) i = StarConArg
4419+
deriving (FShow)
4420+
data (NumConArg :: (# -> *) -> *) i = NumConArg
4421+
deriving (FShow)
44174422
data ConArg = ConArg
44184423
deriving (FShow)
44194424

src/comp/Deriving.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import PreIds(
1616
-- type constructors
1717
idBit, idAdd, idMax,
1818
idConc, idConcPrim, idConcPoly, idMeta,
19-
idMetaData, idStarArg, idNumArg, idStrArg, idConArg,
19+
idMetaData, idStarArg, idNumArg, idStrArg, idStarConArg, idNumConArg, idConArg,
2020
idMetaConsNamed, idMetaConsAnon, idMetaField,
2121
-- classes that the compiler can derive
2222
idEq, idBits, idFShow, idBounded, idDefaultValue,
@@ -766,6 +766,8 @@ mkGenericInstance r packageid dpos i vs isData summands =
766766
Just KStar -> cTApplys (cTCon idStarArg) [v]
767767
Just KNum -> cTApplys (cTCon idNumArg) [v]
768768
Just KStr -> cTApplys (cTCon idStrArg) [v]
769+
Just (Kfun KStar KStar) -> cTApplys (cTCon idStarConArg) [v]
770+
Just (Kfun KNum KStar) -> cTApplys (cTCon idNumConArg) [v]
769771
_ -> cTCon idConArg
770772
| v <- vs],
771773
cTNum (toInteger $ length summands) dpos],

src/comp/PreIds.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,13 @@ idConc = prelude_id_no fsConc
219219
idConcPrim = prelude_id_no fsConcPrim
220220
idConcPoly = prelude_id_no fsConcPoly
221221
idMeta = prelude_id_no fsMeta
222-
idMetaData, idStarArg, idNumArg, idStrArg, idConArg, idMetaConsNamed, idMetaConsAnon, idMetaField :: Id
222+
idMetaData, idStarArg, idNumArg, idStrArg, idStarConArg, idNumConArg, idConArg, idMetaConsNamed, idMetaConsAnon, idMetaField :: Id
223223
idMetaData = prelude_id_no fsMetaData
224224
idStarArg = prelude_id_no fsStarArg
225225
idNumArg = prelude_id_no fsNumArg
226226
idStrArg = prelude_id_no fsStrArg
227+
idStarConArg = prelude_id_no fsStarConArg
228+
idNumConArg = prelude_id_no fsNumConArg
227229
idConArg = prelude_id_no fsConArg
228230
idMetaConsNamed = prelude_id_no fsMetaConsNamed
229231
idMetaConsAnon = prelude_id_no fsMetaConsAnon

src/comp/PreStrings.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,8 @@ fsMetaData = mkFString "MetaData"
339339
fsStarArg = mkFString "StarArg"
340340
fsNumArg = mkFString "NumArg"
341341
fsStrArg = mkFString "StrArg"
342+
fsStarConArg = mkFString "StarConArg"
343+
fsNumConArg = mkFString "NumConArg"
342344
fsConArg = mkFString "ConArg"
343345
fsMetaConsNamed = mkFString "MetaConsNamed"
344346
fsMetaConsAnon = mkFString "MetaConsAnon"

0 commit comments

Comments
 (0)