2021/12/16

2021-12-16 00:00:56 +0100avidela(~textual@88.98.244.170)
2021-12-16 00:02:43 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
2021-12-16 00:03:09 +0100avidela(~textual@88.98.244.170) (Client Quit)
2021-12-16 00:06:30 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-16 00:08:41 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-16 00:10:40 +0100hololeap_(~hololeap@user/hololeap)
2021-12-16 00:10:57 +0100hololeap_hololeap
2021-12-16 00:16:44 +0100alx741(~alx741@157.100.93.160)
2021-12-16 00:16:53 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2021-12-16 00:19:45 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac) (Remote host closed the connection)
2021-12-16 00:20:12 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-12-16 00:20:17 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-16 00:21:16 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 00:21:29 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
2021-12-16 00:21:59 +0100sagax(~sagax_nb@user/sagax)
2021-12-16 00:22:31 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 00:24:09 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-16 00:26:37 +0100ubert(~Thunderbi@p200300ecdf1abb061518ea9ba8d342d1.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2021-12-16 00:26:37 +0100ububert
2021-12-16 00:27:05 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-12-16 00:27:44 +0100 <Axman6> Hecate: isn't that soimething that pg_config can do for you?
2021-12-16 00:28:33 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac)
2021-12-16 00:29:22 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-12-16 00:31:06 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-12-16 00:31:27 +0100pfurla(~pfurla@177.25.189.1)
2021-12-16 00:32:29 +0100Inst(~Inst@2601:6c4:4080:3f80:7939:82b5:8236:6c32) (Remote host closed the connection)
2021-12-16 00:32:46 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d)
2021-12-16 00:34:14 +0100cosimone(~user@93-47-228-203.ip115.fastwebnet.it) (Ping timeout: 252 seconds)
2021-12-16 00:34:38 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-16 00:37:04 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d) (Remote host closed the connection)
2021-12-16 00:37:22 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d)
2021-12-16 00:37:39 +0100alx741(~alx741@157.100.93.160)
2021-12-16 00:40:46 +0100Ainoretho(~ypw@huji-132-64-244-88.xt.huji.ac.il) (Ping timeout: 245 seconds)
2021-12-16 00:42:29 +0100gentauro(~gentauro@user/gentauro) (Ping timeout: 252 seconds)
2021-12-16 00:42:29 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 00:42:46 +0100gentauro_(~gentauro@185.107.12.141) (Ping timeout: 268 seconds)
2021-12-16 00:43:30 +0100notzmv(~zmv@user/notzmv)
2021-12-16 00:45:01 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
2021-12-16 00:45:07 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d) (Read error: Connection reset by peer)
2021-12-16 00:45:25 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d)
2021-12-16 00:45:49 +0100 <janus> Axman6: how do you call pg_config from cabal.project? does it have shell interpolation :O ?
2021-12-16 00:47:01 +0100Jing_(~hedgehog@2604:a840:3::103e) (Remote host closed the connection)
2021-12-16 00:47:41 +0100Jing(~hedgehog@2604:a840:3::103e)
2021-12-16 00:49:29 +0100 <geekosaur> ideally whatever it is that actually needs it would call it itself
2021-12-16 00:49:38 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d) (Ping timeout: 252 seconds)
2021-12-16 00:49:43 +0100 <geekosaur> then again that probably requires custom Setup
2021-12-16 00:52:46 +0100Tuplanolla(~Tuplanoll@91-159-68-169.elisa-laajakaista.fi)
2021-12-16 00:54:33 +0100Guest27(~Guest27@cpc148070-lewi21-2-0-cust347.2-4.cable.virginm.net)
2021-12-16 00:55:55 +0100Guest27(~Guest27@cpc148070-lewi21-2-0-cust347.2-4.cable.virginm.net) (Client Quit)
2021-12-16 01:00:03 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac) (*.net *.split)
2021-12-16 01:00:03 +0100pfurla[m](uid345156@id-345156.tinside.irccloud.com) (*.net *.split)
2021-12-16 01:00:03 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (*.net *.split)
2021-12-16 01:00:03 +0100benin(~benin@183.82.204.250) (*.net *.split)
2021-12-16 01:00:03 +0100jkaye(~jkaye@2601:281:8300:7530:7bc1:436b:e88b:37f9) (*.net *.split)
2021-12-16 01:00:03 +0100zmt01(~zmt00@user/zmt00) (*.net *.split)
2021-12-16 01:00:03 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (*.net *.split)
2021-12-16 01:00:03 +0100zaquest(~notzaques@5.130.79.72) (*.net *.split)
2021-12-16 01:00:03 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (*.net *.split)
2021-12-16 01:00:03 +0100nfd(~nfd@user/nfd) (*.net *.split)
2021-12-16 01:00:03 +0100dsrt^(~dsrt@wsip-98-188-240-142.mc.at.cox.net) (*.net *.split)
2021-12-16 01:00:03 +0100Neuromancer(~Neuromanc@user/neuromancer) (*.net *.split)
2021-12-16 01:00:03 +0100econo(uid147250@user/econo) (*.net *.split)
2021-12-16 01:00:03 +0100srk(~sorki@user/srk) (*.net *.split)
2021-12-16 01:00:03 +0100lbseale(~ep1ctetus@user/ep1ctetus) (*.net *.split)
2021-12-16 01:00:03 +0100landonf(landonf@mac68k.info) (*.net *.split)
2021-12-16 01:00:03 +0100jlamothe(~jlamothe@198.251.61.229) (*.net *.split)
2021-12-16 01:00:03 +0100nvmd(~nvmd@user/nvmd) (*.net *.split)
2021-12-16 01:00:03 +0100h_(~rootveget@fsf/member/hays) (*.net *.split)
2021-12-16 01:00:03 +0100shriekingnoise(~shrieking@186.137.144.80) (*.net *.split)
2021-12-16 01:00:03 +0100rembo10(~rembo10@remulis.com) (*.net *.split)
2021-12-16 01:00:03 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (*.net *.split)
2021-12-16 01:00:03 +0100tom_(~tom@2a00:23c8:970c:4801:f5c6:93c3:2f5e:e0) (*.net *.split)
2021-12-16 01:00:03 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (*.net *.split)
2021-12-16 01:00:03 +0100bliminse(~bliminse@host86-186-4-210.range86-186.btcentralplus.com) (*.net *.split)
2021-12-16 01:00:03 +0100pavonia(~user@user/siracusa) (*.net *.split)
2021-12-16 01:00:03 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (*.net *.split)
2021-12-16 01:00:03 +0100acidsys(~LSD@2.lsd.systems) (*.net *.split)
2021-12-16 01:00:03 +0100emf_(~emf@2620:10d:c091:480::1:305b) (*.net *.split)
2021-12-16 01:00:03 +0100jespada(~jespada@87.74.33.157) (*.net *.split)
2021-12-16 01:00:03 +0100arahael(~arahael@203.158.51.1) (*.net *.split)
2021-12-16 01:00:03 +0100noctux(~noctux@user/noctux) (*.net *.split)
2021-12-16 01:00:04 +0100x88x88x(~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (*.net *.split)
2021-12-16 01:00:04 +0100sander(~sander@user/sander) (*.net *.split)
2021-12-16 01:00:04 +0100turlando(~turlando@user/turlando) (*.net *.split)
2021-12-16 01:00:04 +0100Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (*.net *.split)
2021-12-16 01:00:04 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (*.net *.split)
2021-12-16 01:00:04 +0100mud(~mud@user/kadoban) (*.net *.split)
2021-12-16 01:00:04 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2) (*.net *.split)
2021-12-16 01:00:04 +0100Hawker(~pi@user/hawker) (*.net *.split)
2021-12-16 01:00:04 +0100spoofer(~spoofer@64.185.111.205) (*.net *.split)
2021-12-16 01:00:04 +0100LambdaDuck(~anka@ksit.fixme.fi) (*.net *.split)
2021-12-16 01:00:04 +0100opqdonut(opqdonut@pseudo.fixme.fi) (*.net *.split)
2021-12-16 01:00:04 +0100ishutin(~ishutin@85-238-77-101.pool.digikabel.hu) (*.net *.split)
2021-12-16 01:00:04 +0100FragByte(~christian@user/fragbyte) (*.net *.split)
2021-12-16 01:00:04 +0100gawen(~gawen@user/gawen) (*.net *.split)
2021-12-16 01:00:04 +0100EvanR(~evan@user/evanr) (*.net *.split)
2021-12-16 01:00:04 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (*.net *.split)
2021-12-16 01:00:04 +0100tv(~tv@user/tv) (*.net *.split)
2021-12-16 01:00:04 +0100exarkun(~exarkun@user/exarkun) (*.net *.split)
2021-12-16 01:00:04 +0100tired-(~tired@user/tired) (*.net *.split)
2021-12-16 01:00:04 +0100xdej(~xdej@quatramaran.salle-s.org) (*.net *.split)
2021-12-16 01:00:04 +0100sm2n(ae95cb1267@user/sm2n) (*.net *.split)
2021-12-16 01:00:04 +0100jakzale(6291399afa@user/jakzale) (*.net *.split)
2021-12-16 01:00:04 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8) (*.net *.split)
2021-12-16 01:00:04 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f) (*.net *.split)
2021-12-16 01:00:04 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0) (*.net *.split)
2021-12-16 01:00:04 +0100filwisher(2e6936c793@2604:bf00:561:2000::170) (*.net *.split)
2021-12-16 01:00:04 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e) (*.net *.split)
2021-12-16 01:00:04 +0100catern(~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) (*.net *.split)
2021-12-16 01:00:04 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (*.net *.split)
2021-12-16 01:00:04 +0100pepeiborra(sid443799@id-443799.ilkley.irccloud.com) (*.net *.split)
2021-12-16 01:00:04 +0100hendi(sid489601@id-489601.lymington.irccloud.com) (*.net *.split)
2021-12-16 01:00:04 +0100Vq(~vq@90-227-195-41-no77.tbcn.telia.com) (*.net *.split)
2021-12-16 01:00:04 +0100superbil(~superbil@1-34-176-171.hinet-ip.hinet.net) (*.net *.split)
2021-12-16 01:00:04 +0100Guest2359(1000@gabilgathol.bandrate.org) (*.net *.split)
2021-12-16 01:00:04 +0100absence(torgeihe@hildring.pvv.ntnu.no) (*.net *.split)
2021-12-16 01:00:04 +0100byorgey(~byorgey@155.138.238.211) (*.net *.split)
2021-12-16 01:00:04 +0100carbolymer(~carbolyme@dropacid.net) (*.net *.split)
2021-12-16 01:00:04 +0100hook54321(sid149355@user/hook54321) (*.net *.split)
2021-12-16 01:00:04 +0100koolazer(~koo@user/koolazer) (*.net *.split)
2021-12-16 01:00:05 +0100bradparker(sid262931@id-262931.uxbridge.irccloud.com) (*.net *.split)
2021-12-16 01:00:05 +0100taktoa[c](sid282096@id-282096.tinside.irccloud.com) (*.net *.split)
2021-12-16 01:00:05 +0100flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (*.net *.split)
2021-12-16 01:00:05 +0100Jonno_FTW(~come@api.carswap.me) (*.net *.split)
2021-12-16 01:00:05 +0100int-e(~noone@int-e.eu) (*.net *.split)
2021-12-16 01:00:05 +0100wz1000(~zubin@static.11.113.47.78.clients.your-server.de) (*.net *.split)
2021-12-16 01:00:05 +0100elvishjerricco(sid237756@id-237756.helmsley.irccloud.com) (*.net *.split)
2021-12-16 01:00:05 +0100res0nat0r(~Fletch@dia.whatbox.ca) (*.net *.split)
2021-12-16 01:00:05 +0100acowley(~acowley@c-68-83-22-43.hsd1.nj.comcast.net) (*.net *.split)
2021-12-16 01:00:05 +0100MasseR(~MasseR@51.15.143.128) (*.net *.split)
2021-12-16 01:00:05 +0100m5zs7k(aquares@web10.mydevil.net) (*.net *.split)
2021-12-16 01:00:05 +0100ozzymcduff(~mathieu@81-234-151-21-no94.tbcn.telia.com) (*.net *.split)
2021-12-16 01:00:05 +0100dibblego(~dibblego@haskell/developer/dibblego) (*.net *.split)
2021-12-16 01:00:05 +0100Typedfern(~Typedfern@75.red-88-22-25.staticip.rima-tde.net) (*.net *.split)
2021-12-16 01:00:05 +0100stefan-_(~cri@42dots.de) (*.net *.split)
2021-12-16 01:00:05 +0100theproffesor(~theproffe@user/theproffesor) (*.net *.split)
2021-12-16 01:00:05 +0100haasn(~nand@haasn.dev) (*.net *.split)
2021-12-16 01:00:05 +0100sus(zero@user/zeromomentum) (*.net *.split)
2021-12-16 01:00:05 +0100phma(phma@2001:5b0:210f:4b78:b1e:6610:21b4:b15b) (*.net *.split)
2021-12-16 01:00:05 +0100danso(~danso@23-233-111-52.cpe.pppoe.ca) (*.net *.split)
2021-12-16 01:00:05 +0100acidjnk(~acidjnk@p200300d0c7271e9405040680e1e3c542.dip0.t-ipconnect.de) (*.net *.split)
2021-12-16 01:00:05 +0100Akiva(~Akiva@user/Akiva) (*.net *.split)
2021-12-16 01:00:05 +0100max22-(~maxime@2a01cb0883359800cb0bc7c67be4bc8f.ipv6.abo.wanadoo.fr) (*.net *.split)
2021-12-16 01:00:05 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (*.net *.split)
2021-12-16 01:00:05 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (*.net *.split)
2021-12-16 01:00:05 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (*.net *.split)
2021-12-16 01:00:05 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (*.net *.split)
2021-12-16 01:00:05 +0100jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com) (*.net *.split)
2021-12-16 01:00:05 +0100cheater(~Username@user/cheater) (*.net *.split)
2021-12-16 01:00:05 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (*.net *.split)
2021-12-16 01:00:05 +0100xacktm(xacktm@user/xacktm) (*.net *.split)
2021-12-16 01:00:05 +0100ikke(~kevin@alpine/developer/ikke) (*.net *.split)
2021-12-16 01:00:05 +0100asm(~alexander@user/asm) (*.net *.split)
2021-12-16 01:00:05 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (*.net *.split)
2021-12-16 01:00:05 +0100mcglk(~mcglk@131.191.49.120) (*.net *.split)
2021-12-16 01:00:05 +0100surgeon[m](~surge9nma@2001:470:69fc:105::f585) (*.net *.split)
2021-12-16 01:00:05 +0100amesgen[m](~amesgenm]@2001:470:69fc:105::82b) (*.net *.split)
2021-12-16 01:00:05 +0100rednaZ[m](~r3dnazmat@2001:470:69fc:105::ba70) (*.net *.split)
2021-12-16 01:00:06 +0100TomWesterhout[m](~twesterho@2001:470:69fc:105::1:2918) (*.net *.split)
2021-12-16 01:00:06 +0100YehoshuaPesachWa(~yehoshuap@2001:470:69fc:105::a5f) (*.net *.split)
2021-12-16 01:00:06 +0100craige[m](~craigemcw@2001:470:69fc:105::35f1) (*.net *.split)
2021-12-16 01:00:06 +0100mrmonday(~robert@what.i.hope.is.not.a.tabernaevagant.es) (*.net *.split)
2021-12-16 01:00:06 +0100Kaiepi(~Kaiepi@156.34.44.192) (*.net *.split)
2021-12-16 01:00:06 +0100obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl) (*.net *.split)
2021-12-16 01:00:06 +0100feetwind(~mike@user/feetwind) (*.net *.split)
2021-12-16 01:00:06 +0100w1gz(~do@159.89.11.133) (*.net *.split)
2021-12-16 01:00:06 +0100root1(root@2600:3c02::f03c:92ff:fe1a:c779) (*.net *.split)
2021-12-16 01:00:06 +0100rookie101(~rookie@165.232.121.13) (*.net *.split)
2021-12-16 01:00:06 +0100n3t(n3t@user/n3t) (*.net *.split)
2021-12-16 01:00:06 +0100WhateverRabbit(~rabbit@206.81.18.26) (*.net *.split)
2021-12-16 01:00:06 +0100davl(~davl@207.154.228.18) (*.net *.split)
2021-12-16 01:00:06 +0100xstill-(xstill@fimu/xstill) (*.net *.split)
2021-12-16 01:00:06 +0100xsarnik(xsarnik@lounge.fi.muni.cz) (*.net *.split)
2021-12-16 01:00:06 +0100Ankhers(~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com) (*.net *.split)
2021-12-16 01:00:06 +0100acro(~acro@user/acro) (*.net *.split)
2021-12-16 01:00:06 +0100alinab(sid468903@id-468903.helmsley.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100systemfault(sid267009@id-267009.uxbridge.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100jonrh(sid5185@id-5185.ilkley.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100aria(sid380617@id-380617.lymington.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100alanz(sid110616@id-110616.uxbridge.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100HurdyGurdyBurdy(~HurdyGurd@user/hurdygurdyburdy) (*.net *.split)
2021-12-16 01:00:06 +0100lyxia(~lyxia@poisson.chat) (*.net *.split)
2021-12-16 01:00:06 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd) (*.net *.split)
2021-12-16 01:00:06 +0100JimL(~quassel@89-162-2-132.fiber.signal.no) (*.net *.split)
2021-12-16 01:00:06 +0100Pent(sid313808@id-313808.lymington.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100AndreasK(sid320732@id-320732.uxbridge.irccloud.com) (*.net *.split)
2021-12-16 01:00:06 +0100jrm(~jrm@156.34.249.199) (*.net *.split)
2021-12-16 01:00:06 +0100leah2(~leah@vuxu.org) (*.net *.split)
2021-12-16 01:00:06 +0100tomsmeding(~tomsmedin@tomsmeding.com) (*.net *.split)
2021-12-16 01:00:06 +0100unyu(~pyon@user/pyon) (*.net *.split)
2021-12-16 01:00:06 +0100maerwald(~maerwald@user/maerwald) (*.net *.split)
2021-12-16 01:00:10 +0100xdej(~xdej@quatramaran.salle-s.org)
2021-12-16 01:00:11 +0100Jonno_FTW(~come@api.carswap.me)
2021-12-16 01:00:11 +0100absence(torgeihe@hildring.pvv.ntnu.no)
2021-12-16 01:00:14 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e)
2021-12-16 01:00:14 +0100filwisher(2e6936c793@2604:bf00:561:2000::170)
2021-12-16 01:00:16 +0100byorgey(~byorgey@155.138.238.211)
2021-12-16 01:00:16 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2021-12-16 01:00:17 +0100spoofer(~spoofer@64.185.111.205)
2021-12-16 01:00:17 +0100JimL(~quassel@89-162-2-132.fiber.signal.no)
2021-12-16 01:00:18 +0100rembo10(~rembo10@remulis.com)
2021-12-16 01:00:18 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-12-16 01:00:21 +0100asm(~alexander@burner.asm89.io)
2021-12-16 01:00:21 +0100max22-(~maxime@2a01cb0883359800cb0bc7c67be4bc8f.ipv6.abo.wanadoo.fr)
2021-12-16 01:00:22 +0100pfurla[m](uid345156@id-345156.tinside.irccloud.com)
2021-12-16 01:00:24 +0100tom_(~tom@2a00:23c8:970c:4801:f5c6:93c3:2f5e:e0)
2021-12-16 01:00:25 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8)
2021-12-16 01:00:25 +0100root1(root@2600:3c02::f03c:92ff:fe1a:c779)
2021-12-16 01:00:26 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f)
2021-12-16 01:00:26 +0100danso(~danso@23-233-111-52.cpe.pppoe.ca)
2021-12-16 01:00:26 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-12-16 01:00:27 +0100acidjnk(~acidjnk@p200300d0c7271e9405040680e1e3c542.dip0.t-ipconnect.de)
2021-12-16 01:00:29 +0100xsarnik(xsarnik@lounge.fi.muni.cz)
2021-12-16 01:00:33 +0100res0nat0r(~Fletch@dia.whatbox.ca)
2021-12-16 01:00:33 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-12-16 01:00:34 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2021-12-16 01:00:34 +0100jlamothe(~jlamothe@198.251.61.229)
2021-12-16 01:00:35 +0100Typedfern(~Typedfern@75.red-88-22-25.staticip.rima-tde.net)
2021-12-16 01:00:35 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-12-16 01:00:37 +0100zaquest(~notzaques@5.130.79.72)
2021-12-16 01:00:38 +0100AndreasK(sid320732@2a03:5180:f:5::4:e4dc)
2021-12-16 01:00:38 +0100opqdonut(~opqdonut@91.105.251.154)
2021-12-16 01:00:38 +0100alinab(sid468903@helmsley.irccloud.com)
2021-12-16 01:00:38 +0100unyu(~pyon@2800:200:e840:42c7:c75:c5f:d434:a5f1)
2021-12-16 01:00:39 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2021-12-16 01:00:39 +0100turlando(~turlando@user/turlando)
2021-12-16 01:00:40 +0100Vq(~vq@90-227-195-41-no77.tbcn.telia.com)
2021-12-16 01:00:40 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2021-12-16 01:00:41 +0100Pent(sid313808@id-313808.lymington.irccloud.com)
2021-12-16 01:00:41 +0100mrmonday(~robert@what.i.hope.is.not.a.tabernaevagant.es)
2021-12-16 01:00:41 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-12-16 01:00:42 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-16 01:00:43 +0100FragByte(~christian@p579d2134.dip0.t-ipconnect.de)
2021-12-16 01:00:44 +0100sus(zero@user/zeromomentum)
2021-12-16 01:00:44 +0100lyxia(~lyxia@poisson.chat)
2021-12-16 01:00:47 +0100wz1000(~zubin@static.11.113.47.78.clients.your-server.de)
2021-12-16 01:00:48 +0100Akiva(~Akiva@d75-156-97-166.bchsia.telus.net)
2021-12-16 01:00:49 +0100superbil(~superbil@1-34-176-171.hinet-ip.hinet.net)
2021-12-16 01:00:49 +0100dsrt^(~dsrt@98.188.240.142)
2021-12-16 01:00:51 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com)
2021-12-16 01:00:51 +0100pepeiborra(sid443799@ilkley.irccloud.com)
2021-12-16 01:00:53 +0100bradparker(sid262931@id-262931.uxbridge.irccloud.com)
2021-12-16 01:00:53 +0100jakzale(6291399afa@user/jakzale)
2021-12-16 01:00:59 +0100feetwind(~mike@2406:d500:6:1:216:3cff:fe36:651)
2021-12-16 01:01:03 +0100ikke(~kevin@delta.ikke.info)
2021-12-16 01:01:03 +0100hendi(sid489601@2a03:5180:f:2::7:7881)
2021-12-16 01:01:05 +0100n3t(~n3t@s45.mydevil.net)
2021-12-16 01:01:06 +0100jonrh(sid5185@2a03:5180:f:3::1441)
2021-12-16 01:01:06 +0100systemfault(sid267009@id-267009.uxbridge.irccloud.com)
2021-12-16 01:01:11 +0100acowley(~acowley@c-68-83-22-43.hsd1.nj.comcast.net)
2021-12-16 01:01:12 +0100taktoa[c](sid282096@2a03:5180:f::4:4df0)
2021-12-16 01:01:17 +0100econo(uid147250@2a03:5180:f::2:3f32)
2021-12-16 01:01:21 +0100bollu(uid233390@id-233390.helmsley.irccloud.com)
2021-12-16 01:01:21 +0100alanz(sid110616@uxbridge.irccloud.com)
2021-12-16 01:01:23 +0100elvishjerricco(sid237756@helmsley.irccloud.com)
2021-12-16 01:01:26 +0100aria(sid380617@2a03:5180:f:2::5:cec9)
2021-12-16 01:01:28 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd)
2021-12-16 01:01:30 +0100FragByte(~christian@p579d2134.dip0.t-ipconnect.de) (Changing host)
2021-12-16 01:01:30 +0100FragByte(~christian@user/fragbyte)
2021-12-16 01:01:37 +0100theproffesor(~theproffe@2601:282:847f:8010::5fff)
2021-12-16 01:01:38 +0100Guest2359(1000@gabilgathol.bandrate.org)
2021-12-16 01:01:39 +0100hook54321(sid149355@user/hook54321)
2021-12-16 01:01:42 +0100landonf(landonf@mac68k.info)
2021-12-16 01:01:48 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com)
2021-12-16 01:01:49 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
2021-12-16 01:01:49 +0100dibblego(~dibblego@haskell/developer/dibblego)
2021-12-16 01:01:49 +0100unyuGuest6030
2021-12-16 01:02:01 +0100econo(uid147250@2a03:5180:f::2:3f32) (Changing host)
2021-12-16 01:02:01 +0100econo(uid147250@user/econo)
2021-12-16 01:02:13 +0100leah2(~leah@vuxu.org)
2021-12-16 01:02:16 +0100theproffesor(~theproffe@2601:282:847f:8010::5fff) (Changing host)
2021-12-16 01:02:16 +0100theproffesor(~theproffe@user/theproffesor)
2021-12-16 01:02:17 +0100pavonia(~user@ip5f5bd527.dynamic.kabel-deutschland.de)
2021-12-16 01:02:21 +0100feetwindGuest9348
2021-12-16 01:02:28 +0100pavonia(~user@ip5f5bd527.dynamic.kabel-deutschland.de) (Changing host)
2021-12-16 01:02:28 +0100pavonia(~user@user/siracusa)
2021-12-16 01:02:31 +0100alx741(~alx741@157.100.93.160)
2021-12-16 01:02:52 +0100carbolymer(~carbolyme@dropacid.net)
2021-12-16 01:03:06 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac)
2021-12-16 01:03:12 +0100 <Axman6> So I was asking yesterday about an efficient array of write once valyes (essentially Array (Maybe a) where something like a bitvector is used to record Nothingness). I wonder if edwardk's promises library would give me that. I'm working on something for the discrimination library as it is, so it's not a totally crazy idea...
2021-12-16 01:03:14 +0100xstill-(xstill@fimu/xstill)
2021-12-16 01:03:15 +0100maerwald(~maerwald@mail.hasufell.de)
2021-12-16 01:03:24 +0100jrm(~jrm@156.34.249.199)
2021-12-16 01:03:28 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
2021-12-16 01:03:36 +0100sander(~sander@user/sander)
2021-12-16 01:03:38 +0100tired(~tired@user/tired)
2021-12-16 01:03:40 +0100noctux(~noctux@user/noctux)
2021-12-16 01:03:43 +0100stefan-_(~cri@42dots.de)
2021-12-16 01:03:44 +0100srk(~sorki@user/srk)
2021-12-16 01:03:53 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2)
2021-12-16 01:03:54 +0100phma(phma@2001:5b0:210f:4b78:b1e:6610:21b4:b15b)
2021-12-16 01:03:59 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2021-12-16 01:04:07 +0100hays(rootvegeta@fsf/member/hays)
2021-12-16 01:04:08 +0100m5zs7k(aquares@web10.mydevil.net)
2021-12-16 01:04:10 +0100shriekingnoise(~shrieking@186.137.144.80)
2021-12-16 01:04:17 +0100exarkun(~exarkun@user/exarkun)
2021-12-16 01:04:18 +0100sm2n(ae95cb1267@user/sm2n)
2021-12-16 01:04:20 +0100obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl)
2021-12-16 01:04:28 +0100Ankhers(~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com)
2021-12-16 01:04:29 +0100tomsmeding(~tomsmedin@tomsmeding.com)
2021-12-16 01:04:31 +0100haasn(~nand@haasn.dev)
2021-12-16 01:04:38 +0100gawen(~gawen@user/gawen)
2021-12-16 01:04:39 +0100x88x88x(~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb)
2021-12-16 01:04:40 +0100Taneb(~Taneb@runciman.hacksoc.org)
2021-12-16 01:04:43 +0100flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962)
2021-12-16 01:04:44 +0100davl(~davl@207.154.228.18)
2021-12-16 01:04:44 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0)
2021-12-16 01:05:09 +0100LambdaDuck(~anka@ksit.fixme.fi)
2021-12-16 01:05:09 +0100xacktm(xacktm@user/xacktm)
2021-12-16 01:05:10 +0100ishutin(~ishutin@85-238-77-101.pool.digikabel.hu)
2021-12-16 01:05:15 +0100acidsys(~LSD@2.lsd.systems)
2021-12-16 01:05:17 +0100int-e(~noone@int-e.eu)
2021-12-16 01:05:19 +0100bliminse(~bliminse@host86-186-4-210.range86-186.btcentralplus.com)
2021-12-16 01:05:19 +0100ozzymcduff(~mathieu@81-234-151-21-no94.tbcn.telia.com)
2021-12-16 01:05:21 +0100Hawker(~pi@user/hawker)
2021-12-16 01:05:24 +0100nfd(~nfd@user/nfd)
2021-12-16 01:05:30 +0100mcglk(~mcglk@131.191.49.120)
2021-12-16 01:05:35 +0100koolazer(~koo@user/koolazer)
2021-12-16 01:05:44 +0100 <Axman6> so far I have this (and oh my god was it painful to finally figure this out) https://paste.tomsmeding.com/nXqG4mDD
2021-12-16 01:05:50 +0100catern(~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407)
2021-12-16 01:05:53 +0100jespada(~jespada@87.74.33.157)
2021-12-16 01:06:08 +0100WhateverRabbit(~rabbit@206.81.18.26)
2021-12-16 01:06:28 +0100w1gz(~do@159.89.11.133)
2021-12-16 01:06:31 +0100tv(~tv@user/tv)
2021-12-16 01:06:39 +0100acro(~acro@user/acro)
2021-12-16 01:06:41 +0100jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com)
2021-12-16 01:06:47 +0100max22-(~maxime@2a01cb0883359800cb0bc7c67be4bc8f.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-12-16 01:06:57 +0100rookie101(~rookie@165.232.121.13)
2021-12-16 01:07:03 +0100emf(~emf@2620:10d:c091:480::1:305b)
2021-12-16 01:07:07 +0100cheater(~Username@user/cheater)
2021-12-16 01:07:45 +0100amesgen[m](~amesgenm]@2001:470:69fc:105::82b)
2021-12-16 01:07:49 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-16 01:07:49 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-16 01:07:49 +0100wroathe(~wroathe@user/wroathe)
2021-12-16 01:08:34 +0100surgeon[m](~surge9nma@2001:470:69fc:105::f585)
2021-12-16 01:09:11 +0100YehoshuaPesachWa(~yehoshuap@2001:470:69fc:105::a5f)
2021-12-16 01:10:12 +0100rednaZ[m](~r3dnazmat@2001:470:69fc:105::ba70)
2021-12-16 01:10:17 +0100craige[m](~craigemcw@2001:470:69fc:105::35f1)
2021-12-16 01:11:23 +0100TomWesterhout[m](~twesterho@2001:470:69fc:105::1:2918)
2021-12-16 01:12:04 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 01:15:35 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 250 seconds)
2021-12-16 01:17:27 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com)
2021-12-16 01:18:39 +0100jinsun__(~quassel@user/jinsun)
2021-12-16 01:20:02 +0100jinsun(~quassel@user/jinsun) (Ping timeout: 240 seconds)
2021-12-16 01:21:13 +0100acidjnk(~acidjnk@p200300d0c7271e9405040680e1e3c542.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2021-12-16 01:23:12 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 01:28:39 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-16 01:28:45 +0100 <koz> @pl \_ y -> f y
2021-12-16 01:28:45 +0100 <lambdabot> const f
2021-12-16 01:29:25 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2021-12-16 01:30:01 +0100alx741(~alx741@157.100.93.160)
2021-12-16 01:32:34 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 260 seconds)
2021-12-16 01:34:35 +0100Erutuon_(~Erutuon@user/erutuon)
2021-12-16 01:35:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 01:37:25 +0100pfurla[m](uid345156@id-345156.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-16 01:39:38 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-16 01:41:29 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 01:44:21 +0100EvanR(~evan@2600:1700:ba69:10:48cf:5b3a:5b94:ba94)
2021-12-16 01:44:21 +0100EvanR(~evan@2600:1700:ba69:10:48cf:5b3a:5b94:ba94) (Changing host)
2021-12-16 01:44:21 +0100EvanR(~evan@user/evanr)
2021-12-16 01:44:27 +0100kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net)
2021-12-16 01:44:36 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
2021-12-16 01:48:07 +0100Akiva(~Akiva@d75-156-97-166.bchsia.telus.net) (Ping timeout: 256 seconds)
2021-12-16 01:54:20 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-16 01:59:36 +0100alx741(~alx741@157.100.93.160)
2021-12-16 02:06:38 +0100Tuplanolla(~Tuplanoll@91-159-68-169.elisa-laajakaista.fi) (Quit: Leaving.)
2021-12-16 02:10:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-12-16 02:10:46 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 02:13:27 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 250 seconds)
2021-12-16 02:15:35 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 02:19:37 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
2021-12-16 02:20:58 +0100Erutuon_Erutuon
2021-12-16 02:29:02 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 02:29:10 +0100alx741(~alx741@157.100.93.160)
2021-12-16 02:29:29 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 256 seconds)
2021-12-16 02:31:25 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-16 02:36:14 +0100eys(~eys@87.196.72.73)
2021-12-16 02:36:14 +0100eys(~eys@87.196.72.73) (Remote host closed the connection)
2021-12-16 02:36:33 +0100eys(~eys@87-196-72-73.net.novis.pt)
2021-12-16 02:39:04 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-16 02:41:50 +0100 <hololeap> @pl _
2021-12-16 02:41:50 +0100 <lambdabot> (line 1, column 1):
2021-12-16 02:41:50 +0100 <lambdabot> unexpected "_"
2021-12-16 02:41:50 +0100 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
2021-12-16 02:43:12 +0100 <jackdk> @pl
2021-12-16 02:43:13 +0100 <lambdabot> (line 1, column 1):
2021-12-16 02:43:13 +0100 <lambdabot> unexpected end of input
2021-12-16 02:43:13 +0100 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
2021-12-16 02:43:23 +0100 <jackdk> @botsnack sorry lambdabot
2021-12-16 02:43:24 +0100 <lambdabot> :)
2021-12-16 02:44:41 +0100Neuromancer(~Neuromanc@user/neuromancer)
2021-12-16 02:46:06 +0100retroid_(~retro@05412d78.skybroadband.com) (Ping timeout: 268 seconds)
2021-12-16 02:46:38 +0100Sgeo_(~Sgeo@user/sgeo)
2021-12-16 02:46:52 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
2021-12-16 02:47:05 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
2021-12-16 02:48:21 +0100johnjay(~pi@154.6.152.74) (WeeChat 3.3)
2021-12-16 02:48:45 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
2021-12-16 02:52:21 +0100retroid_(~retro@05412d78.skybroadband.com)
2021-12-16 02:56:47 +0100mmhat(~mmh@55d47819.access.ecotel.net) (Quit: WeeChat 3.3)
2021-12-16 02:56:47 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 02:57:30 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 260 seconds)
2021-12-16 02:58:42 +0100_xor(~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
2021-12-16 03:01:13 +0100_xor(~xor@dsl-50-5-233-169.fuse.net)
2021-12-16 03:01:56 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 03:06:19 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-16 03:06:57 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
2021-12-16 03:12:36 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-16 03:12:36 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2021-12-16 03:12:54 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 03:14:41 +0100alx741(~alx741@157.100.93.160)
2021-12-16 03:17:39 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
2021-12-16 03:18:27 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 250 seconds)
2021-12-16 03:18:40 +0100eys(~eys@87-196-72-73.net.novis.pt) (Quit: Leaving)
2021-12-16 03:22:05 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2021-12-16 03:24:27 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 03:25:17 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
2021-12-16 03:32:58 +0100ubert(~Thunderbi@p200300ecdf1abb06cc2914e8ae945344.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-12-16 03:33:28 +0100ubert(~Thunderbi@p200300ecdf1abb03cc2914e8ae945344.dip0.t-ipconnect.de)
2021-12-16 03:33:30 +0100zmt00(~zmt00@user/zmt00)
2021-12-16 03:36:34 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 03:37:40 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-16 03:40:35 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-12-16 03:40:53 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-16 03:42:27 +0100alx741(~alx741@157.100.93.160)
2021-12-16 03:44:22 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
2021-12-16 04:01:32 +0100xff0x(~xff0x@2001:1a81:52ce:1300:fb1:616f:b19a:8052) (Ping timeout: 240 seconds)
2021-12-16 04:03:21 +0100mason0(~bc8147f2@cerf.good1.com)
2021-12-16 04:03:31 +0100 <zero> can we export "all except some" functions in a module?
2021-12-16 04:03:47 +0100xff0x(~xff0x@2001:1a81:530f:c500:a508:6a68:a141:6a03)
2021-12-16 04:03:52 +0100 <zero> like `module X hiding ( some ) where`
2021-12-16 04:04:47 +0100 <monochrom> Unfortunately no.
2021-12-16 04:04:52 +0100 <zero> :(
2021-12-16 04:05:48 +0100 <mason0> hi. is there a way to display Data.Ratio.Ratio as a decimal number?
2021-12-16 04:06:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 04:06:28 +0100 <awpr> `module X.Internal where ...` `module X (module X.Internal) where; import X.Internal hiding (some)` if it's worth using extra files for
2021-12-16 04:06:43 +0100 <mason0> (without converting it to double first, as that would restrict me to precision of double)
2021-12-16 04:10:46 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2021-12-16 04:13:50 +0100 <monochrom> Perhaps use the "scientific" package, use its fromRationalRepetend to convert Rational to Scientific. You can tell it when to stop, or let it detect repetition and tell you.
2021-12-16 04:17:46 +0100 <glguy> > let decimal x = case properFraction x of (w,p) -> show w ++ "." ++ unfoldr (\x -> if x == 0 then Nothing else case properFraction (10*x) of (w,p) -> Just (intToDigit w, p)) p
2021-12-16 04:17:47 +0100 <lambdabot> <no location info>: error:
2021-12-16 04:17:47 +0100 <lambdabot> not an expression: ‘let decimal x = case properFraction x of (w,p) -> sh...
2021-12-16 04:17:57 +0100 <glguy> @let decimal x = case properFraction x of (w,p) -> show w ++ "." ++ unfoldr (\x -> if x == 0 then Nothing else case properFraction (10*x) of (w,p) -> Just (intToDigit w, p)) p
2021-12-16 04:17:58 +0100 <lambdabot> <command line>: does not exist: .L.hs
2021-12-16 04:18:04 +0100mbuf(~Shakthi@223.178.108.131)
2021-12-16 04:19:24 +0100 <mason0> @hoogle intToDigit
2021-12-16 04:19:25 +0100 <lambdabot> Data.Char intToDigit :: Int -> Char
2021-12-16 04:19:25 +0100 <lambdabot> GHC.Show intToDigit :: Int -> Char
2021-12-16 04:19:25 +0100 <lambdabot> Protolude intToDigit :: Int -> Char
2021-12-16 04:20:22 +0100 <mason0> glguy oh interesting. is that limited to precision of some floating point number, or not? I'm not quite how it works
2021-12-16 04:20:29 +0100 <mason0> +sure
2021-12-16 04:21:07 +0100mason0(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC)
2021-12-16 04:21:21 +0100mason0(~bc8147f2@cerf.good1.com)
2021-12-16 04:21:22 +0100 <glguy> it's as limited as storing things as a Rational
2021-12-16 04:21:56 +0100 <monochrom> > properFraction (10/3 :: Rational)
2021-12-16 04:21:57 +0100 <snake> is this right and why wasn't it said so simply to me before? injective means every output has at most one input. surjective means every output has at least one input. bijective means every output has exactly one input.
2021-12-16 04:21:58 +0100 <lambdabot> (3,1 % 3)
2021-12-16 04:22:03 +0100 <monochrom> Lossless.
2021-12-16 04:23:09 +0100 <snake> nice i love fractions
2021-12-16 04:23:15 +0100snakepushes up his glasses
2021-12-16 04:23:20 +0100 <monochrom> snake: This is right. And very intuitive. And very hostile to equational reasoning.
2021-12-16 04:23:40 +0100 <snake> hostile?
2021-12-16 04:23:45 +0100 <monochrom> "if f x = f y then x = y" is very friendly to equational reasong i.e. doing algebra.
2021-12-16 04:23:57 +0100td_(~td@94.134.91.159) (Ping timeout: 256 seconds)
2021-12-16 04:23:58 +0100 <snake> ohhh i see
2021-12-16 04:24:00 +0100 <monochrom> "at most one" OK am I doing combinatorics or what
2021-12-16 04:24:14 +0100 <snake> so it's good to study the equations too
2021-12-16 04:24:18 +0100 <snake> err rules
2021-12-16 04:24:33 +0100 <snake> :ok_hand:
2021-12-16 04:24:41 +0100 <mason0> > 1%2 / 2
2021-12-16 04:24:43 +0100 <lambdabot> 1 % 4
2021-12-16 04:24:44 +0100 <monochrom> In general, intuitiveness is the anti-thesis to logic.
2021-12-16 04:25:28 +0100td_(~td@muedsl-82-207-238-051.citykom.de)
2021-12-16 04:25:43 +0100 <snake> yeah but i need to remember it for my discrete math final, most of the points i missed on the last exam were function and relation concepts :V
2021-12-16 04:25:53 +0100 <snake> i tyhink the intuitive definition at least grants me that
2021-12-16 04:27:27 +0100 <monochrom> For bijection, "f(g(x))=x and g(f(x))=x" is friendly to algebra, as said. Even better is double-down on algebra so you also do boolean algebra: "forall x,y: f(x)=y iff x=g(y)". (Note that "iff" is equality for booleans.)
2021-12-16 04:28:38 +0100 <monochrom> Oh I memorize all perspectives and narratives and bedtime stories.
2021-12-16 04:28:40 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-16 04:28:58 +0100 <snake> lol
2021-12-16 04:30:39 +0100 <monochrom> If the exam requires proofs, and the proofs requires the hard-to-remember, unintuitive narrative, then memorizing the easy-to-remember, intuitive narrative won't help. You will end up handwaving and "this is obvious to me why are you asking for proof".
2021-12-16 04:31:54 +0100 <monochrom> The right thing to do is to practice with the actually-needed-on-exam version a million times until it becomes intuitive. Intuition is trained not opined.
2021-12-16 04:32:11 +0100 <monochrom> Which also means now is too late to start that.
2021-12-16 04:32:18 +0100 <monochrom> As usual.
2021-12-16 04:33:03 +0100 <mason0> lol, decimal (1%3) prints 0.333333 ad infinutum
2021-12-16 04:33:25 +0100 <glguy> of course
2021-12-16 04:33:36 +0100 <monochrom> I don't understand why programmers are so obsessed with "intuitive" esp. in the sense "if my first impression is unintuitive, I reject it".
2021-12-16 04:33:54 +0100 <mason0> glguy, yeah, I did get what I asked for!
2021-12-16 04:33:58 +0100 <monochrom> Actual professions can't afford that luxury.
2021-12-16 04:34:33 +0100 <monochrom> You don't hear medical school students complaining "seeing blood and gory organs is unintuitive to me so I refuse to learn surgery".
2021-12-16 04:34:47 +0100 <monochrom> or rather s/complaining/whining/
2021-12-16 04:35:13 +0100 <monochrom> That's exactly what programmers do. Whining about needing to be trained. Unprofessional.
2021-12-16 04:35:17 +0100 <snake> idk man the only person i see whining is you
2021-12-16 04:35:25 +0100 <snake> :p
2021-12-16 04:35:32 +0100 <monochrom> Yeah OK no problem I'll stop.
2021-12-16 04:35:32 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 04:36:27 +0100featurebug(~featurebu@49.205.122.91) (Ping timeout: 250 seconds)
2021-12-16 04:40:24 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac) (Remote host closed the connection)
2021-12-16 04:40:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-12-16 04:41:47 +0100 <snake> monochrom, i appreciate your suggestion
2021-12-16 04:47:33 +0100sleblanc(~sleblanc@user/sleblanc)
2021-12-16 04:49:35 +0100 <monochrom> Lately, I have been working closely with inverse images of functions. They are counterintuitive at first, but turn out to be beautiful. And your understanding can be directly expressed with inverse images, so maybe you're on to something, too. (Pun intended or not, "on to", haha.)
2021-12-16 04:50:01 +0100 <snake> lol
2021-12-16 04:50:44 +0100 <maerwald[m]> <monochrom> "That's exactly what programmers..." <- Programmers don't need to be trained
2021-12-16 04:50:47 +0100 <monochrom> Let f:X->Y, S⊆Y. The inverse image of f of S, I'll write "invIm f S", other people write "f^(-1) (S)", is { x in X | f(x) in S }.
2021-12-16 04:50:47 +0100 <EvanR> formal topology, locales
2021-12-16 04:50:50 +0100 <maerwald[m]> They need to learn
2021-12-16 04:50:58 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac)
2021-12-16 04:52:00 +0100 <monochrom> So your understanding means using singleton sets for S, then asking what invIm f {y} looks like for each y.
2021-12-16 04:52:34 +0100 <monochrom> Injective is when for every y, invIm f {y} has size 0 or 1.
2021-12-16 04:52:59 +0100 <monochrom> Surjective is when size is 1 or more. Bijective is when size is 1.
2021-12-16 04:53:11 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2021-12-16 04:53:54 +0100alx741(~alx741@157.100.93.160)
2021-12-16 04:54:19 +0100 <sprout> https://github.com/egel-lang/aoc-2021/blob/main/day15/task2.eg <- Advent of Code, day 15, task 2 - egel code
2021-12-16 04:54:22 +0100 <sprout> https://pasteboard.co/EN3DVD0kUahm.png <- with colors
2021-12-16 04:57:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-16 05:04:36 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 05:10:58 +0100featurebug(~featurebu@49.205.122.91)
2021-12-16 05:13:36 +0100 <mason0> IIRC there was a function that takes a function and keeps applying it to base value, and the result of f baseValue, etc. does anyone know the name?
2021-12-16 05:14:09 +0100 <monochrom> iterate
2021-12-16 05:14:13 +0100 <xsperry> @hoogle (a -> a) -> a -> [a]
2021-12-16 05:14:14 +0100 <lambdabot> Prelude iterate :: (a -> a) -> a -> [a]
2021-12-16 05:14:14 +0100 <lambdabot> Data.List iterate :: (a -> a) -> a -> [a]
2021-12-16 05:14:14 +0100 <lambdabot> Data.List iterate' :: (a -> a) -> a -> [a]
2021-12-16 05:14:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-16 05:14:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-16 05:14:25 +0100wroathe(~wroathe@user/wroathe)
2021-12-16 05:14:36 +0100 <monochrom> > iterate (* 2) 1
2021-12-16 05:14:38 +0100 <lambdabot> [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,2...
2021-12-16 05:14:46 +0100 <mason0> > iterate (/2) (1%2)
2021-12-16 05:14:47 +0100 <lambdabot> [1 % 2,1 % 4,1 % 8,1 % 16,1 % 32,1 % 64,1 % 128,1 % 256,1 % 512,1 % 1024,1 %...
2021-12-16 05:14:52 +0100 <mason0> neat!
2021-12-16 05:15:41 +0100 <EvanR> > let factorial n = product [1..n] in iterate factorial 2
2021-12-16 05:15:42 +0100 <lambdabot> [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2...
2021-12-16 05:15:46 +0100 <EvanR> shoot
2021-12-16 05:17:13 +0100 <EvanR> > let factorial n = product [1..n] in (iterate factorial 3) !! 5
2021-12-16 05:17:19 +0100 <lambdabot> mueval-core: Time limit exceeded
2021-12-16 05:17:31 +0100 <monochrom> "fixed point detected"
2021-12-16 05:18:11 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2021-12-16 05:18:16 +0100xff0x(~xff0x@2001:1a81:530f:c500:a508:6a68:a141:6a03) (Ping timeout: 245 seconds)
2021-12-16 05:18:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-16 05:19:08 +0100xff0x(~xff0x@2001:1a81:530f:c500:fcf0:ff87:e783:c227)
2021-12-16 05:20:59 +0100alx741(~alx741@157.100.93.160)
2021-12-16 05:24:32 +0100 <mason0> > sum $ take 10 $ iterate (/2) (1%1)
2021-12-16 05:24:33 +0100 <lambdabot> 1023 % 512
2021-12-16 05:25:17 +0100 <mason0> > sum $ take 10 $ iterate (/2) 1
2021-12-16 05:25:19 +0100 <lambdabot> 1.998046875
2021-12-16 05:25:31 +0100 <EvanR> zenos paradox 2
2021-12-16 05:25:47 +0100 <mason0> hmm, I got 2.0 for the second line in ghci
2021-12-16 05:26:39 +0100 <mason0> no, my bad
2021-12-16 05:27:16 +0100 <EvanR> that would be sum $ take inf
2021-12-16 05:28:00 +0100 <EvanR> > sum (iterate (/2) 1)
2021-12-16 05:28:08 +0100 <lambdabot> mueval.real: ExitFailure 1
2021-12-16 05:28:51 +0100 <EvanR> a real error
2021-12-16 05:37:44 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 05:41:35 +0100curiousgay(~curiousga@77-120-141-90.kha.volia.net) (Ping timeout: 256 seconds)
2021-12-16 05:45:27 +0100 <Axman6> > scanl (+) 0 $ iterate (/2) 1 :: [Rational]
2021-12-16 05:45:28 +0100 <lambdabot> [0 % 1,1 % 1,3 % 2,7 % 4,15 % 8,31 % 16,63 % 32,127 % 64,255 % 128,511 % 256...
2021-12-16 05:45:57 +0100 <Axman6> :t decimal
2021-12-16 05:45:58 +0100 <lambdabot> (Integral a, Choice p, Applicative f) => p a (f a) -> p String (f String)
2021-12-16 05:46:16 +0100 <Axman6> hmm, what's the best way to get a decimal string from a Rational?
2021-12-16 05:46:59 +0100 <glguy> Did someone leak that tonight's adventofcode is converting fractions to decimals?
2021-12-16 05:46:59 +0100 <Axman6> > map fromRational $ scanl (+) 0 $ iterate (/2) 1 :: [Double]
2021-12-16 05:47:01 +0100 <lambdabot> [0.0,1.0,1.5,1.75,1.875,1.9375,1.96875,1.984375,1.9921875,1.99609375,1.99804...
2021-12-16 05:47:07 +0100 <xerox> haha
2021-12-16 05:47:24 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d)
2021-12-16 05:48:09 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d) (Read error: Connection reset by peer)
2021-12-16 05:48:17 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 05:48:27 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d)
2021-12-16 05:49:50 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
2021-12-16 05:49:59 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 05:54:28 +0100 <Axman6> > drop 10 $ map fromRational $ scanl (+) 0 $ iterate (/2) 1 :: [Double]
2021-12-16 05:54:30 +0100 <lambdabot> [1.998046875,1.9990234375,1.99951171875,1.999755859375,1.9998779296875,1.999...
2021-12-16 05:54:51 +0100 <Axman6> > drop 10 $ map (\n -> 2 - fromRational n) $ scanl (+) 0 $ iterate (/2) 1 :: [Double]
2021-12-16 05:54:53 +0100 <lambdabot> [1.953125e-3,9.765625e-4,4.8828125e-4,2.44140625e-4,1.220703125e-4,6.1035156...
2021-12-16 05:55:16 +0100 <EvanR> eww doubles
2021-12-16 05:55:34 +0100alx741(~alx741@157.100.93.160)
2021-12-16 05:55:54 +0100 <EvanR> > map fromRational $ scanl (+) 0 $ iterate (/2) 1 :: [CReal]
2021-12-16 05:55:55 +0100 <lambdabot> [0.0,1.0,1.5,1.75,1.875,1.9375,1.96875,1.984375,1.9921875,1.99609375,1.99804...
2021-12-16 05:55:59 +0100 <Axman6> > drop 10 $ map (\n -> 2 - fromRational n) $ scanl (+) 0 $ iterate (/2) 1 :: [Scientific]
2021-12-16 05:56:01 +0100 <lambdabot> error:
2021-12-16 05:56:01 +0100 <lambdabot> Not in scope: type constructor or class ‘Scientific’
2021-12-16 05:56:10 +0100 <Axman6> % drop 10 $ map (\n -> 2 - fromRational n) $ scanl (+) 0 $ iterate (/2) 1 :: [Scientific]
2021-12-16 05:56:10 +0100 <yahb> Axman6: ; <interactive>:154:77: error: Not in scope: type constructor or class `Scientific'
2021-12-16 05:56:15 +0100 <Axman6> :(
2021-12-16 05:56:25 +0100 <EvanR> the bots are unscientific
2021-12-16 05:57:53 +0100 <Axman6> > let factorials = scanl (*) 1 [1..]; factorial n = factorials !! n in iterate factorial 3
2021-12-16 05:57:54 +0100 <lambdabot> [3,6,720,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1...
2021-12-16 05:58:05 +0100 <Axman6> o.O
2021-12-16 05:58:16 +0100 <EvanR> Int
2021-12-16 05:58:19 +0100 <Axman6> > let factorials = scanl (*) 1 [1..]; factorial n = factorials !! (n+1) in iterate factorial 3
2021-12-16 05:58:21 +0100 <mason0> Axman6, glguy posted a neat function above that does that.
2021-12-16 05:58:28 +0100 <lambdabot> mueval.real: ExitFailure 1
2021-12-16 05:58:28 +0100 <EvanR> use genericIndex or something
2021-12-16 05:59:07 +0100 <mason0> > let decimal x = case properFraction x of (w,p) -> show w ++ "." ++ unfoldr (\x -> if x == 0 then Nothing else case properFraction (10*x) of (w,p) -> Just (intToDigit w, p)) p in decimal (1%2)
2021-12-16 05:59:08 +0100 <lambdabot> "0.5"
2021-12-16 05:59:25 +0100 <mason0> > let decimal x = case properFraction x of (w,p) -> show w ++ "." ++ unfoldr (\x -> if x == 0 then Nothing else case properFraction (10*x) of (w,p) -> Just (intToDigit w, p)) p in decimal (1%3)
2021-12-16 05:59:26 +0100 <lambdabot> "0.3333333333333333333333333333333333333333333333333333333333333333333333333...
2021-12-16 05:59:37 +0100featurebug(~featurebu@49.205.122.91) (Ping timeout: 240 seconds)
2021-12-16 05:59:57 +0100 <Axman6> that = decimal representation? yeah I saw that - feels inefficient but we're dealing with Strings... so...
2021-12-16 06:00:18 +0100 <mason0> :t unfoldr
2021-12-16 06:00:20 +0100 <lambdabot> (b -> Maybe (a, b)) -> b -> [a]
2021-12-16 06:00:51 +0100 <Axman6> > let decimal x = case properFraction x of (w,p) -> show w ++ "." ++ unfoldr (\x -> if x == 0 then Nothing else case properFraction (10*x) of (w,p) -> Just (intToDigit w, p)) p in decimal (22%7)
2021-12-16 06:00:52 +0100 <lambdabot> "3.1428571428571428571428571428571428571428571428571428571428571428571428571...
2021-12-16 06:02:16 +0100 <Axman6> > let decimal x = case properFraction x of (w,p) -> show w ++ "." ++ unfoldr (\x -> if x == 0 then Nothing else case properFraction (10*x) of (w,p) -> Just (intToDigit w, p)) p in decimal (355%113)
2021-12-16 06:02:17 +0100 <lambdabot> "3.1415929203539823008849557522123893805309734513274336283185840707964601769...
2021-12-16 06:04:51 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 06:18:43 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-12-16 06:20:35 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-16 06:23:06 +0100alx741(~alx741@157.100.93.160)
2021-12-16 06:24:04 +0100phma_(phma@2001:5b0:210f:4b78:b1e:6610:21b4:b15b)
2021-12-16 06:24:35 +0100 <Axman6> what's the right way to say I want to build my cabal project with -Wall these days? Is it something that goes in the cabal.project file?
2021-12-16 06:24:54 +0100vicfred(~vicfred@user/vicfred)
2021-12-16 06:25:50 +0100 <dibblego> I put it in the cabal file
2021-12-16 06:26:07 +0100 <dibblego> https://gitlab.com/tonymorris/aviation-navigation/-/blob/master/aviation-navigation.cabal#L57
2021-12-16 06:27:09 +0100phma(phma@2001:5b0:210f:4b78:b1e:6610:21b4:b15b) (Ping timeout: 250 seconds)
2021-12-16 06:28:26 +0100acowley(~acowley@c-68-83-22-43.hsd1.nj.comcast.net) (Ping timeout: 260 seconds)
2021-12-16 06:28:27 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 250 seconds)
2021-12-16 06:28:33 +0100acowley(~acowley@c-68-83-22-43.hsd1.nj.comcast.net)
2021-12-16 06:29:23 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-12-16 06:30:31 +0100 <Axman6> it feels like a cabal.project thing to me, since users of the library don't really need to know about -Wall from my package, but when building the project I'd like to have it
2021-12-16 06:34:16 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-16 06:36:54 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 06:37:37 +0100Inst(~Inst@2601:6c4:4080:3f80:d9b5:7230:29a1:ab4d) (Ping timeout: 240 seconds)
2021-12-16 06:40:02 +0100 <jackdk> Axman6: https://cabal.readthedocs.io/en/latest/cabal-project.html#package-configuration-options
2021-12-16 06:42:30 +0100ikke(~kevin@delta.ikke.info) (Changing host)
2021-12-16 06:42:30 +0100ikke(~kevin@alpine/developer/ikke)
2021-12-16 06:42:42 +0100 <Axman6> yeah I looked at that, and added a package my-package\n flags: -Wall and it didn't work
2021-12-16 06:42:52 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-12-16 06:44:42 +0100 <Axman6> hmm, I may be an idiot...one sec
2021-12-16 06:45:40 +0100iqubic(~user@2601:602:9502:c70:3682:5ffe:e458:d665)
2021-12-16 06:45:43 +0100 <Axman6> I am, all good. I needed ghc-options: not flags:, obviously
2021-12-16 06:47:21 +0100jinsun__jinsun
2021-12-16 06:47:34 +0100 <Axman6> "Unrecognized field 'optimisation' on line 3" <- I am not ok with this, whatever happened to our recognition of the correcting spellings of the English language
2021-12-16 06:47:50 +0100 <iqubic> I have "Data Bit = Zero | One". Can I use megaparsec to parse a [Bit]?
2021-12-16 06:48:47 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 06:49:04 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-12-16 06:51:41 +0100 <dibblego> yes
2021-12-16 06:52:58 +0100 <iqubic> I see. How does it work?
2021-12-16 06:55:12 +0100tom_(~tom@2a00:23c8:970c:4801:f5c6:93c3:2f5e:e0) (Read error: Connection reset by peer)
2021-12-16 06:55:12 +0100tom__(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Read error: Connection reset by peer)
2021-12-16 06:55:19 +0100tom__(~tom@host86-151-99-97.range86-151.btcentralplus.com)
2021-12-16 06:56:11 +0100zincy(~tom@2a00:23c8:970c:4801:f5c6:93c3:2f5e:e0)
2021-12-16 07:06:34 +0100alx741(~alx741@157.100.93.160)
2021-12-16 07:10:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 07:12:37 +0100bahamas(~lucian@84.232.140.13)
2021-12-16 07:13:13 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-12-16 07:18:10 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-12-16 07:18:10 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 07:19:11 +0100sprout(~quassel@2a02:a467:ccd6:1:558b:2015:9c55:ace3) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-16 07:19:46 +0100chomwitt(~chomwitt@2a02:587:dc19:a500:12c3:7bff:fe6d:d374)
2021-12-16 07:19:57 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
2021-12-16 07:24:22 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-16 07:29:26 +0100gentauro(~gentauro@user/gentauro)
2021-12-16 07:29:31 +0100gentauro_(~gentauro@185.107.12.141)
2021-12-16 07:32:18 +0100 <EvanR> "it works quite well actually"
2021-12-16 07:33:50 +0100 <int-e> > unwords $ map (\x -> printf "%.2f" (197-x/32)) [6208,6185,6132,6048,6012,5987,5980,5958,5906,5855]
2021-12-16 07:33:52 +0100 <lambdabot> "3.00 3.72 5.38 8.00 9.12 9.91 10.12 10.81 12.44 14.03"
2021-12-16 07:34:47 +0100 <int-e> Apart from not being fluent at writing parsers... I really hated today's specification.
2021-12-16 07:35:11 +0100 <EvanR> iqubic, look at e.g. many :: Parsec a -> Parsec [a], or manyTill, or ...
2021-12-16 07:35:25 +0100 <iqubic> I see.
2021-12-16 07:35:55 +0100 <EvanR> apparently those were moved to parser-combinators
2021-12-16 07:36:09 +0100alx741(~alx741@157.100.93.160)
2021-12-16 07:36:24 +0100 <int-e> :t many
2021-12-16 07:36:25 +0100 <lambdabot> Alternative f => f a -> f [a]
2021-12-16 07:36:30 +0100 <int-e> shouldn't that one work?
2021-12-16 07:36:34 +0100dcoutts_(~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 260 seconds)
2021-12-16 07:36:36 +0100 <int-e> (from Control.Applicative)
2021-12-16 07:36:54 +0100 <EvanR> yeah that might be the grand daddy of many
2021-12-16 07:37:24 +0100 <int-e> though that doesn't give you manyTill
2021-12-16 07:38:11 +0100 <EvanR> (you probably don't need manyTill today sir)
2021-12-16 07:40:35 +0100bahamas(~lucian@84.232.140.13) (Ping timeout: 256 seconds)
2021-12-16 07:43:23 +0100 <int-e> (you need something else that's a bit awkward though)
2021-12-16 07:44:11 +0100 <EvanR> i cheated and forgot to use monads to parse the bits
2021-12-16 07:44:24 +0100 <EvanR> letting me do _whatever i want wahahaha_
2021-12-16 07:45:37 +0100 <int-e> EvanR: I also "forgot" but that didn't stop me from struggling a bit
2021-12-16 07:46:36 +0100 <int-e> it's not like you can save a whole lot of code anyway; there's no backtracking or other complicated choices to make
2021-12-16 07:46:58 +0100 <EvanR> parsers are apparently a lot easier when they can't fail xD
2021-12-16 07:47:51 +0100xff0x(~xff0x@2001:1a81:530f:c500:fcf0:ff87:e783:c227) (Ping timeout: 245 seconds)
2021-12-16 07:48:16 +0100 <int-e> silly excerpt: https://paste.debian.net/1223675/
2021-12-16 07:48:38 +0100 <int-e> yes they are
2021-12-16 07:48:38 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 07:48:43 +0100xff0x(~xff0x@port-92-195-102-89.dynamic.as20676.net)
2021-12-16 07:49:18 +0100 <EvanR> lol nice
2021-12-16 07:49:36 +0100 <EvanR> impostor monad
2021-12-16 07:50:07 +0100 <int-e> I know :)
2021-12-16 07:51:08 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
2021-12-16 07:51:34 +0100 <EvanR> good one to show people who think haskell syntax is confusing
2021-12-16 07:51:49 +0100 <int-e> well, they're right.
2021-12-16 07:52:31 +0100ProfSimm(~ProfSimm@87.227.196.109)
2021-12-16 07:53:40 +0100 <int-e> This isn't a unique propert of Haskell. It's true for all programming languages until you've learned them, or at least another one that is similar.
2021-12-16 07:53:49 +0100emf(~emf@2620:10d:c091:480::1:305b) (Ping timeout: 268 seconds)
2021-12-16 07:54:08 +0100 <int-e> Sadly we live in a world where everyone knows something-similar-to-C
2021-12-16 07:54:39 +0100 <EvanR> "what the hell does 10 print hello world 20 goto 10 do" said no one ever xD
2021-12-16 07:55:11 +0100Minnozz(~minnozz@salix.minnozz.com) (WeeChat 2.8)
2021-12-16 07:55:39 +0100 <int-e> print "hello, world" raises few questions (except maybe, does it work when there's no paper in the printer?). The "goto 10" takes a bit of understanding.
2021-12-16 07:55:58 +0100Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-12-16 07:56:08 +0100 <EvanR> yeah, if you leave off that critical first 10
2021-12-16 07:56:23 +0100 <EvanR> we're all screwed if you do that
2021-12-16 07:56:39 +0100 <int-e> Well the 10 is confusing at first, too.
2021-12-16 07:57:24 +0100 <int-e> The thing about learning programming as a teenager though is that it's just one of many confusing things in the world... it doesn't feel all that special.
2021-12-16 08:00:42 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-16 08:02:34 +0100arahael(~arahael@203.158.51.1)
2021-12-16 08:03:26 +0100chele(~chele@user/chele)
2021-12-16 08:04:40 +0100 <int-e> EvanR: I used to write this kind of thing with `let`, but then I couldn't shadow `xs`, so I'd have xs', xs'' and eventually mix some of these up. This abuse of guards is actually convenient.
2021-12-16 08:05:05 +0100 <EvanR> oh yeah
2021-12-16 08:05:17 +0100 <EvanR> i hate prime, prime prime, etc
2021-12-16 08:06:14 +0100 <int-e> the main downside is that the bindings become invisible to `where`
2021-12-16 08:06:21 +0100 <EvanR> someone should invent a language or entire paradigm based on just replacing variables on assignment
2021-12-16 08:06:53 +0100 <int-e> Rust kind of does that for things that can't be copied.
2021-12-16 08:07:06 +0100alx741(~alx741@157.100.93.160)
2021-12-16 08:08:05 +0100img(~img@user/img)
2021-12-16 08:08:11 +0100steven1(~steven@172.92.136.203)
2021-12-16 08:08:51 +0100 <EvanR> what's an example of a thing that can't be copied
2021-12-16 08:11:05 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-12-16 08:11:55 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-16 08:12:51 +0100 <EvanR> the terminology must mean something specific in rust, maybe
2021-12-16 08:15:04 +0100dcoutts_(~duncan@ip-185-104-136-51.ptr.icomera.net)
2021-12-16 08:17:17 +0100Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 240 seconds)
2021-12-16 08:18:38 +0100 <int-e> EvanR: Meh it's non-intuitive because Rust cares a lot about tracking ownership of in-memory objects. So for example, you can't have two references to the same object that allow mutation; that's the basic example of something that can't be copied.
2021-12-16 08:19:17 +0100 <int-e> It has a type-class-like system in the form of traits, and there's a Copy trait that only types that can be copied implement.
2021-12-16 08:19:21 +0100 <EvanR> ok the reference can't be copied
2021-12-16 08:19:28 +0100 <EvanR> not allowed
2021-12-16 08:19:31 +0100phma_(phma@2001:5b0:210f:4b78:b1e:6610:21b4:b15b) (Read error: Connection reset by peer)
2021-12-16 08:20:10 +0100 <int-e> Yeah, it's enforced by the compiler, part of the system that's responsible for Rust's advertised memory-safeness.
2021-12-16 08:20:14 +0100int-eshrugs.
2021-12-16 08:20:18 +0100phma_(~phma@host-67-44-208-226.hnremote.net)
2021-12-16 08:20:56 +0100 <EvanR> so you can copy that mutable object, you just have to have the pointer first
2021-12-16 08:21:10 +0100 <int-e> This isn't the right channel to discuss it (also I'm still learning this, so I'm not good at explaining it yet)
2021-12-16 08:21:27 +0100 <EvanR> fair
2021-12-16 08:31:37 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-12-16 08:32:23 +0100featurebug108(~featurebu@49.205.122.91)
2021-12-16 08:32:25 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-16 08:34:02 +0100 <featurebug108> Hi! I tried to do stack install on this project - https://github.com/grin-compiler/ghc-whole-program-compiler-project/tree/master/external-stg-inter… but I am getting this error - https://pastebin.com/HVzUFLBw . Any idea what the error is and how to fix it?
2021-12-16 08:35:45 +0100Ferdirand(~somebody@2001:4c78:2012:5000::2) (Ping timeout: 268 seconds)
2021-12-16 08:37:24 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 08:37:29 +0100Ferdirand(~somebody@2001:4c78:2012:5000::2)
2021-12-16 08:38:59 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:f0a9:34f0:2c07:30d5)
2021-12-16 08:41:55 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 268 seconds)
2021-12-16 08:42:00 +0100featurebug108(~featurebu@49.205.122.91) (Quit: Leaving)
2021-12-16 08:43:55 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 08:48:00 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-16 08:48:55 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-16 08:56:46 +0100cosimone(~user@93-47-229-223.ip115.fastwebnet.it)
2021-12-16 08:59:07 +0100bahamas(~lucian@86.120.77.115)
2021-12-16 08:59:31 +0100 <Hecate> < Axman6> Hecate: isn't that soimething that pg_config can do for you? // I wish it did… :( :( :(
2021-12-16 08:59:53 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-12-16 09:00:21 +0100alx741(~alx741@157.100.93.160)
2021-12-16 09:01:50 +0100michalz(~michalz@185.246.204.104)
2021-12-16 09:07:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 09:17:27 +0100iqubic`(~user@2601:602:9502:c70:1ab:7e18:1540:e9a6)
2021-12-16 09:17:44 +0100iqubic`(~user@2601:602:9502:c70:1ab:7e18:1540:e9a6) (Remote host closed the connection)
2021-12-16 09:17:44 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 09:20:07 +0100Akiva(~Akiva@user/Akiva)
2021-12-16 09:21:17 +0100iqubic(~user@2601:602:9502:c70:3682:5ffe:e458:d665) (Ping timeout: 240 seconds)
2021-12-16 09:22:22 +0100cosimone(~user@93-47-229-223.ip115.fastwebnet.it) (Remote host closed the connection)
2021-12-16 09:22:44 +0100iqubic(~user@2601:602:9502:c70:1ab:7e18:1540:e9a6)
2021-12-16 09:22:58 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2021-12-16 09:25:45 +0100max22-(~maxime@2a01cb0883359800fd9f63ef34845b1d.ipv6.abo.wanadoo.fr)
2021-12-16 09:27:41 +0100dcoutts_(~duncan@ip-185-104-136-51.ptr.icomera.net) (Ping timeout: 256 seconds)
2021-12-16 09:29:14 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-12-16 09:30:05 +0100 <YoungFrog> I
2021-12-16 09:35:51 +0100alx741(~alx741@157.100.93.160)
2021-12-16 09:39:31 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-12-16 09:40:09 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 09:41:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 09:41:56 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-16 09:44:32 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
2021-12-16 09:45:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 09:47:26 +0100dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-16 09:47:44 +0100dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net)
2021-12-16 09:48:43 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 09:49:26 +0100cfricke(~cfricke@user/cfricke)
2021-12-16 09:49:30 +0100machinedgod(~machinedg@24.105.81.50)
2021-12-16 09:51:22 +0100img(~img@user/img)
2021-12-16 09:52:08 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-16 09:52:35 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-16 09:53:39 +0100acidjnk(~acidjnk@p200300d0c7271e9405040680e1e3c542.dip0.t-ipconnect.de)
2021-12-16 09:55:19 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-16 09:55:36 +0100featurebug(~featurebu@49.205.122.91)
2021-12-16 09:57:28 +0100lavaman(~lavaman@98.38.249.169) (Read error: Connection reset by peer)
2021-12-16 09:57:57 +0100phma_phma
2021-12-16 09:58:55 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 10:00:35 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-12-16 10:06:19 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-16 10:06:59 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:158b:cfc1:e7b3:d4ac) (Remote host closed the connection)
2021-12-16 10:09:09 +0100steven1(~steven@172.92.136.203) (Quit: WeeChat 3.2)
2021-12-16 10:10:07 +0100jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 250 seconds)
2021-12-16 10:11:55 +0100jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com)
2021-12-16 10:17:18 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-12-16 10:17:42 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-12-16 10:18:29 +0100bollu(uid233390@id-233390.helmsley.irccloud.com)
2021-12-16 10:19:26 +0100bahamas(~lucian@86.120.77.115) (Quit: Lost terminal)
2021-12-16 10:23:43 +0100ubert(~Thunderbi@p200300ecdf1abb03cc2914e8ae945344.dip0.t-ipconnect.de) (Remote host closed the connection)
2021-12-16 10:26:00 +0100Guest24(~Guest24@2a02:c7f:f716:ac00:195c:86b6:8540:d1a5)
2021-12-16 10:27:59 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-12-16 10:29:12 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-12-16 10:32:30 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 10:38:44 +0100raghavgururajan(9fd51d1ea8@user/raghavgururajan) (Remote host closed the connection)
2021-12-16 10:40:27 +0100ishutin(~ishutin@85-238-77-101.pool.digikabel.hu) (Ping timeout: 250 seconds)
2021-12-16 10:41:56 +0100RiverNotHere(~RiverNotH@cpe-104-172-51-133.socal.res.rr.com)
2021-12-16 10:42:19 +0100ishutin(~ishutin@78-131-74-101.pool.digikabel.hu)
2021-12-16 10:43:03 +0100RiverNotHere(~RiverNotH@cpe-104-172-51-133.socal.res.rr.com) (Client Quit)
2021-12-16 10:48:35 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-12-16 10:48:53 +0100alx741(~alx741@157.100.93.160)
2021-12-16 10:49:41 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-12-16 10:53:02 +0100mvk(~mvk@2607:fea8:5cdd:f000::9788) (Ping timeout: 260 seconds)
2021-12-16 10:53:13 +0100Ainoretho(~ypw@huji-132-64-244-111.xt.huji.ac.il)
2021-12-16 10:54:59 +0100ubert(~Thunderbi@2a02:8109:9880:303c:c4a4:d039:7d:7f7e)
2021-12-16 10:57:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 11:00:26 +0100mason0(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2021-12-16 11:03:26 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 11:06:57 +0100tomku(~tomku@user/tomku) (Read error: Connection reset by peer)
2021-12-16 11:07:24 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 11:09:45 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2021-12-16 11:11:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913) (Ping timeout: 240 seconds)
2021-12-16 11:13:58 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 11:15:41 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-12-16 11:17:03 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2021-12-16 11:17:03 +0100Lord_of_Life_Lord_of_Life
2021-12-16 11:18:45 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
2021-12-16 11:20:40 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-16 11:21:26 +0100alx741(~alx741@157.100.93.160)
2021-12-16 11:23:07 +0100tomku(~tomku@user/tomku)
2021-12-16 11:24:51 +0100forell(~forell@user/forell) (Quit: ZNC - https://znc.in)
2021-12-16 11:25:38 +0100forell(~forell@user/forell)
2021-12-16 11:27:27 +0100andjjj23(~irc@107.170.228.47) (Ping timeout: 250 seconds)
2021-12-16 11:27:45 +0100andjjj23(~irc@107.170.228.47)
2021-12-16 11:31:21 +0100mc47(~mc47@xmonad/TheMC47)
2021-12-16 11:32:59 +0100leah2(~leah@vuxu.org) (Quit: trotz alledem!)
2021-12-16 11:33:09 +0100leah2(~leah@vuxu.org)
2021-12-16 11:33:09 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 11:33:11 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2021-12-16 11:33:30 +0100ProfSimm(~ProfSimm@87.227.196.109)
2021-12-16 11:37:53 +0100 <merijn> hmm, what's the way to go to run a megaparsec parser against a stream that's parsed by another megaparsec parser?
2021-12-16 11:38:31 +0100 <merijn> I see I can define my own stream class, but the only way that works is if I produce a list or something and then parse that, which seems inefficient
2021-12-16 11:47:10 +0100cheater(~Username@user/cheater) (Ping timeout: 260 seconds)
2021-12-16 11:50:06 +0100Guest24(~Guest24@2a02:c7f:f716:ac00:195c:86b6:8540:d1a5) (Quit: Client closed)
2021-12-16 11:50:19 +0100 <[exa]> merijn: it should be able to consume anything as long as it has the class instances
2021-12-16 11:50:47 +0100cheater(~Username@user/cheater)
2021-12-16 11:51:01 +0100alx741(~alx741@157.100.93.160)
2021-12-16 11:51:37 +0100 <[exa]> anyway, why would the list be inefficient?
2021-12-16 11:55:38 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-16 11:56:20 +0100ubert(~Thunderbi@2a02:8109:9880:303c:c4a4:d039:7d:7f7e) (Remote host closed the connection)
2021-12-16 11:56:32 +0100ubert(~Thunderbi@2a02:8109:9880:303c:9285:9698:be15:2e15)
2021-12-16 11:57:03 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2021-12-16 11:57:22 +0100ProfSimm(~ProfSimm@87.227.196.109)
2021-12-16 11:58:25 +0100 <merijn> because it effectively ends up being two pass
2021-12-16 11:58:39 +0100 <merijn> You parse the entire input and force the list in memory before you can run the other parser
2021-12-16 11:59:02 +0100 <merijn> While I wanna use a megaparsec parser to lex the input into a stream of more usable stuff
2021-12-16 11:59:12 +0100 <merijn> then parse that stream
2021-12-16 11:59:38 +0100 <[exa]> (parse1 <$> parse2 input) doesn't fuse?
2021-12-16 11:59:40 +0100 <[exa]> ._.
2021-12-16 12:01:23 +0100 <merijn> [exa]: That case is to complex for me to make any predictions about whether it will or won't
2021-12-16 12:04:07 +0100random(~random@46.254.129.95)
2021-12-16 12:04:11 +0100 <Profpatsch> Huh, I just noticed that Text.IO.readFile does not correctly handle UTF-8 Byte-Order marks?
2021-12-16 12:04:14 +0100 <[exa]> can you model `parse2` as something like `parseTokenAndReturnRest` then fold on it?
2021-12-16 12:04:16 +0100randomGuest2110
2021-12-16 12:04:27 +0100joo-_(~joo-_@fsf/member/joo--) (Quit: Lost terminal)
2021-12-16 12:04:32 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 240 seconds)
2021-12-16 12:04:50 +0100joo-_(~joo-_@87-49-45-77-mobile.dk.customer.tdc.net)
2021-12-16 12:04:50 +0100joo-_(~joo-_@87-49-45-77-mobile.dk.customer.tdc.net) (Changing host)
2021-12-16 12:04:50 +0100joo-_(~joo-_@fsf/member/joo--)
2021-12-16 12:05:02 +0100 <[exa]> Profpatsch: utf8 needs BOM?
2021-12-16 12:05:45 +0100 <Profpatsch> [exa]: No, but Windows will prepend three bytes of BOM to their unicode files
2021-12-16 12:05:57 +0100 <Profpatsch> So I’d expect Text.IO to know about that
2021-12-16 12:05:58 +0100 <Guest2110> hey guys
2021-12-16 12:06:02 +0100 <Profpatsch> Maybe I’m wrong
2021-12-16 12:06:05 +0100 <Guest2110> can anyone lend a hand with Generics
2021-12-16 12:06:08 +0100 <Profpatsch> I’ll just strip them I guess
2021-12-16 12:06:09 +0100 <Guest2110> is this possible?
2021-12-16 12:06:10 +0100 <Guest2110> https://pastebin.com/7egxTXy0
2021-12-16 12:06:55 +0100 <[exa]> Profpatsch: check out GHC.IO.Encoding, but generally I wouldn't expect Text to really handle that
2021-12-16 12:06:56 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-16 12:08:25 +0100 <Profpatsch> I mean to be sure it’s a bit specific to Windows madness
2021-12-16 12:08:35 +0100 <Profpatsch> & Text.dropWhile (== byteOrderMark)
2021-12-16 12:08:38 +0100 <Profpatsch> should fix it
2021-12-16 12:08:49 +0100 <Profpatsch> let byteOrderMark = '\65279'
2021-12-16 12:09:39 +0100 <[exa]> yeah Windows doesn't really help there. :]
2021-12-16 12:10:17 +0100 <[exa]> Guest2110: you might be able to find `everywhere` function, which sounds like what you want
2021-12-16 12:11:14 +0100 <merijn> Profpatsch: UTF-8 BOM is an insane MS atrocity and the moron who came up with that should be shot
2021-12-16 12:11:58 +0100 <[exa]> Guest2110: highly suggest you have a look at SYB paper. The combination with classes should work out too, with a bit of care.
2021-12-16 12:12:25 +0100 <[exa]> merijn: thanks, I didn't want to say this first. :D
2021-12-16 12:12:45 +0100 <merijn> Profpatsch: Check if the new utf-8 based text RC supports it?
2021-12-16 12:13:21 +0100 <Guest2110> [exa]: I'll look into `everywhere`, thanks!
2021-12-16 12:13:26 +0100ByronJohnson(~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 268 seconds)
2021-12-16 12:14:18 +0100 <Guest2110> [exa]: ah, that's different from what I need, `everywhere` is `a -> a` and I don't have an `a` available, just need to extract some metadata from a type
2021-12-16 12:14:31 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2021-12-16 12:15:23 +0100mmhat(~mmh@55d46fe9.access.ecotel.net)
2021-12-16 12:15:34 +0100mason0(~bc8147f2@cerf.good1.com)
2021-12-16 12:17:14 +0100 <[exa]> Guest2110: yes there are other functions for that, I just don't remember the precise names
2021-12-16 12:17:26 +0100 <Guest2110> [exa]: on it, thanks a lot again!
2021-12-16 12:19:01 +0100 <[exa]> Guest2110: you might like "everything", only the type is a bit obscure
2021-12-16 12:19:25 +0100 <[exa]> it's basically the one that works with `mkQ` or `makeQuery` from the SYB paper, not sure what was the precise name anymore
2021-12-16 12:19:39 +0100 <[exa]> but basically you can have stuff like `everything + (
2021-12-16 12:19:39 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 12:19:45 +0100 <[exa]> oh snap
2021-12-16 12:20:10 +0100 <Guest2110> [exa]: I need to get my reading glasses because there's some huge gaps to be filled haha
2021-12-16 12:20:17 +0100 <[exa]> `everything (+) (\MyDataPiece x -> intval x) myStruct`
2021-12-16 12:20:41 +0100 <[exa]> (very roughly)
2021-12-16 12:22:41 +0100 <[exa]> the paper here https://ldpreload.com/p/syb/hmap.pdf , getting roughly to sections ~3.3 to 4.1 should solve your problem
2021-12-16 12:23:25 +0100joo-_(~joo-_@fsf/member/joo--) (Quit: leaving)
2021-12-16 12:23:26 +0100 <[exa]> + Typeable and Data instances are generated by GHC (you just need to write the `deriving` for it
2021-12-16 12:23:33 +0100 <[exa]> )
2021-12-16 12:23:38 +0100joo-_(~joo-_@fsf/member/joo--)
2021-12-16 12:26:17 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 240 seconds)
2021-12-16 12:27:16 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 12:27:56 +0100Guest6030(~pyon@2800:200:e840:42c7:c75:c5f:d434:a5f1) (Quit: WeeChat 3.3)
2021-12-16 12:28:21 +0100unyu(~pyon@user/pyon)
2021-12-16 12:30:38 +0100 <sprout> https://pasteboard.co/TJarPW9Gt0Zz.png <- AoC, day 16, task 2. egel
2021-12-16 12:31:53 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2021-12-16 12:32:43 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
2021-12-16 12:33:19 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Client Quit)
2021-12-16 12:37:26 +0100alx741(~alx741@157.100.93.160)
2021-12-16 12:41:54 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2021-12-16 12:42:11 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-16 12:42:13 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-12-16 12:43:45 +0100dsrt^(~dsrt@98.188.240.142) (Ping timeout: 256 seconds)
2021-12-16 12:45:15 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 12:46:02 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-16 12:48:04 +0100cheater(~Username@user/cheater) (Quit: BitchX: use it, it makes you bulletproof)
2021-12-16 12:51:58 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
2021-12-16 12:52:13 +0100kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
2021-12-16 12:54:37 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-16 12:55:48 +0100cheater(~Username@user/cheater)
2021-12-16 12:58:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 12:59:08 +0100earendel(uid498179@user/earendel)
2021-12-16 12:59:26 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:00:28 +0100n3t(~n3t@s45.mydevil.net) (Changing host)
2021-12-16 13:00:28 +0100n3t(~n3t@user/n3t)
2021-12-16 13:02:55 +0100alx741(~alx741@157.100.93.160)
2021-12-16 13:06:02 +0100cosimone(~user@93-47-229-223.ip115.fastwebnet.it)
2021-12-16 13:10:10 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-16 13:10:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:11:54 +0100asm(~alexander@burner.asm89.io) (Changing host)
2021-12-16 13:11:54 +0100asm(~alexander@user/asm)
2021-12-16 13:13:38 +0100__monty__(~toonn@user/toonn)
2021-12-16 13:13:57 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-12-16 13:14:33 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 13:14:56 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-12-16 13:15:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 13:16:02 +0100jippiedoe(~david@145.107.128.124)
2021-12-16 13:16:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:16:31 +0100acidjnk(~acidjnk@p200300d0c7271e9405040680e1e3c542.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2021-12-16 13:16:33 +0100fef(~thedawn@user/thedawn)
2021-12-16 13:16:58 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2021-12-16 13:17:20 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-16 13:18:44 +0100acidjnk(~acidjnk@p200300d0c7271e942878552e9699ebb2.dip0.t-ipconnect.de)
2021-12-16 13:19:33 +0100kuribas(~user@ptr-25vy0i8a8smuqmxkytj.18120a2.ip6.access.telenet.be)
2021-12-16 13:23:01 +0100somkls^(~somkls@wsip-98-188-240-142.mc.at.cox.net)
2021-12-16 13:25:37 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-16 13:25:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-12-16 13:26:59 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:27:53 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-16 13:29:05 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 256 seconds)
2021-12-16 13:31:21 +0100pavonia(~user@user/siracusa)
2021-12-16 13:31:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 13:32:30 +0100alx741(~alx741@157.100.93.160)
2021-12-16 13:32:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:34:16 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-12-16 13:37:44 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-12-16 13:38:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 13:38:23 +0100Ainoretho(~ypw@huji-132-64-244-111.xt.huji.ac.il) (Quit: WeeChat 3.3)
2021-12-16 13:38:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:42:38 +0100pfurla_(~pfurla@2804:18:5827:38:71a1:6773:333f:330d)
2021-12-16 13:43:39 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-12-16 13:44:19 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 13:44:23 +0100pfurla(~pfurla@177.25.189.1) (Ping timeout: 256 seconds)
2021-12-16 13:44:27 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-12-16 13:47:47 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
2021-12-16 13:49:29 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-12-16 13:50:14 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 13:51:41 +0100cadro(~cadro@65.0.broadband17.iol.cz)
2021-12-16 13:52:05 +0100 <dminuoso> sprout: Can you provide some meaningful example where eager combinator rewriting offers an advantage over say what Haskell has?
2021-12-16 13:52:44 +0100 <cadro> I'm working on a multi-threaded program, and one of the threads' computation halts unexpectedly. I suspect it's blocked on a blackhole (as I'm doing some knot tying and clearly getting it wrong). How can I figure out what it's waiting for?
2021-12-16 13:52:57 +0100sleblanc(~sleblanc@user/sleblanc) (Ping timeout: 240 seconds)
2021-12-16 13:53:18 +0100 <cadro> "halts" as in "doesn't proceed" (but no error message)
2021-12-16 13:53:18 +0100 <sprout> it's more predictable. sometimes haskell programs explode unexpectedy. and the other is that I can abuse the predicatibility for say, threads which hold on to a lock
2021-12-16 13:53:34 +0100 <sprout> when the lock goes out of scope the lock is released
2021-12-16 13:53:43 +0100 <dminuoso> cadro: If you reenter a black hole, the RTS should immediately exit and produce a diagnostic.
2021-12-16 13:54:03 +0100 <hpc> dminuoso: in the threaded runtime it doesn't, because another thread can potentially break the loop
2021-12-16 13:54:14 +0100 <dminuoso> hpc: Oh really?
2021-12-16 13:54:26 +0100 <hpc> also because it could just be two threads entering the same thunk
2021-12-16 13:54:57 +0100 <hpc> try compiling a loop normally and with -threaded
2021-12-16 13:55:09 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2021-12-16 13:55:10 +0100puke(~puke@user/puke) (Remote host closed the connection)
2021-12-16 13:55:28 +0100puke(~puke@user/puke)
2021-12-16 13:55:53 +0100 <dminuoso> cadro: You could run from GHCI, set -fbreak-on-error, and run using `:trace`. Then you can send SIGINT via C-c and then use GHCi to explore?
2021-12-16 13:56:07 +0100 <dminuoso> That might give you an indication of where you are and how you got to that
2021-12-16 13:56:13 +0100 <dminuoso> Just a thought
2021-12-16 13:56:23 +0100 <hpc> hmm, except when i try it now i can't get it to stop printing <<loop>>
2021-12-16 13:56:36 +0100 <hpc> maybe i am misrembering, or it's changed "recently"
2021-12-16 13:56:58 +0100 <cadro> dminuoso: hmm I might try that, although I'm not particularly fond of this because it'll take me a while to run this behemoth from GHCI...
2021-12-16 13:56:58 +0100 <geekosaur> behavior varies per release ime
2021-12-16 13:57:26 +0100 <hpc> i also just did print (let x = x +1 in x), so maybe that's too trivial
2021-12-16 13:57:26 +0100 <geekosaur> -fobject-code? although that might impact the information you get from breakpoints
2021-12-16 13:57:50 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 260 seconds)
2021-12-16 13:59:15 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-16 13:59:56 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-16 14:00:30 +0100alx741(~alx741@157.100.93.160)
2021-12-16 14:03:01 +0100 <dminuoso> hpc: But it seems to make sense now that I think about it.
2021-12-16 14:03:08 +0100 <dminuoso> A different thread should be blocked
2021-12-16 14:03:20 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2021-12-16 14:04:17 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 240 seconds)
2021-12-16 14:06:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-16 14:07:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 14:08:17 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 240 seconds)
2021-12-16 14:10:13 +0100max22-(~maxime@2a01cb0883359800fd9f63ef34845b1d.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2021-12-16 14:12:27 +0100iqubic(~user@2601:602:9502:c70:1ab:7e18:1540:e9a6) (Remote host closed the connection)
2021-12-16 14:13:15 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 14:15:25 +0100ByronJohnson(~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
2021-12-16 14:15:41 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 14:18:23 +0100featurebug(~featurebu@49.205.122.91) (Ping timeout: 256 seconds)
2021-12-16 14:19:57 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
2021-12-16 14:20:11 +0100vpan(~0@212.117.1.172)
2021-12-16 14:21:26 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-12-16 14:25:51 +0100 <merijn> There was no "strong" combinator in base, was there?
2021-12-16 14:26:55 +0100iqubic(~user@2601:602:9502:c70:c1df:76dd:a2c3:7b85)
2021-12-16 14:29:09 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 256 seconds)
2021-12-16 14:29:37 +0100alx741(~alx741@157.100.93.160)
2021-12-16 14:35:11 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 14:37:04 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-16 14:39:27 +0100cadro(~cadro@65.0.broadband17.iol.cz) (Quit: Client closed)
2021-12-16 14:42:36 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Quit: Reconnecting)
2021-12-16 14:42:45 +0100jippiedoe(~david@145.107.128.124) (Ping timeout: 256 seconds)
2021-12-16 14:42:48 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-16 14:43:58 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2021-12-16 14:49:20 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-12-16 14:49:57 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-12-16 14:51:33 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-12-16 14:53:04 +0100alx741(~alx741@157.100.93.160)
2021-12-16 14:56:10 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-12-16 14:56:13 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-16 14:58:07 +0100ProfSimm(~ProfSimm@87.227.196.109)
2021-12-16 14:58:08 +0100 <dminuoso> merijn: What type signature would that have?
2021-12-16 14:58:35 +0100 <merijn> dminuoso: "Applicative f => (f a, b) -> f (a, b)"
2021-12-16 14:59:24 +0100 <dminuoso> merijn: Why does this need Applicative?
2021-12-16 14:59:39 +0100ph88(~ph88@ip5f5af068.dynamic.kabel-deutschland.de)
2021-12-16 14:59:42 +0100 <dminuoso> It seems this would work for all Functor
2021-12-16 14:59:44 +0100 <merijn> oh, I guess Functor is enough
2021-12-16 15:00:56 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-16 15:01:39 +0100 <iqubic> f (fa, b) = fmap (\x -> (x, b)) fa, right?
2021-12-16 15:01:49 +0100 <dminuoso> Yes.
2021-12-16 15:02:32 +0100 <merijn> iqubic: Sure, but I need it so often that a convenient name would be nice
2021-12-16 15:02:49 +0100 <iqubic> I'm not sure what you should call it.
2021-12-16 15:02:49 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 15:03:06 +0100 <merijn> Well, strong, since that's the CT name I know for it :p
2021-12-16 15:04:42 +0100curiousgay(~curiousga@77-120-141-90.kha.volia.net)
2021-12-16 15:05:14 +0100xsperry(~xs@user/xsperry) (Remote host closed the connection)
2021-12-16 15:05:21 +0100shriekingnoise(~shrieking@186.137.144.80)
2021-12-16 15:05:25 +0100 <iqubic> Strong is good. If you have Sum types, you can use Choice.
2021-12-16 15:05:51 +0100vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2021-12-16 15:05:52 +0100SummerSonw(~The_viole@203.77.49.232) (Remote host closed the connection)
2021-12-16 15:06:14 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-16 15:06:14 +0100SummerSonw(~The_viole@203.77.49.232) (Client Quit)
2021-12-16 15:06:29 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-16 15:07:26 +0100 <dminuoso> iqubic: The term strength is used because your `f` is the canonical categorical strength that all functors have.
2021-12-16 15:07:39 +0100 <dminuoso> or tensorials srength, rather
2021-12-16 15:07:42 +0100 <dminuoso> gah.
2021-12-16 15:07:44 +0100 <dminuoso> tensorial strength
2021-12-16 15:07:51 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 245 seconds)
2021-12-16 15:08:22 +0100 <iqubic> I see. All I know is that the profunctor package has Strong and Choice as things. And those can be used me make lenses and prims. jle` has a blog post on it.
2021-12-16 15:08:32 +0100 <dminuoso> yeah, the name of Strong is derived from this as well
2021-12-16 15:09:08 +0100 <iqubic> s/things/typeclasses with a Profuctor constraint/
2021-12-16 15:09:45 +0100max22-(~maxime@2a01cb0883359800742a76b71025b974.ipv6.abo.wanadoo.fr)
2021-12-16 15:10:54 +0100 <raehik> I have a type that lets me decide on the inner type for a functor: data Apply a f = Apply (f a)
2021-12-16 15:11:11 +0100 <iqubic> Seems reasonable.
2021-12-16 15:11:15 +0100 <raehik> Is there something like that in a library or in base? I can't Hoogle it for some reason
2021-12-16 15:14:26 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-16 15:16:58 +0100 <dminuoso> raehik: Mmm, one variant of is is prominently found in lens
2021-12-16 15:17:10 +0100 <dminuoso> type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t
2021-12-16 15:17:24 +0100xsperry(~xs@user/xsperry)
2021-12-16 15:17:33 +0100somkls^(~somkls@wsip-98-188-240-142.mc.at.cox.net) (Remote host closed the connection)
2021-12-16 15:17:41 +0100 <dminuoso> So this thing is polymorphic over any Functor, and in most instances the consumer would pick either Const or Identity
2021-12-16 15:18:43 +0100jippiedoe(~david@145.89.5.239)
2021-12-16 15:18:57 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 15:20:37 +0100alx741(~alx741@157.100.93.160)
2021-12-16 15:20:57 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 15:21:58 +0100 <raehik> dminuoso: right, I think I see that. I'll look around the lens docs. probably will rename to be problem specific first (espec. if the thing it generalizes to is lenses)
2021-12-16 15:22:22 +0100 <dminuoso> raehik: Something like Apply I havent seen yet, and Im not sure this would yield much benefit.
2021-12-16 15:22:47 +0100 <raehik> indeed it was just a type that I needed (I think)
2021-12-16 15:22:55 +0100 <dminuoso> Mind my asking, what for?
2021-12-16 15:23:01 +0100 <raehik> I want a list of functors over a given type
2021-12-16 15:23:16 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 245 seconds)
2021-12-16 15:23:17 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-16 15:23:51 +0100 <dminuoso> Sure, but why do you think you need a separate data type for that?
2021-12-16 15:24:04 +0100 <raehik> this way lets me use `Apply a` with vinyl like `Rec (Apply String) '[Identity, Const ()]`
2021-12-16 15:24:16 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2021-12-16 15:24:16 +0100 <merijn> ok...I don't understand how to implement megaparsec's TraversableStream...
2021-12-16 15:24:19 +0100 <dminuoso> % f :: Functor f => [f a] -> Int; f = undefined
2021-12-16 15:24:19 +0100 <yahb> dminuoso:
2021-12-16 15:24:51 +0100 <dminuoso> raehik: Okay I cant help any further then. Have no vinyl knowledge whatsoever.
2021-12-16 15:25:02 +0100 <merijn> Anyone got any clues?
2021-12-16 15:25:46 +0100 <raehik> dminuoso: I don't need vinyl! only picked it up because it seemed to fit. the best solution for me would be the simplest
2021-12-16 15:25:47 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 252 seconds)
2021-12-16 15:26:04 +0100 <dminuoso> raehik: What is the general problem you are trying to solve?
2021-12-16 15:26:28 +0100 <dminuoso> vinyl seems like quite an extreme hammer if you dont otherwise want it precisely because of what it can do..
2021-12-16 15:26:49 +0100 <raehik> I'd like to define a list of different functors over a given type, so I can strip them off one by one (and potentially change the concrete type)
2021-12-16 15:27:14 +0100 <dminuoso> "list of different functors over a given type"
2021-12-16 15:27:30 +0100 <dminuoso> As in '[[], Identity, IO] ?
2021-12-16 15:28:24 +0100 <raehik> yeah. though the usage is specifically for defining some "metadata" on `a`, so the functors will be mostly record types that may or may not use a
2021-12-16 15:28:39 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 15:29:04 +0100 <dminuoso> I see.
2021-12-16 15:29:18 +0100 <dminuoso> So roughly '[Tagged "foo", Tagged "bar", Tagged "quux"] ?
2021-12-16 15:29:19 +0100 <raehik> My original solution was to nest them. But that means ordering them in a certain way, made something a little awkward
2021-12-16 15:29:33 +0100burnsidesLlama(~burnsides@dhcp168-016.wadham.ox.ac.uk)
2021-12-16 15:30:17 +0100 <raehik> perhaps? I need to check what Tagged is
2021-12-16 15:30:52 +0100 <dminuoso> % newtype Tagged (t :: k) a = Tagged { unTagged :: a }
2021-12-16 15:30:52 +0100 <yahb> dminuoso:
2021-12-16 15:31:23 +0100 <dminuoso> Anyway, this is all too sketchy and not clear to me
2021-12-16 15:32:35 +0100 <raehik> thank you very much for the help, it is sketchy to me too hah
2021-12-16 15:33:34 +0100 <raehik> fundamentally I want to go from having to nest functors on a given type a to having a "flat" list of them instead
2021-12-16 15:34:29 +0100 <dminuoso> Oh.
2021-12-16 15:34:31 +0100 <raehik> nesting them was easy, I just wrote my "metadata" functors to have an "inner metadata" field. but it's not ideal
2021-12-16 15:34:44 +0100SummerSonw(~The_viole@203.77.49.232) (Quit: Leaving)
2021-12-16 15:35:10 +0100 <raehik> I figured with a list of functors over a, I could strip any one in any order (and it would do something to some type outside the list)
2021-12-16 15:35:16 +0100 <dminuoso> What kind of metadata functors are these?
2021-12-16 15:35:52 +0100 <raehik> hope you don't mind if I link code https://github.com/raehik/bytepatch/blob/main/src/BytePatch/Patch/Align.hs#L16-L21
2021-12-16 15:36:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-16 15:36:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-16 15:36:00 +0100wroathe(~wroathe@user/wroathe)
2021-12-16 15:36:24 +0100Sgeo(~Sgeo@user/sgeo)
2021-12-16 15:36:30 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
2021-12-16 15:36:37 +0100 <raehik> I have a patch over some type `a` (ByteString, Text). I have some checks to perform before patching, they need to know `a`
2021-12-16 15:36:46 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-16 15:36:56 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 15:38:23 +0100 <dminuoso> raehik: My very first intution is: why not simply have a uniform metadata type, such that you can simply have `data D a = D { metadata :: [Metadata], payload :: a }`
2021-12-16 15:39:12 +0100 <dminuoso> But, I think Im beginning to understand the problem domain here
2021-12-16 15:39:25 +0100max22-(~maxime@2a01cb0883359800742a76b71025b974.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-12-16 15:40:35 +0100 <dminuoso> Ah heh, you have that already.
2021-12-16 15:40:39 +0100 <dminuoso> That's your `Patch`
2021-12-16 15:40:59 +0100 <dminuoso> Or `Pos`
2021-12-16 15:41:07 +0100 <raehik> the code might be weird right now because I got halfway thru the meta rewrite xd
2021-12-16 15:41:26 +0100 <dminuoso> And I can also see why you're exploring vinyl.
2021-12-16 15:41:52 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 268 seconds)
2021-12-16 15:42:00 +0100 <dminuoso> You want to have these sort of anonyms sum types indexed by attached metadata, where you can slice out a piece of metadata, and everything should just work out
2021-12-16 15:42:01 +0100 <raehik> I liked being able to pick and mix metadatas. the intent is to have a patch with a bunch of metadata, strip them off, and end up with a patch with '[] meta
2021-12-16 15:42:02 +0100 <dminuoso> Right?
2021-12-16 15:42:16 +0100 <dminuoso> A kind of..
2021-12-16 15:42:28 +0100 <raehik> record!
2021-12-16 15:42:33 +0100 <raehik> maybe? :)
2021-12-16 15:42:54 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-12-16 15:43:34 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-16 15:43:44 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-16 15:44:17 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-16 15:44:42 +0100 <raehik> dminuoso: to your above msg I think so yes. I may want to tag them though if it makes sense with this design, so vinyl looked even nicer
2021-12-16 15:44:45 +0100 <dminuoso> align :: forall (mss :: [Meta], ms :: [Meta]). mss ~ ms `Sans` MetaPos => Pos 'RelSeek ms -> Either Error mss
2021-12-16 15:44:49 +0100 <dminuoso> raehik: ^- something along these lines?
2021-12-16 15:45:04 +0100 <dminuoso> I mean it's just something sketchy with no regard of implementability
2021-12-16 15:45:31 +0100 <dminuoso> Oops hold on
2021-12-16 15:45:34 +0100 <dminuoso> I missed something
2021-12-16 15:45:52 +0100alx741(~alx741@157.100.93.160)
2021-12-16 15:46:11 +0100 <dminuoso> align :: forall s (mss :: [Meta], ms :: [Meta]). (SeekRep s ~ Natural, mss ~ ms `Sans` MetaPos s) => Pos 'RelSeek ms -> Either Error (Pos s mss)
2021-12-16 15:46:14 +0100 <dminuoso> Simplified a bit
2021-12-16 15:46:27 +0100 <raehik> yesss that's exactly it. I want to have a big ol type-level record that I can rip types out of one by one
2021-12-16 15:46:53 +0100 <dminuoso> Can vinyl express this "ripping it out"?
2021-12-16 15:47:17 +0100 <raehik> I believe so, I'm playing with it & having more success than my tries with HList/type-level lists
2021-12-16 15:48:52 +0100 <raehik> there's RecSubset which only works when vinyl can see the record you're ripping out does exist in the argument
2021-12-16 15:48:54 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-16 15:49:22 +0100 <dminuoso> raehik: But yeah, I would simply have a uniform `Metadata` type
2021-12-16 15:49:46 +0100 <raehik> what do you mean by uniform?
2021-12-16 15:49:54 +0100 <dminuoso> That would greatly simplify the surroundings (and keep myself sane), at the cost of not proving correct metadata has been supplied or consumed.
2021-12-16 15:49:59 +0100 <raehik> right, yes
2021-12-16 15:50:17 +0100 <dminuoso> Well, a big honking `data Metadata = MetaPos ... | MetaThing ... | MetaOther ...`
2021-12-16 15:50:36 +0100 <dminuoso> And then just assume you have `[Metadata]` stateful operation
2021-12-16 15:50:59 +0100 <raehik> it's largely because this started as a JSON-friendly representation and some meta belonged with one type, other with another type
2021-12-16 15:51:24 +0100 <dminuoso> raehik: By the way, why do you want to *remove* metadata?
2021-12-16 15:51:34 +0100 <raehik> thanks awfully much dminuoso this is very helpful
2021-12-16 15:51:41 +0100 <dminuoso> Is that just to reduce memory residency? Or is there a different reason?
2021-12-16 15:52:17 +0100 <raehik> Just for clarity. It means I can prepare the patch before applying, and know that it's "safe" to apply (or it's been processed)
2021-12-16 15:52:58 +0100 <raehik> like one set of metadata tries to convert the patch into a binary representation (so Text goes to UTF-8 bytes with a null term)
2021-12-16 15:53:21 +0100jespada(~jespada@87.74.33.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-12-16 15:53:22 +0100 <raehik> I could do that during the patch or I could prepare it before. it's all a big hobby thing that grew from an actually useful tool
2021-12-16 15:53:49 +0100jespada(~jespada@87.74.33.157)
2021-12-16 15:54:01 +0100 <dminuoso> So this is just my personal experience. I think when you try to assert your program has been constructed correctly in the type system, you invest so much time in finding type level trickeries, end up with completely rubbish diagnostics on the slightest of typos, often to assert something simple as `Ensure I dont write `foo >> bar` instead of `bar >> foo`.
2021-12-16 15:54:02 +0100 <raehik> (metadata might not be the right word)
2021-12-16 15:54:03 +0100max22-(~maxime@2a01cb0883359800e979b10b27a72e14.ipv6.abo.wanadoo.fr)
2021-12-16 15:54:19 +0100 <dminuoso> That it seems that people sometimes lose track of their goals.
2021-12-16 15:54:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-12-16 15:54:54 +0100 <dminuoso> For our programs, I ended up throwing most type level trickeries away, and simply reengineering the program structure, so that validating correct program construction is a matter of looking at say 3 lines
2021-12-16 15:55:11 +0100 <raehik> yeah I've certainly had that for some projects
2021-12-16 15:55:26 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 15:55:26 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 15:56:09 +0100 <raehik> I can see where the extra type safety could be discarded and everything would work otherwise the same now
2021-12-16 15:56:35 +0100ubert(~Thunderbi@2a02:8109:9880:303c:9285:9698:be15:2e15) (Ping timeout: 252 seconds)
2021-12-16 15:56:49 +0100 <raehik> perhaps I go back to that, *then* attempt to split everything up into layers again
2021-12-16 15:57:20 +0100 <dminuoso> Your choice, Im not trying to sway you
2021-12-16 15:57:34 +0100 <zero> is there a good reason we can't eta reduce one definition of a function on a specific pattern match and not on others?
2021-12-16 15:57:50 +0100 <dminuoso> But given the size or your project, I think engineering overkill is the right term here.
2021-12-16 15:58:41 +0100 <mason0> @hoogle (a, b, c) -> a
2021-12-16 15:58:42 +0100 <lambdabot> Data.Tuple.Utils fst3 :: (a, b, c) -> a
2021-12-16 15:58:42 +0100 <lambdabot> Data.Tuple.Extra fst3 :: (a, b, c) -> a
2021-12-16 15:58:42 +0100 <lambdabot> Extra fst3 :: (a, b, c) -> a
2021-12-16 15:58:50 +0100 <mason0> which one should I use?
2021-12-16 15:59:06 +0100 <dminuoso> mason0: Id just write mine on the spot.
2021-12-16 15:59:13 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:f0a9:34f0:2c07:30d5) (Quit: WeeChat 2.8)
2021-12-16 15:59:14 +0100 <dminuoso> Or rather, I do. :)
2021-12-16 15:59:19 +0100 <mason0> I did as well :P
2021-12-16 15:59:33 +0100 <mason0> named it the same too
2021-12-16 15:59:37 +0100 <mason0> @hoogle (a, b, c) -> c
2021-12-16 15:59:38 +0100 <lambdabot> Data.Tuple.Utils thd3 :: (a, b, c) -> c
2021-12-16 15:59:38 +0100 <lambdabot> Data.Tuple.Extra thd3 :: (a, b, c) -> c
2021-12-16 15:59:38 +0100 <lambdabot> Extra thd3 :: (a, b, c) -> c
2021-12-16 15:59:53 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 252 seconds)
2021-12-16 15:59:58 +0100 <kuribas> raehik: You could more simply use Maybe fields.
2021-12-16 16:00:09 +0100 <kuribas> Then instead of removing fields, just set them to Nothing.
2021-12-16 16:00:12 +0100ubert(~Thunderbi@2a02:8109:9880:303c:66c1:82a7:41b7:a81d)
2021-12-16 16:00:18 +0100 <dminuoso> zero: This is a good question.
2021-12-16 16:00:39 +0100 <dminuoso> And at times I've wondered myself
2021-12-16 16:00:50 +0100 <mason0> could we write generic fst, snd, etc functions, that would work on any tuple size? lens somehow manages to do it
2021-12-16 16:01:13 +0100 <mason0> but I'm not sure how
2021-12-16 16:01:16 +0100 <dminuoso> zero: The one thought that comes to mind, perhaps this has subtle implications on WHNF.
2021-12-16 16:01:17 +0100 <raehik> mason0: lens just has a ton of instances for large tuples xD
2021-12-16 16:01:37 +0100 <dminuoso> zero: Recall how `f pat pat = z` has a different meaning from `p pat = \pat -> z`
2021-12-16 16:01:39 +0100 <janus> mason0: i like 'extra' because it is made by Neil Mitchell which is super trustworthy
2021-12-16 16:01:40 +0100 <mason0> just manually writing typeclass instances up to supported tuple length?
2021-12-16 16:01:42 +0100 <janus> @package extra
2021-12-16 16:01:42 +0100 <lambdabot> https://hackage.haskell.org/package/extra
2021-12-16 16:01:56 +0100 <dminuoso> zero: So perhaps there's a connection here.
2021-12-16 16:02:02 +0100acidjnk(~acidjnk@p200300d0c7271e942878552e9699ebb2.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2021-12-16 16:02:02 +0100 <janus> mason0: it has many other useful functions you're likely to need
2021-12-16 16:02:21 +0100 <raehik> kuribas: yep, thanks. it was convenient to structure it all in a layer-based approach but the same could be done with a bunch of Maybes
2021-12-16 16:02:23 +0100 <mason0> janus, okay!
2021-12-16 16:02:30 +0100 <dminuoso> mason0: Lens just wrote them out one by one.
2021-12-16 16:02:39 +0100 <dminuoso> And stuffed it into a typeclass.
2021-12-16 16:02:57 +0100 <dminuoso> https://hackage.haskell.org/package/lens-5.1/docs/Control-Lens-Combinators.html#t:Each
2021-12-16 16:03:10 +0100 <dminuoso> Note how they only support tuples up to 9 elements
2021-12-16 16:03:21 +0100 <raehik> oh that's baby tuples. I've seen instances for like 40 LOL
2021-12-16 16:03:24 +0100 <janus> some people will judge you for using lens. better avoid it and you won't have to fight them
2021-12-16 16:03:30 +0100 <mason0> a bit primitive, but maybe fst and snd should have been written like that as well
2021-12-16 16:03:50 +0100 <dminuoso> Perhaps, indeed.
2021-12-16 16:04:44 +0100 <dminuoso> mason0: sadly you'd have to have separate typeclasses. So you'd have one Fst, one Snd...
2021-12-16 16:05:00 +0100 <dminuoso> Because the lens-style implementation wouldn't work for actual `fst` or `snd`
2021-12-16 16:05:05 +0100 <dminuoso> At least not in a nice way
2021-12-16 16:05:24 +0100 <dminuoso> % (1,) ^? _3
2021-12-16 16:05:24 +0100 <yahb> dminuoso: ; <interactive>:157:1: error:; * Could not deduce (Num t0); from the context: (Num t, Field3 (t2 -> (t, t2)) (t2 -> (t, t2)) a a); bound by the inferred type for `it':; forall {t} {t2} {a}. (Num t, Field3 (t2 -> (t, t2)) (t2 -> (t, t2)) a a) => Maybe a; at <interactive>:157:1-10; The type variable `t0' is ambiguous; * In the ambiguity check for the in
2021-12-16 16:05:26 +0100 <dminuoso> % (1,2) ^? _3
2021-12-16 16:05:26 +0100 <yahb> dminuoso: ; <interactive>:158:1: error:; * Could not deduce (Num a0); from the context: (Num a, Num b, Field3 (a, b) (a, b) a1 a1); bound by the inferred type for `it':; forall {a} {b} {a1}. (Num a, Num b, Field3 (a, b) (a, b) a1 a1) => Maybe a1; at <interactive>:158:1-11; The type variable `a0' is ambiguous; * In the ambiguity check for the inferred type for `
2021-12-16 16:05:28 +0100 <dminuoso> Uh
2021-12-16 16:06:05 +0100 <dminuoso> ACtually even lens does this with Field1, Field2, Field3, Field4, Field5...
2021-12-16 16:11:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-16 16:11:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-16 16:11:14 +0100wroathe(~wroathe@user/wroathe)
2021-12-16 16:11:45 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 16:12:16 +0100notzmv(~zmv@user/notzmv)
2021-12-16 16:12:24 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 16:13:10 +0100 <mason0> hmm I actually don't have any idea how to write this typeclass. the types I wrote make no sense, and I can't figure out the right ones. https://paste.tomsmeding.com/7gNEGRcd
2021-12-16 16:13:24 +0100alx741(~alx741@157.100.93.160)
2021-12-16 16:14:10 +0100 <merijn> mason0: You can't write the right ones without extension voodoo
2021-12-16 16:14:47 +0100 <mason0> I should be able to write snd in standard haskell? I don't know how to do that either
2021-12-16 16:14:52 +0100 <mason0> for a pair
2021-12-16 16:15:06 +0100 <merijn> mason0: You don't need a class for that, though?
2021-12-16 16:15:28 +0100 <mason0> I know, but I'm just wondering how the types would look
2021-12-16 16:15:36 +0100vpan(~0@212.117.1.172) (Quit: Leaving.)
2021-12-16 16:15:50 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-12-16 16:15:59 +0100 <merijn> "(a,b) -> a" and "(a,b) -> b"?
2021-12-16 16:16:26 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 260 seconds)
2021-12-16 16:16:36 +0100 <mason0> what do we put in instance definition? kind has to be * -> *
2021-12-16 16:16:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913) (Ping timeout: 240 seconds)
2021-12-16 16:16:51 +0100dcoutts_(~duncan@ip-185-104-136-51.ptr.icomera.net)
2021-12-16 16:17:47 +0100 <merijn> mason0: Rewind: where does the class come in and why do you think you need a class?
2021-12-16 16:18:43 +0100 <dminuoso> % class Fst a where type FstTy a; fst :: a -> FstTy
2021-12-16 16:18:44 +0100 <yahb> dminuoso: ; <interactive>:165:45: error:; * Expecting one more argument to `FstTy'; Expected a type, but `FstTy' has kind `* -> *'; * In the type signature: fst :: a -> FstTy; In the class declaration for `Fst'
2021-12-16 16:18:48 +0100 <mason0> I wanted to try writing generic fst, snd, etc functions. and while trying, I figured out I don't know how to write any kind of instance for tuple
2021-12-16 16:18:48 +0100 <dminuoso> % class Fst a where type FstTy a; fst :: a -> FstTy a
2021-12-16 16:18:48 +0100 <yahb> dminuoso:
2021-12-16 16:18:51 +0100 <dminuoso> % instance Fst (a, b) where type FstTy (a, b) = a; fst (a, b) =
2021-12-16 16:18:51 +0100 <yahb> dminuoso: ; <interactive>:167:63: error: parse error (possibly incorrect indentation or mismatched brackets)
2021-12-16 16:18:53 +0100 <dminuoso> % instance Fst (a, b) where type FstTy (a, b) = a; fst (a, b) = a
2021-12-16 16:18:53 +0100 <yahb> dminuoso:
2021-12-16 16:19:05 +0100 <dminuoso> % :t fst
2021-12-16 16:19:05 +0100 <yahb> dminuoso: Fst a => a -> FstTy a
2021-12-16 16:19:17 +0100 <dminuoso> % instance Fst (a, b, c) where type FstTy (a, b, c) = a; fst (a, b, c) = a
2021-12-16 16:19:17 +0100 <yahb> dminuoso:
2021-12-16 16:19:23 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 16:19:26 +0100 <dminuoso> % fst ('a', 'b')
2021-12-16 16:19:26 +0100 <yahb> dminuoso: 'a'
2021-12-16 16:19:28 +0100 <dminuoso> % fst ('a', 'b', 'c')
2021-12-16 16:19:28 +0100 <yahb> dminuoso: 'a'
2021-12-16 16:19:30 +0100MiguelNegrao(~MiguelNeg@2001:818:dc71:d100:e682:f5cd:9590:d961)
2021-12-16 16:19:31 +0100 <mason0> dminuoso, do I need any extension for that?
2021-12-16 16:19:35 +0100 <dminuoso> Yes, TypeFamilies
2021-12-16 16:19:41 +0100 <dminuoso> Alternatively you can do it with FunctionalDependencies
2021-12-16 16:19:53 +0100 <mason0> which extension would be prefered for this?
2021-12-16 16:20:12 +0100 <dminuoso> TyFams are usually more ergonomic for this type of thing.
2021-12-16 16:20:32 +0100 <merijn> hmm, what's the right (mega)parsec combinator for parse "up to N times"?
2021-12-16 16:20:46 +0100zebrag(~chris@user/zebrag)
2021-12-16 16:21:02 +0100 <dminuoso> merijn: With fundeps you also need MultiParamTypeClasses, FlexibleInstances, and I think you need FlexibleContexts in use sites?
2021-12-16 16:21:41 +0100 <dminuoso> Oh, mason0.
2021-12-16 16:22:52 +0100 <dminuoso> merijn: Mmm, can you use replicateM and just disable backtracking?
2021-12-16 16:22:52 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 16:22:57 +0100 <MiguelNegrao> Hi all, I'm working on a library with two different possible implementations (for two different situations), some core functions have the same type signature but a different implementation. I then have some other functions which use these core functions. I would like to avoid having to duplicate the code, having to write these extra functions
2021-12-16 16:22:58 +0100 <MiguelNegrao> twice, one for each implementation, as the code is exactly the same, they just use a different version of the one of the core functions. Something like  having functions core1 and core2 and then having extra = core1 1 or extra = core2 1 , depending on which module the user imports. Is there some tricks with modules do achieve this ?
2021-12-16 16:22:58 +0100 <merijn> dminuoso: Maybe?
2021-12-16 16:23:00 +0100 <mason0> dminuoso it works nicely. I have no idea how, but it works, and it is easy to add support for longer tuples
2021-12-16 16:23:34 +0100 <dminuoso> mason0: So a type family is just a type-level function that takes types as input, and produces types as output
2021-12-16 16:24:03 +0100 <merijn> MiguelNegrao: Not realy? But you can just have an internal implementation that takes the core function as argument
2021-12-16 16:24:11 +0100 <dminuoso> mason0: FstTy is furthermore associated to the typeclass, such that any instance must also provide a type family instance, which allows you to figure out the resulting type of
2021-12-16 16:24:18 +0100 <mason0> dminuoso, just curious how far we could take this? could we make "at" function, that accepts int literal for the position of the element in the tuple? I guess not because it needs to be known at compile time? or maybe at could take _1, which is what lens does
2021-12-16 16:24:29 +0100 <MiguelNegrao> @merjin : that was also my plan if I didn't find anything else
2021-12-16 16:24:29 +0100 <lambdabot> Unknown command, try @list
2021-12-16 16:24:35 +0100 <dminuoso> mason0: Heh, well yes.. we sort of can.
2021-12-16 16:24:42 +0100 <merijn> MiguelNegrao: And then define "myCoreFunction = internalImplementation coreFunction1" and "myCoreFunction = internalImplementation coreFunction2" in separate modules
2021-12-16 16:24:55 +0100 <mason0> int literal or _1?
2021-12-16 16:24:58 +0100 <dminuoso> mason0: but this starts to get very dark in type trickery land.
2021-12-16 16:25:00 +0100 <merijn> MiguelNegrao: That's almost certainly going to be the easiest/most maintainable solution
2021-12-16 16:25:02 +0100 <lyxia> mason0: https://hackage.haskell.org/package/generic-lens-2.2.0.0/docs/Data-Generics-Product-Positions.html…
2021-12-16 16:25:11 +0100 <mason0> dminuoso, yeah, I should probably understand this code first
2021-12-16 16:25:30 +0100 <dminuoso> mason0: this current piece of code is highly trivial, you can probably figure it out after 3 minutes of staring yourself.
2021-12-16 16:25:33 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Quit: WeeChat 3.3)
2021-12-16 16:25:33 +0100 <MiguelNegrao> merijn: ok, great, thanks. Just wanted to check I wasn't missing something.
2021-12-16 16:25:59 +0100 <merijn> MiguelNegrao: Defining a generic helper and partially applying it is a common design pattern
2021-12-16 16:26:48 +0100 <merijn> dminuoso: How would I disable backtracking? Simply 'replicateM_ 5 (try foo)' isn't sufficient
2021-12-16 16:27:03 +0100 <dminuoso> Mmm, doesnt `try` explicitly enable backtracking?
2021-12-16 16:27:19 +0100 <dminuoso> oh wait
2021-12-16 16:27:24 +0100 <dminuoso> No this is actually potentialy better
2021-12-16 16:27:26 +0100 <merijn> Well, without try it *definitely* doesn't work
2021-12-16 16:27:30 +0100 <dminuoso> Mmm
2021-12-16 16:27:41 +0100 <dminuoso> merijn: Do you need the output?
2021-12-16 16:27:46 +0100 <dminuoso> Or can it be thrown away
2021-12-16 16:27:48 +0100 <merijn> Unsure :p
2021-12-16 16:27:51 +0100 <dminuoso> heh :P
2021-12-16 16:28:00 +0100 <dminuoso> Honestly, just roll your replicateM_ variant using Alternative?
2021-12-16 16:28:15 +0100 <dminuoso> The time we talked here you could have written it 10 times over.
2021-12-16 16:28:22 +0100 <dminuoso> :p
2021-12-16 16:28:45 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 268 seconds)
2021-12-16 16:29:03 +0100 <merijn> dminuoso: I don't think it's that straightforward?
2021-12-16 16:29:19 +0100 <dminuoso> merijn: Mmm, count' from parser-combinators seems to fit
2021-12-16 16:29:28 +0100MiguelNegrao(~MiguelNeg@2001:818:dc71:d100:e682:f5cd:9590:d961) (Quit: Client closed)
2021-12-16 16:29:31 +0100 <dminuoso> i.e. `count' 0 6 foo`
2021-12-16 16:29:51 +0100 <dminuoso> merijn: and yes, its very straight forward
2021-12-16 16:29:59 +0100 <dminuoso> Internally its almost identical to replicateM_
2021-12-16 16:30:21 +0100 <dminuoso> https://hackage.haskell.org/package/parser-combinators-1.3.0/docs/src/Control.Applicative.Combinat…
2021-12-16 16:30:22 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-16 16:30:23 +0100 <dminuoso> https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Control.Monad.html#replicateM
2021-12-16 16:33:34 +0100 <byorgey> merijn: if this is for today's AoC, I don't see how that combinator is helpful ;-)
2021-12-16 16:33:53 +0100 <merijn> byorgey: Lack of imagination on your part :p
2021-12-16 16:34:03 +0100 <byorgey> hehe
2021-12-16 16:34:28 +0100 <byorgey> merijn: maybe you want https://hackage.haskell.org/package/megaparsec-9.2.0/docs/Text-Megaparsec.html#v:getOffset ?
2021-12-16 16:34:45 +0100 <xerox> . o O ( ... length type ids of 1 ... )
2021-12-16 16:35:01 +0100 <merijn> byorgey: No? Certainly no yet
2021-12-16 16:35:12 +0100 <byorgey> OK. carry on
2021-12-16 16:35:20 +0100xkuru(~xkuru@user/xkuru)
2021-12-16 16:36:41 +0100vpan(~0@212.117.1.172)
2021-12-16 16:36:49 +0100Guest8273(~Guest82@2001:8003:26ff:8c01:1417:7515:4ef4:e82d)
2021-12-16 16:37:14 +0100 <mason0> pretty neat! https://paste.tomsmeding.com/Qk3e76l3
2021-12-16 16:37:30 +0100pta2002(~pta2002@161.230.90.170)
2021-12-16 16:37:44 +0100 <pta2002> Hello, I'm trying to make a parser in parsec
2021-12-16 16:38:12 +0100 <xerox> nice choice
2021-12-16 16:38:21 +0100 <pta2002> And one of the steps I need to do to make the main parser is to run a subparser only on a specific bit
2021-12-16 16:38:26 +0100Guest8273(~Guest82@2001:8003:26ff:8c01:1417:7515:4ef4:e82d) (Client Quit)
2021-12-16 16:38:40 +0100 <sprout> hah!
2021-12-16 16:38:43 +0100 <pta2002> like, I have a string "abcdef" but I want to run a parser on string "abc"
2021-12-16 16:38:47 +0100adam_b_dawg(~adam_b_da@2001:8003:26ff:8c01:1417:7515:4ef4:e82d)
2021-12-16 16:38:48 +0100 <pta2002> inside another parser
2021-12-16 16:38:52 +0100 <sprout> https://pasteboard.co/TJarPW9Gt0Zz.png <- AoC, day 16, task 2. egel
2021-12-16 16:38:57 +0100 <pta2002> yes that's what I need :P
2021-12-16 16:39:34 +0100 <sprout> should be possible in haskell without problems too, right?
2021-12-16 16:39:42 +0100 <pta2002> what language is that?
2021-12-16 16:39:45 +0100 <xerox> sure, you just run the same parser you're defining
2021-12-16 16:39:49 +0100alx741(~alx741@157.100.93.160)
2021-12-16 16:40:00 +0100 <pta2002> oh egel got it, never heard of it
2021-12-16 16:40:07 +0100 <pta2002> xerox: but how can I limit it to those bits?
2021-12-16 16:40:25 +0100 <xerox> you write the parser such that it doesn't overrun, it'll consume only as much as it needs
2021-12-16 16:40:27 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 268 seconds)
2021-12-16 16:40:29 +0100 <pta2002> other than just doing some ugly thing like parse [parser] "" [message]
2021-12-16 16:40:52 +0100 <pta2002> oh yeah yeah ik but i need to run it with many
2021-12-16 16:41:00 +0100adam_b_dawg(~adam_b_da@2001:8003:26ff:8c01:1417:7515:4ef4:e82d) (Client Quit)
2021-12-16 16:41:28 +0100 <pta2002> like I need parse (many1 [parser]) "" [message], the message to parse repeats
2021-12-16 16:41:51 +0100 <xerox> check out count to run it exactly n times
2021-12-16 16:41:53 +0100 <pta2002> but I so I want to get as many occorrences of it as possible but only until it ends
2021-12-16 16:42:06 +0100 <pta2002> xerox: I don't know how many times I need it
2021-12-16 16:42:11 +0100 <pta2002> Variable length messages
2021-12-16 16:42:22 +0100 <pta2002> I need to get all messages in n characters
2021-12-16 16:42:41 +0100 <g> Do get the n characters, then parse them
2021-12-16 16:42:46 +0100 <pta2002> but I don't know how many messages there are
2021-12-16 16:43:06 +0100 <xerox> what g says works or you can also use lookAhead
2021-12-16 16:43:15 +0100 <g> That's fine, just keep parsing till the bytes are gone
2021-12-16 16:44:02 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-12-16 16:44:11 +0100 <pta2002> g: yeah, I got the n characters
2021-12-16 16:44:17 +0100 <pta2002> but now how do I run the parser only on those characters?
2021-12-16 16:44:28 +0100 <merijn> It's been...0 days since megaparsec's lack of 'isolate' has screwedme!
2021-12-16 16:44:34 +0100pfurla_(~pfurla@2804:18:5827:38:71a1:6773:333f:330d) (Quit: gone to sleep. ZZZzzz…)
2021-12-16 16:44:48 +0100 <merijn> pta2002: Ah, I see you have the exact same problem annoying me :p
2021-12-16 16:44:55 +0100 <g> pta2002: the same way you ran your parser the first time
2021-12-16 16:44:58 +0100 <mason0> what is that guy's AoC page, he writes very terse haskell code?
2021-12-16 16:45:03 +0100 <pta2002> it seems I do
2021-12-16 16:45:09 +0100 <pta2002> no this is definitely not terse haskell
2021-12-16 16:45:10 +0100 <mason0> I had it a couple of days ago but I can't find it
2021-12-16 16:45:19 +0100 <pta2002> i have too many do's
2021-12-16 16:45:24 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-12-16 16:45:29 +0100 <mason0> merijn, I think it was posted by you? with your dislike for his style :)
2021-12-16 16:45:34 +0100 <merijn> oh
2021-12-16 16:45:40 +0100 <byorgey> pta2002: megaparsec has a combinator called 'getOffset' that tells you where you are in the input. I don't know if parsec has something similar.
2021-12-16 16:45:45 +0100 <merijn> https://jhidding.github.io/aoc2021/#advent-of-code-2021 ?
2021-12-16 16:45:49 +0100 <pta2002> hm don't know if that's what I need
2021-12-16 16:45:54 +0100 <pta2002> i did get the message part I need
2021-12-16 16:46:01 +0100 <pta2002> just using count
2021-12-16 16:46:02 +0100 <byorgey> pta2002: I used that to just keep parsing sub-things until the offset reached the number it was supposed to
2021-12-16 16:46:08 +0100 <merijn> byorgey: What he (and I) want is: https://hackage.haskell.org/package/binary-0.8.9.0/docs/Data-Binary-Get.html#v:isolate :p
2021-12-16 16:46:09 +0100 <mason0> merijn, that's it!
2021-12-16 16:46:13 +0100 <pta2002> oh that's a nice idea
2021-12-16 16:46:29 +0100 <g> In ReadP I did this https://github.com/glguy/advent2021/blob/main/execs/Day16.hs#L93
2021-12-16 16:46:40 +0100 <pta2002> merijn: wait how can i use that? :o
2021-12-16 16:46:50 +0100 <pta2002> that's not parsec
2021-12-16 16:47:05 +0100 <pta2002> oh it's doing the clever thing of using actual binary values instead of a string of '0' and '1' lol
2021-12-16 16:47:13 +0100 <byorgey> merijn: kind of, but it looks like that only works if the decoder consumes exactly that many bytes. In this case you want the number of available bytes to influence how the sub-parser works.
2021-12-16 16:47:14 +0100 <merijn> pta2002: You can't, sadly
2021-12-16 16:47:18 +0100 <pta2002> :c
2021-12-16 16:47:20 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 16:47:33 +0100 <merijn> that's why I was complaining :p
2021-12-16 16:47:35 +0100 <pta2002> guess i'll just do this the wrong way and run parse inside a parser
2021-12-16 16:47:39 +0100 <pta2002> yeah got it lol
2021-12-16 16:47:41 +0100 <merijn> byorgey: Well, I want isolate outside of AoC too :p
2021-12-16 16:47:57 +0100 <g> You use "many" to make a parser that parsers as many items as it can
2021-12-16 16:48:48 +0100 <g> And let that soak up the sub bytes
2021-12-16 16:48:58 +0100 <byorgey> merijn: you should be able to write it using getOffset
2021-12-16 16:49:11 +0100 <pta2002> i gave up on the smart way of doing things
2021-12-16 16:49:27 +0100 <pta2002> just running parse inside of the parser, if it's stupid and it works it ain't stupid lol
2021-12-16 16:49:30 +0100 <byorgey> hmmm, maybe
2021-12-16 16:50:34 +0100 <g> Some libraries the offset is related to the current chunk and not the whole input, so just check that ahead of time
2021-12-16 16:50:41 +0100 <byorgey> pta2002: actually that sounds like a decent idea to me =)
2021-12-16 16:50:51 +0100 <byorgey> g: ah, good point
2021-12-16 16:51:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-16 16:51:37 +0100 <byorgey> pretty sure getOffset is relative to the whole input in megaparsec
2021-12-16 16:52:45 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2021-12-16 16:52:57 +0100 <merijn> rats...I have to implement takeWhile_ now :\
2021-12-16 16:53:09 +0100 <merijn> I put it off so far, because that seemed annoying >.>
2021-12-16 16:53:24 +0100 <g> Then that would be a possible solution :) given how much time people spent pondering these two sub packet encodings I'd say today's problem was cleverly picked by the authors
2021-12-16 16:56:34 +0100 <pta2002> my hacky solution works, here's one gold star :D
2021-12-16 16:58:09 +0100 <byorgey> pta2002: \o/
2021-12-16 16:58:36 +0100 <pta2002> oh damn this is intcode computer all over again
2021-12-16 16:59:05 +0100 <pta2002> 2019 me didn't know about State and suffered heavily with the intcode computer
2021-12-16 17:00:17 +0100 <g> I did my first version with a whole bunch of splitAt <_<
2021-12-16 17:00:23 +0100 <merijn> ugh, I hate it when it's clear my problem has an efficient solution, but it seems so tedious to figure out...
2021-12-16 17:00:55 +0100 <pta2002> hey, my day 15 poorly implemented dijkstra solution took like 2 minutes
2021-12-16 17:01:19 +0100 <merijn> mine was pretty fast, although I'm not sure I implemented Dijkstra or something else :p
2021-12-16 17:01:23 +0100 <pta2002> and it's absolutely horrible
2021-12-16 17:02:01 +0100 <pta2002> https://gist.github.com/pta2002/6b2febf1481654858a1216b658c3f668 look at this mess :(
2021-12-16 17:02:30 +0100 <pta2002> ignore mapDiff, doesn't work, was something I tried to do for debugging why mkPart2Map wasn't working
2021-12-16 17:03:01 +0100jkaye(~jkaye@2601:281:8300:7530:d672:a7f5:a798:3393)
2021-12-16 17:03:05 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-16 17:04:30 +0100 <g> pta2002: filtering your heap each step is probably killing you
2021-12-16 17:04:58 +0100 <pta2002> yeah probably
2021-12-16 17:05:03 +0100 <pta2002> i got that working at 3am
2021-12-16 17:05:07 +0100 <pta2002> i was too tired for my brain to function
2021-12-16 17:05:14 +0100 <pta2002> was just happy it compiled
2021-12-16 17:05:33 +0100 <pta2002> you can tell from my imports i actually tried to use a minheap
2021-12-16 17:05:49 +0100 <kuribas> is 2 minutes bad?
2021-12-16 17:05:52 +0100 <tomsmeding> I have a Dijkstra with a proper priority quue :) https://git.tomsmeding.com/AOC/tree/2021/15.hs
2021-12-16 17:06:02 +0100 <kuribas> tomsmeding: how fast is it?
2021-12-16 17:06:07 +0100pavonia(~user@user/siracusa) (Ping timeout: 256 seconds)
2021-12-16 17:06:10 +0100 <pta2002> then gave up when i tried to reprioritize the heap
2021-12-16 17:06:11 +0100 <merijn> pta2002: https://github.com/merijn/AdventOfCode/blob/master/Day15.hs#L114-L164
2021-12-16 17:06:15 +0100 <tomsmeding> kuribas: 306ms on my input, both parts
2021-12-16 17:06:18 +0100 <g> kuribas: mine runs in about 700ms
2021-12-16 17:06:31 +0100 <pta2002> i mean dijkstra isn't that algorithm
2021-12-16 17:06:44 +0100 <kuribas> oh, that's a bit better than 2 minutes :)
2021-12-16 17:06:52 +0100 <merijn> kuribas: Mine finishes in 1.5s or so? And part of that is drawing the entire map :p
2021-12-16 17:06:57 +0100 <tomsmeding> (obviously machine-dependent, but certainly better than 2min)
2021-12-16 17:07:00 +0100 <pta2002> heh
2021-12-16 17:07:01 +0100 <kuribas> tomsmeding: maybe you should put it in a package?
2021-12-16 17:07:02 +0100 <merijn> Because I plot the final route to screen
2021-12-16 17:07:07 +0100 <tomsmeding> lol
2021-12-16 17:07:09 +0100 <pta2002> oh nice
2021-12-16 17:07:27 +0100 <tomsmeding> it's special-purposed to this problem where you have a 2D array where distance-to-cell is equal to the value in the cell
2021-12-16 17:07:29 +0100 <merijn> tomsmeding: It was trivial to implement with my representation and the rendering code I had from previous puzzles :p
2021-12-16 17:07:58 +0100 <kuribas> oh right
2021-12-16 17:08:13 +0100 <pta2002> I see two simple fixes to my slowness: 1. use a proper minheap, instead of filtering a huge list and 2. don't bother calculating costs to every node
2021-12-16 17:08:23 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 17:08:26 +0100 <merijn> tomsmeding: Ah, I think your version looks similar to mine
2021-12-16 17:08:29 +0100 <pta2002> mostly the minheap though
2021-12-16 17:08:35 +0100 <merijn> I didn't even use a heap, tbh
2021-12-16 17:08:36 +0100 <pta2002> just couldn't figure out how to reprioritize it
2021-12-16 17:08:42 +0100 <merijn> I just used Set + minView :p
2021-12-16 17:08:50 +0100 <kuribas> pta2002: is it dijkstra if you use a O(n^2) heap?
2021-12-16 17:09:14 +0100 <pta2002> kuribas: well it's dijkstra* where * stands for i didn't implement it properly
2021-12-16 17:09:14 +0100 <merijn> I think mine is more akin to A*?
2021-12-16 17:09:16 +0100 <tomsmeding> oh good point about the minView, merijn that functions as a priority queue, right?
2021-12-16 17:09:34 +0100 <pta2002> A* is dijkstra with a cost to end goal heuristic
2021-12-16 17:09:34 +0100 <merijn> tomsmeding: Effectively, if you ensure elements are sort by priority/cost :p
2021-12-16 17:09:51 +0100 <kuribas> merijn: isn't Set a heap though?
2021-12-16 17:10:00 +0100 <tomsmeding> right, you need some 'data Box a b = Box a b' where the Ord instance only looks at 'a'
2021-12-16 17:10:05 +0100jippiedoe(~david@145.89.5.239) (Ping timeout: 256 seconds)
2021-12-16 17:10:09 +0100 <pta2002> i think i know this i just had a test on this yesterday
2021-12-16 17:10:15 +0100 <tomsmeding> nice, I was thinking that there wasn't a PQ implementation in base, but apparently there is :)
2021-12-16 17:10:18 +0100 <pta2002> which makes my dijkstra implementation even more shameful
2021-12-16 17:10:19 +0100 <pta2002> oh well
2021-12-16 17:10:33 +0100 <merijn> tomsmeding: Technically Set isn't in base :p
2021-12-16 17:10:44 +0100 <tomsmeding> my brain is still not functioning correctly
2021-12-16 17:10:50 +0100 <merijn> tomsmeding: I have a custom Estimate type that uses cost as primary key for comparison :p
2021-12-16 17:10:53 +0100 <merijn> kuribas: No?
2021-12-16 17:10:56 +0100 <merijn> kuribas: Set is a binary tree
2021-12-16 17:10:57 +0100 <tomsmeding> but boot package is close enough :p
2021-12-16 17:11:25 +0100 <tomsmeding> oh fair, and for the correct asymptotics you need a heap
2021-12-16 17:11:28 +0100 <merijn> kuribas: But that's only O(log n) to find the minimal
2021-12-16 17:11:31 +0100 <tomsmeding> though I wonder if it really matters in this case
2021-12-16 17:11:44 +0100 <tomsmeding> O(log n + log n) = O(1 + log n)
2021-12-16 17:11:53 +0100 <tomsmeding> (findMin + deleteMin)
2021-12-16 17:12:09 +0100 <kuribas> merijn: right, and in a heap, it's O(1).
2021-12-16 17:12:10 +0100 <merijn> tomsmeding: minView does it in on operation
2021-12-16 17:12:27 +0100 <merijn> tomsmeding: So you do find + delete in O(log n)
2021-12-16 17:12:42 +0100 <tomsmeding> which is also equal to the two terms I wrote, complexity-wise :p
2021-12-16 17:12:45 +0100 <kuribas> merijn: a heap is also a binary tree BTW.
2021-12-16 17:13:02 +0100 <tomsmeding> so a binary search tree suffices as a priority queue for dijkstra, you don't need a heap
2021-12-16 17:13:03 +0100 <tomsmeding> interesting
2021-12-16 17:13:37 +0100tomsmedingcan never remember whether the increaseKey function is really necessary to get dijkstra to the right complexity
2021-12-16 17:13:52 +0100 <merijn> hmm
2021-12-16 17:13:55 +0100 <tomsmeding> kuribas: but not a binary search tree, which Set is
2021-12-16 17:14:07 +0100 <merijn> I'm confused whether I want foldl or foldr when lazily traversing a Text
2021-12-16 17:14:18 +0100 <merijn> Someone help me out here!
2021-12-16 17:14:21 +0100 <merijn> Does it even matter?
2021-12-16 17:14:25 +0100Neuromancer(~Neuromanc@user/neuromancer)
2021-12-16 17:14:27 +0100 <tomsmeding> define lazily traversing a text
2021-12-16 17:14:38 +0100 <merijn> A fold that only looks at a prefix of the Text
2021-12-16 17:14:56 +0100 <tomsmeding> that needs to be a foldr then, right?
2021-12-16 17:14:56 +0100 <[exa]> you want foldr because foldl is foldr
2021-12-16 17:15:23 +0100 <tomsmeding> a + (b + (c + (d + ...))) ignores the suffix if (+) at some point ignores its right argument; not so for foldl
2021-12-16 17:15:51 +0100 <tomsmeding> foldl can ignore a prefix if the combining function ignores its left argument at some point
2021-12-16 17:16:24 +0100 <merijn> tomsmeding: I know how it works on lists, but Text's folds go through the streaming abstraction of them
2021-12-16 17:16:30 +0100 <merijn> I dunno how that affects things
2021-12-16 17:16:49 +0100 <tomsmeding> ¯\_(ツ)_/¯
2021-12-16 17:16:51 +0100 <tomsmeding> try it :p
2021-12-16 17:20:19 +0100 <pta2002> maybe next year I'll actually know how to use haskell properly and will be able to stop using do everywhere
2021-12-16 17:20:43 +0100 <pta2002> and how to make a properi mplementation of dijkstra
2021-12-16 17:21:18 +0100 <tomsmeding> what's the problem with 'do'
2021-12-16 17:21:19 +0100 <glguy> Not running a sub parser appears to be the favored solution, so i've updated: https://github.com/glguy/advent2021/blob/main/execs/Day16.hs#L90-L97
2021-12-16 17:22:02 +0100 <pta2002> hm what's the difference between readp and parsec?
2021-12-16 17:22:03 +0100chele(~chele@user/chele) (Remote host closed the connection)
2021-12-16 17:22:05 +0100 <pta2002> only ever heard of parsec
2021-12-16 17:22:17 +0100 <merijn> ReadP is shite, is the difference ;)
2021-12-16 17:22:18 +0100 <pta2002> but it seems like it does the same thing
2021-12-16 17:22:46 +0100 <glguy> ReadP has unbiased choice, no parse errors, is in base, parses all the alternatives at once instead of the depth first algorithm parsec uses
2021-12-16 17:23:14 +0100 <glguy> for a real use case you'd probably use megaparsec these days
2021-12-16 17:23:56 +0100 <glguy> ReadP is good for AoC parsing because it doesn't require me to be as clever as one needs to be with parsec
2021-12-16 17:24:29 +0100 <glguy> (where just getting the input parsed quickly is the important thing)
2021-12-16 17:24:32 +0100pavonia(~user@user/siracusa)
2021-12-16 17:24:51 +0100 <pta2002> https://github.com/pta2002/advent-of-code-2021/blob/main/16/solve.hs i wouldn't call my solution particularly clever
2021-12-16 17:24:51 +0100alx741(~alx741@157.100.93.160)
2021-12-16 17:25:15 +0100 <kuribas> Why does stack build, then stack test rebuilds the whole library?
2021-12-16 17:25:20 +0100 <glguy> parsec gives you a performance boost by pruning alternatives once the first alternative starts consuming inputs
2021-12-16 17:25:41 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 17:25:52 +0100 <kuribas> Because I have template haskell?
2021-12-16 17:27:15 +0100featurebug(~featurebu@49.205.122.91)
2021-12-16 17:27:55 +0100 <kuribas> sq-loader-0.1.0.0: unregistering (dependencies changed)
2021-12-16 17:28:35 +0100 <tomsmeding> kuribas: are some flags different between the two targets?
2021-12-16 17:28:42 +0100 <tomsmeding> perhaps a ghc-options
2021-12-16 17:28:57 +0100dcoutts_(~duncan@ip-185-104-136-51.ptr.icomera.net) (Ping timeout: 240 seconds)
2021-12-16 17:30:00 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-12-16 17:30:14 +0100 <kuribas> I have extra test libraries...
2021-12-16 17:30:19 +0100 <kuribas> hspec, etc...
2021-12-16 17:30:52 +0100 <tomsmeding> perhaps those force a different flag configuration for other dependencies in the cabal solver?
2021-12-16 17:31:05 +0100 <tomsmeding> s/flag/flag or version/
2021-12-16 17:31:20 +0100 <kuribas> right!
2021-12-16 17:31:20 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 17:31:45 +0100 <kuribas> aren't they pinned by stack though?
2021-12-16 17:32:08 +0100 <tomsmeding> oh, right, stack; that should be pinned yes?
2021-12-16 17:32:25 +0100 <tomsmeding> well versions are, flags might not be
2021-12-16 17:32:37 +0100 <tomsmeding> but unlikely that flags are being affected by some test libraries
2021-12-16 17:34:30 +0100pta2002(~pta2002@161.230.90.170) (Quit: leaving)
2021-12-16 17:35:13 +0100 <kuribas> it's not even rebuilding any dependencies...
2021-12-16 17:35:17 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-16 17:37:13 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-16 17:37:14 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913) (Remote host closed the connection)
2021-12-16 17:37:28 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 17:37:45 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-16 17:41:50 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-12-16 17:42:38 +0100 <kuribas> ok, I can bypass the problem with "stack build --test --no-run-tests"
2021-12-16 17:44:56 +0100kuribas(~user@ptr-25vy0i8a8smuqmxkytj.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-12-16 17:47:32 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913) (Remote host closed the connection)
2021-12-16 17:48:40 +0100_xor(~xor@dsl-50-5-233-169.fuse.net) (Quit: brb - upgrading)
2021-12-16 17:49:27 +0100alx741(~alx741@157.100.93.160)
2021-12-16 17:49:28 +0100jippiedoe(~david@2a02-a44c-e14e-1-52a9-393a-90cb-edf9.fixed6.kpn.net)
2021-12-16 17:55:43 +0100jippiedoe(~david@2a02-a44c-e14e-1-52a9-393a-90cb-edf9.fixed6.kpn.net) (Quit: Leaving)
2021-12-16 17:58:20 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 18:01:47 +0100pfurla(~pfurla@2804:18:5827:38:71a1:6773:333f:330d)
2021-12-16 18:02:47 +0100deadmarshal(~deadmarsh@95.38.231.95) (Ping timeout: 256 seconds)
2021-12-16 18:03:20 +0100deadmarshal(~deadmarsh@95.38.228.81)
2021-12-16 18:06:09 +0100econo(uid147250@user/econo)
2021-12-16 18:08:58 +0100Akiva(~Akiva@user/Akiva)
2021-12-16 18:12:55 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-16 18:13:16 +0100pta2002(~pta2002@161.230.90.170)
2021-12-16 18:14:27 +0100alx741(~alx741@157.100.93.160)
2021-12-16 18:15:28 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-12-16 18:16:18 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-12-16 18:18:11 +0100mikail(~mikail@2a02:c7f:bc1f:4a00:fc9:3da5:3e1e:8303)
2021-12-16 18:19:57 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-16 18:21:36 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-12-16 18:25:11 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-16 18:25:44 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 18:29:53 +0100ProfSimm(~ProfSimm@87.227.196.109) (Ping timeout: 256 seconds)
2021-12-16 18:33:35 +0100 <unclechu> Hey, can I somehow pass `:set` options (e.g. override `prompt`) to `ghci` before I start it? Without using `.ghci`.
2021-12-16 18:33:51 +0100 <unclechu> Or can I maybe pass custom absolute path to `.ghci`?
2021-12-16 18:34:24 +0100 <geekosaur> ---ghci-script
2021-12-16 18:34:26 +0100 <geekosaur> er
2021-12-16 18:34:30 +0100 <geekosaur> -ghci-script
2021-12-16 18:34:44 +0100 <tomsmeding> and if you're using cabal repl, prefix that with --repl-options=
2021-12-16 18:35:28 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-12-16 18:36:32 +0100 <unclechu> geekosaur thanks! That works
2021-12-16 18:38:35 +0100vpan(~0@212.117.1.172) (Quit: Leaving.)
2021-12-16 18:39:50 +0100emf(~emf@2620:10d:c091:480::1:7a0e)
2021-12-16 18:41:06 +0100_xor(~xor@dsl-50-5-233-169.fuse.net)
2021-12-16 18:41:35 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-12-16 18:43:57 +0100Sgeo_(~Sgeo@user/sgeo)
2021-12-16 18:44:02 +0100alx741(~alx741@157.100.93.160)
2021-12-16 18:44:12 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-12-16 18:45:38 +0100Guest21(~Guest21@pool-98-115-178-221.phlapa.fios.verizon.net)
2021-12-16 18:47:48 +0100 <c_wraith> is there any parsing combinator library built to do things like today's AoC problem asks for? in particular, having the ability to isolate a fixed length portion of the future stream to run a sub-parser over?
2021-12-16 18:47:56 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 18:50:24 +0100Guest21(~Guest21@pool-98-115-178-221.phlapa.fios.verizon.net) (Client Quit)
2021-12-16 18:50:52 +0100 <EvanR> I've done literally that with attoparsec but I guess literally doing that ruins the incremental nature of the parser
2021-12-16 18:51:45 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-12-16 18:51:57 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913) (Ping timeout: 240 seconds)
2021-12-16 18:52:18 +0100Vajb(~Vajb@2001:999:62:f3d1:4390:fbed:1f9b:9d03)
2021-12-16 18:52:21 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
2021-12-16 18:52:33 +0100 <c_wraith> like, you can do it with anything if you call whatever the entry function is again, but that breaks error chaining between the sub-parser and the outer parser
2021-12-16 18:53:07 +0100 <c_wraith> I'm wondering if anything supports it in a more integrated manner
2021-12-16 18:53:28 +0100mikail(~mikail@2a02:c7f:bc1f:4a00:fc9:3da5:3e1e:8303) (Quit: Leaving)
2021-12-16 18:54:55 +0100 <glguy> Is there a trick to having haddock generate documentation for internal (not exported from the module) definitions? While these aren't part of the module's API it seems like it would be useful for someone working on the module
2021-12-16 18:54:58 +0100 <EvanR> the thing missing seemed to be a way to know how much input was just consumed so you can track it
2021-12-16 18:55:17 +0100 <monochrom> You can use parsec's getInput to get the future stream, splitAt, then use setInput to put back the suffix, and do whatever you want with the prefix. This is of course a clutch, I don't know of any parser library that has this in design.
2021-12-16 18:55:20 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-12-16 18:55:23 +0100 <xerox> I remember having to figure that out for myself once glguy but I forget how I did it
2021-12-16 18:56:03 +0100 <xerox> could this be it --show-all --ignore-all-exports
2021-12-16 18:59:01 +0100 <glguy> > Causes Haddock to behave as if every module has the ignore-exports attribute (Section 3.7, “Module Attributes”). This might be useful for generating implementation documentation rather than interface documentation, for example.
2021-12-16 18:59:02 +0100 <lambdabot> <hint>:1:38: error: parse error on input ‘module’
2021-12-16 18:59:04 +0100 <glguy> sounds pretty good
2021-12-16 18:59:05 +0100 <EvanR> https://www.haskell.org/haddock/doc/html/module-attributes.html ignore-exports
2021-12-16 18:59:45 +0100 <glguy> xerox: good spot, that worked
2021-12-16 18:59:59 +0100 <xerox> glguy: I'm glad!
2021-12-16 19:00:07 +0100mvk(~mvk@2607:fea8:5cdd:f000::745c)
2021-12-16 19:00:41 +0100 <monochrom> "ignore all exports" is a scary name. :)
2021-12-16 19:01:13 +0100 <monochrom> Fortunately it means pretending "module M(foo, bar)" to be "module M".
2021-12-16 19:01:36 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-12-16 19:01:38 +0100 <xerox> funny wording indeed
2021-12-16 19:01:49 +0100 <glguy> https://glguy.net/advent2021/ https://glguy.net/advent2021/Day16/Main.html
2021-12-16 19:02:24 +0100 <xerox> :)
2021-12-16 19:04:33 +0100pta2002(~pta2002@161.230.90.170) (Ping timeout: 256 seconds)
2021-12-16 19:06:28 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 19:06:57 +0100 <xerox> I guess the execs aren't easily linked from there by haddock itself
2021-12-16 19:07:03 +0100 <glguy> I haven't figure out how to do that yet
2021-12-16 19:07:09 +0100 <glguy> figured*
2021-12-16 19:07:53 +0100dcoutts_(~duncan@71.78.6.51.dyn.plus.net)
2021-12-16 19:08:50 +0100 <EvanR> ReadP pulling its weight around here
2021-12-16 19:09:57 +0100mvk(~mvk@2607:fea8:5cdd:f000::745c) (Remote host closed the connection)
2021-12-16 19:10:49 +0100mvk(~mvk@2607:fea8:5cdd:f000::745c)
2021-12-16 19:11:01 +0100phma(~phma@host-67-44-208-226.hnremote.net) (Read error: Connection reset by peer)
2021-12-16 19:11:09 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2021-12-16 19:11:58 +0100phma(phma@2001:5b0:210d:8c38:983f:1c01:826:33cd)
2021-12-16 19:15:38 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-16 19:19:37 +0100ubert(~Thunderbi@2a02:8109:9880:303c:66c1:82a7:41b7:a81d) (Remote host closed the connection)
2021-12-16 19:24:33 +0100alx741(~alx741@157.100.93.160)
2021-12-16 19:25:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-16 19:25:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-16 19:25:46 +0100wroathe(~wroathe@user/wroathe)
2021-12-16 19:27:32 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection)
2021-12-16 19:27:53 +0100coot(~coot@2a02:a310:e03f:8500:933a:39ca:ef4e:37cb)
2021-12-16 19:30:02 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
2021-12-16 19:32:08 +0100awpr(uid446117@id-446117.lymington.irccloud.com)
2021-12-16 19:34:08 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 19:35:13 +0100mrus(~mrus@149.28.224.172) (Quit: Surfing the great wave off Kanagawa)
2021-12-16 19:35:36 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-12-16 19:37:31 +0100 <sprout> https://pasteboard.co/ew4JaofWfuXW.png <- aoc, 16, 2 - beautified a bit
2021-12-16 19:37:40 +0100 <sprout> uh, egel code
2021-12-16 19:39:35 +0100 <monochrom> Even more beautiful in comic sans font. :)
2021-12-16 19:41:12 +0100shapr(~user@12.5.211.156)
2021-12-16 19:41:17 +0100 <glguy> sprout: for non-haskell AoC code there's also #adventofcode-spoilers
2021-12-16 19:41:37 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-16 19:41:54 +0100 <sprout> oh neat!
2021-12-16 19:42:16 +0100mbuf(~Shakthi@223.178.108.131) (Quit: Leaving)
2021-12-16 19:46:12 +0100 <EvanR> glguy the haddock based solution post looks pretty good. I just ran into a readtodocs regarding haskell containers, and wish there was more nice looking web-based content for haskell
2021-12-16 19:46:20 +0100 <EvanR> readthedocs*
2021-12-16 19:47:39 +0100 <dsal> Is there a better way in megaparsec to call a parser over a subset of data other than to just takeP and call `parse` again?
2021-12-16 19:47:39 +0100Vajb(~Vajb@2001:999:62:f3d1:4390:fbed:1f9b:9d03) (Read error: Connection reset by peer)
2021-12-16 19:48:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-12-16 19:48:30 +0100coot(~coot@2a02:a310:e03f:8500:933a:39ca:ef4e:37cb) (Quit: coot)
2021-12-16 19:48:50 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-12-16 19:49:05 +0100 <glguy> dsal: the other way would be to track offsets with getOffset, another way is you can use getInput and setInput
2021-12-16 19:49:41 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 19:49:42 +0100 <glguy> take the input, split it, set the input parse, restore the tail
2021-12-16 19:49:48 +0100coot(~coot@2a02:a310:e03f:8500:933a:39ca:ef4e:37cb)
2021-12-16 19:50:42 +0100 <dsal> Hmm... Yeah, I considered that as well. Might give it a try. I figured there'd be something `count` or whatever, but over bytes.
2021-12-16 19:52:05 +0100alx741(~alx741@157.100.93.160)
2021-12-16 19:52:19 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-16 19:52:19 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-16 19:52:19 +0100wroathe(~wroathe@user/wroathe)
2021-12-16 19:52:38 +0100dsrt^(~dsrt@wsip-98-188-240-142.mc.at.cox.net)
2021-12-16 19:52:44 +0100 <tomsmeding> somehow everybody seems to ask the same question today :p
2021-12-16 19:53:13 +0100 <EvanR> I did something stupid: take the difference of "rest of input" between before and after running a parser to get how many bits were consumed
2021-12-16 19:53:15 +0100 <monochrom> EvanR: Rejoice, for cabal user guide has long been on readthedocs, and now GHC user guide, even though still hosted on downloads.haskell.org, has adopted readthedocs formatting.
2021-12-16 19:54:49 +0100 <EvanR> nice
2021-12-16 19:55:18 +0100 <dsal> Oh, sorry. I've been partially offline since my laptop broke yesterday. heh
2021-12-16 19:56:09 +0100 <dsal> I did gross stuff to solve last night's thing quickly. And then I went back to do something less gross and it's still a bit more gross than I'd like.
2021-12-16 19:56:32 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-16 19:57:13 +0100 <Rembane> I tried to do a Best Friend Search but fell asleep in the middle.
2021-12-16 19:58:17 +0100 <dsal> There's someone out there.
2021-12-16 20:00:19 +0100 <glguy> I was hoping they'd do something like "there's an unknown amount of padding between packets, figure out how to parse this" :)
2021-12-16 20:00:53 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 20:00:56 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 20:02:15 +0100 <dsal> The zeros thing was a little confusing. I tried eating them a few different ways before I figured out just ignoring them made things work.
2021-12-16 20:02:21 +0100 <aplainzetakind> When I give my parser to parseMaybe I get Nothing. I change it to parseTest and it parses fine. What is this?
2021-12-16 20:02:55 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2021-12-16 20:03:56 +0100 <monochrom> dsal: I watched an episode of MacGyver in which he rigged a motorcycle into a make-shift generator. Is that one of the gross things you did to power your router? >:)
2021-12-16 20:04:31 +0100 <dsal> Haha. I used RC batteries for a while.
2021-12-16 20:04:33 +0100 <glguy> aplainzetakind: which library?
2021-12-16 20:04:35 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913) (Remote host closed the connection)
2021-12-16 20:04:55 +0100 <monochrom> OK that's more realisitc heh
2021-12-16 20:04:56 +0100 <glguy> aplainzetakind: > parseMaybe p input runs the parser p on input and returns the result inside Just on success and Nothing on failure. This function also parses eof, so if the parser doesn't consume all of its input, it will fail.
2021-12-16 20:05:10 +0100 <glguy> I bet that second sentence is tripping you up
2021-12-16 20:05:15 +0100ubert(~Thunderbi@p200300ecdf1abb0334f3944fefcb567c.dip0.t-ipconnect.de)
2021-12-16 20:06:28 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-16 20:06:58 +0100 <c_wraith> I really would like a parser library that's designed to handle fields with lengths specified before them and internal structure that needs to be parsed.
2021-12-16 20:07:11 +0100 <aplainzetakind> Ah OK.
2021-12-16 20:07:28 +0100 <c_wraith> the AoC problem is hardly the only place that happens
2021-12-16 20:07:33 +0100 <dsal> c_wraith: I did mqtt with attoparsec. It wasn't that bad
2021-12-16 20:07:34 +0100 <glguy> c_wraith: When we wanted that for parsing IP packets we made the cereal package (among some other reasons)
2021-12-16 20:08:18 +0100 <glguy> this happens more in parser combinators targetted at binary parsing than text parsing
2021-12-16 20:08:23 +0100 <aplainzetakind> But that's... bad. I mean, parseTest is supposed to give you information on why things fail. I'd expect it to succeed or fail exactly the same way as other parsers.
2021-12-16 20:08:25 +0100 <monochrom> Yeah, I would think cereal or binary is more geared for that. Then again, what if sufficiently complex CFG is also involved...
2021-12-16 20:09:50 +0100 <c_wraith> yes, it is mostly a binary format thing, but.. yeah, I want some greater ability to handle complex grammars along with it
2021-12-16 20:09:54 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2021-12-16 20:10:13 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-12-16 20:11:32 +0100 <glguy> any textual language ought to have already been lexed by the time the parser's running
2021-12-16 20:11:51 +0100 <glguy> and declaring how many lexemes you have sounds silly and declaring how many bytes sounds absurd
2021-12-16 20:13:00 +0100HurdyGurdyBurdy(~HurdyGurd@user/hurdygurdyburdy)
2021-12-16 20:14:29 +0100mrus(~mrus@2001:19f0:5:1535:5400:3ff:fe7d:10ae)
2021-12-16 20:15:47 +0100Pickchea(~private@user/pickchea)
2021-12-16 20:18:42 +0100alx741(~alx741@157.100.93.160)
2021-12-16 20:25:32 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 240 seconds)
2021-12-16 20:25:32 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 20:28:00 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 20:28:28 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-16 20:29:10 +0100bollu(uid233390@id-233390.helmsley.irccloud.com)
2021-12-16 20:30:21 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-16 20:33:24 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-16 20:35:13 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-16 20:37:29 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2021-12-16 20:37:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 20:38:41 +0100 <sm> useful for good error messages, maybe ?
2021-12-16 20:39:17 +0100 <geekosaur> hate to have to rely on predeclared numbers of lexemes or bytes for that
2021-12-16 20:39:36 +0100 <geekosaur> sounds like more errors likely from letting that get out of sync than would be improved by it
2021-12-16 20:40:13 +0100 <sm> or.. performance ?
2021-12-16 20:42:36 +0100 <monochrom> I have some disagreement with that, based on the problems caused by C string (just keep consuming until you see 0), and concerns of data transmission (in which it really is better to predeclare how many bytes to expect).
2021-12-16 20:43:02 +0100 <monochrom> The C string way opens you to all kinds of DoS, first of all.
2021-12-16 20:43:15 +0100 <shapr> denial of sanity?
2021-12-16 20:43:17 +0100alx741(~alx741@157.100.93.160)
2021-12-16 20:43:19 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Quit: Leaving...)
2021-12-16 20:43:19 +0100 <geekosaur> but that's not parsing
2021-12-16 20:43:21 +0100 <monochrom> :)
2021-12-16 20:43:41 +0100 <geekosaur> you can still use the same source format for either C-style or counted strings in internal format
2021-12-16 20:44:10 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dc75:5436:188a:4913)
2021-12-16 20:44:22 +0100 <geekosaur> and data transmission we're back to parsing binary vs. text even though the "binary" happens to be a text (fragment?)
2021-12-16 20:44:37 +0100 <geekosaur> since the protocol is binary even if the content isn't
2021-12-16 20:45:02 +0100 <geekosaur> (ignoring for the moment the poriginal Internet protocols, which didn't even pretend to handle binary)
2021-12-16 20:45:29 +0100 <monochrom> OK, so next, if I design this data transmission format: how many expressions to expect, how many bytes in 1st expression, 1st expression, how many bytes in 2nd expression, 2nd expression, ...
2021-12-16 20:46:07 +0100 <monochrom> then you really want a parser that plays well with "parse an expression for n bytes".
2021-12-16 20:46:45 +0100 <geekosaur> again I'd claim that is a binary protocol even if the expressions are textual (bonus, easier to extend to ASTs :)
2021-12-16 20:46:49 +0100 <EvanR> a checksum for catching bad encoding
2021-12-16 20:47:57 +0100koz(~koz@121.99.240.58) (Remote host closed the connection)
2021-12-16 20:48:08 +0100 <EvanR> if nothing at all can be wrong, then wrongness can't be detected
2021-12-16 20:48:15 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
2021-12-16 20:48:16 +0100koz(~koz@121.99.240.58)
2021-12-16 20:48:25 +0100 <EvanR> but multiple layers of things that must match don't help either
2021-12-16 20:49:35 +0100Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 268 seconds)
2021-12-16 20:50:21 +0100Maxdamantus(~Maxdamant@user/maxdamantus)
2021-12-16 20:54:41 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-16 20:56:03 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 21:00:14 +0100 <tomsmeding> you know, you're all going on about delimited subparsing and I dunno what; what about just some liberal use of splitAt :p https://git.tomsmeding.com/AOC/tree/2021/16.hs
2021-12-16 21:00:52 +0100 <monochrom> OK, splitAt is sufficient lazy so that if you use getInput, splitAt, setInput, it still does streaming.
2021-12-16 21:01:13 +0100 <monochrom> > case splitAt 5 (1 : 2 : undefined) of (x,_) -> take 1 x
2021-12-16 21:01:15 +0100 <lambdabot> [1]
2021-12-16 21:02:14 +0100 <tomsmeding> also, this program worked the first time it compiled :)
2021-12-16 21:02:17 +0100koz(~koz@121.99.240.58) (Ping timeout: 240 seconds)
2021-12-16 21:02:34 +0100 <tomsmeding> (well, the first time it compiled and I felt that it was time to test it)
2021-12-16 21:03:06 +0100 <monochrom> I was about to code up a delimited subparsing parser monad for all of you. :)
2021-12-16 21:03:15 +0100 <tomsmeding> :D
2021-12-16 21:03:25 +0100 <tomsmeding> not actually too hard if you don't need to support backtracking
2021-12-16 21:03:46 +0100 <monochrom> "newtype CP a = Maybe Int -> String -> Maybe (Int, String, a)"
2021-12-16 21:04:02 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-16 21:04:03 +0100 <tomsmeding> I was half-and-half thinking about writing one, but then I realised that just writing the code directly would be quicker
2021-12-16 21:04:19 +0100 <tomsmeding> monochrom: what does CP stand for? Cool Parser?
2021-12-16 21:04:27 +0100 <monochrom> 1st Int being how many characters are allowed, 2nd Int how many characters used.
2021-12-16 21:04:30 +0100 <EvanR> that's basically what I did
2021-12-16 21:04:34 +0100 <monochrom> Counted Parser
2021-12-16 21:04:37 +0100 <tomsmeding> looks decent
2021-12-16 21:04:48 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-16 21:04:59 +0100 <EvanR> @src splitAt
2021-12-16 21:04:59 +0100 <lambdabot> splitAt n xs = (take n xs, drop n xs)
2021-12-16 21:05:19 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 250 seconds)
2021-12-16 21:05:25 +0100 <monochrom> That is likely not the real code.
2021-12-16 21:05:34 +0100 <EvanR> you don't think?
2021-12-16 21:05:58 +0100 <tomsmeding> https://hackage.haskell.org/package/base-4.14.0.0/docs/src/GHC.List.html#splitAt
2021-12-16 21:06:06 +0100 <tomsmeding> if you set USE_REPORT_PRELUDE, that's the real code :)
2021-12-16 21:06:18 +0100 <tomsmeding> otherwise, no, it indeed saves iterating over the prefix twice
2021-12-16 21:07:21 +0100 <EvanR> are you sure
2021-12-16 21:08:23 +0100 <tomsmeding> well you never know, perhaps the machine that built my compiler was actually infected with a Thompson virus through a log4j injection vulnerability
2021-12-16 21:08:27 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2021-12-16 21:09:02 +0100 <EvanR> yeah I see it goes over the input in one pass, unfortunately it still builds a thunk if you consume the left or the right result
2021-12-16 21:09:10 +0100 <EvanR> of the original list
2021-12-16 21:09:17 +0100 <tomsmeding> and don't consume the other one?
2021-12-16 21:09:27 +0100 <EvanR> consume one then the other
2021-12-16 21:09:45 +0100 <tomsmeding> except if ghc infers that you're always going to use both and does strictness analysis
2021-12-16 21:10:00 +0100 <tomsmeding> though, like, how could it _not_ produce a thunk there
2021-12-16 21:10:11 +0100 <EvanR> that could ever result in building whole lists ahead of time?
2021-12-16 21:10:17 +0100 <EvanR> that's what I mean
2021-12-16 21:10:38 +0100 <tomsmeding> I'm not sure I understand your usage of "ever"
2021-12-16 21:10:54 +0100 <dolio> It means even.
2021-12-16 21:10:57 +0100 <monochrom> I am not scared by "build a thunk". It beats handcoding my own equivalent micromanagement, such as me having to track the Maybe Int and Int up there in my CP.
2021-12-16 21:11:40 +0100 <monochrom> I am only afraid of "build n thunks", and only when "there is an alternative, O(1)-space algorithm".
2021-12-16 21:11:55 +0100 <EvanR> it would be nice if you could consume the first part and it also consumes the first part of the second part
2021-12-16 21:12:13 +0100 <EvanR> so when you get to the second part you don't go back
2021-12-16 21:12:15 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-16 21:12:32 +0100 <EvanR> and no memory builds up
2021-12-16 21:12:43 +0100koz(~koz@121.99.240.58)
2021-12-16 21:12:49 +0100 <tomsmeding> but you don't, right?
2021-12-16 21:13:07 +0100 <tomsmeding> if you use the complicated version of course, not the take/drop version, for that your complaint is valid
2021-12-16 21:13:31 +0100 <monochrom> "drop n xs" is a thunk, too.
2021-12-16 21:13:45 +0100alx741(~alx741@157.100.93.160)
2021-12-16 21:13:52 +0100 <EvanR> no I'm not saying the report version is different
2021-12-16 21:14:03 +0100 <tomsmeding> that xs'' that gets returned in the fallback case for splitAt' is already the suffix after the first n items
2021-12-16 21:14:21 +0100 <monochrom> And if you consume one node of "take n xs", you get "x : thunk(take (n-1) ...)"
2021-12-16 21:14:24 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-16 21:15:57 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 240 seconds)
2021-12-16 21:16:01 +0100 <EvanR> oh, xs'' is forgotten at each step
2021-12-16 21:16:09 +0100 <EvanR> cool
2021-12-16 21:16:27 +0100 <tomsmeding> forgotten?
2021-12-16 21:17:01 +0100 <tomsmeding> it only gets produced after the n-long prefix has been traversed, and the value that is produced there is just passed along to the beginning
2021-12-16 21:17:44 +0100 <EvanR> ok yeah
2021-12-16 21:18:06 +0100 <EvanR> so snd you finally access is a chain of thunks n long
2021-12-16 21:18:51 +0100 <tomsmeding> what computation does the n/2'th thunk do?
2021-12-16 21:19:12 +0100 <EvanR> snd?
2021-12-16 21:19:21 +0100 <tomsmeding> isn't the last thunk, that actually returns remainder unchanged, just passed along?
2021-12-16 21:19:24 +0100 <EvanR> or grab that x'' from the split at
2021-12-16 21:19:36 +0100 <tomsmeding> oh right
2021-12-16 21:21:08 +0100 <tomsmeding> I would hope that ghc optimises that though, to a function with two return values
2021-12-16 21:21:40 +0100shapr(~user@12.5.211.156) (Remote host closed the connection)
2021-12-16 21:21:53 +0100shapr(~user@12.5.211.156)
2021-12-16 21:24:27 +0100 <EvanR> by returning the 2nd value, that would then create list 1 ahead of time?
2021-12-16 21:24:27 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 21:24:56 +0100 <EvanR> if you use 2nd value first, makes sense
2021-12-16 21:26:14 +0100 <EvanR> but "intuitively" (monochroms favorite!) you probably want to consume the first list lazily, then pick up where it left off from the original list
2021-12-16 21:26:28 +0100 <EvanR> in that order
2021-12-16 21:31:59 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-12-16 21:37:30 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
2021-12-16 21:41:28 +0100Everything(~Everythin@37.115.210.35)
2021-12-16 21:42:13 +0100alx741(~alx741@157.100.93.160)
2021-12-16 21:42:19 +0100burnsidesLlama(~burnsides@dhcp168-016.wadham.ox.ac.uk) (Remote host closed the connection)
2021-12-16 21:42:52 +0100 <monochrom> The core and stg code looks a bit scary about accumulating n thunks, but empirical running says it stays O(1)-space.
2021-12-16 21:43:25 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 21:43:33 +0100 <monochrom> I have (xs, ys) = splitAt n [0..], n = large numbr, do {mapM_ print xs; print (take 1 ys)}
2021-12-16 21:44:46 +0100 <monochrom> In core and stg, you will see the equiv of "let foo = splitAt n bar; xs = fst foo; ys = snd foo".
2021-12-16 21:45:00 +0100Everything(~Everythin@37.115.210.35) ()
2021-12-16 21:46:05 +0100 <EvanR> hmm
2021-12-16 21:46:34 +0100mason0(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2021-12-16 21:46:48 +0100 <tomsmeding> I was installing ghc-vis and trying it out in there, but it's not terribly enlightening; using monochrom's names: forcing ys forces the first n items of [0..] as well, after which forcing xs is only a single thunk. However, if you force xs first, then it incrementally traverses the prefix
2021-12-16 21:48:35 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 252 seconds)
2021-12-16 21:49:59 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-12-16 21:51:28 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 21:52:11 +0100acidjnk(~acidjnk@p200300d0c7271e22d5fcf408496a0722.dip0.t-ipconnect.de)
2021-12-16 21:53:24 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2021-12-16 21:53:42 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-12-16 21:54:19 +0100 <EvanR> i know indirection nodes can be removed by gc later, maybe a thunk that directly runs another thunk is also cleanup like that
2021-12-16 21:54:22 +0100 <tomsmeding> to save you from installing it too, perhaps: https://tomsmeding.com/f/ghc-vis-splitAt.mp4
2021-12-16 21:54:49 +0100 <EvanR> simplified at gc
2021-12-16 21:55:28 +0100 <tomsmeding> (I have no idea what those Selector nodes are)
2021-12-16 21:55:41 +0100 <tomsmeding> (more ghc-vis demos: https://www.youtube.com/watch?v=I4lnCG18TaY)
2021-12-16 21:55:53 +0100 <mniip> this looks wicked
2021-12-16 21:56:01 +0100 <tomsmeding> it is, isn't it?
2021-12-16 21:56:07 +0100 <tomsmeding> I was stunned when I watched that YT video
2021-12-16 21:56:19 +0100 <tomsmeding> so I had to try it myself, and this seemed like an opportunity :p
2021-12-16 21:56:47 +0100 <mniip> the pointers in nullary constructors though
2021-12-16 21:56:52 +0100 <mniip> I wonder if something can be done about that
2021-12-16 21:57:25 +0100 <tomsmeding> yeah Joachim explains something about that in the video I linked, apparently GHC's GC has a limitation where each heap object needs to be at least 2 words large
2021-12-16 21:57:51 +0100 <tomsmeding> so there's "something" there, and nobody cares what
2021-12-16 21:58:11 +0100 <monochrom> Ooohhh, I think you have to look up "STG update frame" and how it informs GC to expedite evaluating "ys = snd foo" so it lets go of foo.
2021-12-16 21:58:15 +0100coot(~coot@2a02:a310:e03f:8500:933a:39ca:ef4e:37cb) (Quit: coot)
2021-12-16 21:59:05 +0100 <monochrom> I say this because I look in the Cmm code for the foo thunk, it begins with "I64[Sp - 16] = stg_upd_frame_info", i.e. pushing an "update frame" on the stack.
2021-12-16 21:59:15 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2021-12-16 21:59:29 +0100 <mniip> tomsmeding, yeah I'm wondering if there's a way to introspect whether it's really something or not
2021-12-16 21:59:39 +0100 <monochrom> And the STG says it too, I just didn't know to read it. It says "foo = \u ...", the "u" there means this.
2021-12-16 22:00:04 +0100 <tomsmeding> mniip: no idea, all my knowledge about ghc-vis comes from that video, and also about that second word for nil :p
2021-12-16 22:00:28 +0100 <tomsmeding> monochrom: that sounds cool
2021-12-16 22:01:54 +0100 <EvanR> "surprisingly efficient"
2021-12-16 22:04:16 +0100 <monochrom> About 20 years ago Haskell compilers/interpreters didn't pull this trick. It was a big deal, people found out that splitAt, break, span were taking up space left right and centre.
2021-12-16 22:05:17 +0100 <monochrom> Your mental model of lazy evaluation and thunking was not wrong. The standard lazy evaluation model does predict that you have a problem. Someone had to invent this "update frame" business to solve it.
2021-12-16 22:06:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-16 22:08:26 +0100 <dolio> I don't think that's totally accurate.
2021-12-16 22:08:41 +0100 <dolio> Update frames are just part of lazy evaluation.
2021-12-16 22:09:45 +0100alx741(~alx741@157.100.93.160)
2021-12-16 22:10:10 +0100 <dolio> Where you store the answer once it's calculated and you're walking back through the stack, so that other references don't perform the calculation again.
2021-12-16 22:10:58 +0100 <dolio> And the opposite of \u is for lambdas that aren't part of names that can share work, like just a function.
2021-12-16 22:11:30 +0100AWizzArd(~code@gehrels.uberspace.de) (Changing host)
2021-12-16 22:11:30 +0100AWizzArd(~code@user/awizzard)
2021-12-16 22:12:02 +0100 <dolio> But, you're talking about where the garbage collector recognizes certain things like `fst (x,y)` and opportunistically 'collects' it as `x`, right?
2021-12-16 22:13:54 +0100 <EvanR> in the code for splitAt the left components are list nodes being built, and the right component is basically a computation that traverses all the way down the input list to the pickup point. Somehow by looking at the first component the second component is being 'bumped'
2021-12-16 22:14:34 +0100 <EvanR> so seems different from lazy evaluation memoizing
2021-12-16 22:14:46 +0100 <EvanR> since you're not looking at that second component right now
2021-12-16 22:16:35 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 22:17:34 +0100 <EvanR> snd (x,y) being simplified to y by gc might explain it
2021-12-16 22:20:47 +0100jeetelongname(~jeet@88-111-159-26.dynamic.dsl.as9105.com)
2021-12-16 22:21:07 +0100son0p(~ff@2800:484:1d81:b700:d40b:900:b387:320)
2021-12-16 22:21:50 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 260 seconds)
2021-12-16 22:23:15 +0100 <EvanR> or in my random guess thunk (thunk x) is simplified to thunk x
2021-12-16 22:23:59 +0100 <dolio> Oh, is that what you thought was going on? You never push two update frames in a row.
2021-12-16 22:24:35 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 22:24:44 +0100 <dolio> If you would ever do that, you just point the new location to the existing one and continue.
2021-12-16 22:26:06 +0100 <dolio> Otherwise you'd get stack overflows from stuff like `f x 0 = x ; f x n = let y = x in f y (n-1)`
2021-12-16 22:27:07 +0100burnsidesLlama(~burnsides@dhcp168-016.wadham.ox.ac.uk)
2021-12-16 22:27:09 +0100 <EvanR> this example doesn't involve a tuple return
2021-12-16 22:27:31 +0100 <EvanR> it seems like just passing pointers to stuff
2021-12-16 22:27:58 +0100 <EvanR> and building a bunch of minus 1 thunks
2021-12-16 22:28:16 +0100 <EvanR> scratch that... pattern matching
2021-12-16 22:28:19 +0100 <dolio> let always builds a closure.
2021-12-16 22:28:43 +0100 <EvanR> really
2021-12-16 22:29:01 +0100 <dolio> So, in this scenario, `f x n` is x with n updating closures around it.
2021-12-16 22:29:17 +0100 <Sgeo_> My use case is a bit ridiculous (I'm vaguely curious if van Laarhoven optics are implementable in Koka as effects in place of Functors), but are there useful Functors for van Laarhoven optics that have no Monad instance?
2021-12-16 22:29:42 +0100 <dolio> But it still takes constant space to evaluate, because once the first update frame is on the stack, all the subsequent ones just get set to point to the first one instead of taking more stack.
2021-12-16 22:30:18 +0100 <dolio> Well, in GHC that let gets inlined, but `let` in STG always builds a closure.
2021-12-16 22:30:40 +0100jumper149(~jumper149@static.6.71.203.116.clients.your-server.de)
2021-12-16 22:31:24 +0100 <jumper149> Is it possible to derive an instance together with its OVERLAPPABLE pragma?
2021-12-16 22:32:24 +0100 <dolio> My point is that if you were worried about a bunch of simple indirections like that, their stack space is clamped, at least.
2021-12-16 22:32:42 +0100 <dolio> Heap space is not, I think.
2021-12-16 22:33:39 +0100 <EvanR> so alternating tuple returns, moving into a new tuple return is a simple indirection?
2021-12-16 22:33:59 +0100 <dolio> No, that has other frames on the stack, I think.
2021-12-16 22:34:05 +0100deadmarshal(~deadmarsh@95.38.228.81) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-16 22:34:41 +0100 <Sgeo_> ...Const isn't a monad, apparently.
2021-12-16 22:34:42 +0100 <geekosaur> jumper149, pretty sure you cannot cause an instance derivation to be OVERLAPPABLE
2021-12-16 22:35:17 +0100deadmarshal(~deadmarsh@95.38.228.81)
2021-12-16 22:35:57 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-16 22:36:09 +0100 <jumper149> Well I can still use OVERLAPPING on other instances though. I guess that should be enough.
2021-12-16 22:36:52 +0100 <geekosaur> hm. wonder if that's worth a proposal
2021-12-16 22:37:14 +0100 <geekosaur> deriving ({-# OVERLAPPABLE #-} Foo, ...)
2021-12-16 22:40:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-16 22:42:17 +0100alx741(~alx741@157.100.93.160)
2021-12-16 22:43:05 +0100 <jumper149> geekosaur: It might even be possible to have something like this then: `deriving newtype ({-# OVERLAPPABLE #-} Foo) \n deriving ({-# OVERLAPPING #-} Foo) via T`
2021-12-16 22:45:43 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 22:47:00 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 22:50:30 +0100 <sm> it's fairly common to provide a set of stackX.Y.yaml files, one per major ghc version supported. But for easy building you need a default stack.yaml as well. This breaks the pattern and is a hassle for scripting. A symlink seems like a reasonable solution, but does it work on windows these days ? Any other good solution ?
2021-12-16 22:51:43 +0100 <geekosaur> windows 10 supports symlinks but may require administrator privileges in some versions (admin privs definitely required for earlier versions but not sure anyone cares about win7/8 these days)
2021-12-16 22:51:59 +0100 <geekosaur> does stack.yaml support include files?
2021-12-16 22:52:14 +0100earendel(uid498179@user/earendel) (Quit: Connection closed for inactivity)
2021-12-16 22:52:47 +0100 <sm> good question.. don't think so but I'll check
2021-12-16 22:52:49 +0100cosimone(~user@93-47-229-223.ip115.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
2021-12-16 22:54:09 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 268 seconds)
2021-12-16 22:55:10 +0100 <sm> I'm having a hard time visualising the symlink experience on windows 10. If you're a regular windows 10 user and you clone a project containing a symlink, do you see a small useless file there ?
2021-12-16 22:56:32 +0100 <geekosaur> symlinks don't work that way on windows, they're implemented as special filesystem nodes called reparse points. if symlinks are not supported or require greater privileges than the user has, cloning will fail with an error
2021-12-16 22:59:15 +0100 <sm> ah. That sounds like something I must avoid then
2021-12-16 22:59:32 +0100jeetelongname(~jeet@88-111-159-26.dynamic.dsl.as9105.com) (Ping timeout: 240 seconds)
2021-12-16 23:01:03 +0100 <sm> thanks!
2021-12-16 23:03:15 +0100alx741(~alx741@157.100.93.160)
2021-12-16 23:06:39 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2021-12-16 23:07:01 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-12-16 23:07:43 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 268 seconds)
2021-12-16 23:08:06 +0100jumper149(~jumper149@static.6.71.203.116.clients.your-server.de) (Quit: WeeChat 3.3)
2021-12-16 23:08:39 +0100 <sm> though.. I have some symlinks in the repo already. Hmm
2021-12-16 23:12:38 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 23:12:41 +0100pfurla_(~pfurla@205.185.222.148)
2021-12-16 23:14:13 +0100pfurla(~pfurla@2804:18:5827:38:71a1:6773:333f:330d) (Ping timeout: 240 seconds)
2021-12-16 23:15:02 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-12-16 23:21:07 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 23:22:09 +0100nfd(~nfd@user/nfd) (Quit: Lost terminal)
2021-12-16 23:25:37 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93) (Ping timeout: 240 seconds)
2021-12-16 23:29:24 +0100alx741(~alx741@157.100.93.160)
2021-12-16 23:29:42 +0100Tuplanolla(~Tuplanoll@91-159-68-169.elisa-laajakaista.fi)
2021-12-16 23:29:45 +0100pfurla(~pfurla@177.25.182.217)
2021-12-16 23:31:37 +0100pfurla_(~pfurla@205.185.222.148) (Ping timeout: 240 seconds)
2021-12-16 23:33:38 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2021-12-16 23:35:05 +0100notzmv(~zmv@user/notzmv)
2021-12-16 23:37:29 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-16 23:37:36 +0100benin(~benin@183.82.204.250)
2021-12-16 23:39:19 +0100kranius(~kranius@222.186.245.213.rev.sfr.net)
2021-12-16 23:40:24 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-12-16 23:40:37 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-16 23:43:43 +0100lavaman(~lavaman@98.38.249.169)
2021-12-16 23:48:27 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-16 23:49:35 +0100 <sm> report from a non-admin windows 10 user - they can clone a repo with symlinks, and the symlinks are non functional but harmless (small files containing the path)
2021-12-16 23:52:58 +0100 <geekosaur> interesting. must be some git weirdness
2021-12-16 23:54:19 +0100 <hpc> it probably raises fewer questions than "why is git asking for admin?"
2021-12-16 23:54:48 +0100sprout(~quassel@2a02:a467:ccd6:1:7c88:97e7:7c77:1c93)
2021-12-16 23:57:37 +0100alx741(~alx741@157.100.93.160)