Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghc/ghc
  • bgamari/ghc
  • syd/ghc
  • ggreif/ghc
  • watashi/ghc
  • RolandSenn/ghc
  • mpickering/ghc
  • DavidEichmann/ghc
  • carter/ghc
  • harpocrates/ghc
  • ethercrow/ghc
  • mijicd/ghc
  • adamse/ghc
  • alexbiehl/ghc
  • gridaphobe/ghc
  • trofi/ghc
  • supersven/ghc
  • ppk/ghc
  • ulysses4ever/ghc
  • AndreasK/ghc
  • ghuntley/ghc
  • shayne-fletcher-da/ghc
  • fgaz/ghc
  • yav/ghc
  • osa1/ghc
  • mbbx6spp/ghc
  • JulianLeviston/ghc
  • reactormonk/ghc
  • rae/ghc
  • takenobu-hs/ghc
  • michalt/ghc
  • andrewthad/ghc
  • hsyl20/ghc
  • scottgw/ghc
  • sjakobi/ghc
  • angerman/ghc
  • RyanGlScott/ghc
  • hvr/ghc
  • howtonotwin/ghc
  • chessai/ghc
  • m-renaud/ghc
  • brprice/ghc
  • stevehartdata/ghc
  • sighingnow/ghc
  • kgardas/ghc
  • ckoparkar/ghc
  • alp/ghc
  • smaeul/ghc
  • kakkun61/ghc
  • sykloid/ghc
  • newhoggy/ghc
  • toonn/ghc
  • nineonine/ghc
  • Phyx/ghc
  • ezyang/ghc
  • tweag/ghc
  • langston/ghc
  • ndmitchell/ghc
  • rockbmb/ghc
  • artempyanykh/ghc
  • mniip/ghc
  • mynguyenbmc/ghc
  • alexfmpe/ghc
  • crockeea/ghc
  • nh2/ghc
  • vaibhavsagar/ghc
  • phadej/ghc
  • Haskell-mouse/ghc
  • lolotp/ghc
  • spacekitteh/ghc
  • michaelpj/ghc
  • mgsloan/ghc
  • HPCohen/ghc
  • tmobile/ghc
  • radrow/ghc
  • simonmar/ghc
  • _deepfire/ghc
  • Ericson2314/ghc
  • leitao/ghc
  • fumieval/ghc
  • trac-isovector/ghc
  • cblp/ghc
  • xich/ghc
  • ciil/ghc
  • erthalion/ghc
  • xldenis/ghc
  • autotaker/ghc
  • haskell-wasm/ghc
  • kcsongor/ghc
  • agander/ghc
  • Baranowski/ghc
  • trac-dredozubov/ghc
  • 23Skidoo/ghc
  • iustin/ghc
  • ningning/ghc
  • josefs/ghc
  • kabuhr/ghc
  • gallais/ghc
  • dten/ghc
  • expipiplus1/ghc
  • Pluralia/ghc
  • rohanjr/ghc
  • intricate/ghc
  • kirelagin/ghc
  • Javran/ghc
  • DanielG/ghc
  • trac-mizunashi_mana/ghc
  • pparkkin/ghc
  • bollu/ghc
  • ntc2/ghc
  • jaspervdj/ghc
  • JoshMeredith/ghc
  • wz1000/ghc
  • zkourouma/ghc
  • code5hot/ghc
  • jdprice/ghc
  • tdammers/ghc
  • J-mie6/ghc
  • trac-lantti/ghc
  • ch1bo/ghc
  • cgohla/ghc
  • lucamolteni/ghc
  • acairncross/ghc
  • amerocu/ghc
  • chreekat/ghc
  • txsmith/ghc
  • trupill/ghc
  • typetetris/ghc
  • sergv/ghc
  • fryguybob/ghc
  • erikd/ghc
  • trac-roland/ghc
  • setupminimal/ghc
  • Friede80/ghc
  • SkyWriter/ghc
  • xplorld/ghc
  • abrar/ghc
  • obsidiansystems/ghc
  • Icelandjack/ghc
  • adinapoli/ghc
  • trac-matthewbauer/ghc
  • heatsink/ghc
  • dwijnand/ghc
  • Cmdv/ghc
  • alinab/ghc
  • pepeiborra/ghc
  • fommil/ghc
  • luochen1990/ghc
  • rlupton20/ghc
  • applePrincess/ghc
  • lehins/ghc
  • ronmrdechai/ghc
  • leeadam/ghc
  • harendra/ghc
  • mightymosquito1991/ghc
  • trac-gershomb/ghc
  • lucajulian/ghc
  • Rizary/ghc
  • VictorCMiraldo/ghc
  • jamesbrock/ghc
  • andrewdmeier/ghc
  • luke/ghc
  • pranaysashank/ghc
  • cocreature/ghc
  • hithroc/ghc
  • obreitwi/ghc
  • slrtbtfs/ghc
  • kaol/ghc
  • yairchu/ghc
  • Mathemagician98/ghc
  • trac-taylorfausak/ghc
  • leungbk/ghc
  • MichaWiedenmann/ghc
  • chris-martin/ghc
  • TDecki/ghc
  • adithyaov/ghc
  • trac-gelisam/ghc
  • Lysxia/ghc
  • complyue/ghc
  • bwignall/ghc
  • sternmull/ghc
  • sonika/ghc
  • leif/ghc
  • broadwaylamb/ghc
  • myszon/ghc
  • danbroooks/ghc
  • Mechachleopteryx/ghc
  • zardyh/ghc
  • trac-vdukhovni/ghc
  • OmarKhaledAbdo/ghc
  • arrowd/ghc
  • Bodigrim/ghc
  • matheus23/ghc
  • cardenaso11/ghc
  • trac-Athas/ghc
  • mb720/ghc
  • DylanZA/ghc
  • liff/ghc
  • typedrat/ghc
  • trac-claude/ghc
  • jbm/ghc
  • Gertjan423/ghc
  • PHO/ghc
  • JKTKops/ghc
  • kockahonza/ghc
  • msakai/ghc
  • Sir4ur0n/ghc
  • barambani/ghc
  • vishnu.c/ghc
  • dcoutts/ghc
  • trac-runeks/ghc
  • trac-MaxGabriel/ghc
  • lexi.lambda/ghc
  • strake/ghc
  • spavikevik/ghc
  • JakobBruenker/ghc
  • rmanne/ghc
  • gdziadkiewicz/ghc
  • ani/ghc
  • iliastsi/ghc
  • smunix/ghc
  • judah/ghc
  • blackgnezdo/ghc
  • emilypi/ghc
  • trac-bpfoley/ghc
  • muesli4/ghc
  • trac-gkaracha/ghc
  • Kleidukos/ghc
  • nek0/ghc
  • TristanCacqueray/ghc
  • dwulive/ghc
  • mbakke/ghc
  • arybczak/ghc
  • Yang123321/ghc
  • maksbotan/ghc
  • QuietMisdreavus/ghc
  • trac-olshanskydr/ghc
  • emekoi/ghc
  • samuela/ghc
  • josephcsible/ghc
  • dramforever/ghc
  • lpsmith/ghc
  • DenisFrezzato/ghc
  • michivi/ghc
  • jneira/ghc
  • jeffhappily/ghc
  • Ivan-Yudin/ghc
  • nakaji-dayo/ghc
  • gdevanla/ghc
  • galen/ghc
  • fendor/ghc
  • yaitskov/ghc
  • rcythr/ghc
  • awpr/ghc
  • jeremyschlatter/ghc
  • Aver1y/ghc
  • mitchellvitez/ghc
  • merijn/ghc
  • tomjaguarpaw1/ghc
  • trac-NoidedSuper/ghc
  • erewok/ghc
  • trac-junji.hashimoto/ghc
  • adamwespiser/ghc
  • bjaress/ghc
  • jhrcek/ghc
  • leonschoorl/ghc
  • lukasz-golebiewski/ghc
  • sheaf/ghc
  • last-g/ghc
  • carassius1014/ghc
  • eschwartz/ghc
  • dwincort/ghc
  • felixwiemuth/ghc
  • TimWSpence/ghc
  • marcusmonteirodesouza/ghc
  • WJWH/ghc
  • vtols/ghc
  • theobat/ghc
  • BinderDavid/ghc
  • ckoparkar0/ghc
  • alexander-kjeldaas/ghc
  • dme2/ghc
  • philderbeast/ghc
  • aaronallen8455/ghc
  • rayshih/ghc
  • benkard/ghc
  • mpardalos/ghc
  • saidelman/ghc
  • leiftw/ghc
  • ca333/ghc
  • bwroga/ghc
  • nmichael44/ghc
  • trac-crobbins/ghc
  • felixonmars/ghc
  • adityagupta1089/ghc
  • hgsipiere/ghc
  • treeowl/ghc
  • alexpeits/ghc
  • CraigFe/ghc
  • dnlkrgr/ghc
  • kerckhove_ts/ghc
  • cptwunderlich/ghc
  • eiais/ghc
  • hahohihu/ghc
  • sanchayan/ghc
  • lemmih/ghc
  • sehqlr/ghc
  • trac-dbeacham/ghc
  • luite/ghc
  • trac-f-a/ghc
  • vados/ghc
  • luntain/ghc
  • fatho/ghc
  • alexbiehl-gc/ghc
  • dcbdan/ghc
  • tvh/ghc
  • liam-ly/ghc
  • timbobbarnes/ghc
  • GovanifY/ghc
  • shanth2600/ghc
  • gliboc/ghc
  • duog/ghc
  • moxonsghost/ghc
  • zander/ghc
  • masaeedu/ghc
  • georgefst/ghc
  • guibou/ghc
  • nicuveo/ghc
  • mdebruijne/ghc
  • stjordanis/ghc
  • emiflake/ghc
  • wygulmage/ghc
  • frasertweedale/ghc
  • coot/ghc
  • aratamizuki/ghc
  • tsandstr/ghc
  • mrBliss/ghc
  • Anton-Latukha/ghc
  • tadfisher/ghc
  • vapourismo/ghc
  • Sorokin-Anton/ghc
  • basile-henry/ghc
  • trac-mightybyte/ghc
  • AbsoluteNikola/ghc
  • cobrien99/ghc
  • songzh/ghc
  • blamario/ghc
  • aj4ayushjain/ghc
  • trac-utdemir/ghc
  • tangcl/ghc
  • hdgarrood/ghc
  • maerwald/ghc
  • arjun/ghc
  • ratherforky/ghc
  • haskieLambda/ghc
  • EmilGedda/ghc
  • Bogicevic/ghc
  • eddiejessup/ghc
  • kozross/ghc
  • AlistairB/ghc
  • 3Rafal/ghc
  • christiaanb/ghc
  • trac-bit/ghc
  • matsumonkie/ghc
  • trac-parsonsmatt/ghc
  • chisui/ghc
  • jaro/ghc
  • trac-kmiyazato/ghc
  • davidsd/ghc
  • Tritlo/ghc
  • I-B-3/ghc
  • lykahb/ghc
  • AriFordsham/ghc
  • turion1/ghc
  • berberman/ghc
  • christiantakle/ghc
  • zyklotomic/ghc
  • trac-ocramz/ghc
  • CSEdd/ghc
  • doyougnu/ghc
  • mmhat/ghc
  • why-not-try-calmer/ghc
  • plutotulp/ghc
  • kjekac/ghc
  • Manvi07/ghc
  • teo/ghc
  • cactus/ghc
  • CarrieMY/ghc
  • abel/ghc
  • yihming/ghc
  • tsakki/ghc
  • jessicah/ghc
  • oliverbunting/ghc
  • meld/ghc
  • friedbrice/ghc
  • Joald/ghc
  • abarbu/ghc
  • DigitalBrains1/ghc
  • sterni/ghc
  • alexDarcy/ghc
  • hexchain/ghc
  • minimario/ghc
  • zliu41/ghc
  • tommd/ghc
  • jazcarate/ghc
  • peterbecich/ghc
  • alirezaghey/ghc
  • solomon/ghc
  • mikael.urankar/ghc
  • davjam/ghc
  • int-index/ghc
  • MorrowM/ghc
  • nrnrnr/ghc
  • Sonfamm/ghc-test-only
  • afzt1/ghc
  • nguyenhaibinh-tpc/ghc
  • trac-lierdakil/ghc
  • MichaWiedenmann1/ghc
  • jmorag/ghc
  • Ziharrk/ghc
  • trac-MitchellSalad/ghc
  • juampe/ghc
  • jwaldmann/ghc
  • snowleopard/ghc
  • juhp/ghc
  • normalcoder/ghc
  • ksqsf/ghc
  • trac-jberryman/ghc
  • roberth/ghc
  • 1ntEgr8/ghc
  • epworth/ghc
  • MrAdityaAlok/ghc
  • JunmingZhao42/ghc
  • jappeace/ghc
  • trac-Gabriel439/ghc
  • alt-romes/ghc
  • HugoPeters1024/ghc
  • 10ne1/ghc-fork
  • agentultra/ghc
  • Garfield1002/ghc
  • ChickenProp/ghc
  • clyring/ghc
  • MaxHearnden/ghc
  • jumper149/ghc
  • vem/ghc
  • ketzacoatl/ghc
  • Rosuavio/ghc
  • jackohughes/ghc
  • p4l1ly/ghc
  • konsumlamm/ghc
  • shlevy/ghc
  • torsten.schmits/ghc
  • andremarianiello/ghc
  • amesgen/ghc
  • googleson78/ghc
  • InfiniteVerma/ghc
  • uhbif19/ghc
  • yiyunliu/ghc
  • raehik/ghc
  • mrkun/ghc
  • telser/ghc
  • 1Jajen1/ghc
  • slotThe/ghc
  • WinstonHartnett/ghc
  • mpilgrem/ghc
  • dreamsmasher/ghc
  • schuelermine/ghc
  • trac-Viwor/ghc
  • undergroundquizscene/ghc
  • evertedsphere/ghc
  • coltenwebb/ghc
  • oberblastmeister/ghc
  • agrue/ghc
  • lf-/ghc
  • zacwood9/ghc
  • steshaw/ghc
  • high-cloud/ghc
  • SkamDart/ghc
  • PiDelport/ghc
  • maoif/ghc
  • RossPaterson/ghc
  • CharlesTaylor7/ghc
  • ribosomerocker/ghc
  • trac-ramirez7/ghc
  • daig/ghc
  • NicolasT/ghc
  • FinleyMcIlwaine/ghc
  • lawtonnichols/ghc
  • jmtd/ghc
  • ozkutuk/ghc
  • wildsebastian/ghc
  • lrzlin/ghc
  • tobias/ghc
  • fw/ghc
  • hawkinsw/ghc
  • type-dance/ghc
  • rui314/ghc
  • ocharles/ghc
  • wavewave/ghc
  • TheKK/ghc
  • nomeata/ghc
  • trac-csabahruska/ghc
  • jonathanjameswatson/ghc
  • L-as/ghc
  • Axman6/ghc
  • barracuda156/ghc
  • trac-jship/ghc
  • jake-87/ghc
  • meooow/ghc
  • rebeccat/ghc
  • hamana55/ghc
  • Enigmage/ghc
  • kokobd/ghc
  • agevelt/ghc
  • gshen42/ghc
  • chrismwendt/ghc
  • MangoIV/ghc
  • teto/ghc
  • Sookr1/ghc
  • trac-thomasjm/ghc
  • barci2/ghc-dev
  • trac-m4dc4p/ghc
  • dixonary/ghc
  • breakerzirconia/ghc
  • alexsio27444/ghc
  • glocq/ghc
  • sourabhxyz/ghc
  • ryantrinkle/ghc
  • Jade/ghc
  • scedfaliako/ghc
  • martijnbastiaan/ghc
  • trac-george.colpitts/ghc
  • ammarbinfaisal/ghc
  • mimi.vx/ghc
  • lortabac/ghc
  • trac-zyla/ghc
  • benbellick/ghc
  • aadaa-fgtaa/ghc
  • jvanbruegge/ghc
  • archbung/ghc
  • gilmi/ghc
  • mfonism/ghc
  • alex-mckenna/ghc
  • Ei30metry/ghc
  • DiegoDiverio/ghc
  • jorgecunhamendes/ghc
  • liesnikov/ghc
  • akrmn/ghc
  • trac-simplifierticks/ghc
  • jacco/ghc
  • rhendric/ghc
  • damhiya/ghc
  • ryndubei/ghc
  • DaveBarton/ghc
  • trac-Profpatsch/ghc
  • GZGavinZhao/ghc
  • ncfavier/ghc
  • jameshaydon/ghc
  • ajccosta/ghc
  • dschrempf/ghc
  • cydparser/ghc
  • LinuxUserGD/ghc
  • elodielander/ghc
  • facundominguez/ghc
  • psilospore/ghc
  • lachrimae/ghc
  • dylan-thinnes/ghc-type-errors-plugin
  • hamishmack/ghc
  • Leary/ghc
  • lzszt/ghc
  • lyokha/ghc
  • trac-glaubitz/ghc
  • Rewbert/ghc
  • andreabedini/ghc
  • Jasagredo/ghc
  • sol/ghc
  • OlegAlexander/ghc
  • trac-sthibaul/ghc
  • avdv/ghc
  • Wendaolee/ghc
  • ur4t/ghc
  • daylily/ghc
  • boltzmannrain/ghc
  • mmzk1526/ghc
  • trac-fizzixnerd/ghc
  • soulomoon/ghc
  • rwmjones/ghc
  • j14i/ghc
  • tracsis/ghc
  • gesh/ghc
  • flip101/ghc
  • eldritch-cookie/ghc
  • LemonjamesD/ghc
  • pgujjula/ghc
  • skeuchel/ghc
  • noteed/ghc
  • Torrekie/ghc
  • jlwoodwa/ghc
  • ayanamists/ghc
  • husong998/ghc
  • trac-edmundnoble/ghc
  • josephf/ghc
  • contrun/ghc
  • baulig/ghc
  • edsko/ghc
  • mzschr/ghc-issue-24732
  • ulidtko/ghc
  • Arsen/ghc
  • trac-sjoerd_visscher/ghc
  • crumbtoo/ghc
  • L0neGamer/ghc
  • DrewFenwick/ghc
  • benz0li/ghc
  • MaciejWas/ghc
  • jordanrule/ghc
  • trac-qqwy/ghc
  • LiamGoodacre/ghc
  • isomorpheme/ghc
  • trac-danidiaz/ghc
  • Kariim/ghc
  • MTaimoorZaeem/ghc
  • hololeap/ghc
  • ticat-fp/ghc
  • meritamen/ghc
  • criskell/ghc
  • trac-kraai/ghc
  • aergus/ghc
  • jdral/ghc
  • SamB/ghc
  • Tristian/ghc
  • ywgrit/ghc
  • KatsuPatrick/ghc
  • OsePedro/ghc
  • mpscholten/ghc
  • fp/ghc
  • zaquest/ghc
  • fangyi-zhou/ghc
  • augyg/ghc
  • rkirkman/ghc
  • gulin.serge/ghc-windows-aarch64-bootstrap
  • iris/ghc
  • kwxm/ghc
  • maralorn/ghc
  • rafl/ghc
  • nikshalark/ghc
  • mrcjkb/ghc
  • blackheaven/ghc
