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
  • nikshalark/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
  • gulin.serge/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
640 results
Show changes
Commits on Source (8)
  • Matthew Pickering's avatar
    hadrian: Flavour: Change args -> extraArgs · 4c37a04a
    Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
    Previously in a flavour definition you could override all the flags
    which were passed to GHC. This causes issues when needed to compute a
    package hash because we need to know what these extra arguments are
    going to be before computing the hash. The solution is to modify flavour
    so that the arguments you pass here are just extra ones rather than all
    the arguments that you need to compile something.
    
    This makes things work more like how cabal.project files work when you
    give extra arguments to a package and also means that flavour
    transformers correctly affect the hash.
    4c37a04a
  • Rodrigo Mesquita's avatar
    Hardwire a better unit-id for ghc · 69527c0f
    Rodrigo Mesquita authored and Marge Bot's avatar Marge Bot committed
    Previously, the unit-id of ghc-the-library was fixed as `ghc`.
    This was done primarily because the compiler must know the unit-id of
    some packages (including ghc) a-priori to define wired-in names.
    
    However, as seen in #20742, a reinstallable `ghc` whose unit-id is fixed
    to `ghc` might result in subtle bugs when different ghc's interact.
    
    A good example of this is having GHC_A load a plugin compiled by GHC_B,
    where GHC_A and GHC_B are linked to ghc-libraries that are ABI
    incompatible. Without a distinction between the unit-id of the ghc library
    GHC_A is linked against and the ghc library the plugin it is loading was
    compiled against, we can't check compatibility.
    
    This patch gives a slightly better unit-id to ghc (ghc-version) by
    (1) Not setting -this-unit-id to ghc, but rather to the new unit-id (modulo stage0)
    (2) Adding a definition to `GHC.Settings.Config` whose value is the new unit-id.
        (2.1) `GHC.Settings.Config` is generated by Hadrian
        (2.2) and also by cabal through `compiler/Setup.hs`
    This unit-id definition is imported by `GHC.Unit.Types` and used to
    set the wired-in unit-id of "ghc", which was previously fixed to "ghc"
    
    The commits following this one will improve the unit-id with a
    cabal-style package hash and check compatibility when loading plugins.
    
    Note that we also ensure that ghc's unit key matches unit id both when
    hadrian or cabal builds ghc, and in this way we no longer need to add
    `ghc` to the WiringMap.
    69527c0f
  • Rodrigo Mesquita's avatar
    Validate compatibility of ghcs when loading plugins · c622035f
    Rodrigo Mesquita authored and Marge Bot's avatar Marge Bot committed
    Ensure, when loading plugins, that the ghc the plugin depends on is the
    ghc loading the plugin -- otherwise fail to load the plugin.
    
    Progress towards #20742.
    c622035f
  • Rodrigo Mesquita's avatar
    Add hashes to unit-ids created by hadrian · 3683bb11
    Rodrigo Mesquita authored and Marge Bot's avatar Marge Bot committed
    This commit adds support for computing an inputs hash for packages
    compiled by hadrian. The result is that ABI incompatible packages should
    be given different hashes and therefore be distinct in a cabal store.
    
    Hashing is enabled by the `--flag`, and is off by default as the hash
    contains a hash of the source files. We enable it when we produce
    release builds so that the artifacts we distribute have the right unit
    ids.
    3683bb11
  • Matthew Pickering's avatar
    Use hash-unit-ids in release jobs · 0861cbff
    Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
    Includes fix upload_ghc_libs glob
    0861cbff
  • Josh Meredith's avatar
    JS: fix bounds checking (Issue 23123) · 2ee60455
    Josh Meredith authored and Marge Bot's avatar Marge Bot committed
    * For ByteArray-based bounds-checking, the JavaScript backend must use the
    `len` field, instead of the inbuild JavaScript `length` field.
    
    * Range-based operations must also check both the start and end of the range
    for bounds
    
    * All indicies are valid for ranges of size zero, since they are essentially no-ops
    
    * For cases of ByteArray accesses (e.g. read as Int), the end index is
    (i * sizeof(type) + sizeof(type) - 1), while the previous implementation
    uses (i + sizeof(type) - 1). In the Int32 example, this is (i * 4 + 3)
    
    * IndexByteArrayOp_Word8As* primitives use byte array indicies (unlike
    the previous point), but now check both start and end indicies
    
    * Byte array copies now check if the arrays are the same by identity and
    then if the ranges overlap.
    2ee60455
  • Sylvain Henry's avatar
    Fix remaining issues with bound checking (#23123) · d928e35b
    Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
    While fixing these I've also changed the way we store addresses into
    ByteArray#. Addr# are composed of two parts: a JavaScript array and an
    offset (32-bit number).
    
    Suppose we want to store an Addr# in a ByteArray# foo at offset i.
    Before this patch, we were storing both fields as a tuple in the "arr"
    array field:
    
      foo.arr[i] = [addr_arr, addr_offset];
    
    Now we only store the array part in the "arr" field and the offset
    directly in the array:
    
      foo.dv.setInt32(i, addr_offset):
      foo.arr[i] = addr_arr;
    
    It avoids wasting space for the tuple.
    d928e35b
  • Krzysztof Gogolewski's avatar
    linear types: Don't add external names to the usage env · a03a6ced
    Krzysztof Gogolewski authored and Marge Bot's avatar Marge Bot committed
    This has no observable effect, but avoids storing useless data.
    a03a6ced
Showing
with 705 additions and 529 deletions
...@@ -760,7 +760,7 @@ nightly arch opsys bc = ...@@ -760,7 +760,7 @@ nightly arch opsys bc =
release :: Arch -> Opsys -> BuildConfig -> NamedJob Job release :: Arch -> Opsys -> BuildConfig -> NamedJob Job
release arch opsys bc = release arch opsys bc =
let NamedJob n j = job arch opsys (bc { buildFlavour = Release }) let NamedJob n j = job arch opsys (bc { buildFlavour = Release })
in NamedJob { name = "release-" ++ n, jobInfo = addJobRule ReleaseOnly . keepArtifacts "1 year" . ignorePerfFailures . highCompression $ j} in NamedJob { name = "release-" ++ n, jobInfo = addJobRule ReleaseOnly . keepArtifacts "1 year" . ignorePerfFailures . useHashUnitIds . highCompression $ j}
-- Specific job modification functions -- Specific job modification functions
...@@ -785,6 +785,9 @@ ignorePerfFailures = addVariable "IGNORE_PERF_FAILURES" "all" ...@@ -785,6 +785,9 @@ ignorePerfFailures = addVariable "IGNORE_PERF_FAILURES" "all"
highCompression :: Job -> Job highCompression :: Job -> Job
highCompression = addVariable "XZ_OPT" "-9" highCompression = addVariable "XZ_OPT" "-9"
useHashUnitIds :: Job -> Job
useHashUnitIds = addVariable "HADRIAN_ARGS" "--hash-unit-ids"
-- | Mark the validate job to run in fast-ci mode -- | Mark the validate job to run in fast-ci mode
fastCI :: JobGroup Job -> JobGroup Job fastCI :: JobGroup Job -> JobGroup Job
fastCI = modifyValidateJobs (addJobRule FastCI) fastCI = modifyValidateJobs (addJobRule FastCI)
......
...@@ -2222,7 +2222,7 @@ ...@@ -2222,7 +2222,7 @@
"BIN_DIST_NAME": "ghc-aarch64-darwin-release", "BIN_DIST_NAME": "ghc-aarch64-darwin-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ", "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LANG": "en_US.UTF-8", "LANG": "en_US.UTF-8",
"MACOSX_DEPLOYMENT_TARGET": "11.0", "MACOSX_DEPLOYMENT_TARGET": "11.0",
...@@ -2286,6 +2286,7 @@ ...@@ -2286,6 +2286,7 @@
"BIN_DIST_NAME": "ghc-aarch64-linux-deb10-release+no_split_sections", "BIN_DIST_NAME": "ghc-aarch64-linux-deb10-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections", "BUILD_FLAVOUR": "release+no_split_sections",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "aarch64-linux-deb10-release+no_split_sections", "TEST_ENV": "aarch64-linux-deb10-release+no_split_sections",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2346,6 +2347,7 @@ ...@@ -2346,6 +2347,7 @@
"BIN_DIST_NAME": "ghc-i386-linux-deb9-release+no_split_sections", "BIN_DIST_NAME": "ghc-i386-linux-deb9-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections", "BUILD_FLAVOUR": "release+no_split_sections",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "i386-linux-deb9-release+no_split_sections", "TEST_ENV": "i386-linux-deb9-release+no_split_sections",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2406,7 +2408,7 @@ ...@@ -2406,7 +2408,7 @@
"BIN_DIST_NAME": "ghc-x86_64-darwin-release", "BIN_DIST_NAME": "ghc-x86_64-darwin-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ", "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LANG": "en_US.UTF-8", "LANG": "en_US.UTF-8",
"MACOSX_DEPLOYMENT_TARGET": "10.10", "MACOSX_DEPLOYMENT_TARGET": "10.10",
...@@ -2473,7 +2475,7 @@ ...@@ -2473,7 +2475,7 @@
"BROKEN_TESTS": "encoding004 T10458 ghcilink002 linker_unload_native", "BROKEN_TESTS": "encoding004 T10458 ghcilink002 linker_unload_native",
"BUILD_FLAVOUR": "release+fully_static", "BUILD_FLAVOUR": "release+fully_static",
"CONFIGURE_ARGS": "--disable-ld-override ", "CONFIGURE_ARGS": "--disable-ld-override ",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override", "INSTALL_CONFIGURE_ARGS": "--disable-ld-override",
"TEST_ENV": "x86_64-linux-alpine3_12-int_native-release+fully_static", "TEST_ENV": "x86_64-linux-alpine3_12-int_native-release+fully_static",
...@@ -2536,7 +2538,7 @@ ...@@ -2536,7 +2538,7 @@
"BROKEN_TESTS": "encoding004 T10458 ghcilink002 linker_unload_native", "BROKEN_TESTS": "encoding004 T10458 ghcilink002 linker_unload_native",
"BUILD_FLAVOUR": "release+fully_static+no_split_sections", "BUILD_FLAVOUR": "release+fully_static+no_split_sections",
"CONFIGURE_ARGS": "--disable-ld-override ", "CONFIGURE_ARGS": "--disable-ld-override ",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override", "INSTALL_CONFIGURE_ARGS": "--disable-ld-override",
"TEST_ENV": "x86_64-linux-alpine3_12-release+fully_static+no_split_sections", "TEST_ENV": "x86_64-linux-alpine3_12-release+fully_static+no_split_sections",
...@@ -2598,7 +2600,7 @@ ...@@ -2598,7 +2600,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-centos7-release+no_split_sections", "BIN_DIST_NAME": "ghc-x86_64-linux-centos7-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections", "BUILD_FLAVOUR": "release+no_split_sections",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-centos7-release+no_split_sections", "TEST_ENV": "x86_64-linux-centos7-release+no_split_sections",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2659,6 +2661,7 @@ ...@@ -2659,6 +2661,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-deb10-release", "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-deb10-release", "TEST_ENV": "x86_64-linux-deb10-release",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2719,6 +2722,7 @@ ...@@ -2719,6 +2722,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-deb10-release+debug_info", "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-release+debug_info",
"BUILD_FLAVOUR": "release+debug_info", "BUILD_FLAVOUR": "release+debug_info",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-deb10-release+debug_info", "TEST_ENV": "x86_64-linux-deb10-release+debug_info",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2779,6 +2783,7 @@ ...@@ -2779,6 +2783,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-release", "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-deb11-release", "TEST_ENV": "x86_64-linux-deb11-release",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2839,6 +2844,7 @@ ...@@ -2839,6 +2844,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-release+boot_nonmoving_gc", "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-release+boot_nonmoving_gc",
"BUILD_FLAVOUR": "release+boot_nonmoving_gc", "BUILD_FLAVOUR": "release+boot_nonmoving_gc",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity", "RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
"TEST_ENV": "x86_64-linux-deb11-release+boot_nonmoving_gc", "TEST_ENV": "x86_64-linux-deb11-release+boot_nonmoving_gc",
...@@ -2900,6 +2906,7 @@ ...@@ -2900,6 +2906,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-deb9-release+no_split_sections", "BIN_DIST_NAME": "ghc-x86_64-linux-deb9-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections", "BUILD_FLAVOUR": "release+no_split_sections",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-deb9-release+no_split_sections", "TEST_ENV": "x86_64-linux-deb9-release+no_split_sections",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -2960,6 +2967,7 @@ ...@@ -2960,6 +2967,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora33-release", "BIN_DIST_NAME": "ghc-x86_64-linux-fedora33-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LLC": "/bin/false", "LLC": "/bin/false",
"OPT": "/bin/false", "OPT": "/bin/false",
...@@ -3022,6 +3030,7 @@ ...@@ -3022,6 +3030,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora33-release+debug_info", "BIN_DIST_NAME": "ghc-x86_64-linux-fedora33-release+debug_info",
"BUILD_FLAVOUR": "release+debug_info", "BUILD_FLAVOUR": "release+debug_info",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LLC": "/bin/false", "LLC": "/bin/false",
"OPT": "/bin/false", "OPT": "/bin/false",
...@@ -3084,7 +3093,7 @@ ...@@ -3084,7 +3093,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora33-release", "BIN_DIST_NAME": "ghc-x86_64-linux-fedora33-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--haddock-base-url", "HADRIAN_ARGS": "--haddock-base-url --hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LLC": "/bin/false", "LLC": "/bin/false",
"OPT": "/bin/false", "OPT": "/bin/false",
...@@ -3147,7 +3156,7 @@ ...@@ -3147,7 +3156,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-rocky8-release", "BIN_DIST_NAME": "ghc-x86_64-linux-rocky8-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-rocky8-release", "TEST_ENV": "x86_64-linux-rocky8-release",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -3208,6 +3217,7 @@ ...@@ -3208,6 +3217,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu18_04-release", "BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu18_04-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-ubuntu18_04-release", "TEST_ENV": "x86_64-linux-ubuntu18_04-release",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -3268,6 +3278,7 @@ ...@@ -3268,6 +3278,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu20_04-release", "BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu20_04-release",
"BUILD_FLAVOUR": "release", "BUILD_FLAVOUR": "release",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--hash-unit-ids",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"TEST_ENV": "x86_64-linux-ubuntu20_04-release", "TEST_ENV": "x86_64-linux-ubuntu20_04-release",
"XZ_OPT": "-9" "XZ_OPT": "-9"
...@@ -3325,7 +3336,7 @@ ...@@ -3325,7 +3336,7 @@
"CABAL_INSTALL_VERSION": "3.8.1.0", "CABAL_INSTALL_VERSION": "3.8.1.0",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"GHC_VERSION": "9.4.3", "GHC_VERSION": "9.4.3",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LANG": "en_US.UTF-8", "LANG": "en_US.UTF-8",
"MSYSTEM": "CLANG64", "MSYSTEM": "CLANG64",
...@@ -3385,7 +3396,7 @@ ...@@ -3385,7 +3396,7 @@
"CABAL_INSTALL_VERSION": "3.8.1.0", "CABAL_INSTALL_VERSION": "3.8.1.0",
"CONFIGURE_ARGS": "", "CONFIGURE_ARGS": "",
"GHC_VERSION": "9.4.3", "GHC_VERSION": "9.4.3",
"HADRIAN_ARGS": "--docs=no-sphinx", "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx",
"IGNORE_PERF_FAILURES": "all", "IGNORE_PERF_FAILURES": "all",
"LANG": "en_US.UTF-8", "LANG": "en_US.UTF-8",
"MSYSTEM": "CLANG64", "MSYSTEM": "CLANG64",
......
...@@ -25,6 +25,7 @@ import tempfile ...@@ -25,6 +25,7 @@ import tempfile
import re import re
import pickle import pickle
import os import os
import glob
WORK_DIR = Path('.upload-libs') WORK_DIR = Path('.upload-libs')
...@@ -152,7 +153,10 @@ def prepare_docs(bindist: Path, pkg: Package): ...@@ -152,7 +153,10 @@ def prepare_docs(bindist: Path, pkg: Package):
cabal_file = pkg.path / f'{pkg.name}.cabal' cabal_file = pkg.path / f'{pkg.name}.cabal'
version = get_version(cabal_file) version = get_version(cabal_file)
assert version is not None assert version is not None
docdir = bindist / 'doc' / 'html' / 'libraries' / (pkg.name + "-" + version) docdir_prefix = bindist / 'doc' / 'html' / 'libraries' / (pkg.name + "-" + version)
docdir = glob.glob(str(docdir_prefix) + "*")[0]
print(docdir)
# Build the documentation tarball from the bindist documentation # Build the documentation tarball from the bindist documentation
stem = f'{pkg.name}-{version}-docs' stem = f'{pkg.name}-{version}-docs'
......
...@@ -3210,7 +3210,7 @@ varCallSiteUsage :: Id -> LintM UsageEnv ...@@ -3210,7 +3210,7 @@ varCallSiteUsage :: Id -> LintM UsageEnv
varCallSiteUsage id = varCallSiteUsage id =
do m <- getUEAliases do m <- getUEAliases
return $ case lookupNameEnv m (getName id) of return $ case lookupNameEnv m (getName id) of
Nothing -> unitUE id OneTy Nothing -> singleUsageUE id
Just id_ue -> id_ue Just id_ue -> id_ue
ensureEqTys :: LintedType -> LintedType -> SDoc -> LintM () ensureEqTys :: LintedType -> LintedType -> SDoc -> LintM ()
......
...@@ -10,13 +10,14 @@ module GHC.Core.UsageEnv ...@@ -10,13 +10,14 @@ module GHC.Core.UsageEnv
, scaleUsage , scaleUsage
, supUE , supUE
, supUEs , supUEs
, unitUE , singleUsageUE
, zeroUE , zeroUE
) where ) where
import Data.Foldable import Data.Foldable
import GHC.Prelude import GHC.Prelude
import GHC.Core.Multiplicity import GHC.Core.Multiplicity
import GHC.Types.Var
import GHC.Types.Name import GHC.Types.Name
import GHC.Types.Name.Env import GHC.Types.Name.Env
import GHC.Utils.Outputable import GHC.Utils.Outputable
...@@ -54,8 +55,13 @@ scaleUsage x (MUsage y) = MUsage $ mkMultMul x y ...@@ -54,8 +55,13 @@ scaleUsage x (MUsage y) = MUsage $ mkMultMul x y
-- For now, we use extra multiplicity Bottom for empty case. -- For now, we use extra multiplicity Bottom for empty case.
data UsageEnv = UsageEnv !(NameEnv Mult) Bool data UsageEnv = UsageEnv !(NameEnv Mult) Bool
unitUE :: NamedThing n => n -> Mult -> UsageEnv -- | Record a single usage of an Id, i.e. {n: 1}
unitUE x w = UsageEnv (unitNameEnv (getName x) w) False -- Exception: We do not record external names (both GlobalIds and top-level LocalIds)
-- because they're not relevant to linearity checking.
singleUsageUE :: Id -> UsageEnv
singleUsageUE x | isExternalName n = zeroUE
| otherwise = UsageEnv (unitNameEnv n OneTy) False
where n = getName x
zeroUE, bottomUE :: UsageEnv zeroUE, bottomUE :: UsageEnv
zeroUE = UsageEnv emptyNameEnv False zeroUE = UsageEnv emptyNameEnv False
......
...@@ -4822,6 +4822,7 @@ compilerInfo dflags ...@@ -4822,6 +4822,7 @@ compilerInfo dflags
("Project Patch Level", cProjectPatchLevel), ("Project Patch Level", cProjectPatchLevel),
("Project Patch Level1", cProjectPatchLevel1), ("Project Patch Level1", cProjectPatchLevel1),
("Project Patch Level2", cProjectPatchLevel2), ("Project Patch Level2", cProjectPatchLevel2),
("Project Unit Id", cProjectUnitId),
("Booter version", cBooterVersion), ("Booter version", cBooterVersion),
("Stage", cStage), ("Stage", cStage),
("Build platform", cBuildPlatformString), ("Build platform", cBuildPlatformString),
......
...@@ -43,11 +43,11 @@ import GHC.Driver.Env ...@@ -43,11 +43,11 @@ import GHC.Driver.Env
import GHCi.RemoteTypes ( HValue ) import GHCi.RemoteTypes ( HValue )
import GHC.Core.Type ( Type, mkTyConTy ) import GHC.Core.Type ( Type, mkTyConTy )
import GHC.Core.TyCo.Compare( eqType ) import GHC.Core.TyCo.Compare( eqType )
import GHC.Core.TyCon ( TyCon ) import GHC.Core.TyCon ( TyCon(tyConName) )
import GHC.Types.SrcLoc ( noSrcSpan ) import GHC.Types.SrcLoc ( noSrcSpan )
import GHC.Types.Name ( Name, nameModule_maybe ) import GHC.Types.Name ( Name, nameModule, nameModule_maybe )
import GHC.Types.Id ( idType ) import GHC.Types.Id ( idType )
import GHC.Types.TyThing import GHC.Types.TyThing
import GHC.Types.Name.Occurrence ( OccName, mkVarOccFS ) import GHC.Types.Name.Occurrence ( OccName, mkVarOccFS )
...@@ -57,8 +57,8 @@ import GHC.Types.Unique.DFM ...@@ -57,8 +57,8 @@ import GHC.Types.Unique.DFM
import GHC.Unit.Finder ( findPluginModule, FindResult(..) ) import GHC.Unit.Finder ( findPluginModule, FindResult(..) )
import GHC.Driver.Config.Finder ( initFinderOpts ) import GHC.Driver.Config.Finder ( initFinderOpts )
import GHC.Driver.Config.Diagnostic ( initIfaceMessageOpts ) import GHC.Driver.Config.Diagnostic ( initIfaceMessageOpts )
import GHC.Unit.Module ( Module, ModuleName ) import GHC.Unit.Module ( Module, ModuleName, thisGhcUnit, GenModule(moduleUnit) )
import GHC.Unit.Module.ModIface ( ModIface_(mi_exports), ModIface ) import GHC.Unit.Module.ModIface
import GHC.Unit.Env import GHC.Unit.Env
import GHC.Utils.Panic import GHC.Utils.Panic
...@@ -175,7 +175,14 @@ loadPlugin' occ_name plugin_name hsc_env mod_name ...@@ -175,7 +175,14 @@ loadPlugin' occ_name plugin_name hsc_env mod_name
Just (name, mod_iface) -> Just (name, mod_iface) ->
do { plugin_tycon <- forceLoadTyCon hsc_env plugin_name do { plugin_tycon <- forceLoadTyCon hsc_env plugin_name
; eith_plugin <- getValueSafely hsc_env name (mkTyConTy plugin_tycon) ; case thisGhcUnit == (moduleUnit . nameModule . tyConName) plugin_tycon of {
False ->
throwGhcExceptionIO (CmdLineError $ showSDoc dflags $ hsep
[ text "The plugin module", ppr mod_name
, text "was built with a compiler that is incompatible with the one loading it"
]) ;
True ->
do { eith_plugin <- getValueSafely hsc_env name (mkTyConTy plugin_tycon)
; case eith_plugin of ; case eith_plugin of
Left actual_type -> Left actual_type ->
throwGhcExceptionIO (CmdLineError $ throwGhcExceptionIO (CmdLineError $
...@@ -186,7 +193,7 @@ loadPlugin' occ_name plugin_name hsc_env mod_name ...@@ -186,7 +193,7 @@ loadPlugin' occ_name plugin_name hsc_env mod_name
, text "did not have the type" , text "did not have the type"
, text "GHC.Plugins.Plugin" , text "GHC.Plugins.Plugin"
, text "as required"]) , text "as required"])
Right (plugin, links, pkgs) -> return (plugin, mod_iface, links, pkgs) } } } Right (plugin, links, pkgs) -> return (plugin, mod_iface, links, pkgs) } } } } }
-- | Force the interfaces for the given modules to be loaded. The 'SDoc' parameter is used -- | Force the interfaces for the given modules to be loaded. The 'SDoc' parameter is used
......
...@@ -138,6 +138,10 @@ genCommonCppDefs profiling = mconcat ...@@ -138,6 +138,10 @@ genCommonCppDefs profiling = mconcat
then "#define MK_PTR(val,offset) (h$c2(h$baseZCGHCziPtrziPtr_con_e, (val), (offset), h$CCS_SYSTEM))\n" then "#define MK_PTR(val,offset) (h$c2(h$baseZCGHCziPtrziPtr_con_e, (val), (offset), h$CCS_SYSTEM))\n"
else "#define MK_PTR(val,offset) (h$c2(h$baseZCGHCziPtrziPtr_con_e, (val), (offset)))\n" else "#define MK_PTR(val,offset) (h$c2(h$baseZCGHCziPtrziPtr_con_e, (val), (offset)))\n"
-- Put Addr# in ByteArray# or at Addr# (same thing)
, "#define PUT_ADDR(a,o,va,vo) if (!(a).arr) (a).arr = []; (a).arr[o] = va; (a).dv.setInt32(o,vo,true);\n"
, "#define GET_ADDR(a,o,ra,ro) var ra = (((a).arr && (a).arr[o]) ? (a).arr[o] : null_); var ro = (a).dv.getInt32(o,true);\n"
-- Data.Maybe.Maybe -- Data.Maybe.Maybe
, "#define HS_NOTHING h$baseZCGHCziMaybeziNothing\n" , "#define HS_NOTHING h$baseZCGHCziMaybeziNothing\n"
, "#define IS_NOTHING(cl) ((cl).f === h$baseZCGHCziMaybeziNothing_con_e)\n" , "#define IS_NOTHING(cl) ((cl).f === h$baseZCGHCziMaybeziNothing_con_e)\n"
......
...@@ -29,7 +29,6 @@ import GHC.Utils.Encoding (zEncodeString) ...@@ -29,7 +29,6 @@ import GHC.Utils.Encoding (zEncodeString)
import GHC.Data.FastString import GHC.Data.FastString
import GHC.Utils.Outputable (renderWithContext, defaultSDocContext, ppr) import GHC.Utils.Outputable (renderWithContext, defaultSDocContext, ppr)
import Data.Maybe
genPrim :: Bool -- ^ Profiling (cost-centres) enabled genPrim :: Bool -- ^ Profiling (cost-centres) enabled
...@@ -527,218 +526,206 @@ genPrim prof bound ty op = case op of ...@@ -527,218 +526,206 @@ genPrim prof bound ty op = case op of
------------------------------ Arrays ------------------------------------------- ------------------------------ Arrays -------------------------------------------
NewArrayOp -> \[r] [l,e] -> PrimInline (newArray r l e) NewArrayOp -> \[r] [l,e] -> PrimInline $ r |= app "h$newArray" [l,e]
ReadArrayOp -> \[r] [a,i] -> PrimInline $ boundsChecked bound a i (r |= a .! i) ReadArrayOp -> \[r] [a,i] -> PrimInline $ bnd_arr bound a i (r |= a .! i)
WriteArrayOp -> \[] [a,i,v] -> PrimInline $ boundsChecked bound a i (a .! i |= v) WriteArrayOp -> \[] [a,i,v] -> PrimInline $ bnd_arr bound a i (a .! i |= v)
SizeofArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length" SizeofArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length"
SizeofMutableArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length" SizeofMutableArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length"
IndexArrayOp -> \[r] [a,i] -> PrimInline $ boundsChecked bound a i (r |= a .! i) IndexArrayOp -> \[r] [a,i] -> PrimInline $ bnd_arr bound a i (r |= a .! i)
UnsafeFreezeArrayOp -> \[r] [a] -> PrimInline $ r |= a UnsafeFreezeArrayOp -> \[r] [a] -> PrimInline $ r |= a
UnsafeThawArrayOp -> \[r] [a] -> PrimInline $ r |= a UnsafeThawArrayOp -> \[r] [a] -> PrimInline $ r |= a
CopyArrayOp -> \[] [a,o1,ma,o2,n] -> CopyArrayOp -> \[] [a,o1,ma,o2,n] ->
PrimInline $ loopBlockS (Int 0) (.<. n) \i -> PrimInline
[ ma .! (Add i o2) |= a .! (Add i o1) $ bnd_arr_range bound a o1 n
, preIncrS i $ bnd_arr_range bound ma o2 n
] $ loopBlockS (Int 0) (.<. n) \i ->
CopyMutableArrayOp -> \[] [a1,o1,a2,o2,n] -> PrimInline $ appS "h$copyMutableArray" [a1,o1,a2,o2,n] [ ma .! (Add i o2) |= a .! (Add i o1)
CloneArrayOp -> \[r] [a,start,n] -> PrimInline $ r |= app "h$sliceArray" [a,start,n] , preIncrS i
CloneMutableArrayOp -> \[r] [a,start,n] -> genPrim prof bound ty CloneArrayOp [r] [a,start,n] ]
FreezeArrayOp -> \[r] [a,start,n] -> PrimInline $ r |= app "h$sliceArray" [a,start,n] CopyMutableArrayOp -> \[] [a1,o1,a2,o2,n] ->
ThawArrayOp -> \[r] [a,start,n] -> PrimInline $ r |= app "h$sliceArray" [a,start,n] PrimInline
CasArrayOp -> \[s,o] [a,i,old,new] -> PrimInline $ $ bnd_arr_range bound a1 o1 n
jVar \x -> mconcat $ bnd_arr_range bound a2 o2 n
[ x |= a .! i $ appS "h$copyMutableArray" [a1,o1,a2,o2,n]
, ifBlockS (x .===. old)
[ o |= new CloneArrayOp -> \[r] [a,start,n] ->
, a .! i |= new PrimInline
, s |= zero_ $ bnd_arr_range bound a start n
] $ r |= app "h$sliceArray" [a,start,n]
[ s |= one_
, o |= x CloneMutableArrayOp -> \[r] [a,start,n] ->
] PrimInline
] $ bnd_arr_range bound a start n
$ r |= app "h$sliceArray" [a,start,n]
FreezeArrayOp -> \[r] [a,start,n] ->
PrimInline
$ bnd_arr_range bound a start n
$ r |= app "h$sliceArray" [a,start,n]
ThawArrayOp -> \[r] [a,start,n] ->
PrimInline
$ bnd_arr_range bound a start n
$ r |= app "h$sliceArray" [a,start,n]
CasArrayOp -> \[s,o] [a,i,old,new] ->
PrimInline
$ bnd_arr bound a i
$ jVar \x -> mconcat
[ x |= a .! i
, ifBlockS (x .===. old)
[ o |= new
, a .! i |= new
, s |= zero_
]
[ s |= one_
, o |= x
]
]
------------------------------ Small Arrays ------------------------------------- ------------------------------ Small Arrays -------------------------------------
NewSmallArrayOp -> \[a] [n,e] -> PrimInline $ a |= app "h$newArray" [n,e] NewSmallArrayOp -> \[a] [n,e] -> PrimInline $ a |= app "h$newArray" [n,e]
ReadSmallArrayOp -> \[r] [a,i] -> PrimInline $ boundsChecked bound a i (r |= a .! i) ReadSmallArrayOp -> \[r] [a,i] -> PrimInline $ bnd_arr bound a i (r |= a .! i)
WriteSmallArrayOp -> \[] [a,i,e] -> PrimInline $ boundsChecked bound a i (a .! i |= e) WriteSmallArrayOp -> \[] [a,i,e] -> PrimInline $ bnd_arr bound a i (a .! i |= e)
SizeofSmallArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length" SizeofSmallArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length"
SizeofSmallMutableArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length" SizeofSmallMutableArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length"
IndexSmallArrayOp -> \[r] [a,i] -> PrimInline $ boundsChecked bound a i (r |= a .! i) IndexSmallArrayOp -> \[r] [a,i] -> PrimInline $ bnd_arr bound a i (r |= a .! i)
UnsafeFreezeSmallArrayOp -> \[r] [a] -> PrimInline $ r |= a UnsafeFreezeSmallArrayOp -> \[r] [a] -> PrimInline $ r |= a
UnsafeThawSmallArrayOp -> \[r] [a] -> PrimInline $ r |= a UnsafeThawSmallArrayOp -> \[r] [a] -> PrimInline $ r |= a
CopySmallArrayOp -> \[] [s,si,d,di,n] -> PrimInline $ CopySmallArrayOp -> \[] [s,si,d,di,n] ->
loopBlockS (Sub n one_) (.>=. zero_) \i -> PrimInline
[ d .! (Add di i) |= s .! (Add si i) $ bnd_arr_range bound s si n
, postDecrS i $ bnd_arr_range bound d di n
$ loopBlockS (Sub n one_) (.>=. zero_) \i ->
[ d .! (Add di i) |= s .! (Add si i)
, postDecrS i
]
CopySmallMutableArrayOp -> \[] [s,si,d,di,n] ->
PrimInline
$ bnd_arr_range bound s si n
$ bnd_arr_range bound d di n
$ appS "h$copyMutableArray" [s,si,d,di,n]
CloneSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray bound r a o n
CloneSmallMutableArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray bound r a o n
FreezeSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray bound r a o n
ThawSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray bound r a o n
CasSmallArrayOp -> \[s,o] [a,i,old,new] ->
PrimInline
$ bnd_arr bound a i
$ jVar \x -> mconcat
[ x |= a .! i
, ifBlockS (x .===. old)
[ o |= new
, a .! i |= new
, s |= zero_
]
[ s |= one_
, o |= x
]
] ]
CopySmallMutableArrayOp -> \[] [s,si,d,di,n] -> PrimInline $ appS "h$copyMutableArray" [s,si,d,di,n]
CloneSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n
CloneSmallMutableArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n
FreezeSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n
ThawSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n
CasSmallArrayOp -> \[s,o] [a,i,old,new] -> PrimInline $ jVar \x -> mconcat
[ x |= a .! i
, ifBlockS (x .===. old)
[ o |= new
, a .! i |= new
, s |= zero_
]
[ s |= one_
, o |= x
]
]
------------------------------- Byte Arrays ------------------------------------- ------------------------------- Byte Arrays -------------------------------------
NewByteArrayOp_Char -> \[r] [l] -> PrimInline (newByteArray r l) NewByteArrayOp_Char -> \[r] [l] -> PrimInline (newByteArray r l)
NewPinnedByteArrayOp_Char -> \[r] [l] -> PrimInline (newByteArray r l) NewPinnedByteArrayOp_Char -> \[r] [l] -> PrimInline (newByteArray r l)
NewAlignedPinnedByteArrayOp_Char -> \[r] [l,_align] -> PrimInline (newByteArray r l) NewAlignedPinnedByteArrayOp_Char -> \[r] [l,_align] -> PrimInline (newByteArray r l)
MutableByteArrayIsPinnedOp -> \[r] [_] -> PrimInline $ r |= one_ MutableByteArrayIsPinnedOp -> \[r] [_] -> PrimInline $ r |= one_
ByteArrayIsPinnedOp -> \[r] [_] -> PrimInline $ r |= one_ ByteArrayIsPinnedOp -> \[r] [_] -> PrimInline $ r |= one_
ByteArrayContents_Char -> \[a,o] [b] -> PrimInline $ mconcat [a |= b, o |= zero_] ByteArrayContents_Char -> \[a,o] [b] -> PrimInline $ mconcat [a |= b, o |= zero_]
MutableByteArrayContents_Char -> \[a,o] [b] -> PrimInline $ mconcat [a |= b, o |= zero_] MutableByteArrayContents_Char -> \[a,o] [b] -> PrimInline $ mconcat [a |= b, o |= zero_]
ShrinkMutableByteArrayOp_Char -> \[] [a,n] -> PrimInline $ appS "h$shrinkMutableByteArray" [a,n] ShrinkMutableByteArrayOp_Char -> \[] [a,n] -> PrimInline $ appS "h$shrinkMutableByteArray" [a,n]
ResizeMutableByteArrayOp_Char -> \[r] [a,n] -> PrimInline $ r |= app "h$resizeMutableByteArray" [a,n] ResizeMutableByteArrayOp_Char -> \[r] [a,n] -> PrimInline $ r |= app "h$resizeMutableByteArray" [a,n]
UnsafeFreezeByteArrayOp -> \[a] [b] -> PrimInline $ a |= b UnsafeFreezeByteArrayOp -> \[a] [b] -> PrimInline $ a |= b
SizeofByteArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "len" SizeofByteArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "len"
SizeofMutableByteArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "len" SizeofMutableByteArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "len"
GetSizeofMutableByteArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "len" GetSizeofMutableByteArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "len"
IndexByteArrayOp_Char -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_u8 a i
IndexByteArrayOp_WideChar -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i IndexByteArrayOp_Char -> \[r] [a,i] -> PrimInline $ bnd_ix8 bound a i $ r |= read_u8 a i
IndexByteArrayOp_Int -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i IndexByteArrayOp_WideChar -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
IndexByteArrayOp_Word -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_u32 a i IndexByteArrayOp_Int -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
IndexByteArrayOp_Addr -> \[r1,r2] [a,i] -> IndexByteArrayOp_Word -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_u32 a i
PrimInline . boundsChecked bound a i $ jVar \t -> mconcat IndexByteArrayOp_Addr -> \[r,o] [a,i] -> PrimInline $ bnd_ix32 bound a i $ read_addr a i r o
[ t |= a .^ "arr" IndexByteArrayOp_Float -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_f32 a i
, ifBlockS (t .&&. t .! (i .<<. two_)) IndexByteArrayOp_Double -> \[r] [a,i] -> PrimInline $ bnd_ix64 bound a i $ r |= read_f64 a i
[ r1 |= t .! (i .<<. two_) .! zero_ IndexByteArrayOp_StablePtr -> \[r,o] [a,i] -> PrimInline $ bnd_ix32 bound a i $ read_stableptr a i r o
, r2 |= t .! (i .<<. two_) .! one_ IndexByteArrayOp_Int8 -> \[r] [a,i] -> PrimInline $ bnd_ix8 bound a i $ r |= read_i8 a i
] IndexByteArrayOp_Int16 -> \[r] [a,i] -> PrimInline $ bnd_ix16 bound a i $ r |= read_i16 a i
[ r1 |= null_ IndexByteArrayOp_Int32 -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
, r2 |= zero_ IndexByteArrayOp_Int64 -> \[h,l] [a,i] -> PrimInline $ bnd_ix64 bound a i $ read_i64 a i h l
] IndexByteArrayOp_Word8 -> \[r] [a,i] -> PrimInline $ bnd_ix8 bound a i $ r |= read_u8 a i
] IndexByteArrayOp_Word16 -> \[r] [a,i] -> PrimInline $ bnd_ix16 bound a i $ r |= read_u16 a i
IndexByteArrayOp_Word32 -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_u32 a i
IndexByteArrayOp_Word64 -> \[h,l] [a,i] -> PrimInline $ bnd_ix64 bound a i $ read_u64 a i h l
ReadByteArrayOp_Char -> \[r] [a,i] -> PrimInline $ bnd_ix8 bound a i $ r |= read_u8 a i
ReadByteArrayOp_WideChar -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
ReadByteArrayOp_Int -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
ReadByteArrayOp_Word -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_u32 a i
ReadByteArrayOp_Addr -> \[r,o] [a,i] -> PrimInline $ bnd_ix32 bound a i $ read_addr a i r o
ReadByteArrayOp_Float -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_f32 a i
ReadByteArrayOp_Double -> \[r] [a,i] -> PrimInline $ bnd_ix64 bound a i $ r |= read_f64 a i
ReadByteArrayOp_StablePtr -> \[r,o] [a,i] -> PrimInline $ bnd_ix32 bound a i $ read_stableptr a i r o
ReadByteArrayOp_Int8 -> \[r] [a,i] -> PrimInline $ bnd_ix8 bound a i $ r |= read_i8 a i
ReadByteArrayOp_Int16 -> \[r] [a,i] -> PrimInline $ bnd_ix16 bound a i $ r |= read_i16 a i
ReadByteArrayOp_Int32 -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
ReadByteArrayOp_Int64 -> \[h,l] [a,i] -> PrimInline $ bnd_ix64 bound a i $ read_i64 a i h l
ReadByteArrayOp_Word8 -> \[r] [a,i] -> PrimInline $ bnd_ix8 bound a i $ r |= read_u8 a i
ReadByteArrayOp_Word16 -> \[r] [a,i] -> PrimInline $ bnd_ix16 bound a i $ r |= read_u16 a i
ReadByteArrayOp_Word32 -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_u32 a i
ReadByteArrayOp_Word64 -> \[h,l] [a,i] -> PrimInline $ bnd_ix64 bound a i $ read_u64 a i h l
WriteByteArrayOp_Char -> \[] [a,i,e] -> PrimInline $ bnd_ix8 bound a i $ write_u8 a i e
WriteByteArrayOp_WideChar -> \[] [a,i,e] -> PrimInline $ bnd_ix32 bound a i $ write_i32 a i e
WriteByteArrayOp_Int -> \[] [a,i,e] -> PrimInline $ bnd_ix32 bound a i $ write_i32 a i e
WriteByteArrayOp_Word -> \[] [a,i,e] -> PrimInline $ bnd_ix32 bound a i $ write_u32 a i e
WriteByteArrayOp_Addr -> \[] [a,i,r,o] -> PrimInline $ bnd_ix32 bound a i $ write_addr a i r o
WriteByteArrayOp_Float -> \[] [a,i,e] -> PrimInline $ bnd_ix32 bound a i $ write_f32 a i e
WriteByteArrayOp_Double -> \[] [a,i,e] -> PrimInline $ bnd_ix64 bound a i $ write_f64 a i e
WriteByteArrayOp_StablePtr -> \[] [a,i,r,o] -> PrimInline $ bnd_ix32 bound a i $ write_stableptr a i r o
WriteByteArrayOp_Int8 -> \[] [a,i,e] -> PrimInline $ bnd_ix8 bound a i $ write_i8 a i e
WriteByteArrayOp_Int16 -> \[] [a,i,e] -> PrimInline $ bnd_ix16 bound a i $ write_i16 a i e
WriteByteArrayOp_Int32 -> \[] [a,i,e] -> PrimInline $ bnd_ix32 bound a i $ write_i32 a i e
WriteByteArrayOp_Int64 -> \[] [a,i,h,l] -> PrimInline $ bnd_ix64 bound a i $ write_i64 a i h l
WriteByteArrayOp_Word8 -> \[] [a,i,e] -> PrimInline $ bnd_ix8 bound a i $ write_u8 a i e
WriteByteArrayOp_Word16 -> \[] [a,i,e] -> PrimInline $ bnd_ix16 bound a i $ write_u16 a i e
WriteByteArrayOp_Word32 -> \[] [a,i,e] -> PrimInline $ bnd_ix32 bound a i $ write_u32 a i e
WriteByteArrayOp_Word64 -> \[] [a,i,h,l] -> PrimInline $ bnd_ix64 bound a i $ write_u64 a i h l
IndexByteArrayOp_Float -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_f32 a i
IndexByteArrayOp_Double -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 7) $ r |= read_f64 a i
IndexByteArrayOp_StablePtr -> \[r1,r2] [a,i] ->
PrimInline . boundsChecked bound a (Add i 3) $ mconcat
[ r1 |= var "h$stablePtrBuf"
, r2 |= read_i32 a i
]
IndexByteArrayOp_Int8 -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_i8 a i
IndexByteArrayOp_Int16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_i16 a i
IndexByteArrayOp_Int32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i
IndexByteArrayOp_Int64 -> \[h,l] [a,i] -> PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ h |= read_i32 a (Add (i .<<. one_) one_)
, l |= read_u32 a (i .<<. one_)
]
IndexByteArrayOp_Word8 -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_u8 a i
IndexByteArrayOp_Word16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_u16 a i
IndexByteArrayOp_Word32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_u32 a i
IndexByteArrayOp_Word64 -> \[h,l] [a,i] -> PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ h |= read_u32 a (Add (i .<<. one_) one_)
, l |= read_u32 a (i .<<. one_)
]
ReadByteArrayOp_Char -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_u8 a i
ReadByteArrayOp_WideChar -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i
ReadByteArrayOp_Int -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i
ReadByteArrayOp_Word -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_u32 a i
ReadByteArrayOp_Addr -> \[r1,r2] [a,i] ->
PrimInline $ jVar \x -> mconcat
[ x |= i .<<. two_
, ifS (a .^ "arr" .&&. a .^ "arr" .! x)
(mconcat [ r1 |= a .^ "arr" .! x .! zero_
, r2 |= a .^ "arr" .! x .! one_
])
(mconcat [r1 |= null_, r2 |= one_])
]
ReadByteArrayOp_Float -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_f32 a i
ReadByteArrayOp_Double -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 7) $ r |= read_f64 a i
ReadByteArrayOp_StablePtr -> \[r1,r2] [a,i] ->
PrimInline . boundsChecked bound a (Add i 3) $ mconcat
[ r1 |= var "h$stablePtrBuf"
, r2 |= read_i32 a i
]
ReadByteArrayOp_Int8 -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_i8 a i
ReadByteArrayOp_Int16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_i16 a i
ReadByteArrayOp_Int32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i
ReadByteArrayOp_Int64 -> \[h,l] [a,i] ->
PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ h |= read_i32 a (Add (i .<<. one_) one_)
, l |= read_u32 a (i .<<. one_)
]
ReadByteArrayOp_Word8 -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_u8 a i
ReadByteArrayOp_Word16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_u16 a i
ReadByteArrayOp_Word32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_u32 a i
ReadByteArrayOp_Word64 -> \[h,l] [a,i] ->
PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ h |= read_u32 a (Add (i .<<. one_) one_)
, l |= read_u32 a (i .<<. one_)
]
WriteByteArrayOp_Char -> \[] [a,i,e] -> PrimInline . boundsChecked bound a i $ write_u8 a i e
WriteByteArrayOp_WideChar -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_i32 a i e
WriteByteArrayOp_Int -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_i32 a i e
WriteByteArrayOp_Word -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_u32 a i e
WriteByteArrayOp_Addr -> \[] [a,i,e1,e2] ->
PrimInline $ mconcat
[ ifS (Not (a .^ "arr")) (a .^ "arr" |= ValExpr (JList [])) mempty
, a .^ "arr" .! (i .<<. two_) |= ValExpr (JList [e1, e2])
]
WriteByteArrayOp_Float -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_f32 a i e
WriteByteArrayOp_Double -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 7) $ write_f64 a i e
WriteByteArrayOp_StablePtr -> \[] [a,i,_e1,e2] -> PrimInline . boundsChecked bound a (Add i 3) $ write_i32 a i e2
WriteByteArrayOp_Int8 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a i $ write_i8 a i e
WriteByteArrayOp_Int16 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 1) $ write_i16 a i e
WriteByteArrayOp_Int32 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_i32 a i e
WriteByteArrayOp_Int64 -> \[] [a,i,e1,e2] ->
PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ write_i32 a (Add (i .<<. one_) one_) e1
, write_u32 a (i .<<. one_) e2
]
WriteByteArrayOp_Word8 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a i $ write_u8 a i e
WriteByteArrayOp_Word16 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 1) $ write_u16 a i e
WriteByteArrayOp_Word32 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_u32 a i e
WriteByteArrayOp_Word64 -> \[] [a,i,h,l] ->
PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ write_u32 a (Add (i .<<. one_) one_) h
, write_u32 a (i .<<. one_) l
]
CompareByteArraysOp -> \[r] [a1,o1,a2,o2,n] -> CompareByteArraysOp -> \[r] [a1,o1,a2,o2,n] ->
PrimInline . boundsChecked bound a1 (Add o1 (Sub n 1)) PrimInline . bnd_ba_range bound a1 o1 n
. boundsChecked bound a2 (Add o2 (Sub n 1)) . bnd_ba_range bound a2 o2 n
$ r |= app "h$compareByteArrays" [a1,o1,a2,o2,n] $ r |= app "h$compareByteArrays" [a1,o1,a2,o2,n]
CopyByteArrayOp -> \[] [a1,o1,a2,o2,n] -> -- We assume the arrays aren't overlapping since they're of different types
PrimInline . boundsChecked bound a1 (Add o1 (Sub n 1)) -- (ByteArray vs MutableByteArray, Addr# vs MutableByteArray#, [Mutable]ByteArray# vs Addr#)
. boundsChecked bound a2 (Add o2 (Sub n 1)) CopyByteArrayOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray False bound a1 o1 a2 o2 n
$ appS "h$copyMutableByteArray" [a1,o1,a2,o2,n] CopyAddrToByteArrayOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray False bound a1 o1 a2 o2 n
CopyMutableByteArrayOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyMutableByteArrayToAddrOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray False bound a1 o1 a2 o2 n
CopyMutableByteArrayNonOverlappingOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyMutableByteArrayNonOverlappingOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray False bound a1 o1 a2 o2 n
CopyByteArrayToAddrOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyAddrToAddrNonOverlappingOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray False bound a1 o1 a2 o2 n
CopyMutableByteArrayToAddrOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyByteArrayToAddrOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray False bound a1 o1 a2 o2 n
CopyAddrToByteArrayOp -> \[] xs@[_ba,_bo,_aa,_ao,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs
CopyAddrToAddrOp -> \[] xs@[_ba,_bo,_aa,_ao,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyMutableByteArrayOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray True bound a1 o1 a2 o2 n
CopyAddrToAddrNonOverlappingOp -> \[] xs@[_ba,_bo,_aa,_ao,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyAddrToAddrOp -> \[] [a1,o1,a2,o2,n] -> copyByteArray True bound a1 o1 a2 o2 n
SetByteArrayOp -> \[] [a,o,n,v] -> SetByteArrayOp -> \[] [a,o,n,v] ->
PrimInline . boundsChecked bound a (Add o (Sub n 1)) $ loopBlockS zero_ (.<. n) \i -> PrimInline . bnd_ba_range bound a o n $ loopBlockS zero_ (.<. n) \i ->
[ write_u8 a (Add o i) v [ write_u8 a (Add o i) v
, postIncrS i , postIncrS i
] ]
SetAddrRangeOp -> \[] xs@[_a,_o,_n,_v] -> genPrim prof bound ty SetByteArrayOp [] xs SetAddrRangeOp -> \[] xs@[_a,_o,_n,_v] -> genPrim prof bound ty SetByteArrayOp [] xs
AtomicReadByteArrayOp_Int -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_i32 a i AtomicReadByteArrayOp_Int -> \[r] [a,i] -> PrimInline $ bnd_ix32 bound a i $ r |= read_i32 a i
AtomicWriteByteArrayOp_Int -> \[] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ write_i32 a i v AtomicWriteByteArrayOp_Int -> \[] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ write_i32 a i v
FetchAddByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ fetchOpByteArray Add r a i v FetchAddByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ fetchOpByteArray Add r a i v
FetchSubByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ fetchOpByteArray Sub r a i v FetchSubByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ fetchOpByteArray Sub r a i v
FetchAndByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ fetchOpByteArray BAnd r a i v FetchAndByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ fetchOpByteArray BAnd r a i v
FetchOrByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ fetchOpByteArray BOr r a i v FetchOrByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ fetchOpByteArray BOr r a i v
FetchNandByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ fetchOpByteArray (\x y -> BNot (BAnd x y)) r a i v FetchNandByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ fetchOpByteArray (\x y -> BNot (BAnd x y)) r a i v
FetchXorByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline . boundsChecked bound a (Add i 3) $ fetchOpByteArray BXor r a i v FetchXorByteArrayOp_Int -> \[r] [a,i,v] -> PrimInline $ bnd_ix32 bound a i $ fetchOpByteArray BXor r a i v
------------------------------- Addr# ------------------------------------------ ------------------------------- Addr# ------------------------------------------
...@@ -756,107 +743,58 @@ genPrim prof bound ty op = case op of ...@@ -756,107 +743,58 @@ genPrim prof bound ty op = case op of
------------------------------- Addr Indexing: Unboxed Arrays ------------------- ------------------------------- Addr Indexing: Unboxed Arrays -------------------
IndexOffAddrOp_Char -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off8 o i) $ c |= read_boff_u8 a (off8 o i) IndexOffAddrOp_Char -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u8 a (off8 o i)
IndexOffAddrOp_WideChar -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_i32 a (off32 o i) IndexOffAddrOp_WideChar -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i32 a (off32 o i)
IndexOffAddrOp_Int -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_i32 a (off32 o i) IndexOffAddrOp_Int -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i32 a (off32 o i)
IndexOffAddrOp_Word -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_u32 a (off32 o i) IndexOffAddrOp_Word -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u32 a (off32 o i)
IndexOffAddrOp_Addr -> \[ca,co] [a,o,i] -> IndexOffAddrOp_Addr -> \[ra,ro] [a,o,i] -> PrimInline $ read_boff_addr a (off32 o i) ra ro
PrimInline . boundsChecked bound (a .^ "arr") (off32 o i) IndexOffAddrOp_Float -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_f32 a (off32 o i)
$ ifBlockS (a .^ "arr " .&&. a .^ "arr" .! (i .<<. two_)) IndexOffAddrOp_Double -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_f64 a (off64 o i)
[ ca |= a .^ "arr" .! (off32 o i) .! zero_ IndexOffAddrOp_StablePtr -> \[ra,ro] [a,o,i] -> PrimInline $ read_boff_stableptr a (off32 o i) ra ro
, co |= a .^ "arr" .! (off32 o i) .! one_ IndexOffAddrOp_Int8 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i8 a (off8 o i)
] IndexOffAddrOp_Int16 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i16 a (off16 o i)
[ ca |= null_ IndexOffAddrOp_Int32 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i32 a (off32 o i)
, co |= zero_ IndexOffAddrOp_Int64 -> \[h,l] [a,o,i] -> PrimInline $ read_boff_i64 a (off64 o i) h l
] IndexOffAddrOp_Word8 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u8 a (off8 o i)
IndexOffAddrOp_Float -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_f32 a (off32 o i) IndexOffAddrOp_Word16 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u16 a (off16 o i)
IndexOffAddrOp_Double -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off64 o i) $ c |= read_boff_f64 a (off64 o i) IndexOffAddrOp_Word32 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u32 a (off32 o i)
IndexOffAddrOp_StablePtr -> \[c1,c2] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ mconcat IndexOffAddrOp_Word64 -> \[h,l] [a,o,i] -> PrimInline $ read_boff_u64 a (off64 o i) h l
[ c1 |= var "h$stablePtrBuf"
, c2 |= read_boff_i32 a (off32 o i) ReadOffAddrOp_Char -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u8 a (off8 o i)
] ReadOffAddrOp_WideChar -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i32 a (off32 o i)
IndexOffAddrOp_Int8 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off8 o i) $ c |= read_boff_i8 a (off8 o i) ReadOffAddrOp_Int -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i32 a (off32 o i)
IndexOffAddrOp_Int16 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off16 o i) $ c |= read_boff_i16 a (off16 o i) ReadOffAddrOp_Word -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u32 a (off32 o i)
IndexOffAddrOp_Int32 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_i32 a (off32 o i) ReadOffAddrOp_Addr -> \[ra,ro] [a,o,i] -> PrimInline $ read_boff_addr a (off32 o i) ra ro
IndexOffAddrOp_Int64 -> \[h,l] [a,o,i] -> ReadOffAddrOp_Float -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_f32 a (off32 o i)
PrimInline $ mconcat ReadOffAddrOp_Double -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_f64 a (off64 o i)
[ h |= read_boff_i32 a (Add (off64 o i) (Int 4)) ReadOffAddrOp_StablePtr -> \[ra,ro] [a,o,i] -> PrimInline $ read_boff_stableptr a (off32 o i) ra ro
, l |= read_boff_u32 a (off64 o i) ReadOffAddrOp_Int8 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i8 a (off8 o i)
] ReadOffAddrOp_Int16 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i16 a (off16 o i)
IndexOffAddrOp_Word8 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off8 o i) $ c |= read_boff_u8 a (off8 o i) ReadOffAddrOp_Int32 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_i32 a (off32 o i)
IndexOffAddrOp_Word16 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off16 o i) $ c |= read_boff_u16 a (off16 o i) ReadOffAddrOp_Int64 -> \[h,l] [a,o,i] -> PrimInline $ read_boff_i64 a (off64 o i) h l
IndexOffAddrOp_Word32 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_u32 a (off32 o i) ReadOffAddrOp_Word8 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u8 a (off8 o i)
IndexOffAddrOp_Word64 -> \[h,l] [a,o,i] -> ReadOffAddrOp_Word16 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u16 a (off16 o i)
PrimInline $ mconcat ReadOffAddrOp_Word32 -> \[r] [a,o,i] -> PrimInline $ r |= read_boff_u32 a (off32 o i)
[ h |= read_boff_u32 a (Add (off64 o i) (Int 4)) ReadOffAddrOp_Word64 -> \[h,l] [a,o,i] -> PrimInline $ read_boff_u64 a (off64 o i) h l
, l |= read_boff_u32 a (off64 o i)
] WriteOffAddrOp_Char -> \[] [a,o,i,v] -> PrimInline $ write_boff_u8 a (off8 o i) v
ReadOffAddrOp_Char -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off8 o i) $ c |= read_boff_u8 a (off8 o i) WriteOffAddrOp_WideChar -> \[] [a,o,i,v] -> PrimInline $ write_boff_i32 a (off32 o i) v
ReadOffAddrOp_WideChar -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_i32 a (off32 o i) WriteOffAddrOp_Int -> \[] [a,o,i,v] -> PrimInline $ write_boff_i32 a (off32 o i) v
ReadOffAddrOp_Int -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_i32 a (off32 o i) WriteOffAddrOp_Word -> \[] [a,o,i,v] -> PrimInline $ write_boff_u32 a (off32 o i) v
ReadOffAddrOp_Word -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_u32 a (off32 o i) WriteOffAddrOp_Addr -> \[] [a,o,i,va,vo] -> PrimInline $ write_boff_addr a (off32 o i) va vo
ReadOffAddrOp_Addr -> \[c1,c2] [a,o,i] -> WriteOffAddrOp_Float -> \[] [a,o,i,v] -> PrimInline $ write_boff_f32 a (off32 o i) v
PrimInline $ jVar \x -> mconcat WriteOffAddrOp_Double -> \[] [a,o,i,v] -> PrimInline $ write_boff_f64 a (off64 o i) v
[ x |= i .<<. two_ WriteOffAddrOp_StablePtr -> \[] [a,o,i,va,vo] -> PrimInline $ write_boff_stableptr a (off32 o i) va vo
, boundsChecked bound (a .^ "arr") (Add o x) $ WriteOffAddrOp_Int8 -> \[] [a,o,i,v] -> PrimInline $ write_boff_i8 a (off8 o i) v
ifBlockS (a .^ "arr" .&&. a .^ "arr" .! (Add o x)) WriteOffAddrOp_Int16 -> \[] [a,o,i,v] -> PrimInline $ write_boff_i16 a (off16 o i) v
[ c1 |= a .^ "arr" .! (Add o x) .! zero_ WriteOffAddrOp_Int32 -> \[] [a,o,i,v] -> PrimInline $ write_boff_i32 a (off32 o i) v
, c2 |= a .^ "arr" .! (Add o x) .! one_ WriteOffAddrOp_Int64 -> \[] [a,o,i,h,l] -> PrimInline $ write_boff_i64 a (off64 o i) h l
] WriteOffAddrOp_Word8 -> \[] [a,o,i,v] -> PrimInline $ write_boff_u8 a (off8 o i) v
[ c1 |= null_ WriteOffAddrOp_Word16 -> \[] [a,o,i,v] -> PrimInline $ write_boff_u16 a (off16 o i) v
, c2 |= zero_ WriteOffAddrOp_Word32 -> \[] [a,o,i,v] -> PrimInline $ write_boff_u32 a (off32 o i) v
] WriteOffAddrOp_Word64 -> \[] [a,o,i,h,l] -> PrimInline $ write_boff_u64 a (off64 o i) h l
]
ReadOffAddrOp_Float -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ c |= read_boff_f32 a (off32 o i) ------------------------------- Mutable varialbes --------------------------------------
ReadOffAddrOp_Double -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off64 o i) $ c |= read_boff_f64 a (off64 o i)
ReadOffAddrOp_StablePtr -> \[c1,c2] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ mconcat
[ c1 |= var "h$stablePtrBuf"
, c2 |= read_boff_u32 a (off32 o i)
]
ReadOffAddrOp_Int8 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off8 o i) $ AssignStat c $ read_boff_i8 a (off8 o i)
ReadOffAddrOp_Int16 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off16 o i) $ AssignStat c $ read_boff_i16 a (off16 o i)
ReadOffAddrOp_Int32 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ AssignStat c $ read_boff_i32 a (off32 o i)
ReadOffAddrOp_Int64 -> \[h,l] [a,o,i] ->
PrimInline $ mconcat
[ h |= read_i32 a (Add (off64 o i) (Int 4))
, l |= read_u32 a (off64 o i)
]
ReadOffAddrOp_Word8 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off8 o i) $ AssignStat c $ read_boff_u8 a (off8 o i)
ReadOffAddrOp_Word16 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off16 o i) $ AssignStat c $ read_boff_u16 a (off16 o i)
ReadOffAddrOp_Word32 -> \[c] [a,o,i] -> PrimInline . boundsChecked bound a (off32 o i) $ AssignStat c $ read_boff_u32 a (off32 o i)
ReadOffAddrOp_Word64 -> \[c1,c2] [a,o,i] ->
PrimInline $ mconcat
[ c1 |= read_boff_u32 a (Add (off64 o i) (Int 4))
, c2 |= read_boff_u32 a (off64 o i)
]
WriteOffAddrOp_Char -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off8 o i) $ write_boff_u8 a (off8 o i) v
WriteOffAddrOp_WideChar -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_i32 a (off32 o i) v
WriteOffAddrOp_Int -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_i32 a (off32 o i) v
WriteOffAddrOp_Word -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_u32 a (off32 o i) v
WriteOffAddrOp_Addr -> \[] [a,o,i,va,vo] ->
PrimInline $ mconcat
[ ifS (Not (a .^ "arr")) (a .^ "arr" |= ValExpr (JList [])) mempty
, boundsChecked bound (a .^ "arr") (off32 o i) $
AssignStat (a .^ "arr" .! (off32 o i)) $ ValExpr (JList [va, vo])
]
WriteOffAddrOp_Float -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_f32 a (off32 o i) v
WriteOffAddrOp_Double -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off64 o i) $ write_boff_f64 a (off64 o i) v
WriteOffAddrOp_StablePtr -> \[] [a,o,i,_v1,v2] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_u32 a (off32 o i) v2
WriteOffAddrOp_Int8 -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off8 o i) $ write_boff_i8 a (off8 o i) v
WriteOffAddrOp_Int16 -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off16 o i) $ write_boff_i16 a (off16 o i) v
WriteOffAddrOp_Int32 -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_i32 a (off32 o i) v
WriteOffAddrOp_Int64 -> \[] [a,o,i,v1,v2] -> PrimInline . boundsChecked bound a (off64 o i) $ mconcat
[ write_boff_i32 a (Add (off64 o i) (Int 4)) v1
, write_boff_u32 a (off64 o i) v2
]
WriteOffAddrOp_Word8 -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off8 o i) $ write_boff_u8 a (off8 o i) v
WriteOffAddrOp_Word16 -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off16 o i) $ write_boff_u16 a (off16 o i) v
WriteOffAddrOp_Word32 -> \[] [a,o,i,v] -> PrimInline . boundsChecked bound a (off32 o i) $ write_boff_u32 a (off32 o i) v
WriteOffAddrOp_Word64 -> \[] [a,o,i,v1,v2] -> PrimInline . boundsChecked bound a (off64 o i) $ mconcat
[ write_boff_u32 a (Add (off64 o i) (Int 4)) v1
, write_boff_u32 a (off64 o i) v2
]
-- Mutable variables
NewMutVarOp -> \[r] [x] -> PrimInline $ r |= New (app "h$MutVar" [x]) NewMutVarOp -> \[r] [x] -> PrimInline $ r |= New (app "h$MutVar" [x])
ReadMutVarOp -> \[r] [m] -> PrimInline $ r |= m .^ "val" ReadMutVarOp -> \[r] [m] -> PrimInline $ r |= m .^ "val"
WriteMutVarOp -> \[] [m,x] -> PrimInline $ m .^ "val" |= x WriteMutVarOp -> \[] [m,x] -> PrimInline $ m .^ "val" |= x
...@@ -917,17 +855,17 @@ genPrim prof bound ty op = case op of ...@@ -917,17 +855,17 @@ genPrim prof bound ty op = case op of
------------------------------- Concurrency Primitives ------------------------- ------------------------------- Concurrency Primitives -------------------------
ForkOp -> \[_tid] [x] -> PRPrimCall $ returnS (app "h$fork" [x, true_]) ForkOp -> \[_tid] [x] -> PRPrimCall $ returnS (app "h$fork" [x, true_])
ForkOnOp -> \[_tid] [_p,x] -> PRPrimCall $ returnS (app "h$fork" [x, true_]) -- ignore processor argument ForkOnOp -> \[_tid] [_p,x] -> PRPrimCall $ returnS (app "h$fork" [x, true_]) -- ignore processor argument
KillThreadOp -> \[] [tid,ex] -> PRPrimCall $ returnS (app "h$killThread" [tid,ex]) KillThreadOp -> \[] [tid,ex] -> PRPrimCall $ returnS (app "h$killThread" [tid,ex])
YieldOp -> \[] [] -> PRPrimCall $ returnS (app "h$yield" []) YieldOp -> \[] [] -> PRPrimCall $ returnS (app "h$yield" [])
MyThreadIdOp -> \[r] [] -> PrimInline $ r |= var "h$currentThread" MyThreadIdOp -> \[r] [] -> PrimInline $ r |= var "h$currentThread"
IsCurrentThreadBoundOp -> \[r] [] -> PrimInline $ r |= one_ IsCurrentThreadBoundOp -> \[r] [] -> PrimInline $ r |= one_
NoDuplicateOp -> \[] [] -> PrimInline mempty -- don't need to do anything as long as we have eager blackholing NoDuplicateOp -> \[] [] -> PrimInline mempty -- don't need to do anything as long as we have eager blackholing
ThreadStatusOp -> \[stat,cap,locked] [tid] -> PrimInline $ appT [stat, cap, locked] "h$threadStatus" [tid] ThreadStatusOp -> \[stat,cap,locked] [tid] -> PrimInline $ appT [stat, cap, locked] "h$threadStatus" [tid]
ListThreadsOp -> \[r] [] -> PrimInline $ appT [r] "h$listThreads" [] ListThreadsOp -> \[r] [] -> PrimInline $ appT [r] "h$listThreads" []
GetThreadLabelOp -> \[r1, r2] [t] -> PrimInline $ appT [r1, r2] "h$getThreadLabel" [t] GetThreadLabelOp -> \[r1, r2] [t] -> PrimInline $ appT [r1, r2] "h$getThreadLabel" [t]
LabelThreadOp -> \[] [t,l] -> PrimInline $ t .^ "label" |= l LabelThreadOp -> \[] [t,l] -> PrimInline $ t .^ "label" |= l
------------------------------- Weak Pointers ----------------------------------- ------------------------------- Weak Pointers -----------------------------------
...@@ -1031,184 +969,82 @@ genPrim prof bound ty op = case op of ...@@ -1031,184 +969,82 @@ genPrim prof bound ty op = case op of
TraceEventBinaryOp -> \[] [ed,eo,len] -> PrimInline $ appS "h$traceEventBinary" [ed,eo,len] TraceEventBinaryOp -> \[] [ed,eo,len] -> PrimInline $ appS "h$traceEventBinary" [ed,eo,len]
TraceMarkerOp -> \[] [ed,eo] -> PrimInline $ appS "h$traceMarker" [ed,eo] TraceMarkerOp -> \[] [ed,eo] -> PrimInline $ appS "h$traceMarker" [ed,eo]
IndexByteArrayOp_Word8AsChar -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_boff_u8 a i ------------------------------ ByteArray -------------------
IndexByteArrayOp_Word8AsWideChar -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_i32 a i
IndexByteArrayOp_Word8AsAddr -> \[r1,r2] [a,i] -> IndexByteArrayOp_Word8AsChar -> \[r] [a,i] -> PrimInline $ bnd_ba8 bound a i $ r |= read_boff_u8 a i
PrimInline $ jVar \x -> mconcat IndexByteArrayOp_Word8AsWideChar -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_i32 a i
[ x |= i .<<. two_ IndexByteArrayOp_Word8AsAddr -> \[r,o] [a,i] -> PrimInline $ bnd_ba32 bound a i $ read_boff_addr a i r o
, boundsChecked bound (a .^ "arr") x $ IndexByteArrayOp_Word8AsFloat -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_f32 a i
ifS (a .^ "arr" .&&. a .^ "arr" .! x) IndexByteArrayOp_Word8AsDouble -> \[r] [a,i] -> PrimInline $ bnd_ba64 bound a i $ r |= read_boff_f64 a i
(mconcat [ r1 |= a .^ "arr" .! x .! zero_ IndexByteArrayOp_Word8AsStablePtr -> \[r,o] [a,i] -> PrimInline $ bnd_ba32 bound a i $ read_boff_stableptr a i r o
, r2 |= a .^ "arr" .! x .! one_ IndexByteArrayOp_Word8AsInt16 -> \[r] [a,i] -> PrimInline $ bnd_ba16 bound a i $ r |= read_boff_i16 a i
]) IndexByteArrayOp_Word8AsInt32 -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_i32 a i
(mconcat [r1 |= null_, r2 |= one_]) IndexByteArrayOp_Word8AsInt64 -> \[h,l] [a,i] -> PrimInline $ bnd_ba64 bound a i $ read_boff_i64 a i h l
] IndexByteArrayOp_Word8AsInt -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_i32 a i
IndexByteArrayOp_Word8AsFloat -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_f32 a i IndexByteArrayOp_Word8AsWord16 -> \[r] [a,i] -> PrimInline $ bnd_ba16 bound a i $ r |= read_boff_u16 a i
IndexByteArrayOp_Word8AsDouble -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 7) $ r |= read_boff_f64 a i IndexByteArrayOp_Word8AsWord32 -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_u32 a i
IndexByteArrayOp_Word8AsStablePtr -> \[r1,r2] [a,i] -> IndexByteArrayOp_Word8AsWord64 -> \[h,l] [a,i] -> PrimInline $ bnd_ba64 bound a i $ read_boff_u64 a i h l
PrimInline $ mconcat IndexByteArrayOp_Word8AsWord -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_u32 a i
[ r1 |= var "h$stablePtrBuf"
, r2 |= read_boff_i32 a i ReadByteArrayOp_Word8AsChar -> \[r] [a,i] -> PrimInline $ bnd_ba8 bound a i $ r |= read_boff_u8 a i
] ReadByteArrayOp_Word8AsWideChar -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_i32 a i
IndexByteArrayOp_Word8AsInt16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_boff_i16 a i ReadByteArrayOp_Word8AsAddr -> \[r,o] [a,i] -> PrimInline $ bnd_ba32 bound a i $ read_boff_addr a i r o
IndexByteArrayOp_Word8AsInt32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_i32 a i ReadByteArrayOp_Word8AsFloat -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_f32 a i
IndexByteArrayOp_Word8AsInt64 -> \[h,l] [a,i] -> ReadByteArrayOp_Word8AsDouble -> \[r] [a,i] -> PrimInline $ bnd_ba64 bound a i $ r |= read_boff_f64 a i
PrimInline $ mconcat ReadByteArrayOp_Word8AsStablePtr -> \[r,o] [a,i] -> PrimInline $ bnd_ba32 bound a i $ read_boff_stableptr a i r o
[ h |= read_boff_i32 a (Add i (Int 4)) ReadByteArrayOp_Word8AsInt16 -> \[r] [a,i] -> PrimInline $ bnd_ba16 bound a i $ r |= read_boff_i16 a i
, l |= read_boff_u32 a i ReadByteArrayOp_Word8AsInt32 -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_i32 a i
] ReadByteArrayOp_Word8AsInt64 -> \[h,l] [a,i] -> PrimInline $ bnd_ba64 bound a i $ read_boff_i64 a i h l
IndexByteArrayOp_Word8AsInt -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_i32 a i ReadByteArrayOp_Word8AsInt -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_i32 a i
IndexByteArrayOp_Word8AsWord16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_boff_u16 a i ReadByteArrayOp_Word8AsWord16 -> \[r] [a,i] -> PrimInline $ bnd_ba16 bound a i $ r |= read_boff_u16 a i
IndexByteArrayOp_Word8AsWord32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_u32 a i ReadByteArrayOp_Word8AsWord32 -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_u32 a i
IndexByteArrayOp_Word8AsWord64 -> \[h,l] [a,i] -> ReadByteArrayOp_Word8AsWord64 -> \[h,l] [a,i] -> PrimInline $ bnd_ba64 bound a i $ read_boff_u64 a i h l
PrimInline . boundsChecked bound a (Add i 7) $ mconcat ReadByteArrayOp_Word8AsWord -> \[r] [a,i] -> PrimInline $ bnd_ba32 bound a i $ r |= read_boff_u32 a i
[ h |= read_boff_u32 a (Add i (Int 4))
, l |= read_boff_u32 a i WriteByteArrayOp_Word8AsChar -> \[] [a,i,e] -> PrimInline $ bnd_ba8 bound a i $ write_boff_i8 a i e
] WriteByteArrayOp_Word8AsWideChar -> \[] [a,i,e] -> PrimInline $ bnd_ba32 bound a i $ write_boff_i32 a i e
IndexByteArrayOp_Word8AsWord -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_u32 a i WriteByteArrayOp_Word8AsAddr -> \[] [a,i,r,o] -> PrimInline $ bnd_ba32 bound a i $ write_boff_addr a i r o
WriteByteArrayOp_Word8AsFloat -> \[] [a,i,e] -> PrimInline $ bnd_ba32 bound a i $ write_boff_f32 a i e
ReadByteArrayOp_Word8AsChar -> \[r] [a,i] -> PrimInline . boundsChecked bound a i $ r |= read_boff_u8 a i WriteByteArrayOp_Word8AsDouble -> \[] [a,i,e] -> PrimInline $ bnd_ba64 bound a i $ write_boff_f64 a i e
ReadByteArrayOp_Word8AsWideChar -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_i32 a i WriteByteArrayOp_Word8AsStablePtr -> \[] [a,i,_,o] -> PrimInline $ bnd_ba32 bound a i $ write_boff_i32 a i o
ReadByteArrayOp_Word8AsAddr -> \[r1,r2] [a,i] -> WriteByteArrayOp_Word8AsInt16 -> \[] [a,i,e] -> PrimInline $ bnd_ba16 bound a i $ write_boff_i16 a i e
PrimInline $ jVar \x -> mconcat WriteByteArrayOp_Word8AsInt32 -> \[] [a,i,e] -> PrimInline $ bnd_ba32 bound a i $ write_boff_i32 a i e
[ x |= i .<<. two_ WriteByteArrayOp_Word8AsInt64 -> \[] [a,i,h,l] -> PrimInline $ bnd_ba64 bound a i $ write_boff_i64 a i h l
, boundsChecked bound (a .^ "arr") x $ WriteByteArrayOp_Word8AsInt -> \[] [a,i,e] -> PrimInline $ bnd_ba32 bound a i $ write_boff_i32 a i e
ifS (a .^ "arr" .&&. a .^ "arr" .! x) WriteByteArrayOp_Word8AsWord16 -> \[] [a,i,e] -> PrimInline $ bnd_ba16 bound a i $ write_boff_u16 a i e
(mconcat [ r1 |= a .^ "arr" .! x .! zero_ WriteByteArrayOp_Word8AsWord32 -> \[] [a,i,e] -> PrimInline $ bnd_ba32 bound a i $ write_boff_u32 a i e
, r2 |= a .^ "arr" .! x .! one_ WriteByteArrayOp_Word8AsWord64 -> \[] [a,i,h,l] -> PrimInline $ bnd_ba64 bound a i $ write_boff_u64 a i h l
]) WriteByteArrayOp_Word8AsWord -> \[] [a,i,e] -> PrimInline $ bnd_ba32 bound a i $ write_boff_u32 a i e
(mconcat [r1 |= null_, r2 |= one_])
] CasByteArrayOp_Int -> \[r] [a,i,o,n] -> PrimInline $ bnd_ix32 bound a i $ casOp read_i32 write_i32 r a i o n
ReadByteArrayOp_Word8AsFloat -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_f32 a i CasByteArrayOp_Int8 -> \[r] [a,i,o,n] -> PrimInline $ bnd_ix8 bound a i $ casOp read_i8 write_i8 r a i o n
ReadByteArrayOp_Word8AsDouble -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 7) $ r |= read_boff_f64 a i CasByteArrayOp_Int16 -> \[r] [a,i,o,n] -> PrimInline $ bnd_ix16 bound a i $ casOp read_i16 write_i16 r a i o n
ReadByteArrayOp_Word8AsStablePtr -> \[r1,r2] [a,i] -> CasByteArrayOp_Int32 -> \[r] [a,i,o,n] -> PrimInline $ bnd_ix32 bound a i $ casOp read_i32 write_i32 r a i o n
PrimInline $ mconcat
[ r1 |= var "h$stablePtrBuf" CasByteArrayOp_Int64 -> \[rh,rl] [a,i,oh,ol,nh,nl] -> PrimInline $ bnd_ix64 bound a i $ casOp2 read_i64 write_i64 (rh,rl) a i (oh,ol) (nh,nl)
, r2 |= read_boff_i32 a i
] CasAddrOp_Addr -> \[ra,ro] [a,o,oa,oo,na,no] -> PrimInline $ casOp2 read_boff_addr write_boff_addr (ra,ro) a o (oa,oo) (na,no)
ReadByteArrayOp_Word8AsInt16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_boff_i16 a i
ReadByteArrayOp_Word8AsInt32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_i32 a i
ReadByteArrayOp_Word8AsInt64 -> \[h,l] [a,i] ->
PrimInline $ mconcat
[ h |= read_boff_i32 a (Add i (Int 4))
, l |= read_boff_u32 a i
]
ReadByteArrayOp_Word8AsInt -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_i32 a i
ReadByteArrayOp_Word8AsWord16 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 1) $ r |= read_boff_u16 a i
ReadByteArrayOp_Word8AsWord32 -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_u32 a i
ReadByteArrayOp_Word8AsWord64 -> \[h,l] [a,i] ->
PrimInline . boundsChecked bound a (Add i 7) $ mconcat
[ h |= read_boff_u32 a (Add i (Int 4))
, l |= read_boff_u32 a i
]
ReadByteArrayOp_Word8AsWord -> \[r] [a,i] -> PrimInline . boundsChecked bound a (Add i 3) $ r |= read_boff_u32 a i
WriteByteArrayOp_Word8AsChar -> \[] [a,i,e] -> PrimInline . boundsChecked bound a i $ write_boff_i8 a i e
WriteByteArrayOp_Word8AsWideChar -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_i32 a i e
WriteByteArrayOp_Word8AsAddr -> \[] [a,i,e1,e2] ->
PrimInline $ mconcat
[ ifS (Not (a .^ "arr")) (a .^ "arr" |= ValExpr (JList [])) mempty
, boundsChecked bound (a .^ "arr") (i .<<. two_) $
a .^ "arr" .! (i .<<. two_) |= ValExpr (JList [e1, e2])
]
WriteByteArrayOp_Word8AsFloat -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_f32 a i e
WriteByteArrayOp_Word8AsDouble -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 7) $ write_boff_f64 a i e
WriteByteArrayOp_Word8AsStablePtr -> \[] [a,i,_e1,e2] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_i32 a i e2
WriteByteArrayOp_Word8AsInt16 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 1) $ write_boff_i16 a i e
WriteByteArrayOp_Word8AsInt32 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_i32 a i e
WriteByteArrayOp_Word8AsInt64 -> \[] [a,i,h,l] ->
-- JS Numbers are little-endian and 32-bit, so write the lower 4 bytes at i
-- then write the higher 4 bytes to i+4
PrimInline . boundsChecked bound a i
$ mconcat [ write_boff_i32 a (Add i (Int 4)) h
, write_boff_u32 a i l
]
WriteByteArrayOp_Word8AsInt -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_i32 a i e
WriteByteArrayOp_Word8AsWord16 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 1) $ write_boff_u16 a i e
WriteByteArrayOp_Word8AsWord32 -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_u32 a i e
WriteByteArrayOp_Word8AsWord64 -> \[] [a,i,h,l] ->
PrimInline . boundsChecked bound a (Add i 7)
$ mconcat [ write_boff_u32 a (Add i (Int 4)) h
, write_boff_u32 a i l
]
WriteByteArrayOp_Word8AsWord -> \[] [a,i,e] -> PrimInline . boundsChecked bound a (Add i 3) $ write_boff_u32 a i e
CasByteArrayOp_Int -> \[r] [a,i,old,new] -> PrimInline . boundsChecked bound a (Add i 3) $ casOp read_i32 write_i32 r a i old new
CasByteArrayOp_Int8 -> \[r] [a,i,old,new] -> PrimInline . boundsChecked bound a i $ casOp read_i8 write_i8 r a i old new
CasByteArrayOp_Int16 -> \[r] [a,i,old,new] -> PrimInline . boundsChecked bound a (Add i 1) $ casOp read_i16 write_i16 r a i old new
CasByteArrayOp_Int32 -> \[r] [a,i,old,new] -> PrimInline . boundsChecked bound a (Add i 3) $ casOp read_i32 write_i32 r a i old new
CasByteArrayOp_Int64 -> \[r_h,r_l] [a,i,old_h,old_l,new_h,new_l] -> PrimInline . boundsChecked bound a (Add (i .<<. one_) one_) $
jVar \t_h t_l -> mconcat [ t_h |= read_i32 a (Add (i .<<. one_) one_)
, t_l |= read_u32 a (i .<<. one_)
, r_h |= t_h
, r_l |= t_l
, ifS (t_l .===. old_l) -- small optimization, check low bits first, fail fast
(ifBlockS (t_h .===. old_h)
-- Pre-Condition is good, do the write
[ write_i32 a (Add (i .<<. one_) one_) new_h
, write_u32 a (i .<<. one_) new_l
]
-- no good, don't write
mempty)
mempty
]
CasAddrOp_Addr -> \[r_a,r_o] [a1,o1,a2,o2,a3,o3] -> PrimInline $
mconcat [ ifS (app "h$comparePointer" [a1,o1,a2,o2])
(appS "h$memcpy" [a3,o3,a1,o1,8])
mempty
, r_a |= a1
, r_o |= o1
]
CasAddrOp_Word -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u32 write_u32 r a o old new CasAddrOp_Word -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u32 write_u32 r a o old new
CasAddrOp_Word8 -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u8 write_u8 r a o old new CasAddrOp_Word8 -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u8 write_u8 r a o old new
CasAddrOp_Word16 -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u16 write_u16 r a o old new CasAddrOp_Word16 -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u16 write_u16 r a o old new
CasAddrOp_Word32 -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u32 write_u32 r a o old new CasAddrOp_Word32 -> \[r] [a,o,old,new] -> PrimInline $ casOp read_u32 write_u32 r a o old new
CasAddrOp_Word64 -> \[r_h,r_l] [a,o,old_h,old_l,new_h,new_l] -> PrimInline $ CasAddrOp_Word64 -> \[rh,rl] [a,o,oh,ol,nh,nl] -> PrimInline $ casOp2 read_u64 write_u64 (rh,rl) a o (oh,ol) (nh,nl)
mconcat [ r_h |= read_u32 a (Add o (Int 4))
, r_l |= read_u32 a o FetchAddAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr Add r a o v
, ifS (r_l .===. old_l) FetchSubAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr Sub r a o v
(ifBlockS (r_h .===. old_h)
[ write_u32 a (Add o (Int 4)) new_h
, write_u32 a o new_l
]
mempty)
mempty
]
FetchAddAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr Add r a o v
FetchSubAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr Sub r a o v
FetchAndAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr BAnd r a o v FetchAndAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr BAnd r a o v
FetchNandAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr ((BNot .) . BAnd) r a o v FetchNandAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr ((BNot .) . BAnd) r a o v
FetchOrAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr BOr r a o v FetchOrAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr BOr r a o v
FetchXorAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr BXor r a o v FetchXorAddrOp_Word -> \[r] [a,o,v] -> PrimInline $ fetchOpAddr BXor r a o v
InterlockedExchange_Addr -> \[r_a,r_o] [a1,o1,_a2,o2] -> PrimInline $ InterlockedExchange_Addr -> \[ra,ro] [a1,o1,a2,o2] -> PrimInline $ mconcat
-- this primop can't be implemented [ read_boff_addr a1 o1 ra ro
-- correctly because we don't store , write_boff_addr a1 o1 a2 o2
-- the array reference part of an Addr#, ]
-- only the offset part. InterlockedExchange_Word -> \[r] [a,o,w] -> PrimInline $ mconcat
-- [ r |= read_boff_u32 a o
-- So let's assume that all the array , write_boff_u32 a o w
-- references are the same... ]
--
-- Note: we could generate an assert
-- that checks that a1 === a2. However
-- we can't check that the Addr# read
-- at Addr# a2[o2] also comes from this
-- a1/a2 array.
mconcat [ r_a |= a1 -- might be wrong (see above)
, r_o |= read_boff_u32 a1 o1
-- TODO (see above)
-- assert that a1 === a2
, write_boff_u32 a1 o1 o2
]
InterlockedExchange_Word -> \[r] [a,o,w] -> PrimInline $
mconcat [ r |= read_boff_u32 a o
, write_boff_u32 a o w
]
ShrinkSmallMutableArrayOp_Char -> \[] [a,n] -> PrimInline $ appS "h$shrinkMutableCharArray" [a,n] ShrinkSmallMutableArrayOp_Char -> \[] [a,n] -> PrimInline $ appS "h$shrinkMutableCharArray" [a,n]
GetSizeofSmallMutableArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length" GetSizeofSmallMutableArrayOp -> \[r] [a] -> PrimInline $ r |= a .^ "length"
...@@ -1367,6 +1203,79 @@ read_f32 a i = idx_f32 a i ...@@ -1367,6 +1203,79 @@ read_f32 a i = idx_f32 a i
read_f64 :: JExpr -> JExpr -> JExpr read_f64 :: JExpr -> JExpr -> JExpr
read_f64 a i = idx_f64 a i read_f64 a i = idx_f64 a i
read_u64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_u64 a i rh rl = mconcat
[ rl |= read_u32 a (i .<<. 1)
, rh |= read_u32 a (Add 1 (i .<<. 1))
]
read_i64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_i64 a i rh rl = mconcat
[ rl |= read_u32 a (i .<<. 1)
, rh |= read_i32 a (Add 1 (i .<<. 1))
]
--------------------------------------
-- Addr#
--------------------------------------
write_addr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_addr a i r o = mconcat
[ write_i32 a i o
-- create the hidden array for arrays if it doesn't exist
, ifS (Not (a .^ "arr")) (a .^ "arr" |= ValExpr (JList [])) mempty
, a .^ "arr" .! (i .<<. 2) |= r
]
read_addr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_addr a i r o = mconcat
[ o |= read_i32 a i
, r |= if_ ((a .^ "arr") .&&. (a .^ "arr" .! (i .<<. 2)))
(a .^ "arr" .! (i .<<. 2))
null_
]
read_boff_addr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_boff_addr a i r o = mconcat
[ o |= read_boff_i32 a i
, r |= if_ ((a .^ "arr") .&&. (a .^ "arr" .! i))
(a .^ "arr" .! i)
null_
]
write_boff_addr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_boff_addr a i r o = mconcat
[ write_boff_i32 a i o
-- create the hidden array for arrays if it doesn't exist
, ifS (Not (a .^ "arr")) (a .^ "arr" |= ValExpr (JList [])) mempty
, a .^ "arr" .! i |= r
]
--------------------------------------
-- StablePtr
--------------------------------------
read_stableptr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_stableptr a i r o = mconcat
[ r |= var "h$stablePtrBuf" -- stable pointers are always in this array
, o |= read_i32 a i
]
read_boff_stableptr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_boff_stableptr a i r o = mconcat
[ r |= var "h$stablePtrBuf" -- stable pointers are always in this array
, o |= read_boff_i32 a i
]
write_stableptr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_stableptr a i _r o = write_i32 a i o
-- don't store "r" as it must be h$stablePtrBuf
write_boff_stableptr :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_boff_stableptr a i _r o = write_boff_i32 a i o
-- don't store "r" as it must be h$stablePtrBuf
write_u8 :: JExpr -> JExpr -> JExpr -> JStat write_u8 :: JExpr -> JExpr -> JExpr -> JStat
write_u8 a i v = idx_u8 a i |= v write_u8 a i v = idx_u8 a i |= v
...@@ -1391,6 +1300,18 @@ write_f32 a i v = idx_f32 a i |= v ...@@ -1391,6 +1300,18 @@ write_f32 a i v = idx_f32 a i |= v
write_f64 :: JExpr -> JExpr -> JExpr -> JStat write_f64 :: JExpr -> JExpr -> JExpr -> JStat
write_f64 a i v = idx_f64 a i |= v write_f64 a i v = idx_f64 a i |= v
write_u64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_u64 a i h l = mconcat
[ write_u32 a (i .<<. 1) l
, write_u32 a (Add 1 (i .<<. 1)) h
]
write_i64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_i64 a i h l = mconcat
[ write_u32 a (i .<<. 1) l
, write_i32 a (Add 1 (i .<<. 1)) h
]
-- Data View helper functions: byte indexed! -- Data View helper functions: byte indexed!
-- --
-- The argument list consists of the array @a@, the index @i@, and the new value -- The argument list consists of the array @a@, the index @i@, and the new value
...@@ -1406,6 +1327,16 @@ write_boff_u32 a i v = ApplStat (a .^ "dv" .^ "setUint32" ) [i, v, true_] ...@@ -1406,6 +1327,16 @@ write_boff_u32 a i v = ApplStat (a .^ "dv" .^ "setUint32" ) [i, v, true_]
write_boff_f32 a i v = ApplStat (a .^ "dv" .^ "setFloat32") [i, v, true_] write_boff_f32 a i v = ApplStat (a .^ "dv" .^ "setFloat32") [i, v, true_]
write_boff_f64 a i v = ApplStat (a .^ "dv" .^ "setFloat64") [i, v, true_] write_boff_f64 a i v = ApplStat (a .^ "dv" .^ "setFloat64") [i, v, true_]
write_boff_i64, write_boff_u64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
write_boff_i64 a i h l = mconcat
[ write_boff_i32 a (Add i (Int 4)) h
, write_boff_u32 a i l
]
write_boff_u64 a i h l = mconcat
[ write_boff_u32 a (Add i (Int 4)) h
, write_boff_u32 a i l
]
read_boff_i8, read_boff_u8, read_boff_i16, read_boff_u16, read_boff_i32, read_boff_u32, read_boff_f32, read_boff_f64 :: JExpr -> JExpr -> JExpr read_boff_i8, read_boff_u8, read_boff_i16, read_boff_u16, read_boff_i32, read_boff_u32, read_boff_f32, read_boff_f64 :: JExpr -> JExpr -> JExpr
read_boff_i8 a i = read_i8 a i read_boff_i8 a i = read_i8 a i
read_boff_u8 a i = read_u8 a i read_boff_u8 a i = read_u8 a i
...@@ -1416,6 +1347,18 @@ read_boff_u32 a i = ApplExpr (a .^ "dv" .^ "getUint32" ) [i, true_] ...@@ -1416,6 +1347,18 @@ read_boff_u32 a i = ApplExpr (a .^ "dv" .^ "getUint32" ) [i, true_]
read_boff_f32 a i = ApplExpr (a .^ "dv" .^ "getFloat32") [i, true_] read_boff_f32 a i = ApplExpr (a .^ "dv" .^ "getFloat32") [i, true_]
read_boff_f64 a i = ApplExpr (a .^ "dv" .^ "getFloat64") [i, true_] read_boff_f64 a i = ApplExpr (a .^ "dv" .^ "getFloat64") [i, true_]
read_boff_i64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_boff_i64 a i rh rl = mconcat
[ rh |= read_boff_i32 a (Add i (Int 4))
, rl |= read_boff_u32 a i
]
read_boff_u64 :: JExpr -> JExpr -> JExpr -> JExpr -> JStat
read_boff_u64 a i rh rl = mconcat
[ rh |= read_boff_u32 a (Add i (Int 4))
, rl |= read_boff_u32 a i
]
fetchOpByteArray :: (JExpr -> JExpr -> JExpr) -> JExpr -> JExpr -> JExpr -> JExpr -> JStat fetchOpByteArray :: (JExpr -> JExpr -> JExpr) -> JExpr -> JExpr -> JExpr -> JExpr -> JStat
fetchOpByteArray op tgt src i v = mconcat fetchOpByteArray op tgt src i v = mconcat
[ tgt |= read_i32 src i [ tgt |= read_i32 src i
...@@ -1431,8 +1374,8 @@ fetchOpAddr op tgt src i v = mconcat ...@@ -1431,8 +1374,8 @@ fetchOpAddr op tgt src i v = mconcat
casOp casOp
:: (JExpr -> JExpr -> JExpr) -- read :: (JExpr -> JExpr -> JExpr) -- read
-> (JExpr -> JExpr -> JExpr -> JStat) -- write -> (JExpr -> JExpr -> JExpr -> JStat) -- write
-> JExpr -- target register to store result -> JExpr -- target register to store result
-> JExpr -- source arrays -> JExpr -- source array
-> JExpr -- index -> JExpr -- index
-> JExpr -- old value to compare -> JExpr -- old value to compare
-> JExpr -- new value to write -> JExpr -- new value to write
...@@ -1444,39 +1387,174 @@ casOp read write tgt src i old new = mconcat ...@@ -1444,39 +1387,174 @@ casOp read write tgt src i old new = mconcat
mempty mempty
] ]
casOp2
:: (JExpr -> JExpr -> JExpr -> JExpr -> JStat) -- read
-> (JExpr -> JExpr -> JExpr -> JExpr -> JStat) -- write
-> (JExpr,JExpr) -- target registers to store result
-> JExpr -- source array
-> JExpr -- index
-> (JExpr,JExpr) -- old value to compare
-> (JExpr,JExpr) -- new value to write
-> JStat
casOp2 read write (tgt1,tgt2) src i (old1,old2) (new1,new2) = mconcat
[ read src i tgt1 tgt2
, ifS ((tgt2 .===. old2) .&&. (tgt1 .===. old1))
(write src i new1 new2)
mempty
]
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Lifted Arrays -- Lifted Arrays
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- | lifted arrays -- | lifted arrays
cloneArray :: JExpr -> JExpr -> Maybe JExpr -> JExpr -> JStat cloneArray :: Bool -> JExpr -> JExpr -> JExpr -> JExpr -> JStat
cloneArray tgt src mb_offset len = mconcat cloneArray bound_check tgt src start len =
[ tgt |= ApplExpr (src .^ "slice") [start, end] bnd_arr_range bound_check src start len
, tgt .^ closureMeta_ |= zero_ $ mconcat
, tgt .^ "__ghcjsArray" |= true_ [ tgt |= ApplExpr (src .^ "slice") [start, Add len start]
] , tgt .^ closureMeta_ |= zero_
where , tgt .^ "__ghcjsArray" |= true_
start = fromMaybe zero_ mb_offset ]
end = maybe len (Add len) mb_offset
newArray :: JExpr -> JExpr -> JExpr -> JStat
newArray tgt len elem =
tgt |= app "h$newArray" [len, elem]
newByteArray :: JExpr -> JExpr -> JStat newByteArray :: JExpr -> JExpr -> JStat
newByteArray tgt len = newByteArray tgt len =
tgt |= app "h$newByteArray" [len] tgt |= app "h$newByteArray" [len]
boundsChecked :: Bool -- ^ Should we do bounds checking? -- | Check that index is positive and below a max value. Halt the process with
-> JExpr -- ^ Array -- error code 134 otherwise. This is used to implement -fcheck-prim-bounds
-> JExpr -- ^ Index check_bound
-> JStat -- ^ Result :: JExpr -- ^ Max index expression
-> JStat -> Bool -- ^ Should we do bounds checking?
boundsChecked False _ _ r = r -> JExpr -- ^ Index
boundsChecked True xs i r = -> JStat -- ^ Result
ifS ((i .<. xs .^ "length") .&&. (i .>=. zero_)) -> JStat
check_bound _ False _ r = r
check_bound max_index True i r = mconcat
[ jwhenS ((i .<. zero_) .||. (i .>=. max_index)) $
returnS (app "h$exitProcess" [Int 134])
, r
]
-- | Bounds checking using ".length" property (Arrays)
bnd_arr
:: Bool -- ^ Should we do bounds checking?
-> JExpr -- ^ Array
-> JExpr -- ^ Index
-> JStat -- ^ Result
-> JStat
bnd_arr do_check arr = check_bound (arr .^ "length") do_check
-- | Range bounds checking using ".length" property (Arrays)
--
-- Empty ranges trivially pass the check
bnd_arr_range
:: Bool -- ^ Should we do bounds checking?
-> JExpr -- ^ Array
-> JExpr -- ^ Index
-> JExpr -- ^ Range size
-> JStat -- ^ Result
-> JStat
bnd_arr_range False _arr _i _n r = r
bnd_arr_range True arr i n r =
ifS (n .<. zero_) (returnS $ app "h$exitProcess" [Int 134]) $
-- Empty ranges trivially pass the check
ifS (n .===. zero_)
r
(bnd_arr True arr i $ bnd_arr True arr (Add i (Sub n 1)) r)
-- | Bounds checking using ".len" property (ByteArrays)
bnd_ba
:: Bool -- ^ Should we do bounds checking?
-> JExpr -- ^ Array
-> JExpr -- ^ Index
-> JStat -- ^ Result
-> JStat
bnd_ba do_check arr = check_bound (arr .^ "len") do_check
-- | ByteArray bounds checking (byte offset, 8-bit value)
bnd_ba8 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ba8 = bnd_ba
-- | ByteArray bounds checking (byte offset, 16-bit value)
bnd_ba16 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ba16 do_check arr idx r =
-- check that idx non incremented is in range:
-- (idx + 1) may be in range while idx isn't
bnd_ba do_check arr idx
$ bnd_ba do_check arr (Add idx 1) r
-- | ByteArray bounds checking (byte offset, 32-bit value)
bnd_ba32 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ba32 do_check arr idx r =
-- check that idx non incremented is in range:
-- (idx + 3) may be in range while idx isn't
bnd_ba do_check arr idx
$ bnd_ba do_check arr (Add idx 3) r
-- | ByteArray bounds checking (byte offset, 64-bit value)
bnd_ba64 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ba64 do_check arr idx r =
-- check that idx non incremented is in range:
-- (idx + 7) may be in range while idx isn't
bnd_ba do_check arr idx
$ bnd_ba do_check arr (Add idx 7) r
-- | ByteArray bounds checking (8-bit offset, 8-bit value)
bnd_ix8 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ix8 = bnd_ba8
-- | ByteArray bounds checking (16-bit offset, 16-bit value)
bnd_ix16 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ix16 do_check arr idx r = bnd_ba16 do_check arr (idx .<<. 1) r
-- | ByteArray bounds checking (32-bit offset, 32-bit value)
bnd_ix32 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ix32 do_check arr idx r = bnd_ba32 do_check arr (idx .<<. 2) r
-- | ByteArray bounds checking (64-bit offset, 64-bit value)
bnd_ix64 :: Bool -> JExpr -> JExpr -> JStat -> JStat
bnd_ix64 do_check arr idx r = bnd_ba64 do_check arr (idx .<<. 3) r
-- | Bounds checking on a range and using ".len" property (ByteArrays)
--
-- Empty ranges trivially pass the check
bnd_ba_range
:: Bool -- ^ Should we do bounds checking?
-> JExpr -- ^ Array
-> JExpr -- ^ Index
-> JExpr -- ^ Range size
-> JStat -- ^ Result
-> JStat
bnd_ba_range False _ _ _ r = r
bnd_ba_range True xs i n r =
ifS (n .<. zero_) (returnS $ app "h$exitProcess" [Int 134]) $
-- Empty ranges trivially pass the check
ifS (n .===. zero_)
r
(bnd_ba True xs (Add i (Sub n 1)) (bnd_ba True xs i r))
checkOverlapByteArray
:: Bool -- ^ Should we do bounds checking?
-> JExpr -- ^ First array
-> JExpr -- ^ First offset
-> JExpr -- ^ Second array
-> JExpr -- ^ Second offset
-> JExpr -- ^ Range size
-> JStat -- ^ Result
-> JStat
checkOverlapByteArray False _ _ _ _ _ r = r
checkOverlapByteArray True a1 o1 a2 o2 n r =
ifS (app "h$checkOverlapByteArray" [a1, o1, a2, o2, n])
r r
(returnS $ app "h$exitProcess" [Int 134]) (returnS $ app "h$exitProcess" [Int 134])
copyByteArray :: Bool -> Bool -> JExpr -> JExpr -> JExpr -> JExpr -> JExpr -> PrimRes
copyByteArray allow_overlap bound a1 o1 a2 o2 n = PrimInline $ check $ appS "h$copyMutableByteArray" [a1,o1,a2,o2,n]
where
check = bnd_ba_range bound a1 o1 n
. bnd_ba_range bound a2 o2 n
. (if not allow_overlap then checkOverlapByteArray bound a1 o1 a2 o2 n else id)
-- e|0 (32 bit signed integer truncation) required because of JS numbers. e|0 -- e|0 (32 bit signed integer truncation) required because of JS numbers. e|0
-- converts e to an Int32. Note that e|0 _is still a Double_ because JavaScript. -- converts e to an Int32. Note that e|0 _is still a Double_ because JavaScript.
-- So (x|0) * (y|0) can still return values outside of the Int32 range. You have -- So (x|0) * (y|0) can still return values outside of the Int32 range. You have
......
...@@ -48,7 +48,7 @@ import GHC.Tc.Utils.Concrete ( hasFixedRuntimeRep_syntactic ) ...@@ -48,7 +48,7 @@ import GHC.Tc.Utils.Concrete ( hasFixedRuntimeRep_syntactic )
import GHC.Tc.Utils.Instantiate import GHC.Tc.Utils.Instantiate
import GHC.Tc.Instance.Family ( tcLookupDataFamInst ) import GHC.Tc.Instance.Family ( tcLookupDataFamInst )
import GHC.Core.FamInstEnv ( FamInstEnvs ) import GHC.Core.FamInstEnv ( FamInstEnvs )
import GHC.Core.UsageEnv ( unitUE ) import GHC.Core.UsageEnv ( singleUsageUE )
import GHC.Tc.Errors.Types import GHC.Tc.Errors.Types
import GHC.Tc.Solver ( InferMode(..), simplifyInfer ) import GHC.Tc.Solver ( InferMode(..), simplifyInfer )
import GHC.Tc.Utils.Env import GHC.Tc.Utils.Env
...@@ -1091,7 +1091,7 @@ tc_infer_id id_name ...@@ -1091,7 +1091,7 @@ tc_infer_id id_name
check_local_id :: Id -> TcM () check_local_id :: Id -> TcM ()
check_local_id id check_local_id id
= do { checkThLocalId id = do { checkThLocalId id
; tcEmitBindingUsage $ unitUE (idName id) OneTy } ; tcEmitBindingUsage $ singleUsageUE id }
check_naughty :: OccName -> TcId -> TcM () check_naughty :: OccName -> TcId -> TcM ()
check_naughty lbl id check_naughty lbl id
......
...@@ -99,6 +99,7 @@ import GHC.Data.FastString ...@@ -99,6 +99,7 @@ import GHC.Data.FastString
import GHC.Utils.Encoding import GHC.Utils.Encoding
import GHC.Utils.Fingerprint import GHC.Utils.Fingerprint
import GHC.Utils.Misc import GHC.Utils.Misc
import GHC.Settings.Config (cProjectUnitId)
import Control.DeepSeq import Control.DeepSeq
import Data.Data import Data.Data
...@@ -597,7 +598,7 @@ primUnitId = UnitId (fsLit "ghc-prim") ...@@ -597,7 +598,7 @@ primUnitId = UnitId (fsLit "ghc-prim")
bignumUnitId = UnitId (fsLit "ghc-bignum") bignumUnitId = UnitId (fsLit "ghc-bignum")
baseUnitId = UnitId (fsLit "base") baseUnitId = UnitId (fsLit "base")
rtsUnitId = UnitId (fsLit "rts") rtsUnitId = UnitId (fsLit "rts")
thisGhcUnitId = UnitId (fsLit "ghc") thisGhcUnitId = UnitId (fsLit cProjectUnitId) -- See Note [GHC's Unit Id]
interactiveUnitId = UnitId (fsLit "interactive") interactiveUnitId = UnitId (fsLit "interactive")
thUnitId = UnitId (fsLit "template-haskell") thUnitId = UnitId (fsLit "template-haskell")
...@@ -625,8 +626,49 @@ wiredInUnitIds = ...@@ -625,8 +626,49 @@ wiredInUnitIds =
, baseUnitId , baseUnitId
, rtsUnitId , rtsUnitId
, thUnitId , thUnitId
, thisGhcUnitId
] ]
-- NB: ghc is no longer part of the wired-in units since its unit-id, given
-- by hadrian or cabal, is no longer overwritten and now matches both the
-- cProjectUnitId defined in build-time-generated module GHC.Version, and
-- the unit key.
--
-- See also Note [About units], taking into consideration ghc is still a
-- wired-in unit but whose unit-id no longer needs special handling because
-- we take care that it matches the unit key.
{-
Note [GHC's Unit Id]
~~~~~~~~~~~~~~~~~~~~
Previously, the unit-id of ghc-the-library was fixed as `ghc`.
This was done primarily because the compiler must know the unit-id of
some packages (including ghc) a-priori to define wired-in names.
However, as seen in #20742, a reinstallable `ghc` whose unit-id is fixed
to `ghc` might result in subtle bugs when different ghc's interact.
A good example of this is having GHC_A load a plugin compiled by GHC_B,
where GHC_A and GHC_B are linked to ghc-libraries that are ABI
incompatible. Without a distinction between the unit-id of the ghc library
GHC_A is linked against and the ghc library the plugin it is loading was
compiled against, we can't check compatibility.
Now, we give a better unit-id to ghc (`ghc-version-hash`) by
(1) Not setting -this-unit-id fixed to `ghc` in `ghc.cabal`, but rather by having
(1.1) Hadrian pass the new unit-id with -this-unit-id for stage0-1
(1.2) Cabal pass the unit-id it computes to ghc, which it already does by default
(2) Adding a definition to `GHC.Settings.Config` whose value is the new
unit-id. This is crucial to define the wired-in name of the GHC unit
(`thisGhcUnitId`) which *must* match the value of the -this-unit-id flag.
(Where `GHC.Settings.Config` is a module generated by the build system which,
be it either hadrian or cabal, knows exactly the unit-id it passed with -this-unit-id)
Note that we also ensure the ghc's unit key matches its unit id, both when
hadrian or cabal is building ghc. This way, we no longer need to add `ghc` to
the WiringMap, and that's why 'wiredInUnitIds' no longer includes
'thisGhcUnitId'.
-}
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- Boot Modules -- Boot Modules
......
...@@ -3,7 +3,10 @@ module Main where ...@@ -3,7 +3,10 @@ module Main where
import Distribution.Simple import Distribution.Simple
import Distribution.Simple.BuildPaths import Distribution.Simple.BuildPaths
import Distribution.Types.ComponentLocalBuildInfo
import Distribution.Types.ComponentName (ComponentName(CLibName))
import Distribution.Types.LocalBuildInfo import Distribution.Types.LocalBuildInfo
import Distribution.Types.LibraryName (LibraryName(LMainLibName))
import Distribution.Verbosity import Distribution.Verbosity
import Distribution.Simple.Program import Distribution.Simple.Program
import Distribution.Simple.Utils import Distribution.Simple.Utils
...@@ -15,6 +18,7 @@ import System.Directory ...@@ -15,6 +18,7 @@ import System.Directory
import System.FilePath import System.FilePath
import Control.Monad import Control.Monad
import Data.Char import Data.Char
import qualified Data.Map as Map
import GHC.ResponseFile import GHC.ResponseFile
import System.Environment import System.Environment
...@@ -85,9 +89,13 @@ ghcAutogen verbosity lbi@LocalBuildInfo{..} = do ...@@ -85,9 +89,13 @@ ghcAutogen verbosity lbi@LocalBuildInfo{..} = do
callProcess "deriveConstants" ["--gen-haskell-type","-o",tmp,"--target-os",targetOS] callProcess "deriveConstants" ["--gen-haskell-type","-o",tmp,"--target-os",targetOS]
renameFile tmp platformConstantsPath renameFile tmp platformConstantsPath
let cProjectUnitId = case Map.lookup (CLibName LMainLibName) componentNameMap of
Just [LibComponentLocalBuildInfo{componentUnitId}] -> unUnitId componentUnitId
_ -> error "Couldn't find unique cabal library when building ghc"
-- Write GHC.Settings.Config -- Write GHC.Settings.Config
let configHsPath = autogenPackageModulesDir lbi </> "GHC/Settings/Config.hs" configHsPath = autogenPackageModulesDir lbi </> "GHC/Settings/Config.hs"
configHs = generateConfigHs settings configHs = generateConfigHs cProjectUnitId settings
createDirectoryIfMissingVerbose verbosity True (takeDirectory configHsPath) createDirectoryIfMissingVerbose verbosity True (takeDirectory configHsPath)
rewriteFileEx verbosity configHsPath configHs rewriteFileEx verbosity configHsPath configHs
...@@ -98,8 +106,9 @@ getSetting settings kh kr = go settings kr ...@@ -98,8 +106,9 @@ getSetting settings kh kr = go settings kr
Nothing -> Left (show k ++ " not found in settings: " ++ show settings) Nothing -> Left (show k ++ " not found in settings: " ++ show settings)
Just v -> Right v Just v -> Right v
generateConfigHs :: [(String,String)] -> String generateConfigHs :: String -- ^ ghc's cabal-generated unit-id, which matches its package-id/key
generateConfigHs settings = either error id $ do -> [(String,String)] -> String
generateConfigHs cProjectUnitId settings = either error id $ do
let getSetting' = getSetting $ (("cStage","2"):) settings let getSetting' = getSetting $ (("cStage","2"):) settings
buildPlatform <- getSetting' "cBuildPlatformString" "Host platform" buildPlatform <- getSetting' "cBuildPlatformString" "Host platform"
hostPlatform <- getSetting' "cHostPlatformString" "Target platform" hostPlatform <- getSetting' "cHostPlatformString" "Target platform"
...@@ -114,6 +123,7 @@ generateConfigHs settings = either error id $ do ...@@ -114,6 +123,7 @@ generateConfigHs settings = either error id $ do
, " , cProjectName" , " , cProjectName"
, " , cBooterVersion" , " , cBooterVersion"
, " , cStage" , " , cStage"
, " , cProjectUnitId"
, " ) where" , " ) where"
, "" , ""
, "import GHC.Prelude.Basic" , "import GHC.Prelude.Basic"
...@@ -134,4 +144,7 @@ generateConfigHs settings = either error id $ do ...@@ -134,4 +144,7 @@ generateConfigHs settings = either error id $ do
, "" , ""
, "cStage :: String" , "cStage :: String"
, "cStage = show ("++ cStage ++ " :: Int)" , "cStage = show ("++ cStage ++ " :: Int)"
, ""
, "cProjectUnitId :: String"
, "cProjectUnitId = " ++ show cProjectUnitId
] ]
...@@ -39,7 +39,7 @@ extra-source-files: ...@@ -39,7 +39,7 @@ extra-source-files:
custom-setup custom-setup
setup-depends: base >= 3 && < 5, Cabal >= 1.6 && <3.10, directory, process, filepath setup-depends: base >= 3 && < 5, Cabal >= 1.6 && <3.10, directory, process, filepath, containers
Flag internal-interpreter Flag internal-interpreter
Description: Build with internal interpreter support. Description: Build with internal interpreter support.
...@@ -57,6 +57,12 @@ Flag build-tool-depends ...@@ -57,6 +57,12 @@ Flag build-tool-depends
Description: Use build-tool-depends Description: Use build-tool-depends
Default: True Default: True
-- While the boot compiler fixes ghc's unit-id to `ghc`, the stage0 compiler must still be compiled with `-this-unit-id ghc`
Flag hadrian-stage0
Description: Enable if compiling the stage0 compiler with hadrian
Default: False
Manual: True
Library Library
Default-Language: Haskell2010 Default-Language: Haskell2010
Exposed: False Exposed: False
...@@ -137,9 +143,10 @@ Library ...@@ -137,9 +143,10 @@ Library
Include-Dirs: . Include-Dirs: .
-- We need to set the unit id to ghc (without a version number) if flag(hadrian-stage0)
-- as it's magic. -- We need to set the unit id to ghc (without a version number)
GHC-Options: -this-unit-id ghc -- as it's magic.
GHC-Options: -this-unit-id ghc
c-sources: c-sources:
cbits/cutils.c cbits/cutils.c
......
...@@ -226,7 +226,7 @@ update_package_db: install_bin install_lib ...@@ -226,7 +226,7 @@ update_package_db: install_bin install_lib
$(INSTALL_DATA) mk/system-cxx-std-lib-1.0.conf "$(DESTDIR)$(ActualLibsDir)/package.conf.d" $(INSTALL_DATA) mk/system-cxx-std-lib-1.0.conf "$(DESTDIR)$(ActualLibsDir)/package.conf.d"
@echo "Updating the package DB" @echo "Updating the package DB"
$(foreach p, $(PKG_CONFS),\ $(foreach p, $(PKG_CONFS),\
$(call patchpackageconf,$(shell echo $(notdir $p) | sed 's/-\([0-9]*[0-9]\.\)*conf//g'),$(shell echo "$p" | sed 's:\0xxx\0: :g'),$(docdir),$(shell mk/relpath.sh "$(ActualLibsDir)" "$(docdir)"),$(shell echo $(notdir $p) | sed 's/.conf//g'))) $(call patchpackageconf,$(shell echo $(notdir $p) | sed 's/-[0-9.]*-[0-9a-zA-Z]*\.conf//g'),$(shell echo "$p" | sed 's:\0xxx\0: :g'),$(docdir),$(shell mk/relpath.sh "$(ActualLibsDir)" "$(docdir)"),$(shell echo $(notdir $p) | sed 's/.conf//g')))
'$(DESTDIR)$(ActualBinsDir)/$(CrossCompilePrefix)ghc-pkg' --global-package-db "$(DESTDIR)$(ActualLibsDir)/package.conf.d" recache '$(DESTDIR)$(ActualBinsDir)/$(CrossCompilePrefix)ghc-pkg' --global-package-db "$(DESTDIR)$(ActualLibsDir)/package.conf.d" recache
install_mingw: install_mingw:
......
{"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.1","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.0.0","pkg-name":"Cabal","pkg-version":"3.6.0.0","depends":["array-0.5.4.0","base-4.16.0.0","binary-0.8.9.0","bytestring-0.11.1.0","containers-0.6.5.1","deepseq-1.4.6.0","directory-1.3.6.2","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-d206773042205de1060139757d2714b6fc1f3b1ff5294e611a076f708c2c2939","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.0.0","containers-0.6.5.1","deepseq-1.4.6.0","random-1.2.1.1-97ce1668cc8855def97f8467b8241effcc343cfb3341c4b9c3dec392ca31a395","splitmix-0.1.0.4-6e4cb959752030596da42aa487811cf8f2f8d97e77e5b86f7c0286b176af5a9e","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.0.0"]},{"type":"pre-existing","id":"base-4.16.0.0","pkg-name":"base","pkg-version":"4.16.0.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.0.0","bytestring-0.11.1.0","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.1.0","pkg-name":"bytestring","pkg-version":"0.11.1.0","depends":["base-4.16.0.0","deepseq-1.4.6.0","ghc-bignum-1.2","ghc-prim-0.8.0"]},{"type":"configured","id":"clock-0.8.3-92b3cf3a8d563bc4cec59855d0fe86bab13ee56991b5eb116314b00120c8d023","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.0.0","deepseq-1.4.6.0"]},{"type":"configured","id":"data-array-byte-0.1.0.1-39089d1700e8eb79997c0fea24daee60863f08caa05929ff7d545a59d374af7e","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.0.0","deepseq-1.4.6.0","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.0","pkg-name":"deepseq","pkg-version":"1.4.6.0","depends":["array-0.5.4.0","base-4.16.0.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.0.0","filepath-1.4.2.1","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-4537794a6683eedd21da2fd7dcb19c48d6720bebd53dfa635675ab945ec56f58","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.0.0","clock-0.8.3-92b3cf3a8d563bc4cec59855d0fe86bab13ee56991b5eb116314b00120c8d023","directory-1.3.6.2","filepath-1.4.2.1","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.16.0.0"]},{"type":"configured","id":"filepattern-0.1.3-44052a6b8a974f5f5b326a6eac65d98c24b4beca809a2e4e6cdb0557d01ac03e","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.0.0","directory-1.3.6.2","extra-1.7.12-4537794a6683eedd21da2fd7dcb19c48d6720bebd53dfa635675ab945ec56f58","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.1","pkg-name":"ghc-boot-th","pkg-version":"9.2.1","depends":["base-4.16.0.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-scratch/hadrian/."},"dist-dir":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.1/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.1/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.0.0","QuickCheck-2.14.2-d206773042205de1060139757d2714b6fc1f3b1ff5294e611a076f708c2c2939","base-4.16.0.0","bytestring-0.11.1.0","containers-0.6.5.1","directory-1.3.6.2","extra-1.7.12-4537794a6683eedd21da2fd7dcb19c48d6720bebd53dfa635675ab945ec56f58","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","shake-0.19.7-f674e0317c75177d3e90c60343b4709ccb09132b7241f5718a9b394e7841298d","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-89127bf85578057135b77bb1158d3c3ba3d8b676352c7d9af1628e53054cfabe"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.1/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-a256d5223f556ecea163e1289cbc51834d62cbd6964b0bbc5aacc47e0ce28ead","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.0.0","bytestring-0.11.1.0","containers-0.6.5.1","data-array-byte-0.1.0.1-39089d1700e8eb79997c0fea24daee60863f08caa05929ff7d545a59d374af7e","deepseq-1.4.6.0","filepath-1.4.2.1","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-8d3419f8408b5b8b6841b00f6d1a7471816134201231be28416266a3ee3bde49","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-6278b9d6c9e5cd92f21180eee5fe6a6cc4709b3454a4f39848c0924a4b6130cc","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-0fe00be087c19b4ab01d3df43cb86b0d0d8634379a8ec6ab5d64bd544fc95aa5","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-df9b3aa568ece10aa0a1f02d8e0df8a6faee7f76b182f7f7e8e435249bb7c040","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.0.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.16.0.0","bytestring-0.11.1.0","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.0.0","deepseq-1.4.6.0","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-1e9f1620b3af36dba02da5dc1555b2753e6c35b78d7641cf661542322aca6e43","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.0.0","data-array-byte-0.1.0.1-39089d1700e8eb79997c0fea24daee60863f08caa05929ff7d545a59d374af7e","deepseq-1.4.6.0","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.0.0","deepseq-1.4.6.0","directory-1.3.6.2","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-97ce1668cc8855def97f8467b8241effcc343cfb3341c4b9c3dec392ca31a395","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.0.0","bytestring-0.11.1.0","deepseq-1.4.6.0","mtl-2.2.2","splitmix-0.1.0.4-6e4cb959752030596da42aa487811cf8f2f8d97e77e5b86f7c0286b176af5a9e"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-e-shake-0de9d0da02df51a122baac2187f5171939545b90c4e4b918adcb9f3e9f8f3ae8","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.0.0","binary-0.8.9.0","bytestring-0.11.1.0","deepseq-1.4.6.0","directory-1.3.6.2","extra-1.7.12-4537794a6683eedd21da2fd7dcb19c48d6720bebd53dfa635675ab945ec56f58","filepath-1.4.2.1","filepattern-0.1.3-44052a6b8a974f5f5b326a6eac65d98c24b4beca809a2e4e6cdb0557d01ac03e","hashable-1.4.2.0-a256d5223f556ecea163e1289cbc51834d62cbd6964b0bbc5aacc47e0ce28ead","heaps-0.4-8d3419f8408b5b8b6841b00f6d1a7471816134201231be28416266a3ee3bde49","js-dgtable-0.5.2-6278b9d6c9e5cd92f21180eee5fe6a6cc4709b3454a4f39848c0924a4b6130cc","js-flot-0.8.3-0fe00be087c19b4ab01d3df43cb86b0d0d8634379a8ec6ab5d64bd544fc95aa5","js-jquery-3.3.1-df9b3aa568ece10aa0a1f02d8e0df8a6faee7f76b182f7f7e8e435249bb7c040","primitive-0.8.0.0-1e9f1620b3af36dba02da5dc1555b2753e6c35b78d7641cf661542322aca6e43","process-1.6.13.2","random-1.2.1.1-97ce1668cc8855def97f8467b8241effcc343cfb3341c4b9c3dec392ca31a395","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-89127bf85578057135b77bb1158d3c3ba3d8b676352c7d9af1628e53054cfabe","utf8-string-1.0.2-1508e35653a100bc70cf4b62637d1bc71807fe8682a43fc50125618f1075e8fa"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.1/shake-0.19.7-e-shake-0de9d0da02df51a122baac2187f5171939545b90c4e4b918adcb9f3e9f8f3ae8/bin/shake"},{"type":"configured","id":"shake-0.19.7-f674e0317c75177d3e90c60343b4709ccb09132b7241f5718a9b394e7841298d","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.0.0","binary-0.8.9.0","bytestring-0.11.1.0","deepseq-1.4.6.0","directory-1.3.6.2","extra-1.7.12-4537794a6683eedd21da2fd7dcb19c48d6720bebd53dfa635675ab945ec56f58","filepath-1.4.2.1","filepattern-0.1.3-44052a6b8a974f5f5b326a6eac65d98c24b4beca809a2e4e6cdb0557d01ac03e","hashable-1.4.2.0-a256d5223f556ecea163e1289cbc51834d62cbd6964b0bbc5aacc47e0ce28ead","heaps-0.4-8d3419f8408b5b8b6841b00f6d1a7471816134201231be28416266a3ee3bde49","js-dgtable-0.5.2-6278b9d6c9e5cd92f21180eee5fe6a6cc4709b3454a4f39848c0924a4b6130cc","js-flot-0.8.3-0fe00be087c19b4ab01d3df43cb86b0d0d8634379a8ec6ab5d64bd544fc95aa5","js-jquery-3.3.1-df9b3aa568ece10aa0a1f02d8e0df8a6faee7f76b182f7f7e8e435249bb7c040","primitive-0.8.0.0-1e9f1620b3af36dba02da5dc1555b2753e6c35b78d7641cf661542322aca6e43","process-1.6.13.2","random-1.2.1.1-97ce1668cc8855def97f8467b8241effcc343cfb3341c4b9c3dec392ca31a395","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-89127bf85578057135b77bb1158d3c3ba3d8b676352c7d9af1628e53054cfabe","utf8-string-1.0.2-1508e35653a100bc70cf4b62637d1bc71807fe8682a43fc50125618f1075e8fa"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.0.4-6e4cb959752030596da42aa487811cf8f2f8d97e77e5b86f7c0286b176af5a9e","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.0.0","deepseq-1.4.6.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.0.0","ghc-boot-th-9.2.1","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.0.0","binary-0.8.9.0","bytestring-0.11.1.0","deepseq-1.4.6.0","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.0.0","deepseq-1.4.6.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.0.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.0.0","bytestring-0.11.1.0","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-89127bf85578057135b77bb1158d3c3ba3d8b676352c7d9af1628e53054cfabe","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.0.0","deepseq-1.4.6.0","hashable-1.4.2.0-a256d5223f556ecea163e1289cbc51834d62cbd6964b0bbc5aacc47e0ce28ead","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-1508e35653a100bc70cf4b62637d1bc71807fe8682a43fc50125618f1075e8fa","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.0.0","bytestring-0.11.1.0"],"exe-depends":[],"component-name":"lib"}]} {"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.6.1","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.8.1.0-372ffc7841ab6b7a5b1b38fc4fa05a1def6d41a4a28a05b6b16412d8d03e6fd6","pkg-name":"Cabal","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d","pkg-src-sha256":"7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608","depends":["Cabal-syntax-3.8.1.0-3ca25e89601c18bd49019a3d1e19420c47007f095f586f14636917297c1fc62a","array-0.5.5.0","base-4.18.0.0","bytestring-0.11.4.0","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.100.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","process-1.6.17.0","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.8.1.0-3ca25e89601c18bd49019a3d1e19420c47007f095f586f14636917297c1fc62a","pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593","pkg-src-sha256":"07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f","depends":["array-0.5.5.0","base-4.18.0.0","binary-0.8.9.1","bytestring-0.11.4.0","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.100.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.14.2-48f73357a0d5467607535cbb21ac8449b28303ff215af7e947416e6a4ef4195f","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.18.0.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.1-2344f66ad3296b3c8c64d0fbe5a1dc8799adc0c02f28ef27b3d8bcb93f71e8f6","splitmix-0.1.0.4-d2df76b90c23066708f4e66aade172a985bb07c1ccf613221011d8827c32f89b","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.5.0","pkg-name":"array","pkg-version":"0.5.5.0","depends":["base-4.18.0.0"]},{"type":"pre-existing","id":"base-4.18.0.0","pkg-name":"base","pkg-version":"4.18.0.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0","rts-1.0.2"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-b5940c21a059d328169082a7bf03f08fec9ea9cb300f6de1499ec2087f455bc8","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.18.0.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.5.0","base-4.18.0.0","bytestring-0.11.4.0","containers-0.6.7"]},{"type":"pre-existing","id":"bytestring-0.11.4.0","pkg-name":"bytestring","pkg-version":"0.11.4.0","depends":["base-4.18.0.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.3-309549353d285d82eaa6ef36502628671b62ca2d2fb6284260bd7679d5e7b9a3","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.5.0","base-4.18.0.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-9d310921383dbec51b2f6fa686c9d99cfd3bb977a8eff016b53bb33c86c941e0","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.18.0.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.5.0","base-4.18.0.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"directory-1.3.8.1","pkg-name":"directory","pkg-version":"1.3.8.1","depends":["base-4.18.0.0","filepath-1.4.100.1","time-1.12.2","unix-2.8.1.0"]},{"type":"pre-existing","id":"exceptions-0.10.7","pkg-name":"exceptions","pkg-version":"0.10.7","depends":["base-4.18.0.0","mtl-2.3.1","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.6.1.0"]},{"type":"configured","id":"extra-1.7.12-3ff76dca5298f0150cab13d98558cc454778c8488bbe7ff495cf22dd8ce1fbac","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.18.0.0","clock-0.8.3-309549353d285d82eaa6ef36502628671b62ca2d2fb6284260bd7679d5e7b9a3","directory-1.3.8.1","filepath-1.4.100.1","process-1.6.17.0","time-1.12.2","unix-2.8.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.100.1","pkg-name":"filepath","pkg-version":"1.4.100.1","depends":["base-4.18.0.0","bytestring-0.11.4.0","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"]},{"type":"configured","id":"filepattern-0.1.3-27d278e9a17a55f9f951233d92fa6c79dfb3359757c1c3d71c29c72a1563a990","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.0.0","directory-1.3.8.1","extra-1.7.12-3ff76dca5298f0150cab13d98558cc454778c8488bbe7ff495cf22dd8ce1fbac","filepath-1.4.100.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.1","pkg-name":"ghc-boot-th","pkg-version":"9.6.1","depends":["base-4.18.0.0"]},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":["rts-1.0.2"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-rodrigo/hadrian/."},"dist-dir":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.1/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.1/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.8.1.0-372ffc7841ab6b7a5b1b38fc4fa05a1def6d41a4a28a05b6b16412d8d03e6fd6","QuickCheck-2.14.2-48f73357a0d5467607535cbb21ac8449b28303ff215af7e947416e6a4ef4195f","base-4.18.0.0","base16-bytestring-1.0.2.0-b5940c21a059d328169082a7bf03f08fec9ea9cb300f6de1499ec2087f455bc8","bytestring-0.11.4.0","containers-0.6.7","cryptohash-sha256-0.11.102.1-9d310921383dbec51b2f6fa686c9d99cfd3bb977a8eff016b53bb33c86c941e0","directory-1.3.8.1","extra-1.7.12-3ff76dca5298f0150cab13d98558cc454778c8488bbe7ff495cf22dd8ce1fbac","filepath-1.4.100.1","mtl-2.3.1","parsec-3.1.16.1","shake-0.19.7-5a9ab582f15d6b877ed307ed78deca9e9f66793b09ed98bacc612e42b1e9bb49","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unordered-containers-0.2.19.1-dd696ab9b62a991ef164b9913b3122a7c8f7f5556a841af32aff1e29cd73ef99"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.1/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-0889edbce65a4fa263d1b820b2b8d69eaa1dc95475dff3c60f82e860064fa7d4","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.18.0.0","bytestring-0.11.4.0","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.100.1","ghc-bignum-1.3","ghc-prim-0.10.0","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-84f785fa326505d8cac138316c7ca1fae826bac79403765826b5e0e8b4ca6459","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-929f5bb1639fd2d41e313c57e9a1322999779829eab0b2562697ea02d35cb572","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-6ef19e2feb165ecbdc5faf2cc57c67ac671129ac8bfa15f49d808e2c55182e5a","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-7aa226a6aaf4a0a4ab8c2edaf9ce49229001fbdf5d86e863b4c2ece60a4532ed","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.18.0.0","transformers-0.6.1.0"]},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.18.0.0","bytestring-0.11.4.0","mtl-2.3.1","text-2.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.0.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.8.0.0-ad645076af9195e65e5c77d3a3850c7fb7f4153156656431f6be749f834f8371","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.18.0.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.17.0","pkg-name":"process","pkg-version":"1.6.17.0","depends":["base-4.18.0.0","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.100.1","unix-2.8.1.0"]},{"type":"configured","id":"random-1.2.1.1-2344f66ad3296b3c8c64d0fbe5a1dc8799adc0c02f28ef27b3d8bcb93f71e8f6","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.18.0.0","bytestring-0.11.4.0","deepseq-1.4.8.1","mtl-2.3.1","splitmix-0.1.0.4-d2df76b90c23066708f4e66aade172a985bb07c1ccf613221011d8827c32f89b"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts-1.0.2","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-5a9ab582f15d6b877ed307ed78deca9e9f66793b09ed98bacc612e42b1e9bb49","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.0.0","binary-0.8.9.1","bytestring-0.11.4.0","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.12-3ff76dca5298f0150cab13d98558cc454778c8488bbe7ff495cf22dd8ce1fbac","filepath-1.4.100.1","filepattern-0.1.3-27d278e9a17a55f9f951233d92fa6c79dfb3359757c1c3d71c29c72a1563a990","hashable-1.4.2.0-0889edbce65a4fa263d1b820b2b8d69eaa1dc95475dff3c60f82e860064fa7d4","heaps-0.4-84f785fa326505d8cac138316c7ca1fae826bac79403765826b5e0e8b4ca6459","js-dgtable-0.5.2-929f5bb1639fd2d41e313c57e9a1322999779829eab0b2562697ea02d35cb572","js-flot-0.8.3-6ef19e2feb165ecbdc5faf2cc57c67ac671129ac8bfa15f49d808e2c55182e5a","js-jquery-3.3.1-7aa226a6aaf4a0a4ab8c2edaf9ce49229001fbdf5d86e863b4c2ece60a4532ed","primitive-0.8.0.0-ad645076af9195e65e5c77d3a3850c7fb7f4153156656431f6be749f834f8371","process-1.6.17.0","random-1.2.1.1-2344f66ad3296b3c8c64d0fbe5a1dc8799adc0c02f28ef27b3d8bcb93f71e8f6","time-1.12.2","transformers-0.6.1.0","unix-2.8.1.0","unordered-containers-0.2.19.1-dd696ab9b62a991ef164b9913b3122a7c8f7f5556a841af32aff1e29cd73ef99","utf8-string-1.0.2-721e9e04faa6601f986dacde9b25ed4ab91af08c4232b52f8ff34c6b34918053"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-a59c980e9cb95b2a1d37687f9ab3efd3a8e8314a00e4ca7fb819044d23198462","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.0.0","binary-0.8.9.1","bytestring-0.11.4.0","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.12-3ff76dca5298f0150cab13d98558cc454778c8488bbe7ff495cf22dd8ce1fbac","filepath-1.4.100.1","filepattern-0.1.3-27d278e9a17a55f9f951233d92fa6c79dfb3359757c1c3d71c29c72a1563a990","hashable-1.4.2.0-0889edbce65a4fa263d1b820b2b8d69eaa1dc95475dff3c60f82e860064fa7d4","heaps-0.4-84f785fa326505d8cac138316c7ca1fae826bac79403765826b5e0e8b4ca6459","js-dgtable-0.5.2-929f5bb1639fd2d41e313c57e9a1322999779829eab0b2562697ea02d35cb572","js-flot-0.8.3-6ef19e2feb165ecbdc5faf2cc57c67ac671129ac8bfa15f49d808e2c55182e5a","js-jquery-3.3.1-7aa226a6aaf4a0a4ab8c2edaf9ce49229001fbdf5d86e863b4c2ece60a4532ed","primitive-0.8.0.0-ad645076af9195e65e5c77d3a3850c7fb7f4153156656431f6be749f834f8371","process-1.6.17.0","random-1.2.1.1-2344f66ad3296b3c8c64d0fbe5a1dc8799adc0c02f28ef27b3d8bcb93f71e8f6","time-1.12.2","transformers-0.6.1.0","unix-2.8.1.0","unordered-containers-0.2.19.1-dd696ab9b62a991ef164b9913b3122a7c8f7f5556a841af32aff1e29cd73ef99","utf8-string-1.0.2-721e9e04faa6601f986dacde9b25ed4ab91af08c4232b52f8ff34c6b34918053"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.6.1/shake-0.19.7-e-shake-a59c980e9cb95b2a1d37687f9ab3efd3a8e8314a00e4ca7fb819044d23198462/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-d2df76b90c23066708f4e66aade172a985bb07c1ccf613221011d8827c32f89b","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.18.0.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.5.0","base-4.18.0.0"]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.0.0","ghc-boot-th-9.6.1","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.5.0","base-4.18.0.0","binary-0.8.9.1","bytestring-0.11.4.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.0.0","deepseq-1.4.8.1"]},{"type":"pre-existing","id":"transformers-0.6.1.0","pkg-name":"transformers","pkg-version":"0.6.1.0","depends":["base-4.18.0.0"]},{"type":"pre-existing","id":"unix-2.8.1.0","pkg-name":"unix","pkg-version":"2.8.1.0","depends":["base-4.18.0.0","bytestring-0.11.4.0","filepath-1.4.100.1","time-1.12.2"]},{"type":"configured","id":"unordered-containers-0.2.19.1-dd696ab9b62a991ef164b9913b3122a7c8f7f5556a841af32aff1e29cd73ef99","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.18.0.0","deepseq-1.4.8.1","hashable-1.4.2.0-0889edbce65a4fa263d1b820b2b8d69eaa1dc95475dff3c60f82e860064fa7d4","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-721e9e04faa6601f986dacde9b25ed4ab91af08c4232b52f8ff34c6b34918053","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.0.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file \ No newline at end of file
{"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.2","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-fd6bc24ff3b5f8201c3071f6ca35f332d6b1353852d01e1b4e5ff25db746e149","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.1.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","splitmix-0.1.0.4-201c59ac932f856499a47c73ffe84a6be5b6dfd5db9ec6182775fe6b945f369c","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.1.0"]},{"type":"pre-existing","id":"base-4.16.1.0","pkg-name":"base","pkg-version":"4.16.1.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.1.0","bytestring-0.11.3.0","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.0","pkg-name":"bytestring","pkg-version":"0.11.3.0","depends":["base-4.16.1.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-0c7c9e547a146527c99f2e7581131ba32cadfbda0704ef58b7c52090bd8615f6","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.1.0","deepseq-1.4.6.1"]},{"type":"configured","id":"data-array-byte-0.1.0.1-e7958b903e06231e1e247b429923d80ecc5674ee18a064ad9de8d6edc70e24e5","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.1.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.1.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.1.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.1.0","clock-0.8.3-0c7c9e547a146527c99f2e7581131ba32cadfbda0704ef58b7c52090bd8615f6","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.1.0"]},{"type":"configured","id":"filepattern-0.1.3-d9631d8baf926960f6eb6991bc1e7c256a8c1757d9ec9e8cb827d563cf27e3a3","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.1.0","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.2","pkg-name":"ghc-boot-th","pkg-version":"9.2.2","depends":["base-4.16.1.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-scratch/hadrian/."},"dist-dir":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.2/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.2/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-fd6bc24ff3b5f8201c3071f6ca35f332d6b1353852d01e1b4e5ff25db746e149","base-4.16.1.0","bytestring-0.11.3.0","containers-0.6.5.1","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-4ae8d8886d8f99edbfe8169a6bb88c87e09313ef8011e4b71d3da02dba0d9060","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.2/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.1.0","bytestring-0.11.3.0","containers-0.6.5.1","data-array-byte-0.1.0.1-e7958b903e06231e1e247b429923d80ecc5674ee18a064ad9de8d6edc70e24e5","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-492ad633a7c1fd0990246fbd401f8438db0635c4fa550e36cb43b775527c157f","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-bfe5ec294647feda55ba2f90bde0d374568a86efba113bfff8363c9e8f34af37","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-6a01b63899fcd71d3e88646c1d9e81ca1d7937cf03770977570987e81b26d8fe","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-5d3188cc3ebaa3d2976301605f921eb24ec9ca825b83351e4eeb8eb4b22dd9f3","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.1.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.1.0","bytestring-0.11.3.0","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.1.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-79a029355b4c47f541431a34a60def13110b01ecc59bbb2dd0ae5e832fe524ff","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.1.0","data-array-byte-0.1.0.1-e7958b903e06231e1e247b429923d80ecc5674ee18a064ad9de8d6edc70e24e5","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.1.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.1.0","bytestring-0.11.3.0","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-201c59ac932f856499a47c73ffe84a6be5b6dfd5db9ec6182775fe6b945f369c"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-4ae8d8886d8f99edbfe8169a6bb88c87e09313ef8011e4b71d3da02dba0d9060","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2","filepattern-0.1.3-d9631d8baf926960f6eb6991bc1e7c256a8c1757d9ec9e8cb827d563cf27e3a3","hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","heaps-0.4-492ad633a7c1fd0990246fbd401f8438db0635c4fa550e36cb43b775527c157f","js-dgtable-0.5.2-bfe5ec294647feda55ba2f90bde0d374568a86efba113bfff8363c9e8f34af37","js-flot-0.8.3-6a01b63899fcd71d3e88646c1d9e81ca1d7937cf03770977570987e81b26d8fe","js-jquery-3.3.1-5d3188cc3ebaa3d2976301605f921eb24ec9ca825b83351e4eeb8eb4b22dd9f3","primitive-0.8.0.0-79a029355b4c47f541431a34a60def13110b01ecc59bbb2dd0ae5e832fe524ff","process-1.6.13.2","random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7","utf8-string-1.0.2-3b60297ab3bd0b49e24ff62a4d011e876a1464182bd13b03752e8393de14f237"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-dffab5914106a6f7d61bd9c25caad4c6fb10925bc51610993593856eabe755de","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2","filepattern-0.1.3-d9631d8baf926960f6eb6991bc1e7c256a8c1757d9ec9e8cb827d563cf27e3a3","hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","heaps-0.4-492ad633a7c1fd0990246fbd401f8438db0635c4fa550e36cb43b775527c157f","js-dgtable-0.5.2-bfe5ec294647feda55ba2f90bde0d374568a86efba113bfff8363c9e8f34af37","js-flot-0.8.3-6a01b63899fcd71d3e88646c1d9e81ca1d7937cf03770977570987e81b26d8fe","js-jquery-3.3.1-5d3188cc3ebaa3d2976301605f921eb24ec9ca825b83351e4eeb8eb4b22dd9f3","primitive-0.8.0.0-79a029355b4c47f541431a34a60def13110b01ecc59bbb2dd0ae5e832fe524ff","process-1.6.13.2","random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7","utf8-string-1.0.2-3b60297ab3bd0b49e24ff62a4d011e876a1464182bd13b03752e8393de14f237"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.2/shake-0.19.7-e-shake-dffab5914106a6f7d61bd9c25caad4c6fb10925bc51610993593856eabe755de/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-201c59ac932f856499a47c73ffe84a6be5b6dfd5db9ec6182775fe6b945f369c","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.1.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.1.0","ghc-boot-th-9.2.2","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.1.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.1.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.1.0","bytestring-0.11.3.0","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.1.0","deepseq-1.4.6.1","hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-3b60297ab3bd0b49e24ff62a4d011e876a1464182bd13b03752e8393de14f237","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.1.0","bytestring-0.11.3.0"],"exe-depends":[],"component-name":"lib"}]} {"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.2","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-fd6bc24ff3b5f8201c3071f6ca35f332d6b1353852d01e1b4e5ff25db746e149","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.1.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","splitmix-0.1.0.4-201c59ac932f856499a47c73ffe84a6be5b6dfd5db9ec6182775fe6b945f369c","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.1.0"]},{"type":"pre-existing","id":"base-4.16.1.0","pkg-name":"base","pkg-version":"4.16.1.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-7d350effd7294677ead91dcc7892137a82d4e37839e8214dd3d9d4f446d67082","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.16.1.0","bytestring-0.11.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.1.0","bytestring-0.11.3.0","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.0","pkg-name":"bytestring","pkg-version":"0.11.3.0","depends":["base-4.16.1.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-0c7c9e547a146527c99f2e7581131ba32cadfbda0704ef58b7c52090bd8615f6","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.1.0","deepseq-1.4.6.1"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-77d0e0e250721ad8fbb8386cc0b73155a840c70a76fd3c2e042053fa91dd7aa1","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.16.1.0","bytestring-0.11.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-array-byte-0.1.0.1-e7958b903e06231e1e247b429923d80ecc5674ee18a064ad9de8d6edc70e24e5","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.1.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.1.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.1.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.1.0","clock-0.8.3-0c7c9e547a146527c99f2e7581131ba32cadfbda0704ef58b7c52090bd8615f6","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.1.0"]},{"type":"configured","id":"filepattern-0.1.3-d9631d8baf926960f6eb6991bc1e7c256a8c1757d9ec9e8cb827d563cf27e3a3","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.1.0","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.2","pkg-name":"ghc-boot-th","pkg-version":"9.2.2","depends":["base-4.16.1.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-rodrigo/hadrian/."},"dist-dir":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.2/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.2/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-fd6bc24ff3b5f8201c3071f6ca35f332d6b1353852d01e1b4e5ff25db746e149","base-4.16.1.0","base16-bytestring-1.0.2.0-7d350effd7294677ead91dcc7892137a82d4e37839e8214dd3d9d4f446d67082","bytestring-0.11.3.0","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-77d0e0e250721ad8fbb8386cc0b73155a840c70a76fd3c2e042053fa91dd7aa1","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-4ae8d8886d8f99edbfe8169a6bb88c87e09313ef8011e4b71d3da02dba0d9060","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.2/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.1.0","bytestring-0.11.3.0","containers-0.6.5.1","data-array-byte-0.1.0.1-e7958b903e06231e1e247b429923d80ecc5674ee18a064ad9de8d6edc70e24e5","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-492ad633a7c1fd0990246fbd401f8438db0635c4fa550e36cb43b775527c157f","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-bfe5ec294647feda55ba2f90bde0d374568a86efba113bfff8363c9e8f34af37","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-6a01b63899fcd71d3e88646c1d9e81ca1d7937cf03770977570987e81b26d8fe","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-5d3188cc3ebaa3d2976301605f921eb24ec9ca825b83351e4eeb8eb4b22dd9f3","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.1.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.1.0","bytestring-0.11.3.0","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.1.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-79a029355b4c47f541431a34a60def13110b01ecc59bbb2dd0ae5e832fe524ff","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.1.0","data-array-byte-0.1.0.1-e7958b903e06231e1e247b429923d80ecc5674ee18a064ad9de8d6edc70e24e5","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.1.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.1.0","bytestring-0.11.3.0","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-201c59ac932f856499a47c73ffe84a6be5b6dfd5db9ec6182775fe6b945f369c"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-4ae8d8886d8f99edbfe8169a6bb88c87e09313ef8011e4b71d3da02dba0d9060","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2","filepattern-0.1.3-d9631d8baf926960f6eb6991bc1e7c256a8c1757d9ec9e8cb827d563cf27e3a3","hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","heaps-0.4-492ad633a7c1fd0990246fbd401f8438db0635c4fa550e36cb43b775527c157f","js-dgtable-0.5.2-bfe5ec294647feda55ba2f90bde0d374568a86efba113bfff8363c9e8f34af37","js-flot-0.8.3-6a01b63899fcd71d3e88646c1d9e81ca1d7937cf03770977570987e81b26d8fe","js-jquery-3.3.1-5d3188cc3ebaa3d2976301605f921eb24ec9ca825b83351e4eeb8eb4b22dd9f3","primitive-0.8.0.0-79a029355b4c47f541431a34a60def13110b01ecc59bbb2dd0ae5e832fe524ff","process-1.6.13.2","random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7","utf8-string-1.0.2-3b60297ab3bd0b49e24ff62a4d011e876a1464182bd13b03752e8393de14f237"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-dffab5914106a6f7d61bd9c25caad4c6fb10925bc51610993593856eabe755de","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-2ebaa460133d1ef6e5e06bbfa066f8d302f505e4a67498115edf41ac0ce1b283","filepath-1.4.2.2","filepattern-0.1.3-d9631d8baf926960f6eb6991bc1e7c256a8c1757d9ec9e8cb827d563cf27e3a3","hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","heaps-0.4-492ad633a7c1fd0990246fbd401f8438db0635c4fa550e36cb43b775527c157f","js-dgtable-0.5.2-bfe5ec294647feda55ba2f90bde0d374568a86efba113bfff8363c9e8f34af37","js-flot-0.8.3-6a01b63899fcd71d3e88646c1d9e81ca1d7937cf03770977570987e81b26d8fe","js-jquery-3.3.1-5d3188cc3ebaa3d2976301605f921eb24ec9ca825b83351e4eeb8eb4b22dd9f3","primitive-0.8.0.0-79a029355b4c47f541431a34a60def13110b01ecc59bbb2dd0ae5e832fe524ff","process-1.6.13.2","random-1.2.1.1-1a74f78224fb4b9c0290854a02b095a76191148a477857d7f21dcd68e5c2b4cf","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7","utf8-string-1.0.2-3b60297ab3bd0b49e24ff62a4d011e876a1464182bd13b03752e8393de14f237"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.2/shake-0.19.7-e-shake-dffab5914106a6f7d61bd9c25caad4c6fb10925bc51610993593856eabe755de/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-201c59ac932f856499a47c73ffe84a6be5b6dfd5db9ec6182775fe6b945f369c","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.1.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.1.0","ghc-boot-th-9.2.2","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.1.0","binary-0.8.9.0","bytestring-0.11.3.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.1.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.1.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.1.0","bytestring-0.11.3.0","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-86da5900c10586ba66016cb5b90cb5be35eac7b8f8e5d511594e55990fb9b7e7","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.1.0","deepseq-1.4.6.1","hashable-1.4.2.0-9f364f21d03523f32ca22163ac5da2faa0f4cbfda68d9a08c95d216e04119750","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-3b60297ab3bd0b49e24ff62a4d011e876a1464182bd13b03752e8393de14f237","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.1.0","bytestring-0.11.3.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file \ No newline at end of file
{"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.3","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-28383ec8c634951270f884fff9301d3d43ed48bb03153402d1ed50f540469641","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.2.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","splitmix-0.1.0.4-f5816d86b79c25a60eb0e68dec4d61b22701a8b4fd7de88550a4b0606cf31730","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.2.0"]},{"type":"pre-existing","id":"base-4.16.2.0","pkg-name":"base","pkg-version":"4.16.2.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.2.0","bytestring-0.11.3.1","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.1","pkg-name":"bytestring","pkg-version":"0.11.3.1","depends":["base-4.16.2.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-137df44468d5edff5f854d1fdd7a1d931405a677f532203f6514e2afb4e770bc","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.2.0","deepseq-1.4.6.1"]},{"type":"configured","id":"data-array-byte-0.1.0.1-4e207c2b115249dcadfc85271a70e751fcfcae254ff5818252d7353e3d8cb608","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.2.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.2.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.2.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.2.0","clock-0.8.3-137df44468d5edff5f854d1fdd7a1d931405a677f532203f6514e2afb4e770bc","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.2.0"]},{"type":"configured","id":"filepattern-0.1.3-c39c77f00628ef3ce634a34cee62a898b5a2c01b16047d7bfab8cb6aa8c3ed4f","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.2.0","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.3","pkg-name":"ghc-boot-th","pkg-version":"9.2.3","depends":["base-4.16.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-scratch/hadrian/."},"dist-dir":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.3/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.3/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-28383ec8c634951270f884fff9301d3d43ed48bb03153402d1ed50f540469641","base-4.16.2.0","bytestring-0.11.3.1","containers-0.6.5.1","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-08211eabf258a36d817195dd1d55c2ad9c41ba74e9e5a2bfb4d5d440a4779cf2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.3/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.2.0","bytestring-0.11.3.1","containers-0.6.5.1","data-array-byte-0.1.0.1-4e207c2b115249dcadfc85271a70e751fcfcae254ff5818252d7353e3d8cb608","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-d8a49d6a489879d9c4153538b9dce8f05178088f9abe624f0b9b7f1bf9b767bd","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-4ccd577f77dcd9aad5f76085357cbca8fac52265b3de9bef5751e8c318bf1092","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-82abb5a93c9421fbaa227436e44b7f8b7ddc9b9978f04fce90b53c8e0012c6a0","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-3490eb5866089e8998fb0b2aa39a1322039178695f200e12962250c13149e26a","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.2.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.2.0","bytestring-0.11.3.1","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.2.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-b4bd4d9d22d69d55dc4d45ece758a7a938f10a7001e1b9163976d63d2dc558a2","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.2.0","data-array-byte-0.1.0.1-4e207c2b115249dcadfc85271a70e751fcfcae254ff5818252d7353e3d8cb608","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.2.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.2.0","bytestring-0.11.3.1","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-f5816d86b79c25a60eb0e68dec4d61b22701a8b4fd7de88550a4b0606cf31730"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-08211eabf258a36d817195dd1d55c2ad9c41ba74e9e5a2bfb4d5d440a4779cf2","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2","filepattern-0.1.3-c39c77f00628ef3ce634a34cee62a898b5a2c01b16047d7bfab8cb6aa8c3ed4f","hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","heaps-0.4-d8a49d6a489879d9c4153538b9dce8f05178088f9abe624f0b9b7f1bf9b767bd","js-dgtable-0.5.2-4ccd577f77dcd9aad5f76085357cbca8fac52265b3de9bef5751e8c318bf1092","js-flot-0.8.3-82abb5a93c9421fbaa227436e44b7f8b7ddc9b9978f04fce90b53c8e0012c6a0","js-jquery-3.3.1-3490eb5866089e8998fb0b2aa39a1322039178695f200e12962250c13149e26a","primitive-0.8.0.0-b4bd4d9d22d69d55dc4d45ece758a7a938f10a7001e1b9163976d63d2dc558a2","process-1.6.13.2","random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916","utf8-string-1.0.2-118917811093d53a6e91865006ec9fa2038310da3ed3410e4fd66982940e44d0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-5c165ed7345c5b65ece21297581f83d9346c178a28a5419b64162a1356501914","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2","filepattern-0.1.3-c39c77f00628ef3ce634a34cee62a898b5a2c01b16047d7bfab8cb6aa8c3ed4f","hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","heaps-0.4-d8a49d6a489879d9c4153538b9dce8f05178088f9abe624f0b9b7f1bf9b767bd","js-dgtable-0.5.2-4ccd577f77dcd9aad5f76085357cbca8fac52265b3de9bef5751e8c318bf1092","js-flot-0.8.3-82abb5a93c9421fbaa227436e44b7f8b7ddc9b9978f04fce90b53c8e0012c6a0","js-jquery-3.3.1-3490eb5866089e8998fb0b2aa39a1322039178695f200e12962250c13149e26a","primitive-0.8.0.0-b4bd4d9d22d69d55dc4d45ece758a7a938f10a7001e1b9163976d63d2dc558a2","process-1.6.13.2","random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916","utf8-string-1.0.2-118917811093d53a6e91865006ec9fa2038310da3ed3410e4fd66982940e44d0"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.3/shake-0.19.7-e-shake-5c165ed7345c5b65ece21297581f83d9346c178a28a5419b64162a1356501914/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-f5816d86b79c25a60eb0e68dec4d61b22701a8b4fd7de88550a4b0606cf31730","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.2.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.2.0","ghc-boot-th-9.2.3","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.2.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.2.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.2.0","bytestring-0.11.3.1","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.2.0","deepseq-1.4.6.1","hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-118917811093d53a6e91865006ec9fa2038310da3ed3410e4fd66982940e44d0","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.2.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"}]} {"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.3","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-28383ec8c634951270f884fff9301d3d43ed48bb03153402d1ed50f540469641","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.2.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","splitmix-0.1.0.4-f5816d86b79c25a60eb0e68dec4d61b22701a8b4fd7de88550a4b0606cf31730","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.2.0"]},{"type":"pre-existing","id":"base-4.16.2.0","pkg-name":"base","pkg-version":"4.16.2.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-416181c2ef0e3198dfb3cfbd7c326ee1bf6356d2990473873537dade94cb81b3","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.16.2.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.2.0","bytestring-0.11.3.1","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.1","pkg-name":"bytestring","pkg-version":"0.11.3.1","depends":["base-4.16.2.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-137df44468d5edff5f854d1fdd7a1d931405a677f532203f6514e2afb4e770bc","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.2.0","deepseq-1.4.6.1"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-d3fdb48ff5ea6d109a282c25b81369ffa645133c39b66dcf88da5ad16e43b896","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.16.2.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-array-byte-0.1.0.1-4e207c2b115249dcadfc85271a70e751fcfcae254ff5818252d7353e3d8cb608","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.2.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.2.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.2.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.2.0","clock-0.8.3-137df44468d5edff5f854d1fdd7a1d931405a677f532203f6514e2afb4e770bc","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.2.0"]},{"type":"configured","id":"filepattern-0.1.3-c39c77f00628ef3ce634a34cee62a898b5a2c01b16047d7bfab8cb6aa8c3ed4f","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.2.0","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.3","pkg-name":"ghc-boot-th","pkg-version":"9.2.3","depends":["base-4.16.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-rodrigo/hadrian/."},"dist-dir":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.3/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.3/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-28383ec8c634951270f884fff9301d3d43ed48bb03153402d1ed50f540469641","base-4.16.2.0","base16-bytestring-1.0.2.0-416181c2ef0e3198dfb3cfbd7c326ee1bf6356d2990473873537dade94cb81b3","bytestring-0.11.3.1","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-d3fdb48ff5ea6d109a282c25b81369ffa645133c39b66dcf88da5ad16e43b896","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-08211eabf258a36d817195dd1d55c2ad9c41ba74e9e5a2bfb4d5d440a4779cf2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.3/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.2.0","bytestring-0.11.3.1","containers-0.6.5.1","data-array-byte-0.1.0.1-4e207c2b115249dcadfc85271a70e751fcfcae254ff5818252d7353e3d8cb608","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-d8a49d6a489879d9c4153538b9dce8f05178088f9abe624f0b9b7f1bf9b767bd","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-4ccd577f77dcd9aad5f76085357cbca8fac52265b3de9bef5751e8c318bf1092","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-82abb5a93c9421fbaa227436e44b7f8b7ddc9b9978f04fce90b53c8e0012c6a0","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-3490eb5866089e8998fb0b2aa39a1322039178695f200e12962250c13149e26a","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.2.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.2.0","bytestring-0.11.3.1","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.2.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-b4bd4d9d22d69d55dc4d45ece758a7a938f10a7001e1b9163976d63d2dc558a2","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.2.0","data-array-byte-0.1.0.1-4e207c2b115249dcadfc85271a70e751fcfcae254ff5818252d7353e3d8cb608","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.2.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.2.0","bytestring-0.11.3.1","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-f5816d86b79c25a60eb0e68dec4d61b22701a8b4fd7de88550a4b0606cf31730"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-08211eabf258a36d817195dd1d55c2ad9c41ba74e9e5a2bfb4d5d440a4779cf2","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2","filepattern-0.1.3-c39c77f00628ef3ce634a34cee62a898b5a2c01b16047d7bfab8cb6aa8c3ed4f","hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","heaps-0.4-d8a49d6a489879d9c4153538b9dce8f05178088f9abe624f0b9b7f1bf9b767bd","js-dgtable-0.5.2-4ccd577f77dcd9aad5f76085357cbca8fac52265b3de9bef5751e8c318bf1092","js-flot-0.8.3-82abb5a93c9421fbaa227436e44b7f8b7ddc9b9978f04fce90b53c8e0012c6a0","js-jquery-3.3.1-3490eb5866089e8998fb0b2aa39a1322039178695f200e12962250c13149e26a","primitive-0.8.0.0-b4bd4d9d22d69d55dc4d45ece758a7a938f10a7001e1b9163976d63d2dc558a2","process-1.6.13.2","random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916","utf8-string-1.0.2-118917811093d53a6e91865006ec9fa2038310da3ed3410e4fd66982940e44d0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-5c165ed7345c5b65ece21297581f83d9346c178a28a5419b64162a1356501914","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-03735b64c6d5b3b50ba8f2abe4c1af7c3d5cfe799b9d10ac62086256962a28fa","filepath-1.4.2.2","filepattern-0.1.3-c39c77f00628ef3ce634a34cee62a898b5a2c01b16047d7bfab8cb6aa8c3ed4f","hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","heaps-0.4-d8a49d6a489879d9c4153538b9dce8f05178088f9abe624f0b9b7f1bf9b767bd","js-dgtable-0.5.2-4ccd577f77dcd9aad5f76085357cbca8fac52265b3de9bef5751e8c318bf1092","js-flot-0.8.3-82abb5a93c9421fbaa227436e44b7f8b7ddc9b9978f04fce90b53c8e0012c6a0","js-jquery-3.3.1-3490eb5866089e8998fb0b2aa39a1322039178695f200e12962250c13149e26a","primitive-0.8.0.0-b4bd4d9d22d69d55dc4d45ece758a7a938f10a7001e1b9163976d63d2dc558a2","process-1.6.13.2","random-1.2.1.1-40759a416704d10d86283d548100f6265a34bcb854377f345fbde64bf698fad0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916","utf8-string-1.0.2-118917811093d53a6e91865006ec9fa2038310da3ed3410e4fd66982940e44d0"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.3/shake-0.19.7-e-shake-5c165ed7345c5b65ece21297581f83d9346c178a28a5419b64162a1356501914/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-f5816d86b79c25a60eb0e68dec4d61b22701a8b4fd7de88550a4b0606cf31730","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.2.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.2.0","ghc-boot-th-9.2.3","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.2.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.2.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.2.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.2.0","bytestring-0.11.3.1","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-a82a624e45af105b88150facc7651e298009a39b844f8bde51b8dd88cf5b4916","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.2.0","deepseq-1.4.6.1","hashable-1.4.2.0-31f8de08b287590549988e434ce1ffc3d917501f7250186aa981d2c108e32b76","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-118917811093d53a6e91865006ec9fa2038310da3ed3410e4fd66982940e44d0","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.2.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file \ No newline at end of file
{"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.4","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-6d836be05ad916880fe0949228d3c81e9b8f2ca795d2696c492a4c70b5508239","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.3.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","splitmix-0.1.0.4-c5a30dae3b6eb47ac8ba23a866a9ff6f96961c3b68fcb8f53614067e0454a0ed","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.3.0"]},{"type":"pre-existing","id":"base-4.16.3.0","pkg-name":"base","pkg-version":"4.16.3.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.3.0","bytestring-0.11.3.1","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.1","pkg-name":"bytestring","pkg-version":"0.11.3.1","depends":["base-4.16.3.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-e114f0d147804c0f73def6b7e3e0abc1123ce489f19fe058ee0a85d0c30d88b3","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.3.0","deepseq-1.4.6.1"]},{"type":"configured","id":"data-array-byte-0.1.0.1-0817fab8e0aaf64af1a7971c563c38ecb28cc0ab9636107e9ad76dcbeb16da1b","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.3.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.3.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.3.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.3.0","clock-0.8.3-e114f0d147804c0f73def6b7e3e0abc1123ce489f19fe058ee0a85d0c30d88b3","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.3.0"]},{"type":"configured","id":"filepattern-0.1.3-553b0fa2b393f41d7a33e70dc70a212a84b4741694eae595c027e2a0bc506bee","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.3.0","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.4","pkg-name":"ghc-boot-th","pkg-version":"9.2.4","depends":["base-4.16.3.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-scratch/hadrian/."},"dist-dir":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-6d836be05ad916880fe0949228d3c81e9b8f2ca795d2696c492a4c70b5508239","base-4.16.3.0","bytestring-0.11.3.1","containers-0.6.5.1","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-c24bb8b0eb33f2b23d3d2e2c00ee442f0331dc02df435ed6f01ecdd5d90e7c16","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.3.0","bytestring-0.11.3.1","containers-0.6.5.1","data-array-byte-0.1.0.1-0817fab8e0aaf64af1a7971c563c38ecb28cc0ab9636107e9ad76dcbeb16da1b","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-9ef32198cdd1e78830c66145fd58d308d8307d7f9673cf1db51fe0663adea5aa","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-ea71215251f637eb99b420c532ed9d47fc287d0541c7aafb9f4e7e212e22ad28","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-7863d367d217e7fe0af1683d0b88b641c00cfce9045c088f91bd42dc630b880d","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-2a68aa0f8e1547440ea68362a9d21af8f4307038e7d45b7c167ab2cfc9fc74c5","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.3.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.3.0","bytestring-0.11.3.1","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.3.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-80350fff1c8215a379d63da45891f42ed8c7c56918c3616f5a3d952c9565ccd5","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.3.0","data-array-byte-0.1.0.1-0817fab8e0aaf64af1a7971c563c38ecb28cc0ab9636107e9ad76dcbeb16da1b","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.3.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.3.0","bytestring-0.11.3.1","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-c5a30dae3b6eb47ac8ba23a866a9ff6f96961c3b68fcb8f53614067e0454a0ed"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-c24bb8b0eb33f2b23d3d2e2c00ee442f0331dc02df435ed6f01ecdd5d90e7c16","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2","filepattern-0.1.3-553b0fa2b393f41d7a33e70dc70a212a84b4741694eae595c027e2a0bc506bee","hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","heaps-0.4-9ef32198cdd1e78830c66145fd58d308d8307d7f9673cf1db51fe0663adea5aa","js-dgtable-0.5.2-ea71215251f637eb99b420c532ed9d47fc287d0541c7aafb9f4e7e212e22ad28","js-flot-0.8.3-7863d367d217e7fe0af1683d0b88b641c00cfce9045c088f91bd42dc630b880d","js-jquery-3.3.1-2a68aa0f8e1547440ea68362a9d21af8f4307038e7d45b7c167ab2cfc9fc74c5","primitive-0.8.0.0-80350fff1c8215a379d63da45891f42ed8c7c56918c3616f5a3d952c9565ccd5","process-1.6.13.2","random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671","utf8-string-1.0.2-d22b18266988d52549714440c6819d7b11afafcefe4fbf4550bb19de6eaeb0e4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-a14177998667ebf92ef887106b02787b16223d1ae08cbd3e5a9531032831b6ee","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2","filepattern-0.1.3-553b0fa2b393f41d7a33e70dc70a212a84b4741694eae595c027e2a0bc506bee","hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","heaps-0.4-9ef32198cdd1e78830c66145fd58d308d8307d7f9673cf1db51fe0663adea5aa","js-dgtable-0.5.2-ea71215251f637eb99b420c532ed9d47fc287d0541c7aafb9f4e7e212e22ad28","js-flot-0.8.3-7863d367d217e7fe0af1683d0b88b641c00cfce9045c088f91bd42dc630b880d","js-jquery-3.3.1-2a68aa0f8e1547440ea68362a9d21af8f4307038e7d45b7c167ab2cfc9fc74c5","primitive-0.8.0.0-80350fff1c8215a379d63da45891f42ed8c7c56918c3616f5a3d952c9565ccd5","process-1.6.13.2","random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671","utf8-string-1.0.2-d22b18266988d52549714440c6819d7b11afafcefe4fbf4550bb19de6eaeb0e4"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.4/shake-0.19.7-e-shake-a14177998667ebf92ef887106b02787b16223d1ae08cbd3e5a9531032831b6ee/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-c5a30dae3b6eb47ac8ba23a866a9ff6f96961c3b68fcb8f53614067e0454a0ed","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.3.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.3.0","ghc-boot-th-9.2.4","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.3.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.3.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.3.0","bytestring-0.11.3.1","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.3.0","deepseq-1.4.6.1","hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-d22b18266988d52549714440c6819d7b11afafcefe4fbf4550bb19de6eaeb0e4","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.3.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"}]} {"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.4","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-6d836be05ad916880fe0949228d3c81e9b8f2ca795d2696c492a4c70b5508239","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.3.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","splitmix-0.1.0.4-c5a30dae3b6eb47ac8ba23a866a9ff6f96961c3b68fcb8f53614067e0454a0ed","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.3.0"]},{"type":"pre-existing","id":"base-4.16.3.0","pkg-name":"base","pkg-version":"4.16.3.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-d2a3a777ac66ab1aa564a0157178c54aa3d081c41c221bcc7641ef827112df8e","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.16.3.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.3.0","bytestring-0.11.3.1","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.1","pkg-name":"bytestring","pkg-version":"0.11.3.1","depends":["base-4.16.3.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-e114f0d147804c0f73def6b7e3e0abc1123ce489f19fe058ee0a85d0c30d88b3","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.3.0","deepseq-1.4.6.1"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-e4cde5f01f3cb925513d713200a61fe62165acb4796e3832db49c444783074c0","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.16.3.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-array-byte-0.1.0.1-0817fab8e0aaf64af1a7971c563c38ecb28cc0ab9636107e9ad76dcbeb16da1b","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.3.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.3.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.3.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.3.0","clock-0.8.3-e114f0d147804c0f73def6b7e3e0abc1123ce489f19fe058ee0a85d0c30d88b3","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.13.2","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.3.0"]},{"type":"configured","id":"filepattern-0.1.3-553b0fa2b393f41d7a33e70dc70a212a84b4741694eae595c027e2a0bc506bee","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.3.0","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.4","pkg-name":"ghc-boot-th","pkg-version":"9.2.4","depends":["base-4.16.3.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-rodrigo/hadrian/."},"dist-dir":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-6d836be05ad916880fe0949228d3c81e9b8f2ca795d2696c492a4c70b5508239","base-4.16.3.0","base16-bytestring-1.0.2.0-d2a3a777ac66ab1aa564a0157178c54aa3d081c41c221bcc7641ef827112df8e","bytestring-0.11.3.1","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-e4cde5f01f3cb925513d713200a61fe62165acb4796e3832db49c444783074c0","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-c24bb8b0eb33f2b23d3d2e2c00ee442f0331dc02df435ed6f01ecdd5d90e7c16","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.3.0","bytestring-0.11.3.1","containers-0.6.5.1","data-array-byte-0.1.0.1-0817fab8e0aaf64af1a7971c563c38ecb28cc0ab9636107e9ad76dcbeb16da1b","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-9ef32198cdd1e78830c66145fd58d308d8307d7f9673cf1db51fe0663adea5aa","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-ea71215251f637eb99b420c532ed9d47fc287d0541c7aafb9f4e7e212e22ad28","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-7863d367d217e7fe0af1683d0b88b641c00cfce9045c088f91bd42dc630b880d","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-2a68aa0f8e1547440ea68362a9d21af8f4307038e7d45b7c167ab2cfc9fc74c5","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.3.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.3.0","bytestring-0.11.3.1","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.3.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-80350fff1c8215a379d63da45891f42ed8c7c56918c3616f5a3d952c9565ccd5","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.3.0","data-array-byte-0.1.0.1-0817fab8e0aaf64af1a7971c563c38ecb28cc0ab9636107e9ad76dcbeb16da1b","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.16.3.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.3.0","bytestring-0.11.3.1","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-c5a30dae3b6eb47ac8ba23a866a9ff6f96961c3b68fcb8f53614067e0454a0ed"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-c24bb8b0eb33f2b23d3d2e2c00ee442f0331dc02df435ed6f01ecdd5d90e7c16","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2","filepattern-0.1.3-553b0fa2b393f41d7a33e70dc70a212a84b4741694eae595c027e2a0bc506bee","hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","heaps-0.4-9ef32198cdd1e78830c66145fd58d308d8307d7f9673cf1db51fe0663adea5aa","js-dgtable-0.5.2-ea71215251f637eb99b420c532ed9d47fc287d0541c7aafb9f4e7e212e22ad28","js-flot-0.8.3-7863d367d217e7fe0af1683d0b88b641c00cfce9045c088f91bd42dc630b880d","js-jquery-3.3.1-2a68aa0f8e1547440ea68362a9d21af8f4307038e7d45b7c167ab2cfc9fc74c5","primitive-0.8.0.0-80350fff1c8215a379d63da45891f42ed8c7c56918c3616f5a3d952c9565ccd5","process-1.6.13.2","random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671","utf8-string-1.0.2-d22b18266988d52549714440c6819d7b11afafcefe4fbf4550bb19de6eaeb0e4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-a14177998667ebf92ef887106b02787b16223d1ae08cbd3e5a9531032831b6ee","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-30b204f811b2d9236d3796a4afd55e03a0ebcc236d0936fb48954c001a668d85","filepath-1.4.2.2","filepattern-0.1.3-553b0fa2b393f41d7a33e70dc70a212a84b4741694eae595c027e2a0bc506bee","hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","heaps-0.4-9ef32198cdd1e78830c66145fd58d308d8307d7f9673cf1db51fe0663adea5aa","js-dgtable-0.5.2-ea71215251f637eb99b420c532ed9d47fc287d0541c7aafb9f4e7e212e22ad28","js-flot-0.8.3-7863d367d217e7fe0af1683d0b88b641c00cfce9045c088f91bd42dc630b880d","js-jquery-3.3.1-2a68aa0f8e1547440ea68362a9d21af8f4307038e7d45b7c167ab2cfc9fc74c5","primitive-0.8.0.0-80350fff1c8215a379d63da45891f42ed8c7c56918c3616f5a3d952c9565ccd5","process-1.6.13.2","random-1.2.1.1-cacc1501582bd05c5eec5dea004194a2d9ff55cb8e30c141ffdbf5e9daaf76af","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671","utf8-string-1.0.2-d22b18266988d52549714440c6819d7b11afafcefe4fbf4550bb19de6eaeb0e4"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.4/shake-0.19.7-e-shake-a14177998667ebf92ef887106b02787b16223d1ae08cbd3e5a9531032831b6ee/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-c5a30dae3b6eb47ac8ba23a866a9ff6f96961c3b68fcb8f53614067e0454a0ed","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.3.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.3.0","ghc-boot-th-9.2.4","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.3.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.3.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.3.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.3.0","bytestring-0.11.3.1","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-685b2b9941ba1dbca71c41b7b129599fa9e60a37ae0cee284194ab113d2ea671","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.3.0","deepseq-1.4.6.1","hashable-1.4.2.0-1717d4bc84bbd91e502a6a1d0fbbe9b2913f122572feea473d06f64594b446ec","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-d22b18266988d52549714440c6819d7b11afafcefe4fbf4550bb19de6eaeb0e4","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.3.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file \ No newline at end of file
{"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.5","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.16.0","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-a60570c1dc670dd11ee37ddb50cca2b8e1507fbfd3533a81c0d15b3e979210d9","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.4.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","splitmix-0.1.0.4-05e94c68071a79f6544a1eb40799e77fc0303dc95f5ca42c8c0e018ecfa089b5","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"base-4.16.4.0","pkg-name":"base","pkg-version":"4.16.4.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.4.0","bytestring-0.11.3.1","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.1","pkg-name":"bytestring","pkg-version":"0.11.3.1","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-215ec906b409ed911e369445f74ad918e85cd7b8092968f82c1604247e0b0fcd","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"configured","id":"data-array-byte-0.1.0.1-d7b8f065d09e7600a2fd18c6f110ad2e9c224dc7abeb08598e439eae971a67a4","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.4.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.4.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.4.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.4.0","clock-0.8.3-215ec906b409ed911e369445f74ad918e85cd7b8092968f82c1604247e0b0fcd","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.16.0","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.4.0"]},{"type":"configured","id":"filepattern-0.1.3-9fd7bc2eeb28ea202ee356e42d64124a8d75f39744aba252872ec5069448ff53","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.4.0","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.5","pkg-name":"ghc-boot-th","pkg-version":"9.2.5","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-scratch/hadrian/."},"dist-dir":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.5/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.5/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-a60570c1dc670dd11ee37ddb50cca2b8e1507fbfd3533a81c0d15b3e979210d9","base-4.16.4.0","bytestring-0.11.3.1","containers-0.6.5.1","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-d5ed83c858bf166c2267f32ca7608d79b8ca2402f05e75acba55d9c6a59cf591","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.5/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.4.0","bytestring-0.11.3.1","containers-0.6.5.1","data-array-byte-0.1.0.1-d7b8f065d09e7600a2fd18c6f110ad2e9c224dc7abeb08598e439eae971a67a4","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-c5219f46f5acc26739c28a1d2d3173defe4290dc709c72d7420452f4ca3cdb15","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-6717f236827988762b171655a351e0a3db4d4ff00cbba6c248ee24870e49a222","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-3f91fca8ca3efea1322bbf30309f3f31075f84e270d14a14699fdf5c8af727bc","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-b79aaacdca50f9d6c80a5a81cbf0facb6d3babc309abd7c4829e511c58413d5d","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.4.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.4.0","bytestring-0.11.3.1","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-653648ffbc2bb5880dce88aae02fcd60a85d12a5e665e103a4604adbc2276599","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.4.0","data-array-byte-0.1.0.1-d7b8f065d09e7600a2fd18c6f110ad2e9c224dc7abeb08598e439eae971a67a4","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.16.0","pkg-name":"process","pkg-version":"1.6.16.0","depends":["base-4.16.4.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.4.0","bytestring-0.11.3.1","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-05e94c68071a79f6544a1eb40799e77fc0303dc95f5ca42c8c0e018ecfa089b5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-d5ed83c858bf166c2267f32ca7608d79b8ca2402f05e75acba55d9c6a59cf591","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2","filepattern-0.1.3-9fd7bc2eeb28ea202ee356e42d64124a8d75f39744aba252872ec5069448ff53","hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","heaps-0.4-c5219f46f5acc26739c28a1d2d3173defe4290dc709c72d7420452f4ca3cdb15","js-dgtable-0.5.2-6717f236827988762b171655a351e0a3db4d4ff00cbba6c248ee24870e49a222","js-flot-0.8.3-3f91fca8ca3efea1322bbf30309f3f31075f84e270d14a14699fdf5c8af727bc","js-jquery-3.3.1-b79aaacdca50f9d6c80a5a81cbf0facb6d3babc309abd7c4829e511c58413d5d","primitive-0.8.0.0-653648ffbc2bb5880dce88aae02fcd60a85d12a5e665e103a4604adbc2276599","process-1.6.16.0","random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587","utf8-string-1.0.2-6da47bc6d69d238101f1e6a89229b2565caafca0fff03fece9abd3304b0d2641"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-763e20a0677eb65ee96d570cfde80013759112dca97001cf52844e1a5caf8870","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2","filepattern-0.1.3-9fd7bc2eeb28ea202ee356e42d64124a8d75f39744aba252872ec5069448ff53","hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","heaps-0.4-c5219f46f5acc26739c28a1d2d3173defe4290dc709c72d7420452f4ca3cdb15","js-dgtable-0.5.2-6717f236827988762b171655a351e0a3db4d4ff00cbba6c248ee24870e49a222","js-flot-0.8.3-3f91fca8ca3efea1322bbf30309f3f31075f84e270d14a14699fdf5c8af727bc","js-jquery-3.3.1-b79aaacdca50f9d6c80a5a81cbf0facb6d3babc309abd7c4829e511c58413d5d","primitive-0.8.0.0-653648ffbc2bb5880dce88aae02fcd60a85d12a5e665e103a4604adbc2276599","process-1.6.16.0","random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587","utf8-string-1.0.2-6da47bc6d69d238101f1e6a89229b2565caafca0fff03fece9abd3304b0d2641"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.5/shake-0.19.7-e-shake-763e20a0677eb65ee96d570cfde80013759112dca97001cf52844e1a5caf8870/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-05e94c68071a79f6544a1eb40799e77fc0303dc95f5ca42c8c0e018ecfa089b5","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.4.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.4.0","ghc-boot-th-9.2.5","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.4.0","bytestring-0.11.3.1","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.4.0","deepseq-1.4.6.1","hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-6da47bc6d69d238101f1e6a89229b2565caafca0fff03fece9abd3304b0d2641","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.4.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"}]} {"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.5","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.16.0","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-a60570c1dc670dd11ee37ddb50cca2b8e1507fbfd3533a81c0d15b3e979210d9","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.4.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","splitmix-0.1.0.4-05e94c68071a79f6544a1eb40799e77fc0303dc95f5ca42c8c0e018ecfa089b5","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"base-4.16.4.0","pkg-name":"base","pkg-version":"4.16.4.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-7c01b96bee3990467711e9210569522a67be8600958052b3b662eb864dedb587","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.16.4.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.4.0","bytestring-0.11.3.1","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.3.1","pkg-name":"bytestring","pkg-version":"0.11.3.1","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-215ec906b409ed911e369445f74ad918e85cd7b8092968f82c1604247e0b0fcd","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-fc2c91005ee6c3bbec04cf608246c372198e6571bd2e0086cd14458e1c64bc91","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.16.4.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-array-byte-0.1.0.1-d7b8f065d09e7600a2fd18c6f110ad2e9c224dc7abeb08598e439eae971a67a4","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.4.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.4.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.4.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.4.0","clock-0.8.3-215ec906b409ed911e369445f74ad918e85cd7b8092968f82c1604247e0b0fcd","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.16.0","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.4.0"]},{"type":"configured","id":"filepattern-0.1.3-9fd7bc2eeb28ea202ee356e42d64124a8d75f39744aba252872ec5069448ff53","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.4.0","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.5","pkg-name":"ghc-boot-th","pkg-version":"9.2.5","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-rodrigo/hadrian/."},"dist-dir":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.5/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.5/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-a60570c1dc670dd11ee37ddb50cca2b8e1507fbfd3533a81c0d15b3e979210d9","base-4.16.4.0","base16-bytestring-1.0.2.0-7c01b96bee3990467711e9210569522a67be8600958052b3b662eb864dedb587","bytestring-0.11.3.1","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-fc2c91005ee6c3bbec04cf608246c372198e6571bd2e0086cd14458e1c64bc91","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-d5ed83c858bf166c2267f32ca7608d79b8ca2402f05e75acba55d9c6a59cf591","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.5/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.4.0","bytestring-0.11.3.1","containers-0.6.5.1","data-array-byte-0.1.0.1-d7b8f065d09e7600a2fd18c6f110ad2e9c224dc7abeb08598e439eae971a67a4","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-c5219f46f5acc26739c28a1d2d3173defe4290dc709c72d7420452f4ca3cdb15","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-6717f236827988762b171655a351e0a3db4d4ff00cbba6c248ee24870e49a222","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-3f91fca8ca3efea1322bbf30309f3f31075f84e270d14a14699fdf5c8af727bc","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-b79aaacdca50f9d6c80a5a81cbf0facb6d3babc309abd7c4829e511c58413d5d","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.4.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.4.0","bytestring-0.11.3.1","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-653648ffbc2bb5880dce88aae02fcd60a85d12a5e665e103a4604adbc2276599","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.4.0","data-array-byte-0.1.0.1-d7b8f065d09e7600a2fd18c6f110ad2e9c224dc7abeb08598e439eae971a67a4","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.16.0","pkg-name":"process","pkg-version":"1.6.16.0","depends":["base-4.16.4.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.4.0","bytestring-0.11.3.1","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-05e94c68071a79f6544a1eb40799e77fc0303dc95f5ca42c8c0e018ecfa089b5"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-d5ed83c858bf166c2267f32ca7608d79b8ca2402f05e75acba55d9c6a59cf591","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2","filepattern-0.1.3-9fd7bc2eeb28ea202ee356e42d64124a8d75f39744aba252872ec5069448ff53","hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","heaps-0.4-c5219f46f5acc26739c28a1d2d3173defe4290dc709c72d7420452f4ca3cdb15","js-dgtable-0.5.2-6717f236827988762b171655a351e0a3db4d4ff00cbba6c248ee24870e49a222","js-flot-0.8.3-3f91fca8ca3efea1322bbf30309f3f31075f84e270d14a14699fdf5c8af727bc","js-jquery-3.3.1-b79aaacdca50f9d6c80a5a81cbf0facb6d3babc309abd7c4829e511c58413d5d","primitive-0.8.0.0-653648ffbc2bb5880dce88aae02fcd60a85d12a5e665e103a4604adbc2276599","process-1.6.16.0","random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587","utf8-string-1.0.2-6da47bc6d69d238101f1e6a89229b2565caafca0fff03fece9abd3304b0d2641"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-763e20a0677eb65ee96d570cfde80013759112dca97001cf52844e1a5caf8870","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-0b85ca5767dc2461848ebe03542bc268b1ae5936dc02db50abd46225b9124742","filepath-1.4.2.2","filepattern-0.1.3-9fd7bc2eeb28ea202ee356e42d64124a8d75f39744aba252872ec5069448ff53","hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","heaps-0.4-c5219f46f5acc26739c28a1d2d3173defe4290dc709c72d7420452f4ca3cdb15","js-dgtable-0.5.2-6717f236827988762b171655a351e0a3db4d4ff00cbba6c248ee24870e49a222","js-flot-0.8.3-3f91fca8ca3efea1322bbf30309f3f31075f84e270d14a14699fdf5c8af727bc","js-jquery-3.3.1-b79aaacdca50f9d6c80a5a81cbf0facb6d3babc309abd7c4829e511c58413d5d","primitive-0.8.0.0-653648ffbc2bb5880dce88aae02fcd60a85d12a5e665e103a4604adbc2276599","process-1.6.16.0","random-1.2.1.1-885807a6bd9d41e8fc2e75d8dd80c9e20b0ba1730d05301809f964023485f9cd","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587","utf8-string-1.0.2-6da47bc6d69d238101f1e6a89229b2565caafca0fff03fece9abd3304b0d2641"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.5/shake-0.19.7-e-shake-763e20a0677eb65ee96d570cfde80013759112dca97001cf52844e1a5caf8870/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-05e94c68071a79f6544a1eb40799e77fc0303dc95f5ca42c8c0e018ecfa089b5","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.4.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.4.0","ghc-boot-th-9.2.5","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.3.1","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.4.0","bytestring-0.11.3.1","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-e17e4eaa57041cf90fa7c8c76a10acb176295004933e8ee0b6f66d3f5c723587","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.4.0","deepseq-1.4.6.1","hashable-1.4.2.0-cd83efde5acf8903e5c98006b3dc0a9ad0c59df25dc4cfb7a8637e6a72487748","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-6da47bc6d69d238101f1e6a89229b2565caafca0fff03fece9abd3304b0d2641","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.4.0","bytestring-0.11.3.1"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file \ No newline at end of file
{"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.6","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.16.0","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-dbf4e30d0f90ef756fef51f4f1bf54e3607173d3481dd3c987da144134a63713","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.4.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","splitmix-0.1.0.4-30a75f98727f2d9f7b9de56e43dd113516fbffc60c17373cee8309561b81e7b8","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"base-4.16.4.0","pkg-name":"base","pkg-version":"4.16.4.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.4.0","bytestring-0.11.4.0","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.4.0","pkg-name":"bytestring","pkg-version":"0.11.4.0","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-51184a0b8e3da6909a58729bce876ef04e7fdfb4f068846e068f1f28f5be93d0","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"configured","id":"data-array-byte-0.1.0.1-19afe996f4ddff3223a47504ed51afc89f5e0694562791e69a27a9cc24b1588a","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.4.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.4.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.4.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.4.0","clock-0.8.3-51184a0b8e3da6909a58729bce876ef04e7fdfb4f068846e068f1f28f5be93d0","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.16.0","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.4.0"]},{"type":"configured","id":"filepattern-0.1.3-88b6a53592df8db19f164cf8de0983223dfff65cbb03c310395452419a9813f4","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.4.0","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.6","pkg-name":"ghc-boot-th","pkg-version":"9.2.6","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-scratch/hadrian/."},"dist-dir":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.6/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.6/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-dbf4e30d0f90ef756fef51f4f1bf54e3607173d3481dd3c987da144134a63713","base-4.16.4.0","bytestring-0.11.4.0","containers-0.6.5.1","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-19ef30bd9d7b6fcbbe892dd93cb2d28f815b0be7b47977ee7d9816cfdcfcd09a","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-scratch/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.6/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.4.0","bytestring-0.11.4.0","containers-0.6.5.1","data-array-byte-0.1.0.1-19afe996f4ddff3223a47504ed51afc89f5e0694562791e69a27a9cc24b1588a","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-f944fb96ddf3968b74669ff011af10699a1ad53f2605e1f2c5cccaa520c95e54","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-b8b104268fe2193cf0705b12d31ab633f8408aa17a120d695b584f4c96fe7d7a","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-bdd0af7321ae47d17c390fb23407fb78dddefd0c1c5b49450951aa648f1c0e0d","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-00fdc81d3faf92a360d7d5fb09dbdbf8059badd5804fbc233475acd8f8938054","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.4.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.4.0","bytestring-0.11.4.0","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-1efadc0efc23d362dfd242f77ddb53a0577d151a5e5ec98bb5fbb51317ce4be8","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.4.0","data-array-byte-0.1.0.1-19afe996f4ddff3223a47504ed51afc89f5e0694562791e69a27a9cc24b1588a","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.16.0","pkg-name":"process","pkg-version":"1.6.16.0","depends":["base-4.16.4.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.4.0","bytestring-0.11.4.0","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-30a75f98727f2d9f7b9de56e43dd113516fbffc60c17373cee8309561b81e7b8"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-19ef30bd9d7b6fcbbe892dd93cb2d28f815b0be7b47977ee7d9816cfdcfcd09a","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2","filepattern-0.1.3-88b6a53592df8db19f164cf8de0983223dfff65cbb03c310395452419a9813f4","hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","heaps-0.4-f944fb96ddf3968b74669ff011af10699a1ad53f2605e1f2c5cccaa520c95e54","js-dgtable-0.5.2-b8b104268fe2193cf0705b12d31ab633f8408aa17a120d695b584f4c96fe7d7a","js-flot-0.8.3-bdd0af7321ae47d17c390fb23407fb78dddefd0c1c5b49450951aa648f1c0e0d","js-jquery-3.3.1-00fdc81d3faf92a360d7d5fb09dbdbf8059badd5804fbc233475acd8f8938054","primitive-0.8.0.0-1efadc0efc23d362dfd242f77ddb53a0577d151a5e5ec98bb5fbb51317ce4be8","process-1.6.16.0","random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f","utf8-string-1.0.2-742296c0dfd2738ece0c8a465cb13192f7efda7fe7f44a9e6434aae216745eb9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-5c28b3253611a7e66f56657b8abf418143b5cad9803d07c6ea9adcd168672d99","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2","filepattern-0.1.3-88b6a53592df8db19f164cf8de0983223dfff65cbb03c310395452419a9813f4","hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","heaps-0.4-f944fb96ddf3968b74669ff011af10699a1ad53f2605e1f2c5cccaa520c95e54","js-dgtable-0.5.2-b8b104268fe2193cf0705b12d31ab633f8408aa17a120d695b584f4c96fe7d7a","js-flot-0.8.3-bdd0af7321ae47d17c390fb23407fb78dddefd0c1c5b49450951aa648f1c0e0d","js-jquery-3.3.1-00fdc81d3faf92a360d7d5fb09dbdbf8059badd5804fbc233475acd8f8938054","primitive-0.8.0.0-1efadc0efc23d362dfd242f77ddb53a0577d151a5e5ec98bb5fbb51317ce4be8","process-1.6.16.0","random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f","utf8-string-1.0.2-742296c0dfd2738ece0c8a465cb13192f7efda7fe7f44a9e6434aae216745eb9"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.6/shake-0.19.7-e-shake-5c28b3253611a7e66f56657b8abf418143b5cad9803d07c6ea9adcd168672d99/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-30a75f98727f2d9f7b9de56e43dd113516fbffc60c17373cee8309561b81e7b8","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.4.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.4.0","ghc-boot-th-9.2.6","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.4.0","bytestring-0.11.4.0","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.4.0","deepseq-1.4.6.1","hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-742296c0dfd2738ece0c8a465cb13192f7efda7fe7f44a9e6434aae216745eb9","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.4.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"}]} {"cabal-version":"3.8.1.0","cabal-lib-version":"3.8.1.0","compiler-id":"ghc-9.2.6","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.6.3.0","pkg-name":"Cabal","pkg-version":"3.6.3.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","containers-0.6.5.1","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","pretty-1.1.3.6","process-1.6.16.0","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"QuickCheck-2.14.2-dbf4e30d0f90ef756fef51f4f1bf54e3607173d3481dd3c987da144134a63713","pkg-name":"QuickCheck","pkg-version":"2.14.2","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4ce29211223d5e6620ebceba34a3ca9ccf1c10c0cf387d48aea45599222ee5aa","pkg-src-sha256":"d87b6c85696b601175274361fa62217894401e401e150c3c5d4013ac53cd36f3","depends":["base-4.16.4.0","containers-0.6.5.1","deepseq-1.4.6.1","random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","splitmix-0.1.0.4-30a75f98727f2d9f7b9de56e43dd113516fbffc60c17373cee8309561b81e7b8","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"base-4.16.4.0","pkg-name":"base","pkg-version":"4.16.4.0","depends":["ghc-bignum-1.2","ghc-prim-0.8.0","rts"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-1d1fd135a0eeb482c8dce3fef355d02cb3d02c1f65c92e9c41e3dafc3d059abb","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.16.4.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.0","pkg-name":"binary","pkg-version":"0.8.9.0","depends":["array-0.5.4.0","base-4.16.4.0","bytestring-0.11.4.0","containers-0.6.5.1"]},{"type":"pre-existing","id":"bytestring-0.11.4.0","pkg-name":"bytestring","pkg-version":"0.11.4.0","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"configured","id":"clock-0.8.3-51184a0b8e3da6909a58729bce876ef04e7fdfb4f068846e068f1f28f5be93d0","pkg-name":"clock","pkg-version":"0.8.3","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a692159828c2cd278eaec317b3a7e9fb6d7b787c8a19f086004d15d9fa1fd72c","pkg-src-sha256":"845ce5db4c98cefd517323e005f87effceff886987305e421c4ef616dc0505d1","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-5790921775b531d24a0bbc9d8248feabb687a3fa23f170a8244612b884725ba5","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.16.4.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-array-byte-0.1.0.1-19afe996f4ddff3223a47504ed51afc89f5e0694562791e69a27a9cc24b1588a","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.16.4.0","deepseq-1.4.6.1","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.6.1","pkg-name":"deepseq","pkg-version":"1.4.6.1","depends":["array-0.5.4.0","base-4.16.4.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.16.4.0","filepath-1.4.2.2","time-1.11.1.1","unix-2.7.2.2"]},{"type":"configured","id":"extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","pkg-name":"extra","pkg-version":"1.7.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3ac58d7341976173d1052e7b2837d119212d9afcf911735667c7f1ab67aec25f","pkg-src-sha256":"e571a9ec1d8865f0fbb0e0ba1eb575f783b0365c80db19b54a93600bae43b03c","depends":["base-4.16.4.0","clock-0.8.3-51184a0b8e3da6909a58729bce876ef04e7fdfb4f068846e068f1f28f5be93d0","directory-1.3.6.2","filepath-1.4.2.2","process-1.6.16.0","time-1.11.1.1","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.16.4.0"]},{"type":"configured","id":"filepattern-0.1.3-88b6a53592df8db19f164cf8de0983223dfff65cbb03c310395452419a9813f4","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.16.4.0","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.2","pkg-name":"ghc-bignum","pkg-version":"1.2","depends":["ghc-prim-0.8.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.2.6","pkg-name":"ghc-boot-th","pkg-version":"9.2.6","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"ghc-prim-0.8.0","pkg-name":"ghc-prim","pkg-version":"0.8.0","depends":["rts"]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"/home/matt/ghc-rodrigo/hadrian/."},"dist-dir":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.6/hadrian-0.1.0.0/x/hadrian","build-info":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.6/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.6.3.0","QuickCheck-2.14.2-dbf4e30d0f90ef756fef51f4f1bf54e3607173d3481dd3c987da144134a63713","base-4.16.4.0","base16-bytestring-1.0.2.0-1d1fd135a0eeb482c8dce3fef355d02cb3d02c1f65c92e9c41e3dafc3d059abb","bytestring-0.11.4.0","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-5790921775b531d24a0bbc9d8248feabb687a3fa23f170a8244612b884725ba5","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2","mtl-2.2.2","parsec-3.1.15.0","shake-0.19.7-19ef30bd9d7b6fcbbe892dd93cb2d28f815b0be7b47977ee7d9816cfdcfcd09a","text-1.2.5.0","time-1.11.1.1","transformers-0.5.6.2","unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"/home/matt/ghc-rodrigo/hadrian/dist-newstyle/build/x86_64-linux/ghc-9.2.6/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","pkg-name":"hashable","pkg-version":"1.4.2.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a","pkg-src-sha256":"1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8","depends":["base-4.16.4.0","bytestring-0.11.4.0","containers-0.6.5.1","data-array-byte-0.1.0.1-19afe996f4ddff3223a47504ed51afc89f5e0694562791e69a27a9cc24b1588a","deepseq-1.4.6.1","filepath-1.4.2.2","ghc-bignum-1.2","ghc-prim-0.8.0","text-1.2.5.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-f944fb96ddf3968b74669ff011af10699a1ad53f2605e1f2c5cccaa520c95e54","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-b8b104268fe2193cf0705b12d31ab633f8408aa17a120d695b584f4c96fe7d7a","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-bdd0af7321ae47d17c390fb23407fb78dddefd0c1c5b49450951aa648f1c0e0d","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-00fdc81d3faf92a360d7d5fb09dbdbf8059badd5804fbc233475acd8f8938054","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.16.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.16.4.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.15.0","pkg-name":"parsec","pkg-version":"3.1.15.0","depends":["base-4.16.4.0","bytestring-0.11.4.0","mtl-2.2.2","text-1.2.5.0"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.16.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0"]},{"type":"configured","id":"primitive-0.8.0.0-1efadc0efc23d362dfd242f77ddb53a0577d151a5e5ec98bb5fbb51317ce4be8","pkg-name":"primitive","pkg-version":"0.8.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"826bf2a702a26ef87532a135808abad69d74f70ead39f26c06d034b1f0537a19","pkg-src-sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","depends":["base-4.16.4.0","data-array-byte-0.1.0.1-19afe996f4ddff3223a47504ed51afc89f5e0694562791e69a27a9cc24b1588a","deepseq-1.4.6.1","template-haskell-2.18.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.16.0","pkg-name":"process","pkg-version":"1.6.16.0","depends":["base-4.16.4.0","deepseq-1.4.6.1","directory-1.3.6.2","filepath-1.4.2.2","unix-2.7.2.2"]},{"type":"configured","id":"random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.16.4.0","bytestring-0.11.4.0","deepseq-1.4.6.1","mtl-2.2.2","splitmix-0.1.0.4-30a75f98727f2d9f7b9de56e43dd113516fbffc60c17373cee8309561b81e7b8"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"configured","id":"shake-0.19.7-19ef30bd9d7b6fcbbe892dd93cb2d28f815b0be7b47977ee7d9816cfdcfcd09a","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2","filepattern-0.1.3-88b6a53592df8db19f164cf8de0983223dfff65cbb03c310395452419a9813f4","hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","heaps-0.4-f944fb96ddf3968b74669ff011af10699a1ad53f2605e1f2c5cccaa520c95e54","js-dgtable-0.5.2-b8b104268fe2193cf0705b12d31ab633f8408aa17a120d695b584f4c96fe7d7a","js-flot-0.8.3-bdd0af7321ae47d17c390fb23407fb78dddefd0c1c5b49450951aa648f1c0e0d","js-jquery-3.3.1-00fdc81d3faf92a360d7d5fb09dbdbf8059badd5804fbc233475acd8f8938054","primitive-0.8.0.0-1efadc0efc23d362dfd242f77ddb53a0577d151a5e5ec98bb5fbb51317ce4be8","process-1.6.16.0","random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f","utf8-string-1.0.2-742296c0dfd2738ece0c8a465cb13192f7efda7fe7f44a9e6434aae216745eb9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-5c28b3253611a7e66f56657b8abf418143b5cad9803d07c6ea9adcd168672d99","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","deepseq-1.4.6.1","directory-1.3.6.2","extra-1.7.12-ea9c6151e5a3affa242ee8590b18355cc4cdeb870899139465792a4abda08abb","filepath-1.4.2.2","filepattern-0.1.3-88b6a53592df8db19f164cf8de0983223dfff65cbb03c310395452419a9813f4","hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","heaps-0.4-f944fb96ddf3968b74669ff011af10699a1ad53f2605e1f2c5cccaa520c95e54","js-dgtable-0.5.2-b8b104268fe2193cf0705b12d31ab633f8408aa17a120d695b584f4c96fe7d7a","js-flot-0.8.3-bdd0af7321ae47d17c390fb23407fb78dddefd0c1c5b49450951aa648f1c0e0d","js-jquery-3.3.1-00fdc81d3faf92a360d7d5fb09dbdbf8059badd5804fbc233475acd8f8938054","primitive-0.8.0.0-1efadc0efc23d362dfd242f77ddb53a0577d151a5e5ec98bb5fbb51317ce4be8","process-1.6.16.0","random-1.2.1.1-64a40e4c6fddbdba903cad1f5e5ab403dd367c26f0ddd1add672cdd6d81a6f02","time-1.11.1.1","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f","utf8-string-1.0.2-742296c0dfd2738ece0c8a465cb13192f7efda7fe7f44a9e6434aae216745eb9"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/home/matt/.cabal/store/ghc-9.2.6/shake-0.19.7-e-shake-5c28b3253611a7e66f56657b8abf418143b5cad9803d07c6ea9adcd168672d99/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.4-30a75f98727f2d9f7b9de56e43dd113516fbffc60c17373cee8309561b81e7b8","pkg-name":"splitmix","pkg-version":"0.1.0.4","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e","pkg-src-sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","depends":["base-4.16.4.0","deepseq-1.4.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.18.0.0","pkg-name":"template-haskell","pkg-version":"2.18.0.0","depends":["base-4.16.4.0","ghc-boot-th-9.2.6","ghc-prim-0.8.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.5.0","pkg-name":"text","pkg-version":"1.2.5.0","depends":["array-0.5.4.0","base-4.16.4.0","binary-0.8.9.0","bytestring-0.11.4.0","deepseq-1.4.6.1","ghc-prim-0.8.0","template-haskell-2.18.0.0"]},{"type":"pre-existing","id":"time-1.11.1.1","pkg-name":"time","pkg-version":"1.11.1.1","depends":["base-4.16.4.0","deepseq-1.4.6.1"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.16.4.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.16.4.0","bytestring-0.11.4.0","time-1.11.1.1"]},{"type":"configured","id":"unordered-containers-0.2.19.1-591ed294851193b09a8296073425c72717ca11a2e00fd2b4f1657dcebb64420f","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.16.4.0","deepseq-1.4.6.1","hashable-1.4.2.0-219a6123a837b28f223d0cb19a87b11bc91fe8ce450c51a52f616cdd71344a6b","template-haskell-2.18.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-742296c0dfd2738ece0c8a465cb13192f7efda7fe7f44a9e6434aae216745eb9","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.16.4.0","bytestring-0.11.4.0"],"exe-depends":[],"component-name":"lib"}]}
\ No newline at end of file \ No newline at end of file