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
  • 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
  • laurenyim/ghc
647 results
Show changes
Commits on Source (1)
...@@ -31,6 +31,8 @@ import Outputable ...@@ -31,6 +31,8 @@ import Outputable
import Util import Util
import FastString import FastString
import TcRnTypes
import Data.List ( nubBy ) import Data.List ( nubBy )
import Data.Maybe ( isJust ) import Data.Maybe ( isJust )
\end{code} \end{code}
...@@ -133,12 +135,10 @@ unification variables when producing the FD constraints. ...@@ -133,12 +135,10 @@ unification variables when producing the FD constraints.
Finally, the position parameters will help us rewrite the wanted constraint ``on the spot'' Finally, the position parameters will help us rewrite the wanted constraint ``on the spot''
\begin{code} \begin{code}
type Pred_Loc = (PredType, SDoc) -- SDoc says where the Pred comes from
data Equation data Equation
= FDEqn { fd_qtvs :: [TyVar] -- Instantiate these type and kind vars to fresh unification vars = FDEqn { fd_qtvs :: [TyVar] -- Instantiate these type and kind vars to fresh unification vars
, fd_eqs :: [FDEq] -- and then make these equal , fd_eqs :: [FDEq] -- and then make these equal
, fd_pred1, fd_pred2 :: Pred_Loc } -- The Equation arose from , fd_pred1, fd_pred2 :: PredOrigin } -- The Equation arose from
-- combining these two constraints -- combining these two constraints
data FDEq = FDEq { fd_pos :: Int -- We use '0' for the first position data FDEq = FDEq { fd_pos :: Int -- We use '0' for the first position
...@@ -213,14 +213,14 @@ zipAndComputeFDEqs _ _ _ = [] ...@@ -213,14 +213,14 @@ zipAndComputeFDEqs _ _ _ = []
-- Improve a class constraint from another class constraint -- Improve a class constraint from another class constraint
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
improveFromAnother :: Pred_Loc -- Template item (usually given, or inert) improveFromAnother :: PredOrigin -- Template item (usually given, or inert)
-> Pred_Loc -- Workitem [that can be improved] -> PredOrigin -- Workitem [that can be improved]
-> [Equation] -> [Equation]
-- Post: FDEqs always oriented from the other to the workitem -- Post: FDEqs always oriented from the other to the workitem
-- Equations have empty quantified variables -- Equations have empty quantified variables
improveFromAnother pred1@(ty1, _) pred2@(ty2, _) improveFromAnother pred1 pred2
| Just (cls1, tys1) <- getClassPredTys_maybe ty1 | Just (cls1, tys1) <- getClassPredTys_maybe (predOriginPred pred1)
, Just (cls2, tys2) <- getClassPredTys_maybe ty2 , Just (cls2, tys2) <- getClassPredTys_maybe (predOriginPred pred2)
, tys1 `lengthAtLeast` 2 && cls1 == cls2 , tys1 `lengthAtLeast` 2 && cls1 == cls2
= [ FDEqn { fd_qtvs = [], fd_eqs = eqs, fd_pred1 = pred1, fd_pred2 = pred2 } = [ FDEqn { fd_qtvs = [], fd_eqs = eqs, fd_pred1 = pred1, fd_pred2 = pred2 }
| let (cls_tvs, cls_fds) = classTvsFds cls1 | let (cls_tvs, cls_fds) = classTvsFds cls1
...@@ -243,15 +243,15 @@ pprEquation (FDEqn { fd_qtvs = qtvs, fd_eqs = pairs }) ...@@ -243,15 +243,15 @@ pprEquation (FDEqn { fd_qtvs = qtvs, fd_eqs = pairs })
nest 2 (vcat [ ppr t1 <+> ptext (sLit "~") <+> ppr t2 | (FDEq _ t1 t2) <- pairs])] nest 2 (vcat [ ppr t1 <+> ptext (sLit "~") <+> ppr t2 | (FDEq _ t1 t2) <- pairs])]
improveFromInstEnv :: (InstEnv,InstEnv) improveFromInstEnv :: (InstEnv,InstEnv)
-> Pred_Loc -> PredOrigin
-> [Equation] -- Needs to be an Equation because -> [Equation] -- Needs to be an Equation because
-- of quantified variables -- of quantified variables
-- Post: Equations oriented from the template (matching instance) to the workitem! -- Post: Equations oriented from the template (matching instance) to the workitem!
improveFromInstEnv _inst_env (pred,_loc) improveFromInstEnv _inst_env pred
| not (isClassPred pred) | not (isClassPred (predOriginPred pred))
= panic "improveFromInstEnv: not a class predicate" = panic "improveFromInstEnv: not a class predicate"
improveFromInstEnv inst_env pred@(ty, _) improveFromInstEnv inst_env pred
| Just (cls, tys) <- getClassPredTys_maybe ty | Just (cls, tys) <- getClassPredTys_maybe (predOriginPred pred)
, tys `lengthAtLeast` 2 , tys `lengthAtLeast` 2
, let (cls_tvs, cls_fds) = classTvsFds cls , let (cls_tvs, cls_fds) = classTvsFds cls
instances = classInstances inst_env cls instances = classInstances inst_env cls
...@@ -267,10 +267,8 @@ improveFromInstEnv inst_env pred@(ty, _) ...@@ -267,10 +267,8 @@ improveFromInstEnv inst_env pred@(ty, _)
, ispec <- instances , ispec <- instances
, (meta_tvs, eqs) <- checkClsFD fd cls_tvs ispec , (meta_tvs, eqs) <- checkClsFD fd cls_tvs ispec
emptyVarSet tys trimmed_tcs -- NB: orientation emptyVarSet tys trimmed_tcs -- NB: orientation
, let p_inst = (mkClassPred cls (is_tys ispec), , let p_inst = mkPredOrigin (FunDepInstOrigin fd ispec)
sep [ ptext (sLit "arising from the dependency") <+> quotes (pprFunDep fd) (mkClassPred cls (is_tys ispec))
, ptext (sLit "in the instance declaration")
<+> pprNameDefnLoc (getName ispec)])
] ]
improveFromInstEnv _ _ = [] improveFromInstEnv _ _ = []
......
...@@ -122,15 +122,6 @@ type DerivContext = Maybe ThetaType ...@@ -122,15 +122,6 @@ type DerivContext = Maybe ThetaType
-- Nothing <=> Vanilla deriving; infer the context of the instance decl -- Nothing <=> Vanilla deriving; infer the context of the instance decl
-- Just theta <=> Standalone deriving: context supplied by programmer -- Just theta <=> Standalone deriving: context supplied by programmer
data PredOrigin = PredOrigin PredType CtOrigin
type ThetaOrigin = [PredOrigin]
mkPredOrigin :: CtOrigin -> PredType -> PredOrigin
mkPredOrigin origin pred = PredOrigin pred origin
mkThetaOrigin :: CtOrigin -> ThetaType -> ThetaOrigin
mkThetaOrigin origin = map (mkPredOrigin origin)
data EarlyDerivSpec = InferTheta (DerivSpec ThetaOrigin) data EarlyDerivSpec = InferTheta (DerivSpec ThetaOrigin)
| GivenTheta (DerivSpec ThetaType) | GivenTheta (DerivSpec ThetaType)
-- InferTheta ds => the context for the instance should be inferred -- InferTheta ds => the context for the instance should be inferred
...@@ -175,8 +166,6 @@ instance Outputable EarlyDerivSpec where ...@@ -175,8 +166,6 @@ instance Outputable EarlyDerivSpec where
ppr (InferTheta spec) = ppr spec <+> ptext (sLit "(Infer)") ppr (InferTheta spec) = ppr spec <+> ptext (sLit "(Infer)")
ppr (GivenTheta spec) = ppr spec <+> ptext (sLit "(Given)") ppr (GivenTheta spec) = ppr spec <+> ptext (sLit "(Given)")
instance Outputable PredOrigin where
ppr (PredOrigin ty _) = ppr ty -- The origin is not so interesting when debugging
\end{code} \end{code}
......
...@@ -413,8 +413,8 @@ addFunDepWork :: Ct -> Ct -> TcS () ...@@ -413,8 +413,8 @@ addFunDepWork :: Ct -> Ct -> TcS ()
addFunDepWork work_ct inert_ct addFunDepWork work_ct inert_ct
= do { let work_loc = ctLoc work_ct = do { let work_loc = ctLoc work_ct
inert_loc = ctLoc inert_ct inert_loc = ctLoc inert_ct
inert_pred_loc = (ctPred inert_ct, pprArisingAt inert_loc) inert_pred_loc = mkPredOrigin (ctLocOrigin inert_loc) (ctPred inert_ct)
work_item_pred_loc = (ctPred work_ct, pprArisingAt work_loc) work_item_pred_loc = mkPredOrigin (ctLocOrigin work_loc) (ctPred work_ct)
; let fd_eqns = improveFromAnother inert_pred_loc work_item_pred_loc ; let fd_eqns = improveFromAnother inert_pred_loc work_item_pred_loc
; fd_work <- rewriteWithFunDeps fd_eqns work_loc ; fd_work <- rewriteWithFunDeps fd_eqns work_loc
...@@ -1374,17 +1374,17 @@ instFunDepEqn loc (FDEqn { fd_qtvs = tvs, fd_eqs = eqs ...@@ -1374,17 +1374,17 @@ instFunDepEqn loc (FDEqn { fd_qtvs = tvs, fd_eqs = eqs
sty1 = Type.substTy subst ty1 sty1 = Type.substTy subst ty1
sty2 = Type.substTy subst ty2 sty2 = Type.substTy subst ty2
mkEqnMsg :: (TcPredType, SDoc) mkEqnMsg :: PredOrigin -> PredOrigin -> TidyEnv -> TcM (TidyEnv, SDoc)
-> (TcPredType, SDoc) -> TidyEnv -> TcM (TidyEnv, SDoc) mkEqnMsg (PredOrigin pred1 from1) (PredOrigin pred2 from2) tidy_env
mkEqnMsg (pred1,from1) (pred2,from2) tidy_env
= do { zpred1 <- zonkTcPredType pred1 = do { zpred1 <- zonkTcPredType pred1
; zpred2 <- zonkTcPredType pred2 ; zpred2 <- zonkTcPredType pred2
; let { tpred1 = tidyType tidy_env zpred1 ; let { tpred1 = tidyType tidy_env zpred1
; tpred2 = tidyType tidy_env zpred2 } ; tpred2 = tidyType tidy_env zpred2 }
; let msg = vcat [ptext (sLit "When using functional dependencies to combine"), ; let msg = vcat [ptext (sLit "When using functional dependencies to combine"),
nest 2 (sep [ppr tpred1 <> comma, nest 2 from1]), nest 2 (sep [ppr tpred1 <> comma, nest 2 (arr <+> ppr from1)]),
nest 2 (sep [ppr tpred2 <> comma, nest 2 from2])] nest 2 (sep [ppr tpred2 <> comma, nest 2 (arr <+> ppr from2)])]
; return (tidy_env, msg) } ; return (tidy_env, msg) }
where arr = ptext (sLit "arising from")
\end{code} \end{code}
...@@ -1456,7 +1456,6 @@ doTopReactDict inerts fl cls xis ...@@ -1456,7 +1456,6 @@ doTopReactDict inerts fl cls xis
; solve_from_instance wtvs ev_term } ; solve_from_instance wtvs ev_term }
NoInstance -> try_fundeps_and_return } NoInstance -> try_fundeps_and_return }
where where
arising_sdoc = pprArisingAt loc
dict_id = ctEvId fl dict_id = ctEvId fl
pred = mkClassPred cls xis pred = mkClassPred cls xis
loc = ctev_loc fl loc = ctev_loc fl
...@@ -1489,7 +1488,7 @@ doTopReactDict inerts fl cls xis ...@@ -1489,7 +1488,7 @@ doTopReactDict inerts fl cls xis
-- so we make sure we get on and solve it first. See Note [Weird fundeps] -- so we make sure we get on and solve it first. See Note [Weird fundeps]
try_fundeps_and_return try_fundeps_and_return
= do { instEnvs <- getInstEnvs = do { instEnvs <- getInstEnvs
; let fd_eqns = improveFromInstEnv instEnvs (pred, arising_sdoc) ; let fd_eqns = improveFromInstEnv instEnvs (mkPredOrigin (ctLocOrigin loc) pred)
; fd_work <- rewriteWithFunDeps fd_eqns loc ; fd_work <- rewriteWithFunDeps fd_eqns loc
; unless (null fd_work) (updWorkListTcS (extendWorkListEqs fd_work)) ; unless (null fd_work) (updWorkListTcS (extendWorkListEqs fd_work))
; return NoTopInt } ; return NoTopInt }
......
...@@ -72,6 +72,10 @@ module TcRnTypes( ...@@ -72,6 +72,10 @@ module TcRnTypes(
isWanted, isGiven, isDerived, isWanted, isGiven, isDerived,
canRewrite, canRewriteOrSame, canRewrite, canRewriteOrSame,
PredOrigin(..), ThetaOrigin,
mkPredOrigin, mkThetaOrigin,
predOriginPred,
-- Pretty printing -- Pretty printing
pprEvVarTheta, pprWantedsWithLocs, pprEvVarTheta, pprWantedsWithLocs,
pprEvVars, pprEvVarWithType, pprEvVars, pprEvVarWithType,
...@@ -88,7 +92,7 @@ import HsSyn ...@@ -88,7 +92,7 @@ import HsSyn
import HscTypes import HscTypes
import TcEvidence import TcEvidence
import Type import Type
import Class ( Class ) import Class ( Class, FunDep, pprFunDep )
import TyCon ( TyCon ) import TyCon ( TyCon )
import DataCon ( DataCon, dataConUserType, dataConOrigArgTys ) import DataCon ( DataCon, dataConUserType, dataConOrigArgTys )
import TcType import TcType
...@@ -1657,6 +1661,7 @@ pprArisingAt (CtLoc { ctl_origin = o, ctl_env = lcl}) ...@@ -1657,6 +1661,7 @@ pprArisingAt (CtLoc { ctl_origin = o, ctl_env = lcl})
, text "at" <+> ppr (tcl_loc lcl)] , text "at" <+> ppr (tcl_loc lcl)]
\end{code} \end{code}
%************************************************************************ %************************************************************************
%* * %* *
SkolemInfo SkolemInfo
...@@ -1789,6 +1794,7 @@ data CtOrigin ...@@ -1789,6 +1794,7 @@ data CtOrigin
| ProcOrigin -- Arising from a proc expression | ProcOrigin -- Arising from a proc expression
| AnnOrigin -- An annotation | AnnOrigin -- An annotation
| FunDepOrigin | FunDepOrigin
| FunDepInstOrigin (FunDep TyVar) ClsInst
| HoleOrigin | HoleOrigin
| UnboundOccurrenceOf RdrName | UnboundOccurrenceOf RdrName
| ListOrigin -- An overloaded list | ListOrigin -- An overloaded list
...@@ -1831,6 +1837,11 @@ pprO (TypeEqOrigin t1 t2) = ptext (sLit "a type equality") <+> sep [ppr t1, cha ...@@ -1831,6 +1837,11 @@ pprO (TypeEqOrigin t1 t2) = ptext (sLit "a type equality") <+> sep [ppr t1, cha
pprO (KindEqOrigin t1 t2 _) = ptext (sLit "a kind equality arising from") <+> sep [ppr t1, char '~', ppr t2] pprO (KindEqOrigin t1 t2 _) = ptext (sLit "a kind equality arising from") <+> sep [ppr t1, char '~', ppr t2]
pprO AnnOrigin = ptext (sLit "an annotation") pprO AnnOrigin = ptext (sLit "an annotation")
pprO FunDepOrigin = ptext (sLit "a functional dependency") pprO FunDepOrigin = ptext (sLit "a functional dependency")
pprO (FunDepInstOrigin fd ispec) = sep [ ptext (sLit "the dependency") <+>
quotes (pprFunDep fd)
, ptext (sLit "in the instance declaration") <+>
pprNameDefnLoc (getName ispec)
]
pprO HoleOrigin = ptext (sLit "a use of") <+> quotes (ptext $ sLit "_") pprO HoleOrigin = ptext (sLit "a use of") <+> quotes (ptext $ sLit "_")
pprO (UnboundOccurrenceOf name) = hsep [ptext (sLit "an undeclared identifier"), quotes (ppr name)] pprO (UnboundOccurrenceOf name) = hsep [ptext (sLit "an undeclared identifier"), quotes (ppr name)]
pprO ListOrigin = ptext (sLit "an overloaded list") pprO ListOrigin = ptext (sLit "an overloaded list")
...@@ -1839,3 +1850,25 @@ instance Outputable CtOrigin where ...@@ -1839,3 +1850,25 @@ instance Outputable CtOrigin where
ppr = pprO ppr = pprO
\end{code} \end{code}
%************************************************************************
%* *
PredOrigin
%* *
%************************************************************************
\begin{code}
data PredOrigin = PredOrigin PredType CtOrigin
type ThetaOrigin = [PredOrigin]
mkPredOrigin :: CtOrigin -> PredType -> PredOrigin
mkPredOrigin origin pred = PredOrigin pred origin
predOriginPred :: PredOrigin -> PredType
predOriginPred (PredOrigin p _) = p
mkThetaOrigin :: CtOrigin -> ThetaType -> ThetaOrigin
mkThetaOrigin origin = map (mkPredOrigin origin)
instance Outputable PredOrigin where
ppr (PredOrigin ty _) = ppr ty -- The origin is not so interesting when debugging
\end{code}