647 results
Show changes
Commits on Source (10)
Showing
with 139 additions and 129 deletions
...@@ -261,6 +261,11 @@ instance Data OccName where ...@@ -261,6 +261,11 @@ instance Data OccName where
instance Outputable OccName where instance Outputable OccName where
ppr = pprOccName ppr = pprOccName
instance OutputableBndr OccName where
pprBndr _ = ppr
pprInfixOcc n = pprInfixVar (isSymOcc n) (ppr n)
pprPrefixOcc n = pprPrefixVar (isSymOcc n) (ppr n)
pprOccName :: OccName -> SDoc pprOccName :: OccName -> SDoc
pprOccName (OccName sp occ) pprOccName (OccName sp occ)
= getPprStyle $ \ sty -> = getPprStyle $ \ sty ->
...@@ -496,7 +501,7 @@ isDataSymOcc _ = False ...@@ -496,7 +501,7 @@ isDataSymOcc _ = False
-- it is a data constructor or variable or whatever) -- it is a data constructor or variable or whatever)
isSymOcc :: OccName -> Bool isSymOcc :: OccName -> Bool
isSymOcc (OccName DataName s) = isLexConSym s isSymOcc (OccName DataName s) = isLexConSym s
isSymOcc (OccName TcClsName s) = isLexConSym s || isLexVarSym s isSymOcc (OccName TcClsName s) = isLexSym s
isSymOcc (OccName VarName s) = isLexSym s isSymOcc (OccName VarName s) = isLexSym s
isSymOcc (OccName TvName s) = isLexSym s isSymOcc (OccName TvName s) = isLexSym s
-- Pretty inefficient! -- Pretty inefficient!
...@@ -864,6 +869,15 @@ isTupleOcc_maybe (OccName ns fs) ...@@ -864,6 +869,15 @@ isTupleOcc_maybe (OccName ns fs)
These functions test strings to see if they fit the lexical categories These functions test strings to see if they fit the lexical categories
defined in the Haskell report. defined in the Haskell report.
Note [Classification of generated names]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some names generated for internal use can show up in debugging output,
e.g. when using -ddump-simpl. These generated names start with a $
but should still be pretty-printed using prefix notation. We make sure
this is the case in isLexVarSym by only classifying a name as a symbol
if all its characters are symbols, not just its first one.
\begin{code} \begin{code}
isLexCon, isLexVar, isLexId, isLexSym :: FastString -> Bool isLexCon, isLexVar, isLexId, isLexSym :: FastString -> Bool
isLexConId, isLexConSym, isLexVarId, isLexVarSym :: FastString -> Bool isLexConId, isLexConSym, isLexVarId, isLexVarSym :: FastString -> Bool
...@@ -890,19 +904,23 @@ isLexConSym cs -- Infix type or data constructors ...@@ -890,19 +904,23 @@ isLexConSym cs -- Infix type or data constructors
| cs == (fsLit "->") = True | cs == (fsLit "->") = True
| otherwise = startsConSym (headFS cs) | otherwise = startsConSym (headFS cs)
isLexVarSym cs -- Infix identifiers isLexVarSym fs -- Infix identifiers e.g. "+"
| nullFS cs = False -- e.g. "+" = case (if nullFS fs then [] else unpackFS fs) of
| otherwise = startsVarSym (headFS cs) [] -> False
(c:cs) -> startsVarSym c && all isVarSymChar cs
------------- -------------
startsVarSym, startsVarId, startsConSym, startsConId :: Char -> Bool startsVarSym, startsVarId, startsConSym, startsConId :: Char -> Bool
startsVarSym c = isSymbolASCII c || (ord c > 0x7f && isSymbol c) -- Infix Ids startsVarSym c = isSymbolASCII c || (ord c > 0x7f && isSymbol c) -- Infix Ids
startsConSym c = c == ':' -- Infix data constructors startsConSym c = c == ':' -- Infix data constructors
startsVarId c = isLower c || c == '_' -- Ordinary Ids startsVarId c = isLower c || c == '_' -- Ordinary Ids
startsConId c = isUpper c || c == '(' -- Ordinary type constructors and data constructors startsConId c = isUpper c || c == '(' -- Ordinary type constructors and data constructors
isSymbolASCII :: Char -> Bool isSymbolASCII :: Char -> Bool
isSymbolASCII c = c `elem` "!#$%&*+./<=>?@\\^|~-" isSymbolASCII c = c `elem` "!#$%&*+./<=>?@\\^|~-"
isVarSymChar :: Char -> Bool
isVarSymChar c = c == ':' || startsVarSym c
\end{code} \end{code}
%************************************************************************ %************************************************************************
......
...@@ -55,6 +55,7 @@ import TysWiredIn ( eqTyConName ) ...@@ -55,6 +55,7 @@ import TysWiredIn ( eqTyConName )
import Fingerprint import Fingerprint
import Binary import Binary
import BooleanFormula ( BooleanFormula ) import BooleanFormula ( BooleanFormula )
import HsBinds
import Control.Monad import Control.Monad
import System.IO.Unsafe import System.IO.Unsafe
...@@ -1046,7 +1047,7 @@ instance Outputable IfaceDecl where ...@@ -1046,7 +1047,7 @@ instance Outputable IfaceDecl where
pprIfaceDecl :: IfaceDecl -> SDoc pprIfaceDecl :: IfaceDecl -> SDoc
pprIfaceDecl (IfaceId {ifName = var, ifType = ty, pprIfaceDecl (IfaceId {ifName = var, ifType = ty,
ifIdDetails = details, ifIdInfo = info}) ifIdDetails = details, ifIdInfo = info})
= sep [ ppr var <+> dcolon <+> ppr ty, = sep [ pprPrefixOcc var <+> dcolon <+> ppr ty,
nest 2 (ppr details), nest 2 (ppr details),
nest 2 (ppr info) ] nest 2 (ppr info) ]
...@@ -1099,32 +1100,27 @@ pprIfaceDecl (IfaceClass {ifCtxt = context, ifName = clas, ifTyVars = tyvars, ...@@ -1099,32 +1100,27 @@ pprIfaceDecl (IfaceClass {ifCtxt = context, ifName = clas, ifTyVars = tyvars,
sep (map ppr sigs)]) sep (map ppr sigs)])
pprIfaceDecl (IfaceAxiom {ifName = name, ifTyCon = tycon, ifAxBranches = branches }) pprIfaceDecl (IfaceAxiom {ifName = name, ifTyCon = tycon, ifAxBranches = branches })
= hang (ptext (sLit "axiom") <+> ppr name <> colon) = hang (ptext (sLit "axiom") <+> ppr name <> dcolon)
2 (vcat $ map (pprAxBranch $ Just tycon) branches) 2 (vcat $ map (pprAxBranch $ Just tycon) branches)
pprIfaceDecl (IfacePatSyn { ifName = name, ifPatHasWrapper = has_wrap, pprIfaceDecl (IfacePatSyn { ifName = name, ifPatHasWrapper = has_wrap,
ifPatIsInfix = is_infix, ifPatIsInfix = is_infix,
ifPatUnivTvs = univ_tvs, ifPatExTvs = ex_tvs, ifPatUnivTvs = _univ_tvs, ifPatExTvs = _ex_tvs,
ifPatProvCtxt = prov_ctxt, ifPatReqCtxt = req_ctxt, ifPatProvCtxt = prov_ctxt, ifPatReqCtxt = req_ctxt,
ifPatArgs = args, ifPatArgs = args,
ifPatTy = ty }) ifPatTy = ty })
= hang (text "pattern" <+> header) = pprPatSynSig name has_wrap args' ty' (pprCtxt prov_ctxt) (pprCtxt req_ctxt)
4 details
where where
header = ppr name <+> dcolon <+> args' = case (is_infix, map snd args) of
(pprIfaceForAllPart univ_tvs req_ctxt $ (True, [left_ty, right_ty]) ->
pprIfaceForAllPart ex_tvs prov_ctxt $ InfixPatSyn (pprParendIfaceType left_ty) (pprParendIfaceType right_ty)
pp_tau) (_, tys) ->
PrefixPatSyn (map pprParendIfaceType tys)
details = sep [ if is_infix then text "Infix" else empty ty' = pprParendIfaceType ty
, if has_wrap then text "HasWrapper" else empty
]
pp_tau = case map pprParendIfaceType (arg_tys ++ [ty]) of pprCtxt [] = Nothing
(t:ts) -> fsep (t : map (arrow <+>) ts) pprCtxt ctxt = Just $ pprIfaceContext ctxt
[] -> panic "pp_tau"
arg_tys = map snd args
pprCType :: Maybe CType -> SDoc pprCType :: Maybe CType -> SDoc
pprCType Nothing = ptext (sLit "No C type associated") pprCType Nothing = ptext (sLit "No C type associated")
...@@ -1152,7 +1148,7 @@ instance Outputable IfaceAT where ...@@ -1152,7 +1148,7 @@ instance Outputable IfaceAT where
pprIfaceDeclHead :: IfaceContext -> OccName -> [IfaceTvBndr] -> SDoc pprIfaceDeclHead :: IfaceContext -> OccName -> [IfaceTvBndr] -> SDoc
pprIfaceDeclHead context thing tyvars pprIfaceDeclHead context thing tyvars
= hsep [pprIfaceContext context, parenSymOcc thing (ppr thing), = hsep [pprIfaceContextArr context, parenSymOcc thing (ppr thing),
pprIfaceTvBndrs tyvars] pprIfaceTvBndrs tyvars]
pp_condecls :: OccName -> IfaceConDecls -> SDoc pp_condecls :: OccName -> IfaceConDecls -> SDoc
......
...@@ -22,7 +22,7 @@ module IfaceType ( ...@@ -22,7 +22,7 @@ module IfaceType (
toIfaceCoercion, toIfaceCoercion,
-- Printing -- Printing
pprIfaceType, pprParendIfaceType, pprIfaceContext, pprIfaceType, pprParendIfaceType, pprIfaceContext, pprIfaceContextArr,
pprIfaceIdBndr, pprIfaceTvBndr, pprIfaceTvBndrs, pprIfaceIdBndr, pprIfaceTvBndr, pprIfaceTvBndrs,
pprIfaceBndrs, pprIfaceBndrs,
tOP_PREC, tYCON_PREC, noParens, maybeParen, pprIfaceForAllPart, tOP_PREC, tYCON_PREC, noParens, maybeParen, pprIfaceForAllPart,
...@@ -31,6 +31,8 @@ module IfaceType ( ...@@ -31,6 +31,8 @@ module IfaceType (
) where ) where
import Coercion import Coercion
import TcType
import DynFlags
import TypeRep hiding( maybeParen ) import TypeRep hiding( maybeParen )
import Unique( hasKey ) import Unique( hasKey )
import TyCon import TyCon
...@@ -248,15 +250,18 @@ ppr_ty ctxt_prec ty@(IfaceForAllTy _ _) ...@@ -248,15 +250,18 @@ ppr_ty ctxt_prec ty@(IfaceForAllTy _ _)
where where
(tvs, theta, tau) = splitIfaceSigmaTy ty (tvs, theta, tau) = splitIfaceSigmaTy ty
------------------- -------------------
-- needs to handle type contexts and coercion contexts, hence the -- needs to handle type contexts and coercion contexts, hence the
-- generality -- generality
pprIfaceForAllPart :: Outputable a => [IfaceTvBndr] -> [a] -> SDoc -> SDoc pprIfaceForAllPart :: Outputable a => [IfaceTvBndr] -> [a] -> SDoc -> SDoc
pprIfaceForAllPart tvs ctxt doc pprIfaceForAllPart tvs ctxt doc
= sep [ppr_tvs, pprIfaceContext ctxt, doc] = sep [ppr_tvs, pprIfaceContextArr ctxt, doc]
where where
ppr_tvs | null tvs = empty ppr_tvs | null tvs = empty
| otherwise = ptext (sLit "forall") <+> pprIfaceTvBndrs tvs <> dot | otherwise = sdocWithDynFlags $ \ dflags ->
if gopt Opt_PrintExplicitForalls dflags
then ptext (sLit "forall") <+> pprIfaceTvBndrs tvs <> dot
else empty
------------------- -------------------
ppr_tc_app :: (Int -> a -> SDoc) -> Int -> IfaceTyCon -> [a] -> SDoc ppr_tc_app :: (Int -> a -> SDoc) -> Int -> IfaceTyCon -> [a] -> SDoc
...@@ -386,14 +391,14 @@ instance Binary IfaceTyLit where ...@@ -386,14 +391,14 @@ instance Binary IfaceTyLit where
_ -> panic ("get IfaceTyLit " ++ show tag) _ -> panic ("get IfaceTyLit " ++ show tag)
------------------- -------------------
pprIfaceContext :: Outputable a => [a] -> SDoc pprIfaceContextArr :: Outputable a => [a] -> SDoc
-- Prints "(C a, D b) =>", including the arrow -- Prints "(C a, D b) =>", including the arrow
pprIfaceContext [] = empty pprIfaceContextArr [] = empty
pprIfaceContext theta = ppr_preds theta <+> darrow pprIfaceContextArr theta = pprIfaceContext theta <+> darrow
ppr_preds :: Outputable a => [a] -> SDoc pprIfaceContext :: Outputable a => [a] -> SDoc
ppr_preds [pred] = ppr pred -- No parens pprIfaceContext [pred] = ppr pred -- No parens
ppr_preds preds = parens (sep (punctuate comma (map ppr preds))) pprIfaceContext preds = parens (sep (punctuate comma (map ppr preds)))
instance Binary IfaceType where instance Binary IfaceType where
put_ bh (IfaceForAllTy aa ab) = do put_ bh (IfaceForAllTy aa ab) = do
......
...@@ -1461,7 +1461,7 @@ tyThingToIfaceDecl (AnId id) = idToIfaceDecl id ...@@ -1461,7 +1461,7 @@ tyThingToIfaceDecl (AnId id) = idToIfaceDecl id
tyThingToIfaceDecl (ATyCon tycon) = tyConToIfaceDecl emptyTidyEnv tycon tyThingToIfaceDecl (ATyCon tycon) = tyConToIfaceDecl emptyTidyEnv tycon
tyThingToIfaceDecl (ACoAxiom ax) = coAxiomToIfaceDecl ax tyThingToIfaceDecl (ACoAxiom ax) = coAxiomToIfaceDecl ax
tyThingToIfaceDecl (AConLike cl) = case cl of tyThingToIfaceDecl (AConLike cl) = case cl of
RealDataCon dc -> pprPanic "toIfaceDecl" (ppr dc) -- Should be trimmed out earlier RealDataCon dc -> dataConToIfaceDecl dc -- for ppr purposes only
PatSynCon ps -> patSynToIfaceDecl ps PatSynCon ps -> patSynToIfaceDecl ps
-------------------------- --------------------------
...@@ -1476,6 +1476,14 @@ idToIfaceDecl id ...@@ -1476,6 +1476,14 @@ idToIfaceDecl id
ifIdDetails = toIfaceIdDetails (idDetails id), ifIdDetails = toIfaceIdDetails (idDetails id),
ifIdInfo = toIfaceIdInfo (idInfo id) } ifIdInfo = toIfaceIdInfo (idInfo id) }
--------------------------
dataConToIfaceDecl :: DataCon -> IfaceDecl
dataConToIfaceDecl dataCon
= IfaceId { ifName = getOccName dataCon,
ifType = toIfaceType (dataConUserType dataCon),
ifIdDetails = IfVanillaId,
ifIdInfo = NoInfo }
-------------------------- --------------------------
patSynToIfaceDecl :: PatSyn -> IfaceDecl patSynToIfaceDecl :: PatSyn -> IfaceDecl
patSynToIfaceDecl ps patSynToIfaceDecl ps
......
...@@ -23,20 +23,18 @@ module PprTyThing ( ...@@ -23,20 +23,18 @@ module PprTyThing (
) where ) where
import TypeRep ( TyThing(..) ) import TypeRep ( TyThing(..) )
import ConLike
import DataCon import DataCon
import PatSyn
import Id import Id
import TyCon import TyCon
import Class import Class
import Coercion( pprCoAxiom, pprCoAxBranch ) import Coercion( pprCoAxBranch )
import CoAxiom( CoAxiom(..), brListMap ) import CoAxiom( CoAxiom(..), brListMap )
import HscTypes( tyThingParent_maybe ) import HscTypes( tyThingParent_maybe )
import HsBinds( pprPatSynSig )
import Type( tidyTopType, tidyOpenType, splitForAllTys, funResultTy ) import Type( tidyTopType, tidyOpenType, splitForAllTys, funResultTy )
import Kind( synTyConResKind ) import Kind( synTyConResKind )
import TypeRep( pprTvBndrs, pprForAll, suppressKinds ) import TypeRep( pprTvBndrs, pprForAll, suppressKinds )
import TysPrim( alphaTyVars ) import TysPrim( alphaTyVars )
import MkIface ( tyThingToIfaceDecl )
import TcType import TcType
import Name import Name
import VarEnv( emptyTidyEnv ) import VarEnv( emptyTidyEnv )
...@@ -44,7 +42,6 @@ import StaticFlags( opt_PprStyle_Debug ) ...@@ -44,7 +42,6 @@ import StaticFlags( opt_PprStyle_Debug )
import DynFlags import DynFlags
import Outputable import Outputable
import FastString import FastString
import Data.Maybe
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- Pretty-printing entities that we get from the GHC API -- Pretty-printing entities that we get from the GHC API
...@@ -76,7 +73,7 @@ pprTyThingLoc tyThing ...@@ -76,7 +73,7 @@ pprTyThingLoc tyThing
-- | Pretty-prints a 'TyThing'. -- | Pretty-prints a 'TyThing'.
pprTyThing :: TyThing -> SDoc pprTyThing :: TyThing -> SDoc
pprTyThing thing = ppr_ty_thing showAll thing pprTyThing thing = ppr_ty_thing (Just showAll) thing
-- | Pretty-prints a 'TyThing' in context: that is, if the entity -- | Pretty-prints a 'TyThing' in context: that is, if the entity
-- is a data constructor, record selector, or class method, then -- is a data constructor, record selector, or class method, then
...@@ -88,7 +85,7 @@ pprTyThingInContext thing ...@@ -88,7 +85,7 @@ pprTyThingInContext thing
where where
go ss thing = case tyThingParent_maybe thing of go ss thing = case tyThingParent_maybe thing of
Just parent -> go (getName thing : ss) parent Just parent -> go (getName thing : ss) parent
Nothing -> ppr_ty_thing ss thing Nothing -> ppr_ty_thing (Just ss) thing
-- | Like 'pprTyThingInContext', but adds the defining location. -- | Like 'pprTyThingInContext', but adds the defining location.
pprTyThingInContextLoc :: TyThing -> SDoc pprTyThingInContextLoc :: TyThing -> SDoc
...@@ -100,21 +97,18 @@ pprTyThingInContextLoc tyThing ...@@ -100,21 +97,18 @@ pprTyThingInContextLoc tyThing
-- the function is equivalent to 'pprTyThing' but for type constructors -- the function is equivalent to 'pprTyThing' but for type constructors
-- and classes it prints only the header part of the declaration. -- and classes it prints only the header part of the declaration.
pprTyThingHdr :: TyThing -> SDoc pprTyThingHdr :: TyThing -> SDoc
pprTyThingHdr (AnId id) = pprId id pprTyThingHdr = ppr_ty_thing Nothing
pprTyThingHdr (AConLike conLike) = case conLike of
RealDataCon dataCon -> pprDataConSig dataCon
PatSynCon patSyn -> pprPatSyn patSyn
pprTyThingHdr (ATyCon tyCon) = pprTyConHdr tyCon
pprTyThingHdr (ACoAxiom ax) = pprCoAxiom ax
------------------------ ------------------------
ppr_ty_thing :: ShowSub -> TyThing -> SDoc -- NOTE: We pretty-print 'TyThing' via 'IfaceDecl' so that we can reuse the
ppr_ty_thing _ (AnId id) = pprId id -- 'TyCon' tidying happening in 'tyThingToIfaceDecl'. See #8776 for details.
ppr_ty_thing _ (AConLike conLike) = case conLike of ppr_ty_thing :: Maybe ShowSub -> TyThing -> SDoc
RealDataCon dataCon -> pprDataConSig dataCon ppr_ty_thing mss tyThing = case tyThing of
PatSynCon patSyn -> pprPatSyn patSyn AnId id -> pprId id
ppr_ty_thing ss (ATyCon tyCon) = pprTyCon ss tyCon ATyCon tyCon -> case mss of
ppr_ty_thing _ (ACoAxiom ax) = pprCoAxiom ax Nothing -> pprTyConHdr tyCon
Just ss -> pprTyCon ss tyCon
_ -> ppr $ tyThingToIfaceDecl tyThing
pprTyConHdr :: TyCon -> SDoc pprTyConHdr :: TyCon -> SDoc
pprTyConHdr tyCon pprTyConHdr tyCon
...@@ -143,10 +137,6 @@ pprTyConHdr tyCon ...@@ -143,10 +137,6 @@ pprTyConHdr tyCon
| isAlgTyCon tyCon = pprThetaArrowTy (tyConStupidTheta tyCon) | isAlgTyCon tyCon = pprThetaArrowTy (tyConStupidTheta tyCon)
| otherwise = empty -- Returns 'empty' if null theta | otherwise = empty -- Returns 'empty' if null theta
pprDataConSig :: DataCon -> SDoc
pprDataConSig dataCon
= ppr_bndr dataCon <+> dcolon <+> pprTypeForUser (dataConUserType dataCon)
pprClassHdr :: Class -> SDoc pprClassHdr :: Class -> SDoc
pprClassHdr cls pprClassHdr cls
= sdocWithDynFlags $ \dflags -> = sdocWithDynFlags $ \dflags ->
...@@ -163,23 +153,6 @@ pprId ident ...@@ -163,23 +153,6 @@ pprId ident
= hang (ppr_bndr ident <+> dcolon) = hang (ppr_bndr ident <+> dcolon)
2 (pprTypeForUser (idType ident)) 2 (pprTypeForUser (idType ident))
pprPatSyn :: PatSyn -> SDoc
pprPatSyn patSyn
= pprPatSynSig ident is_bidir args (pprTypeForUser rhs_ty) prov req
where
ident = patSynId patSyn
is_bidir = isJust $ patSynWrapper patSyn
args = fmap pprParendType (patSynTyDetails patSyn)
prov = pprThetaOpt prov_theta
req = pprThetaOpt req_theta
pprThetaOpt [] = Nothing
pprThetaOpt theta = Just $ pprTheta theta
(_univ_tvs, _ex_tvs, (prov_theta, req_theta)) = patSynSig patSyn
rhs_ty = patSynType patSyn
pprTypeForUser :: Type -> SDoc pprTypeForUser :: Type -> SDoc
-- We do two things here. -- We do two things here.
-- a) We tidy the type, regardless -- a) We tidy the type, regardless
......
{-# LANGUAGE PatternSynonyms, GADTs #-}
data A x y = (Num x, Eq y) => B
data R = R{ rX :: Int }
pattern P = B
:load T8776.hs
:i P
pattern (Num t, Eq t1) => P :: (A t t1) -- Defined at T8776.hs:6:9
...@@ -166,3 +166,5 @@ test('T8579', normal, ghci_script, ['T8579.script']) ...@@ -166,3 +166,5 @@ test('T8579', normal, ghci_script, ['T8579.script'])
test('T8649', normal, ghci_script, ['T8649.script']) test('T8649', normal, ghci_script, ['T8649.script'])
test('T8674', normal, ghci_script, ['T8674.script']) test('T8674', normal, ghci_script, ['T8674.script'])
test('T8696', normal, ghci_script, ['T8696.script']) test('T8696', normal, ghci_script, ['T8696.script'])
test('T8776', normal, ghci_script, ['T8776.script'])
...@@ -14,7 +14,7 @@ TYPE CONSTRUCTORS ...@@ -14,7 +14,7 @@ TYPE CONSTRUCTORS
No C type associated No C type associated
Roles: [representational] Roles: [representational]
RecFlag NonRecursive, Promotable RecFlag NonRecursive, Promotable
= L :: forall a. [a] -> ListColl a Stricts: _ = L :: [a] -> ListColl a Stricts: _
FamilyInstance: none FamilyInstance: none
COERCION AXIOMS COERCION AXIOMS
axiom Foo.TFCo:R:ElemListColl :: Elem (ListColl a) = a axiom Foo.TFCo:R:ElemListColl :: Elem (ListColl a) = a
......
...@@ -2,53 +2,53 @@ TYPE SIGNATURES ...@@ -2,53 +2,53 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS TYPE CONSTRUCTORS
T1 :: * -> * T1 :: * -> *
data T1 a data T1 a
No C type associated No C type associated
Roles: [nominal] Roles: [nominal]
RecFlag NonRecursive, Promotable RecFlag NonRecursive, Promotable
= K1 :: forall a. a -> T1 a Stricts: _ = K1 :: forall a. a -> T1 a Stricts: _
FamilyInstance: none FamilyInstance: none
T2 :: * -> * T2 :: * -> *
data T2 a data T2 a
No C type associated No C type associated
Roles: [representational] Roles: [representational]
RecFlag NonRecursive, Promotable RecFlag NonRecursive, Promotable
= K2 :: forall a. a -> T2 a Stricts: _ = K2 :: forall a. a -> T2 a Stricts: _
FamilyInstance: none FamilyInstance: none
T3 :: k -> * T3 :: k -> *
data T3 (k::BOX) (a::k) data T3 (k::BOX) (a::k)
No C type associated No C type associated
Roles: [nominal, phantom] Roles: [nominal, phantom]
RecFlag NonRecursive, Not promotable RecFlag NonRecursive, Not promotable
= K3 :: forall (k::BOX) (a::k). T3 k a = K3 :: forall (k::BOX) (a::k). T3 k a
FamilyInstance: none FamilyInstance: none
T4 :: (* -> *) -> * -> * T4 :: (* -> *) -> * -> *
data T4 (a::* -> *) b data T4 (a::* -> *) b
No C type associated No C type associated
Roles: [nominal, nominal] Roles: [nominal, nominal]
RecFlag NonRecursive, Not promotable RecFlag NonRecursive, Not promotable
= K4 :: forall (a::* -> *) b. (a b) -> T4 a b Stricts: _ = K4 :: forall (a::* -> *) b. (a b) -> T4 a b Stricts: _
FamilyInstance: none FamilyInstance: none
T5 :: * -> * T5 :: * -> *
data T5 a data T5 a
No C type associated No C type associated
Roles: [representational] Roles: [representational]
RecFlag NonRecursive, Promotable RecFlag NonRecursive, Promotable
= K5 :: forall a. a -> T5 a Stricts: _ = K5 :: forall a. a -> T5 a Stricts: _
FamilyInstance: none FamilyInstance: none
T6 :: k -> * T6 :: k -> *
data T6 (k::BOX) (a::k) data T6 (k::BOX) (a::k)
No C type associated No C type associated
Roles: [nominal, phantom] Roles: [nominal, phantom]
RecFlag NonRecursive, Not promotable RecFlag NonRecursive, Not promotable
= K6 :: forall (k::BOX) (a::k). T6 k a = K6 :: forall (k::BOX) (a::k). T6 k a
FamilyInstance: none FamilyInstance: none
T7 :: k -> * -> * T7 :: k -> * -> *
data T7 (k::BOX) (a::k) b data T7 (k::BOX) (a::k) b
No C type associated No C type associated
Roles: [nominal, phantom, representational] Roles: [nominal, phantom, representational]
RecFlag NonRecursive, Not promotable RecFlag NonRecursive, Not promotable
= K7 :: forall (k::BOX) (a::k) b. b -> T7 k a b Stricts: _ = K7 :: forall (k::BOX) (a::k) b. b -> T7 k a b Stricts: _
FamilyInstance: none FamilyInstance: none
COERCION AXIOMS COERCION AXIOMS
Dependent modules: [] Dependent modules: []
Dependent packages: [base, ghc-prim, integer-gmp] Dependent packages: [base, ghc-prim, integer-gmp]
......
...@@ -2,18 +2,18 @@ TYPE SIGNATURES ...@@ -2,18 +2,18 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS TYPE CONSTRUCTORS
T1 :: * -> * T1 :: * -> *
data T1 a data T1 a
No C type associated No C type associated
Roles: [representational] Roles: [representational]
RecFlag NonRecursive, Not promotable RecFlag NonRecursive, Not promotable
= K1 :: forall a. (IO a) -> T1 a Stricts: _ = K1 :: forall a. (IO a) -> T1 a Stricts: _
FamilyInstance: none FamilyInstance: none
T2 :: * -> * T2 :: * -> *
data T2 a data T2 a
No C type associated No C type associated
Roles: [representational] Roles: [representational]
RecFlag NonRecursive, Not promotable RecFlag NonRecursive, Not promotable
= K2 :: forall a. (FunPtr a) -> T2 a Stricts: _ = K2 :: forall a. (FunPtr a) -> T2 a Stricts: _
FamilyInstance: none FamilyInstance: none
COERCION AXIOMS COERCION AXIOMS
Dependent modules: [] Dependent modules: []
Dependent packages: [base, ghc-prim, integer-gmp] Dependent packages: [base, ghc-prim, integer-gmp]
......
test('Roles1', only_ways('normal'), compile, ['-ddump-tc']) test('Roles1', only_ways('normal'), compile, ['-ddump-tc -fprint-explicit-foralls'])
test('Roles2', only_ways('normal'), compile, ['-ddump-tc']) test('Roles2', only_ways('normal'), compile, ['-ddump-tc -fprint-explicit-foralls'])
test('Roles3', only_ways('normal'), compile, ['-ddump-tc']) test('Roles3', only_ways('normal'), compile, ['-ddump-tc'])
test('Roles4', only_ways('normal'), compile, ['-ddump-tc']) test('Roles4', only_ways('normal'), compile, ['-ddump-tc'])
test('Roles13', only_ways('normal'), compile, ['-ddump-simpl -dsuppress-uniques']) test('Roles13', only_ways('normal'), compile, ['-ddump-simpl -dsuppress-uniques'])
test('Roles14', only_ways('normal'), compile, ['-ddump-tc']) test('Roles14', only_ways('normal'), compile, ['-ddump-tc'])
test('RolesIArray', only_ways('normal'), compile, ['']) test('RolesIArray', only_ways('normal'), compile, [''])
\ No newline at end of file
...@@ -10,21 +10,20 @@ TYPE CONSTRUCTORS ...@@ -10,21 +10,20 @@ TYPE CONSTRUCTORS
No C type associated No C type associated
Roles: [representational, representational, representational] Roles: [representational, representational, representational]
RecFlag NonRecursive, Promotable RecFlag NonRecursive, Promotable
= Node :: forall s a chain. s -> a -> chain -> Q s a chain = Node :: s -> a -> chain -> Q s a chain Stricts: _ _ _
Stricts: _ _ _
FamilyInstance: none FamilyInstance: none
Z :: * -> * Z :: * -> *
data Z a data Z a
No C type associated No C type associated
Roles: [representational] Roles: [representational]
RecFlag NonRecursive, Promotable RecFlag NonRecursive, Promotable
= Z :: forall a. a -> Z a Stricts: _ = Z :: a -> Z a Stricts: _
FamilyInstance: none FamilyInstance: none
Zork :: * -> * -> * -> Constraint Zork :: * -> * -> * -> Constraint
class Zork s a b | a -> b class Zork s a b | a -> b
Roles: [nominal, nominal, nominal] Roles: [nominal, nominal, nominal]
RecFlag NonRecursive RecFlag NonRecursive
huh :: forall chain. Q s a chain -> ST s () huh :: Q s a chain -> ST s ()
COERCION AXIOMS COERCION AXIOMS
axiom ShouldCompile.NTCo:Zork :: axiom ShouldCompile.NTCo:Zork ::
Zork s a b = forall chain. Q s a chain -> ST s () Zork s a b = forall chain. Q s a chain -> ST s ()
......