2021/02/28

2021-02-28 00:00:02 +0100 <NieDzejkob> ski: yeah, but I'd like the declaration of each part of state to be self-contained in the component that uses it
2021-02-28 00:00:06 +0100 <int-e> (which will work fine until somebody does exactly that)
2021-02-28 00:00:08 +0100finn_elija(~finn_elij@gateway/tor-sasl/finnelija/x-67402716)
2021-02-28 00:00:33 +0100 <nshepperd> you could use lens combinators in this case. without a typeclass even, unless you really have a good reason for wanting to look things up by type specifically
2021-02-28 00:00:40 +0100 <ski> (yea, and ideally, doing that should be a reasonable thing to do)
2021-02-28 00:00:56 +0100 <ski> NieDzejkob : not sure what you have in mind by that
2021-02-28 00:02:26 +0100systemhalted(~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net) (Remote host closed the connection)
2021-02-28 00:02:33 +0100systemhalted(~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net)
2021-02-28 00:05:55 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 276 seconds)
2021-02-28 00:08:58 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2021-02-28 00:09:44 +0100inkbottlezebrag
2021-02-28 00:10:45 +0100systemhalted(~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net) (Ping timeout: 264 seconds)
2021-02-28 00:10:59 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 00:11:05 +0100fendor_(~fendor@178.165.128.181.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2021-02-28 00:13:20 +0100conal(~conal@208.91.109.22) (Quit: Computer has gone to sleep.)
2021-02-28 00:13:47 +0100pavonia(~user@unaffiliated/siracusa)
2021-02-28 00:16:29 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 00:16:51 +0100ddellacosta(~ddellacos@86.106.143.10) (Remote host closed the connection)
2021-02-28 00:17:17 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2021-02-28 00:20:57 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds)
2021-02-28 00:21:05 +0100ezrakilty(~ezrakilty@97-113-55-149.tukw.qwest.net)
2021-02-28 00:21:55 +0100alx741(~alx741@186.178.108.37) (Quit: alx741)
2021-02-28 00:22:15 +0100conal(~conal@192.145.118.121)
2021-02-28 00:24:32 +0100 <NieDzejkob> OH, so import cycles are an error and I actually NEED to do this
2021-02-28 00:25:38 +0100 <fresheyeball> https://gitlab.com/fresheyeball/Shpadoinkle/-/blob/master/html/Shpadoinkle/Html/Memo.hs#L44
2021-02-28 00:25:39 +0100 <davean> NieDzejkob: there are ways to do cylces, but they're special. You should avoid it.
2021-02-28 00:25:48 +0100 <fresheyeball> turns out I am wrong about what this bit of code does
2021-02-28 00:25:52 +0100 <fresheyeball> but I don't know how to fix it
2021-02-28 00:26:02 +0100 <fresheyeball> I thought it would make an IORef on the first eval
2021-02-28 00:26:09 +0100 <fresheyeball> and then re-use it for subsequent evals
2021-02-28 00:26:20 +0100 <fresheyeball> but ghci is showing me it runs that monad on each eval
2021-02-28 00:26:41 +0100 <fresheyeball> I added putStrLn between 44 and 45 and it prints each time
2021-02-28 00:28:34 +0100 <fresheyeball> oh shit I see it
2021-02-28 00:28:37 +0100 <fresheyeball> duck duck
2021-02-28 00:31:29 +0100NieDzejkobquacks
2021-02-28 00:35:12 +0100 <NieDzejkob> Okay, let me try explaining what I'm trying to do again. Let's say I have a set of modules, and each of them defines a data type. I want to create a state monad that holds one of each type (the Context), and write operations in the Context monad, where each module uses its own part. I'm currently using a type-indexed map, and the simple-somewhat-ugly approach of just defining a record with all of the types doesn't work because of an import cycle. Any
2021-02-28 00:35:12 +0100 <NieDzejkob> other options?
2021-02-28 00:35:23 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-bfiroajaabomwjor) (Quit: Connection closed for inactivity)
2021-02-28 00:37:29 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2021-02-28 00:40:23 +0100heatsink(~heatsink@2600:1700:bef1:5e10:44cd:7ec7:332d:f0ab)
2021-02-28 00:45:39 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-02-28 00:45:45 +0100usr25(~usr25@unaffiliated/usr25)
2021-02-28 00:50:08 +0100ezrakilty(~ezrakilty@97-113-55-149.tukw.qwest.net) (Remote host closed the connection)
2021-02-28 00:51:43 +0100usr25(~usr25@unaffiliated/usr25) (Ping timeout: 245 seconds)
2021-02-28 00:51:45 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b84a:c23b:9840:733b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 00:56:03 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b84a:c23b:9840:733b)
2021-02-28 00:59:53 +0100fresheyeball(~isaac@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
2021-02-28 01:04:14 +0100 <hyiltiz-M> But how in seven hells did you put yourself in such a situation? Sounds like you needed a bunch of custom type classes instead, no?
2021-02-28 01:09:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:44cd:7ec7:332d:f0ab) (Ping timeout: 264 seconds)
2021-02-28 01:12:19 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b84a:c23b:9840:733b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 01:13:00 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 01:17:35 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:331:1c71:e87e:3061) (Ping timeout: 272 seconds)
2021-02-28 01:17:55 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.0)
2021-02-28 01:19:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 01:22:14 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2021-02-28 01:25:36 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 01:25:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 276 seconds)
2021-02-28 01:26:37 +0100ddellacosta(~ddellacos@86.106.143.58)
2021-02-28 01:31:09 +0100ddellacosta(~ddellacos@86.106.143.58) (Ping timeout: 260 seconds)
2021-02-28 01:31:45 +0100darjeeling_(~darjeelin@122.245.218.150) (Ping timeout: 264 seconds)
2021-02-28 01:37:59 +0100heatsink(~heatsink@2600:1700:bef1:5e10:44cd:7ec7:332d:f0ab)
2021-02-28 01:40:34 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
2021-02-28 01:40:48 +0100bennofs_(~quassel@dslb-188-106-243-069.188.106.pools.vodafone-ip.de)
2021-02-28 01:43:00 +0100hendursa1(~weechat@gateway/tor-sasl/hendursaga) (Quit: hendursa1)
2021-02-28 01:43:23 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga)
2021-02-28 01:44:13 +0100Wuzzy(~Wuzzy@p5b0df7c2.dip0.t-ipconnect.de)
2021-02-28 01:44:57 +0100bennofs__(~quassel@dslb-094-222-055-234.094.222.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2021-02-28 01:45:43 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2021-02-28 01:46:15 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:c8ae:4c2c:c3c0:6062:2fc9)
2021-02-28 01:46:23 +0100conal(~conal@192.145.118.121) (Quit: Computer has gone to sleep.)
2021-02-28 01:48:37 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 276 seconds)
2021-02-28 01:48:58 +0100darjeeling_(~darjeelin@122.245.218.150)
2021-02-28 01:52:29 +0100gitgoood(~gitgood@80-44-13-166.dynamic.dsl.as9105.com)
2021-02-28 01:52:47 +0100gitgood(~gitgood@80-44-13-166.dynamic.dsl.as9105.com) (Ping timeout: 265 seconds)
2021-02-28 01:57:23 +0100conal(~conal@198.8.81.202)
2021-02-28 02:01:54 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi)
2021-02-28 02:04:52 +0100supercoven_(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi) (Ping timeout: 276 seconds)
2021-02-28 02:05:36 +0100remby(4c437c1b@bras-base-london1483w-grc-21-76-67-124-27.dsl.bell.ca)
2021-02-28 02:07:01 +0100Rudd0(~Rudd0@185.189.115.108) (Remote host closed the connection)
2021-02-28 02:07:08 +0100ddellacosta(~ddellacos@86.106.143.201)
2021-02-28 02:07:18 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net)
2021-02-28 02:11:36 +0100ddellacosta(~ddellacos@86.106.143.201) (Ping timeout: 240 seconds)
2021-02-28 02:11:39 +0100whataday(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-02-28 02:11:57 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 02:12:47 +0100whataday(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-02-28 02:13:48 +0100MidAutumnHotaru0(~MidAutumn@unaffiliated/midautumnhotaru)
2021-02-28 02:15:55 +0100MidAutumnHotaru(~MidAutumn@unaffiliated/midautumnhotaru) (Ping timeout: 260 seconds)
2021-02-28 02:15:55 +0100MidAutumnHotaru0MidAutumnHotaru
2021-02-28 02:16:45 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 264 seconds)
2021-02-28 02:17:11 +0100Tario(~Tario@201.192.165.173)
2021-02-28 02:18:50 +0100klardotsh(~klardotsh@75-172-17-41.tukw.qwest.net) (Quit: WeeChat 3.0.1)
2021-02-28 02:25:50 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2021-02-28 02:25:56 +0100aplainze1akind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-02-28 02:26:21 +0100aplainze1akindaplainzetakind
2021-02-28 02:26:23 +0100Feuermagier(~Feuermagi@2a02:2488:4211:3400:246e:bf09:8453:9d6) (Remote host closed the connection)
2021-02-28 02:26:40 +0100Feuermagier(~Feuermagi@2a02:2488:4211:3400:246e:bf09:8453:9d6)
2021-02-28 02:26:58 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 276 seconds)
2021-02-28 02:27:35 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 265 seconds)
2021-02-28 02:28:24 +0100remby(4c437c1b@bras-base-london1483w-grc-21-76-67-124-27.dsl.bell.ca) ()
2021-02-28 02:28:32 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b84a:c23b:9840:733b)
2021-02-28 02:30:24 +0100int80h(uid148779@gateway/web/irccloud.com/x-byitmqwoaqxynwkn)
2021-02-28 02:38:06 +0100cheater(~user@unaffiliated/cheater)
2021-02-28 02:38:14 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 02:41:36 +0100vicfred(vicfred@gateway/vpn/mullvad/vicfred) (Ping timeout: 265 seconds)
2021-02-28 02:47:21 +0100ddellacosta(ddellacost@gateway/vpn/mullvad/ddellacosta)
2021-02-28 02:50:47 +0100Ariakenom(~Ariakenom@2001:9b1:efb:fc00:2494:eb54:ea13:73ca) (Quit: Leaving)
2021-02-28 02:52:19 +0100ddellacosta(ddellacost@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 276 seconds)
2021-02-28 02:56:36 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 03:00:19 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 03:00:58 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 260 seconds)
2021-02-28 03:04:36 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-02-28 03:09:19 +0100conal(~conal@198.8.81.202) (Quit: Computer has gone to sleep.)
2021-02-28 03:10:27 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2021-02-28 03:10:52 +0100jpds_(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-02-28 03:11:16 +0100jpds_(~jpds@gateway/tor-sasl/jpds)
2021-02-28 03:12:18 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:c8ae:4c2c:c3c0:6062:2fc9) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 03:13:14 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-02-28 03:15:51 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net)
2021-02-28 03:16:09 +0100geowiesnot_bis(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 264 seconds)
2021-02-28 03:16:21 +0100conal(~conal@192.145.118.137)
2021-02-28 03:16:59 +0100Tario(~Tario@201.192.165.173)
2021-02-28 03:19:04 +0100slack1256(~slack1256@45.4.2.52)
2021-02-28 03:20:21 +0100sakirious5(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
2021-02-28 03:20:43 +0100conal(~conal@192.145.118.137) (Client Quit)
2021-02-28 03:20:48 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 03:21:51 +0100conal(~conal@192.145.118.137)
2021-02-28 03:22:29 +0100conal(~conal@192.145.118.137) (Client Quit)
2021-02-28 03:23:35 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
2021-02-28 03:23:35 +0100sakirious5sakirious
2021-02-28 03:24:39 +0100vchlup_(~vchlup@115.128.broadband17.iol.cz)
2021-02-28 03:27:02 +0100vchlup(~vchlup@115.128.broadband17.iol.cz) (Ping timeout: 265 seconds)
2021-02-28 03:29:24 +0100MidAutumnHotaru(~MidAutumn@unaffiliated/midautumnhotaru) (Quit: Quit 啾)
2021-02-28 03:29:32 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net) (Quit: Connection closed)
2021-02-28 03:30:17 +0100MidAutumnHotaru(~MidAutumn@unaffiliated/midautumnhotaru)
2021-02-28 03:30:35 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-02-28 03:31:06 +0100da39a3ee5e6b4b0d(~da39a3ee5@184.22.157.95)
2021-02-28 03:33:01 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 03:36:37 +0100conal(~conal@66.115.157.135)
2021-02-28 03:39:12 +0100Lord_of_Life_(~Lord@unaffiliated/lord-of-life/x-0885362)
2021-02-28 03:40:36 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2021-02-28 03:40:36 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 240 seconds)
2021-02-28 03:40:36 +0100Lord_of_Life_Lord_of_Life
2021-02-28 03:44:56 +0100zq(~zq@xorshift.org)
2021-02-28 03:45:01 +0100 <minoru_shiraeesh> NieDzejkob: if you were to describe it to a child, a child would ask: "why do you want to merge all the contexts into a single context if they are separate from each other?"
2021-02-28 03:45:18 +0100 <zq> :t foldl
2021-02-28 03:45:19 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2021-02-28 03:45:56 +0100 <zq> how to prove that foldl (:) ys xs == concat (reverse xs) ys?
2021-02-28 03:46:38 +0100 <koz_> Start with the definitions of 'foldl', 'concat' and 'reverse'.
2021-02-28 03:46:49 +0100 <koz_> Then inline those and see what you get.
2021-02-28 03:46:58 +0100 <koz_> Then apply reductions until LHS and RHS look the same.
2021-02-28 03:47:27 +0100 <zq> um, let me correct my statement: foldl (:) ys xs == reverse xs ++ ys
2021-02-28 03:47:39 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 03:50:11 +0100 <minoru_shiraeesh> and then a child would say: "it would make sense to use different states for different contexts and to have a way of switching from one context to another, like a bridge or something"
2021-02-28 03:50:28 +0100 <koz_> zq: My answer is unchanged, modulo the fact you no longer need 'concat'.
2021-02-28 03:52:49 +0100 <minoru_shiraeesh> but how do you do that with monad stacks, I don't know
2021-02-28 03:53:10 +0100kupi(uid212005@gateway/web/irccloud.com/x-vvucditfymkrygow) (Quit: Connection closed for inactivity)
2021-02-28 03:53:42 +0100 <koz_> minoru_shiraeesh: Is the goal to go from StateT s m a to StateT s' m a or something?
2021-02-28 03:54:07 +0100Wuzzy(~Wuzzy@p5b0df7c2.dip0.t-ipconnect.de) (Quit: Wuzzy)
2021-02-28 03:54:21 +0100 <minoru_shiraeesh> koz_: Is NieDzeijkob's earlier description visible to you?
2021-02-28 03:54:43 +0100 <minoru_shiraeesh> it was posted at 05:35
2021-02-28 03:54:48 +0100 <koz_> minoru_shiraeesh: No, but I recall vaguely that the issue was the MonadState s (State s) fundep.
2021-02-28 03:55:19 +0100 <minoru_shiraeesh> here is his message:
2021-02-28 03:55:22 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 276 seconds)
2021-02-28 03:55:25 +0100 <minoru_shiraeesh> Okay, let me try explaining what I'm trying to do again. Let's say I have a set of modules, and each of them defines a data type. I want to create a state monad that holds one of each type (the Context), and write operations in the Context monad, where each module uses its own part. I'm currently using a type-indexed map, and the simple-somewhat-ugly approach of just defining a record with all of the types doesn't work because of an import
2021-02-28 03:55:27 +0100 <minoru_shiraeesh> cycle. Any
2021-02-28 03:55:32 +0100 <minoru_shiraeesh> other options?
2021-02-28 03:55:54 +0100rajivr(uid269651@gateway/web/irccloud.com/x-nydprmgitcsjloxf)
2021-02-28 03:55:54 +0100mrchampion(~mrchampio@38.18.109.23) (Read error: Connection reset by peer)
2021-02-28 03:56:23 +0100 <koz_> 'One of each type' - one what of each type?
2021-02-28 03:57:47 +0100conal(~conal@66.115.157.135) (Quit: Computer has gone to sleep.)
2021-02-28 03:59:04 +0100 <minoru_shiraeesh> one record holding a state I guess
2021-02-28 03:59:33 +0100 <koz_> I read that as 'one value of each data type'.
2021-02-28 03:59:49 +0100mrchampion(~mrchampio@38.18.109.23)
2021-02-28 03:59:52 +0100 <koz_> So you basically have a closed set of values, one of each type.
2021-02-28 03:59:57 +0100 <zq> koz_: what reductions should i be applying?
2021-02-28 04:00:10 +0100 <koz_> zq: Like, evaluations?
2021-02-28 04:00:16 +0100 <koz_> Or equivalences from laws.
2021-02-28 04:00:31 +0100 <koz_> Look at how we demonstrate things like type class laws for examples if you need to see this in action.
2021-02-28 04:00:33 +0100m0rphism1(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 264 seconds)
2021-02-28 04:00:33 +0100ddellacosta(~ddellacos@86.106.143.32)
2021-02-28 04:00:37 +0100conal(~conal@192.145.118.103)
2021-02-28 04:00:44 +0100 <zq> that's pretty much my question. i'm not clear on which equivalences i should be using
2021-02-28 04:00:52 +0100 <koz_> zq: There isn't a magic formula.
2021-02-28 04:01:00 +0100 <koz_> It's like solving an equation.
2021-02-28 04:01:02 +0100slack1256(~slack1256@45.4.2.52) (Remote host closed the connection)
2021-02-28 04:01:15 +0100 <koz_> You need to see what transformations are available and work towards making the two sides the same.
2021-02-28 04:01:21 +0100 <koz_> It's different every time.
2021-02-28 04:01:37 +0100 <koz_> Proofs are not automatable in general. If they were, mathematics would cease to be a science.
2021-02-28 04:01:44 +0100 <koz_> Try some and see what happens?
2021-02-28 04:01:53 +0100 <zq> so, foldl f ys (x:xs) = foldl f (x:ys) xs where f = reverse (:) -- where do i go from here?
2021-02-28 04:02:19 +0100 <koz_> zq: You apply reductions to the whole equality you want to prove.
2021-02-28 04:02:22 +0100 <koz_> it's a substitution.
2021-02-28 04:02:29 +0100Mrbuck(~Mrbuck@gateway/tor-sasl/mrbuck)
2021-02-28 04:02:29 +0100 <koz_> You're not substituting.
2021-02-28 04:02:38 +0100 <zq> what wasnt substituted?
2021-02-28 04:02:53 +0100xff0x(~xff0x@2001:1a81:5311:f400:9a7d:6852:57d4:8353) (Ping timeout: 272 seconds)
2021-02-28 04:03:05 +0100 <zq> it's trivial when xs == [] so i've assumed that it isn't
2021-02-28 04:03:24 +0100 <koz_> Your goal is 'prove that 'foldl (:) ys xs == reverse xs ++ ys'
2021-02-28 04:03:37 +0100 <koz_> So first, replace the entire LHS with the definition of foldl, renaming parameters as appropriate.
2021-02-28 04:03:40 +0100 <koz_> Ditto reverse.
2021-02-28 04:03:43 +0100 <koz_> (except RHS)
2021-02-28 04:03:57 +0100 <koz_> Maintain the ==, maintain variable names, ensure the == stays intact through each trnasformation.
2021-02-28 04:04:00 +0100 <koz_> Then see what you get.
2021-02-28 04:04:09 +0100 <zq> isn't that exactly what i've done on the lhs?
2021-02-28 04:04:27 +0100 <koz_> Except I don't see 'reverse xs ++ ys' anywhere in the thing you just posted.
2021-02-28 04:04:30 +0100 <zq> the definition of foldl is recursive
2021-02-28 04:04:38 +0100xff0x(~xff0x@2001:1a81:5349:9200:4bab:e866:1730:4463)
2021-02-28 04:04:38 +0100ddellacosta(~ddellacos@86.106.143.32) (Ping timeout: 245 seconds)
2021-02-28 04:04:39 +0100 <koz_> So do one step, keep the recursive part.
2021-02-28 04:04:53 +0100 <koz_> (also, is this homework?)
2021-02-28 04:04:54 +0100 <zq> that's what the above is?
2021-02-28 04:05:00 +0100 <zq> no, it's weekend fun
2021-02-28 04:05:07 +0100 <koz_> OK, let me try.
2021-02-28 04:05:22 +0100 <zq> i know i should be proving some side property of (++) but it's unclear to me which
2021-02-28 04:05:45 +0100 <zq> for reference, this is the haskellified version of ex 4f in https://www.fstar-lang.org/tutorial/
2021-02-28 04:07:56 +0100darjeeling_(~darjeelin@122.245.218.150) (Ping timeout: 240 seconds)
2021-02-28 04:08:29 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net)
2021-02-28 04:08:44 +0100 <minoru_shiraeesh> how about proving by induction?
2021-02-28 04:10:08 +0100 <minoru_shiraeesh> prove for empty list, then prove that if it holds for some list, then it holds for incremented (consed) list
2021-02-28 04:10:30 +0100lawid(~quassel@dslb-090-186-099-002.090.186.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
2021-02-28 04:10:47 +0100 <koz_> I don't think it even compiles, as foldl (:) ys xs won't work when ys is a list, because the args are in the wrong order.
2021-02-28 04:11:21 +0100 <zq> koz_: yeah, that was the second mistake in my original question. should isntead be `reverse (:)`
2021-02-28 04:11:29 +0100lawid(~quassel@dslb-090-186-208-048.090.186.pools.vodafone-ip.de)
2021-02-28 04:11:33 +0100 <koz_> reverse (:) also makes no sense
2021-02-28 04:11:35 +0100 <zq> reflected in 03:01:53 < zq> so, foldl f ys (x:xs) = foldl f (x:ys) xs where f = reverse (:) -- where do i go from here?
2021-02-28 04:11:37 +0100 <koz_> You can't reverse a function.
2021-02-28 04:11:52 +0100 <koz_> So first, we need a _compiling_ LHS.
2021-02-28 04:12:22 +0100 <zq> flip (:) -- it's been a while since i've haskelled
2021-02-28 04:12:30 +0100 <koz_> OK, so our goal is
2021-02-28 04:12:41 +0100 <koz_> foldl (flip (:)) ys xs == reverse xs ++ ys
2021-02-28 04:12:43 +0100 <koz_> Right?
2021-02-28 04:13:08 +0100Mrbuck(~Mrbuck@gateway/tor-sasl/mrbuck) (Remote host closed the connection)
2021-02-28 04:13:19 +0100 <zq> yessir, and if proving inductively then this trivially holds when xs == [] so i've skipped ahead to xs == (s:ss)
2021-02-28 04:13:54 +0100Mrbuck(~Mrbuck@gateway/tor-sasl/mrbuck)
2021-02-28 04:15:24 +0100 <zq> i think i get it, rhs has to be expanded first and then leverage associativity of (++)
2021-02-28 04:15:54 +0100 <koz_> zq: Here's a start: https://paste.tomsmeding.com/vbSX0vE2
2021-02-28 04:16:26 +0100 <koz_> This should help you see the next steps.
2021-02-28 04:16:39 +0100 <koz_> Now, onto the other problem.
2021-02-28 04:17:03 +0100 <koz_> How I see it is this - your Context monad is actually parameterized over what particular type you are examining at the moment.
2021-02-28 04:17:14 +0100 <koz_> So it makes sense to talk about Context s a, not Context a.
2021-02-28 04:17:28 +0100 <koz_> So you can have a Context a, which 'forgets' what state it's focused on.
2021-02-28 04:17:47 +0100 <koz_> And then you have a function that turns a Context a into Context s a for some s.
2021-02-28 04:17:54 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 04:18:00 +0100 <koz_> Problem is, you can't have this be universal, because there might not _be_ an 's' to project into.
2021-02-28 04:18:20 +0100 <koz_> So you want one function per projection, as well as a 'forgetting' function.
2021-02-28 04:18:20 +0100kw(d4662d5d@212.102.45.93)
2021-02-28 04:18:27 +0100FinnElija(~finn_elij@gateway/tor-sasl/finnelija/x-67402716)
2021-02-28 04:18:27 +0100finn_elijaGuest72499
2021-02-28 04:18:27 +0100FinnElijafinn_elija
2021-02-28 04:18:32 +0100 <koz_> Then you can define MonadState s (Context s) and live your happy life.
2021-02-28 04:18:35 +0100 <minoru_shiraeesh> you're talking about State s a?
2021-02-28 04:18:47 +0100 <koz_> Context s would be equivalent to State s, yes.
2021-02-28 04:18:59 +0100theelous3(~theelous3@unaffiliated/theelous3) (Read error: Connection reset by peer)
2021-02-28 04:19:45 +0100 <minoru_shiraeesh> but why forget what state it's focused on? that's just sugaring anyway
2021-02-28 04:20:02 +0100 <koz_> Because then you can't have a Context which _doesn't_ know what type it's focusing on.
2021-02-28 04:20:06 +0100 <minoru_shiraeesh> how do you glue them together?
2021-02-28 04:20:07 +0100 <koz_> Which I assumed was the get-go goal.
2021-02-28 04:20:15 +0100 <koz_> That is exactly how you glue them together.
2021-02-28 04:20:44 +0100 <minoru_shiraeesh> but the module doesn't care about other contexts
2021-02-28 04:20:50 +0100 <minoru_shiraeesh> and it's not going to use them
2021-02-28 04:20:56 +0100 <koz_> So then what's the problem?
2021-02-28 04:21:00 +0100 <koz_> I'm genuinely confused now.
2021-02-28 04:21:12 +0100 <kw> What are the dangers of using `unsafePerformIO` with `newIORef` at the top level to create a cache? Values that aren't in the cache will be calculated,  inserted into the cache, and returned as needed (in IO).
2021-02-28 04:21:27 +0100Guest72499(~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Ping timeout: 268 seconds)
2021-02-28 04:21:40 +0100 <koz_> Why do you think you need this kw?
2021-02-28 04:21:42 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: gone to sleep. ZZZzzz…)
2021-02-28 04:21:45 +0100 <minoru_shiraeesh> why don't we just provide a module with a simple State ModuleSpecificState a
2021-02-28 04:22:02 +0100 <koz_> minoru_shiraeesh: I dunno, I'm just answering the posed question, as I understood it.
2021-02-28 04:22:14 +0100 <koz_> If I misunderstood the posed question, NieDzejkob needs to clarify what they want.
2021-02-28 04:22:47 +0100 <kw> koz_: It's a shared cache for data that has to be accessed from an external (C) library.
2021-02-28 04:23:11 +0100 <koz_> If you're calling a C library, aren't you in IO already?
2021-02-28 04:23:14 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 04:23:21 +0100redmp_(~redmp@172.58.35.206) (Ping timeout: 264 seconds)
2021-02-28 04:23:30 +0100darjeeling_(~darjeelin@122.245.218.150)
2021-02-28 04:23:40 +0100 <minoru_shiraeesh> I answered that it would make sense to provide each module with its own State s a, and then create a bridge between those states somehow, I don't know how
2021-02-28 04:23:51 +0100 <koz_> That is the bridge.
2021-02-28 04:23:53 +0100 <kw> Right, but the lookups will be through individual calls in IO. I don't want each call to make a new empty cache.
2021-02-28 04:23:57 +0100 <koz_> You define a thing that 'forgets' its focus.
2021-02-28 04:24:09 +0100 <koz_> If your calls are in IO, your cache can be in IO as well.
2021-02-28 04:24:25 +0100 <koz_> You can just have 'cache :: IORef whatever'.
2021-02-28 04:25:17 +0100 <kw> :t newIORef
2021-02-28 04:25:18 +0100 <lambdabot> error:
2021-02-28 04:25:18 +0100 <lambdabot> • Variable not in scope: newIORef
2021-02-28 04:25:18 +0100 <lambdabot> • Perhaps you meant ‘newSTRef’ (imported from Data.STRef)
2021-02-28 04:25:25 +0100 <zq> koz_: you're right about substituting then reducing
2021-02-28 04:25:26 +0100 <koz_> % :t newIORef
2021-02-28 04:25:26 +0100 <yahb> koz_: a -> IO (IORef a)
2021-02-28 04:25:35 +0100 <zq> i grok it now
2021-02-28 04:25:46 +0100 <koz_> zq: It's just like solving an equation.
2021-02-28 04:26:01 +0100 <koz_> This at least helps you see some similarities if nothing else.
2021-02-28 04:26:10 +0100 <kw> :t Data.IORef.newIORef
2021-02-28 04:26:11 +0100 <lambdabot> a -> IO (GHC.IORef.IORef a)
2021-02-28 04:27:44 +0100 <koz_> So you create your cache in main (hence in IO), bind that, then pass the resulting IORef as an extra parameter where needed.
2021-02-28 04:27:52 +0100 <koz_> If you want this to be 'seamless', use ReaderT.
2021-02-28 04:29:48 +0100 <kw> This is library code, not app code. If possible I'd like to avoid forcing users to put 'initializeCache' in their `main` . At that point I'd probably just give up on caching and just suck up the performance hit.
2021-02-28 04:30:22 +0100 <koz_> If it's a library, just assume they did it for you.
2021-02-28 04:30:27 +0100 <koz_> Just take an extra parameter.
2021-02-28 04:30:58 +0100jacks2(~bc8134e3@217.29.117.252)
2021-02-28 04:31:01 +0100 <koz_> Or make a monad involving ReaderT myCacheType IO or whatever in a newtype, and write everything in that.
2021-02-28 04:31:17 +0100 <kw> So, getting back to my original question, why are we trying so hard to avoid `unsafePerformIO` ?
2021-02-28 04:31:22 +0100 <koz_> And provide a 'runMyMonad :: MyMonad a -> cacheType -> IO a'
2021-02-28 04:31:44 +0100 <koz_> There's a reason for the 'unsafe' in that name.
2021-02-28 04:31:51 +0100 <koz_> Other folks in here can tell you what gore to anticipate.
2021-02-28 04:32:14 +0100 <kw> In this case it should be transparent to the user: The caller of the function will get the same value regardless of whether it's in the cache.
2021-02-28 04:32:32 +0100 <koz_> Yeah, but the functions are in IO, correct?
2021-02-28 04:32:54 +0100 <koz_> So your users can already assume funky stuff will happen, and you have to say if not.
2021-02-28 04:33:16 +0100 <koz_> Honestly, just carry around an extra argument for the IORef cacheType.
2021-02-28 04:33:20 +0100 <koz_> It's not that onerous.
2021-02-28 04:33:32 +0100 <koz_> You can provide a function that gives back an initialized cache for convenience.
2021-02-28 04:33:38 +0100 <koz_> And then your users can wrap it or w/e.
2021-02-28 04:34:15 +0100 <jacks2> top level IORef is not unheard of, random uses it for randomIO to update seed
2021-02-28 04:34:40 +0100 <koz_> jacks2: But it's not initialized with unsafePerformIO right?
2021-02-28 04:34:43 +0100 <kw> I'm not going to create a shitty API for performance reasons. As I said, forcing folks to thread an extra cache parameter is not going to happen.
2021-02-28 04:34:49 +0100ddellacosta(ddellacost@gateway/vpn/mullvad/ddellacosta)
2021-02-28 04:35:01 +0100 <koz_> kw: Why do you consider it that bad?
2021-02-28 04:35:02 +0100 <jacks2> koz_, I did not check the source, but I'm not sure how else it would be created
2021-02-28 04:35:11 +0100 <kw> If it's 10 to 50 times slower, OK. Haskell is still reasonably fast.
2021-02-28 04:35:33 +0100 <koz_> jacks2: Then how do you know about the top level IORef and what it updates?
2021-02-28 04:35:35 +0100 <jacks2> yep, they are using unsafePerformIO
2021-02-28 04:35:37 +0100 <kw> I consider it bad because the cache is an implementation artifact, not a part of the semantics of the function.
2021-02-28 04:35:38 +0100 <jacks2> theStdGen = unsafePerformIO $ SM.initSMGen >>= newIORef . StdGen
2021-02-28 04:35:49 +0100 <jacks2> koz_, because that is the only way to do it
2021-02-28 04:35:49 +0100 <infinisil> zq: Just dug up this proof of `reverse (xs ++ reverse ys) == ys ++ reverse xs` from my university notes. Should be relatively self-explanatory, and will be very similar to what you want to prove: https://paste.infinisil.com/_FAwpWitJg.txt
2021-02-28 04:35:50 +0100 <koz_> OK, well, there you go kw, go right ahead.
2021-02-28 04:36:29 +0100 <jacks2> {-# NOINLINE theStdGen #-} is also the important part of
2021-02-28 04:37:23 +0100 <kw> Oh, yeah. Forgot about NOINLINE. It actually wouldn't be terrible to have multiple caches floating around, but it would be a lot less useful.
2021-02-28 04:37:29 +0100viluon(uid453725@gateway/web/irccloud.com/x-ignoxmynamzxzkoi) (Quit: Connection closed for inactivity)
2021-02-28 04:38:31 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net)
2021-02-28 04:39:13 +0100ddellacosta(ddellacost@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 245 seconds)
2021-02-28 04:39:28 +0100POGtastic(~POGtastic@2601:1c0:6000:fe1:6f92:35eb:b863:d90a)
2021-02-28 04:39:58 +0100 <POGtastic> > pl \x -> map (x:) [[]]
2021-02-28 04:39:59 +0100 <lambdabot> error:
2021-02-28 04:39:59 +0100 <lambdabot> Unexpected lambda expression in function application:
2021-02-28 04:39:59 +0100 <lambdabot> \ x -> map (x :) [[]]
2021-02-28 04:40:29 +0100 <minoru_shiraeesh> kw: you can take a look at lambdabot, the approach you described is used there
2021-02-28 04:42:34 +0100 <infinisil> POGtastic: It's `@pl <expr>` or the , but don't do it in the channel unless you have a relevant question, PM lambdabot instead
2021-02-28 04:42:43 +0100 <infinisil> s/or the //
2021-02-28 04:42:50 +0100 <jacks2> kw, see this for all the things you should watch out for if you're going that route. http://hackage.haskell.org/package/base-4.14.1.0/docs/System-IO-Unsafe.html
2021-02-28 04:43:59 +0100 <POGtastic> infinisil: gotcha, thanks!
2021-02-28 04:44:46 +0100POGtastic(~POGtastic@2601:1c0:6000:fe1:6f92:35eb:b863:d90a) (Quit: WeeChat 2.9)
2021-02-28 04:46:02 +0100 <kw> jacks2: thanks.
2021-02-28 04:47:57 +0100theDon(~td@94.134.91.67) (Ping timeout: 264 seconds)
2021-02-28 04:49:19 +0100theDon(~td@muedsl-82-207-238-016.citykom.de)
2021-02-28 04:49:36 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 04:52:19 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 04:52:46 +0100HarveyPwca(~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06) (Quit: Leaving)
2021-02-28 04:54:16 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net) (Read error: Connection reset by peer)
2021-02-28 04:55:55 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net)
2021-02-28 04:57:10 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 04:57:36 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 04:57:42 +0100soft-warm(44695313@ip68-105-83-19.sd.sd.cox.net) (Ping timeout: 240 seconds)
2021-02-28 05:00:28 +0100Rudd0(~Rudd0@185.189.115.108)
2021-02-28 05:00:54 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 05:01:17 +0100jacks2(~bc8134e3@217.29.117.252) (Quit: http://www.okay.uz/)
2021-02-28 05:02:35 +0100myShoggoth(~myShoggot@75.164.81.55)
2021-02-28 05:02:39 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga) (Remote host closed the connection)
2021-02-28 05:05:01 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga)
2021-02-28 05:07:42 +0100andreas303(~andreas@gateway/tor-sasl/andreas303) (Ping timeout: 268 seconds)
2021-02-28 05:09:06 +0100andreas303(~andreas@gateway/tor-sasl/andreas303)
2021-02-28 05:11:19 +0100ddellacosta(~ddellacos@86.106.143.10)
2021-02-28 05:15:58 +0100ddellacosta(~ddellacos@86.106.143.10) (Ping timeout: 276 seconds)
2021-02-28 05:21:46 +0100da39a3ee5e6b4b0d(~da39a3ee5@184.22.157.95) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 05:27:17 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net) (Quit: Connection closed)
2021-02-28 05:27:42 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 05:30:21 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:b84a:c23b:9840:733b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 05:32:32 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-02-28 05:32:49 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi)
2021-02-28 05:32:50 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi) (Max SendQ exceeded)
2021-02-28 05:33:04 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi)
2021-02-28 05:33:05 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi) (Max SendQ exceeded)
2021-02-28 05:33:19 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi)
2021-02-28 05:33:20 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi) (Max SendQ exceeded)
2021-02-28 05:33:24 +0100egp_(~egp_@2.95.74.168) (Quit: EXIT)
2021-02-28 05:33:34 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi)
2021-02-28 05:33:35 +0100supercoven(~Supercove@dsl-hkibng31-54fabd-233.dhcp.inet.fi) (Max SendQ exceeded)
2021-02-28 05:34:34 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net)
2021-02-28 05:35:21 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-02-28 05:35:54 +0100myShoggoth(~myShoggot@75.164.81.55) (Ping timeout: 245 seconds)
2021-02-28 05:36:19 +0100myShoggoth(~myShoggot@75.164.81.55)
2021-02-28 05:47:13 +0100ddellacosta(~ddellacos@83.143.246.102)
2021-02-28 05:51:16 +0100ddellacosta(~ddellacos@83.143.246.102) (Ping timeout: 240 seconds)
2021-02-28 05:51:48 +0100mrioqueiroz(~mrioqueir@186.251.19.98)
2021-02-28 05:52:26 +0100kevin__(~kevin@pool-100-37-189-79.nycmny.fios.verizon.net)
2021-02-28 05:54:10 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net) (Read error: Connection reset by peer)
2021-02-28 05:56:11 +0100MidAutumnHotaru(~MidAutumn@unaffiliated/midautumnhotaru) (Quit: Ping timeout (120 seconds))
2021-02-28 05:56:29 +0100MidAutumnHotaru(~MidAutumn@unaffiliated/midautumnhotaru)
2021-02-28 05:56:39 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net)
2021-02-28 05:58:13 +0100kevin__(~kevin@pool-100-37-189-79.nycmny.fios.verizon.net) (Ping timeout: 276 seconds)
2021-02-28 05:59:47 +0100Mrbuck(~Mrbuck@gateway/tor-sasl/mrbuck) (Quit: WeeChat 1.9.1)
2021-02-28 06:00:52 +0100retlo1\2E0KNO
2021-02-28 06:11:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 06:13:19 +0100egp_(~egp_@2.95.74.168)
2021-02-28 06:13:56 +0100roconnor(~roconnor@host-104-157-194-235.dyn.295.ca) (Quit: Konversation terminated!)
2021-02-28 06:16:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-02-28 06:18:45 +0100Pooky(~Pooky@84.203.101.64)
2021-02-28 06:19:57 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net) (Read error: Connection reset by peer)
2021-02-28 06:21:56 +0100Narinas(~Narinas@187-178-93-112.dynamic.axtel.net)
2021-02-28 06:24:35 +0100kit(~kit@144.138.56.36)
2021-02-28 06:24:50 +0100kit(~kit@144.138.56.36) (Client Quit)
2021-02-28 06:24:55 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
2021-02-28 06:25:43 +0100kit(~kit@144.138.56.36)
2021-02-28 06:25:43 +0100kit(~kit@144.138.56.36) (Client Quit)
2021-02-28 06:31:01 +0100Mrbuck(~Mrbuck@gateway/tor-sasl/mrbuck)
2021-02-28 06:32:01 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-02-28 06:33:38 +0100Tops2(~Tobias@dyndsl-095-033-017-115.ewe-ip-backbone.de)
2021-02-28 06:35:55 +0100kit(~kit@144.138.56.36)
2021-02-28 06:36:37 +0100haya(~haya@ec2-18-231-117-140.sa-east-1.compute.amazonaws.com)
2021-02-28 06:36:59 +0100Tops21(~Tobias@dyndsl-095-033-025-207.ewe-ip-backbone.de) (Ping timeout: 265 seconds)
2021-02-28 06:37:27 +0100Pooky(~Pooky@84.203.101.64) (Quit: Leaving)
2021-02-28 06:40:28 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 276 seconds)
2021-02-28 06:40:36 +0100drbean_(~drbean@TC210-63-209-142.static.apol.com.tw)
2021-02-28 06:42:33 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139) (Ping timeout: 264 seconds)
2021-02-28 06:48:09 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net) (Quit: Connection closed)
2021-02-28 06:51:48 +0100int80h(uid148779@gateway/web/irccloud.com/x-byitmqwoaqxynwkn) (Quit: Connection closed for inactivity)
2021-02-28 06:51:53 +0100Mrbuck(~Mrbuck@gateway/tor-sasl/mrbuck) (Quit: WeeChat 1.9.1)
2021-02-28 06:53:49 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 06:58:59 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 07:10:02 +0100kw(d4662d5d@212.102.45.93) (Ping timeout: 240 seconds)
2021-02-28 07:10:12 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Remote host closed the connection)
2021-02-28 07:10:40 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 07:11:26 +0100xff0x(~xff0x@2001:1a81:5349:9200:4bab:e866:1730:4463) (Ping timeout: 264 seconds)
2021-02-28 07:11:40 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 276 seconds)
2021-02-28 07:11:48 +0100xff0x(~xff0x@2001:1a81:5349:9200:adc4:69eb:c86a:66d9)
2021-02-28 07:13:04 +0100redmp(~redmp@172.58.35.206)
2021-02-28 07:13:23 +0100myShoggoth(~myShoggot@75.164.81.55) (Ping timeout: 245 seconds)
2021-02-28 07:15:30 +0100 <hyiltiz> koz_: I fed your quotes into bellard.org/textsynth/ (GPT-2) and got a poem-like thing that is fun to read: https://bellard.org/textsynth/
2021-02-28 07:15:45 +0100 <hyiltiz> Wait this link: http://ix.io/2Rac
2021-02-28 07:16:25 +0100 <koz_> hyiltiz: Lol.
2021-02-28 07:16:45 +0100mrioqueiroz(~mrioqueir@186.251.19.98) (Ping timeout: 264 seconds)
2021-02-28 07:16:47 +0100 <koz_> Due to limited data, this model makes me sound like some kind of IORef fetishist.
2021-02-28 07:17:16 +0100 <hyiltiz> yeah it reads like someone read about haskell and half drunk in a bar
2021-02-28 07:17:32 +0100 <hyiltiz> feeding more data...
2021-02-28 07:17:32 +0100 <koz_> Lol.
2021-02-28 07:17:41 +0100 <koz_> That's not an unusual combination to be fair.
2021-02-28 07:17:51 +0100 <koz_> I don't doubt a lot of Haskell papers began as drunken academic benders.
2021-02-28 07:17:57 +0100 <koz_> monochrom can confirm.
2021-02-28 07:21:27 +0100 <hyiltiz> http://ix.io/2Rad with more data and user ids, it invented new users, among whom kaz is an extreme narcissist and kl is a re-incarnation of koz+kw+lambdabot afaict
2021-02-28 07:22:25 +0100 <koz_> hyiltiz: That is hilarious, since I know someone (not here) who goes by kaz.
2021-02-28 07:22:27 +0100 <hyiltiz> well it was a low day for me today, and I am having fun feeding #haskell into GTP-2 through bellard. Speak of a nerd
2021-02-28 07:23:04 +0100 <hyiltiz> LMFAO esp. if kaz the real shares similarities with kaz the re-incarnate
2021-02-28 07:23:50 +0100 <koz_> "<koz_> Maybe a class is better, but it shouldn't be an object." LOLZOR
2021-02-28 07:24:10 +0100 <koz_> "<kaz> I agree with kaz." I AM DED
2021-02-28 07:25:01 +0100average(uid473595@gateway/web/irccloud.com/x-vkybhfbovzssiwuk) (Quit: Connection closed for inactivity)
2021-02-28 07:28:46 +0100 <hyiltiz> and here comes a completely new character called matthewjr out of nowhere and preaches about C++ but never used it himself and only read a few C who apparently replaces you out from the conversation. Reality in AI's mind is bleak http://ix.io/2Raf
2021-02-28 07:29:02 +0100 <hyiltiz> Now I'll stop hijacking #haskell with GPT-2 funsies
2021-02-28 07:29:53 +0100 <hyiltiz> Hmm, I am going to feed it my love letter to my gf (hope I won't regret it...)
2021-02-28 07:30:19 +0100 <koz_> "<matthewjr> I'd say I would never have expected to see *anything* out of the ordinary from C++ code
2021-02-28 07:30:21 +0100 <koz_> "
2021-02-28 07:30:33 +0100 <koz_> Sounds _exactly_ like something I expect to hear from a C++ person.
2021-02-28 07:30:58 +0100 <koz_> hyiltiz: Feed it all of Edward Kmett's articles.
2021-02-28 07:31:11 +0100 <koz_> I wanna see what kind of category-theory-driven stuff it can design.
2021-02-28 07:31:14 +0100 <koz_> (and whether it compiles)
2021-02-28 07:31:25 +0100 <boxscape> is there a difference between love letters and ed kmett articles?
2021-02-28 07:31:28 +0100 <hyiltiz> haha! That is gonna be so fun
2021-02-28 07:32:17 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-02-28 07:32:29 +0100 <koz_> boxscape: Yes. In direction.
2021-02-28 07:32:41 +0100 <boxscape> I see!
2021-02-28 07:32:53 +0100 <hyiltiz> hmm GTP-2 thinks she has a boyfriend...
2021-02-28 07:33:00 +0100 <hyiltiz> I already regret it
2021-02-28 07:33:12 +0100 <hyiltiz> didn't took GPT-2 5 sentences to say that out loud
2021-02-28 07:34:28 +0100 <hyiltiz> The next day she asked me for my address because her boyfriend had not arrived yet. i took a long time. Finally i replied that i don't have an address. She said maybe her boyfriend can call her. i said i didn't have an address. She said i never promised i would see her again. i said i'm sorry.
2021-02-28 07:34:53 +0100 <hyiltiz> Does anyone have the tex or lhs files for edwardk's articles?
2021-02-28 07:35:02 +0100 <koz_> No, sadly.
2021-02-28 07:35:11 +0100 <koz_> edwardk: Could you contribute to a good cause? ^
2021-02-28 07:35:32 +0100 <hyiltiz> Well I can tesseract them out from PDF's or pandoc out from HTML if necessary
2021-02-28 07:36:08 +0100 <koz_> hyiltiz: You can look through Comonad Reader.
2021-02-28 07:36:17 +0100 <koz_> Or School of Haskell.
2021-02-28 07:36:22 +0100 <koz_> Here's one to get you started: https://www.schoolofhaskell.com/user/edwardk/heap-of-successes
2021-02-28 07:36:29 +0100 <hyiltiz> Would be so funny if the next big idea in FP comes from GPT-2
2021-02-28 07:38:00 +0100 <boxscape> OpenAI has used a specially trained version of GPT-3 to implement relatively simple python functions, on reason you couldn't do that with haskell, at least, assuming you have millions of dollars worth of compute
2021-02-28 07:38:09 +0100 <boxscape> s/on/no
2021-02-28 07:41:33 +0100 <hyiltiz> http://ix.io/2Rah seems like it needs more code to be able to innovate
2021-02-28 07:42:41 +0100 <hyiltiz> I once fed it the debian and BSD handbook trying to learn more about the Unix/Linux sysadmin stuff
2021-02-28 07:43:24 +0100 <hyiltiz> and fed GRRM's ASOIAF series as I couldn't wait for the Winds of Winter
2021-02-28 07:43:55 +0100 <hyiltiz> cant recall if I learned anything new tho
2021-02-28 07:47:36 +0100kam1(~kam1@5.125.126.175) (Ping timeout: 240 seconds)
2021-02-28 07:50:15 +0100 <koz_> Keep feeding it until we get Robo-Edward.
2021-02-28 07:51:10 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2021-02-28 07:51:39 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:d719:7006:9537:bdbe:8690)
2021-02-28 07:51:39 +0100 <boxscape> The kmettinator
2021-02-28 07:55:39 +0100gioyik(~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.0)
2021-02-28 08:03:33 +0100xff0x(~xff0x@2001:1a81:5349:9200:adc4:69eb:c86a:66d9) (Ping timeout: 272 seconds)
2021-02-28 08:04:01 +0100xff0x(~xff0x@2001:1a81:5349:9200:616f:f9e7:ca53:6ba3)
2021-02-28 08:05:02 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:d719:7006:9537:bdbe:8690) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 08:12:04 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 08:23:23 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 245 seconds)
2021-02-28 08:23:55 +0100ski. o O ( "<vixey> this is fabricatino" )
2021-02-28 08:23:58 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-02-28 08:26:57 +0100darjeeling_(~darjeelin@122.245.218.150) (Ping timeout: 264 seconds)
2021-02-28 08:32:40 +0100jpds_(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-02-28 08:33:13 +0100jpds_(~jpds@gateway/tor-sasl/jpds)
2021-02-28 08:33:28 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
2021-02-28 08:34:06 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
2021-02-28 08:39:39 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 245 seconds)
2021-02-28 08:41:10 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:d719:a529:2602:758:74a6)
2021-02-28 08:42:17 +0100darjeeling_(~darjeelin@122.245.218.150)
2021-02-28 08:46:19 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-02-28 08:48:47 +0100heatsink(~heatsink@2600:1700:bef1:5e10:44cd:7ec7:332d:f0ab) (Remote host closed the connection)
2021-02-28 08:49:24 +0100kit(~kit@144.138.56.36) (Quit: leaving)
2021-02-28 08:52:44 +0100egp_(~egp_@2.95.74.168) (Remote host closed the connection)
2021-02-28 08:52:44 +0100egp__(~egp_@2.95.74.168) (Remote host closed the connection)
2021-02-28 08:54:44 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 08:55:52 +0100kit(~kit@144.138.56.36)
2021-02-28 08:57:04 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2021-02-28 08:58:09 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2021-02-28 08:58:44 +0100kit(~kit@144.138.56.36) (Client Quit)
2021-02-28 08:59:39 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
2021-02-28 09:03:19 +0100toorevitimirp(~tooreviti@117.182.182.60)
2021-02-28 09:03:22 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 09:04:34 +0100kit(~kit@144.138.56.36)
2021-02-28 09:05:30 +0100kit(~kit@144.138.56.36) (Client Quit)
2021-02-28 09:07:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-02-28 09:08:44 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 09:11:52 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 09:13:04 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 09:13:17 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 09:21:25 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 09:22:06 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 09:23:26 +0100Varis(~Tadas@unaffiliated/varis)
2021-02-28 09:26:33 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 260 seconds)
2021-02-28 09:26:39 +0100sablib(~sablib@59.173.155.233) (Ping timeout: 260 seconds)
2021-02-28 09:27:58 +0100MKirisame(~MarisaKir@c-98-237-240-11.hsd1.wa.comcast.net)
2021-02-28 09:28:30 +0100sablib(~sablib@59.173.152.160)
2021-02-28 09:28:56 +0100redmp(~redmp@172.58.35.206) (Ping timeout: 240 seconds)
2021-02-28 09:37:07 +0100forgottenone(~forgotten@176.42.27.254)
2021-02-28 09:40:09 +0100Svet_(~svet@90.200.185.163) (Ping timeout: 264 seconds)
2021-02-28 09:42:08 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 09:44:28 +0100I440r(~I440r@217.146.82.202) (Remote host closed the connection)
2021-02-28 09:46:36 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-02-28 09:48:14 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-02-28 09:48:33 +0100mananamenos_(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net)
2021-02-28 09:49:11 +0100heatsink(~heatsink@2600:1700:bef1:5e10:44cd:7ec7:332d:f0ab)
2021-02-28 09:50:03 +0100mhw0(~mhw0@213.230.119.134)
2021-02-28 09:54:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:44cd:7ec7:332d:f0ab) (Ping timeout: 264 seconds)
2021-02-28 09:55:47 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 09:56:40 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-kykpxwvfcawrxiyd) (Quit: Connection closed for inactivity)
2021-02-28 09:56:55 +0100xff0x(~xff0x@2001:1a81:5349:9200:616f:f9e7:ca53:6ba3) (Ping timeout: 272 seconds)
2021-02-28 09:57:06 +0100James_F1(~James_F@139.28.218.148)
2021-02-28 09:57:14 +0100xff0x(~xff0x@2001:1a81:5349:9200:2ca8:4ef3:12c9:ba81)
2021-02-28 09:57:57 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 09:58:36 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 09:59:28 +0100carlomagno(~cararell@148.87.23.6) (Quit: Leaving.)
2021-02-28 09:59:56 +0100darjeeling_(~darjeelin@122.245.218.150) (Ping timeout: 240 seconds)
2021-02-28 10:00:59 +0100mhw0(~mhw0@213.230.119.134) ("leaving")
2021-02-28 10:01:18 +0100kuribas(~user@ptr-25vy0i8a0npfg024kq6.18120a2.ip6.access.telenet.be)
2021-02-28 10:01:37 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 258 seconds)
2021-02-28 10:02:20 +0100inerkick(~rohit@2402:8100:2828:ff35:c014:d64c:1ae3:c0a0)
2021-02-28 10:02:56 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 240 seconds)
2021-02-28 10:03:02 +0100Svet_(~svet@90.200.185.163)
2021-02-28 10:03:19 +0100mananamenos(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net)
2021-02-28 10:06:08 +0100egp_(~egp_@2.95.74.168)
2021-02-28 10:06:11 +0100egp__(~egp_@2.95.74.168)
2021-02-28 10:06:49 +0100mananamenos_(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net) (Ping timeout: 260 seconds)
2021-02-28 10:08:11 +0100tanuki_(~quassel@173.168.154.189)
2021-02-28 10:08:34 +0100Svet_(~svet@90.200.185.163) (Ping timeout: 260 seconds)
2021-02-28 10:09:17 +0100hendursa1(~weechat@gateway/tor-sasl/hendursaga)
2021-02-28 10:10:02 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 10:11:06 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga) (Ping timeout: 268 seconds)
2021-02-28 10:11:38 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2021-02-28 10:11:59 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 10:12:35 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 10:13:46 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2021-02-28 10:14:10 +0100darjeeling_(~darjeelin@122.245.218.150)
2021-02-28 10:14:20 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-02-28 10:17:11 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 272 seconds)
2021-02-28 10:17:52 +0100son0p(~son0p@181.58.39.182)
2021-02-28 10:22:22 +0100Svet_(~svet@90.200.185.163)
2021-02-28 10:23:33 +0100mananamenos_(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net)
2021-02-28 10:23:43 +0100drbean_(~drbean@TC210-63-209-142.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin2 - https://znc.in)
2021-02-28 10:24:19 +0100mananamenos(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net) (Ping timeout: 260 seconds)
2021-02-28 10:31:02 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2021-02-28 10:32:11 +0100 <edwardk> boxscape: the problem with producing clones of me is that i have to feed them, and we still only have the one tax id, so it raises some serious eyebrows when we're forced to explain things to the IRS. GPT-3 me seems easier on that front, but seems even more dubious from an AI safety and alignment perspective.
2021-02-28 10:32:43 +0100 <boxscape> those are some good points
2021-02-28 10:34:47 +0100zaquest(~notzaques@5.128.210.178)
2021-02-28 10:34:47 +0100 <edwardk> a friend of mine posted this to facebook https://www.irccloud.com/pastebin/dZzR4f7u/clones.txt
2021-02-28 10:36:06 +0100 <edwardk> My response was that the number I'd pick would be very large to the point where I'll be calling on government assistance to deal with the refugee problem that I'd be creating, but that I didn't suspect it be quite to the point of overwhelming the western seaboard.
2021-02-28 10:36:26 +0100 <boxscape> tempted to choose a number high enough that they don't fit into the observable universe to check if I can break the system
2021-02-28 10:37:08 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 245 seconds)
2021-02-28 10:37:09 +0100Guest77245(~textual@zrcout.mskcc.org) (Ping timeout: 264 seconds)
2021-02-28 10:37:27 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 272 seconds)
2021-02-28 10:37:49 +0100 <edwardk> from the standpoint of many decision theories that seems pretty suboptimal as you'd be condemning a near total fraction of you to die.
2021-02-28 10:38:08 +0100 <boxscape> I admit it's more of a "fun" choice than a smart choice
2021-02-28 10:38:51 +0100inerkick(~rohit@2402:8100:2828:ff35:c014:d64c:1ae3:c0a0) (Quit: Leaving)
2021-02-28 10:40:48 +0100 <boxscape> edwardk though I'm still working out on whether or not I should care about versions of myself ceasing to exist
2021-02-28 10:40:57 +0100 <boxscape> s/on//
2021-02-28 10:41:50 +0100 <boxscape> s/versions/instantiations
2021-02-28 10:42:15 +0100m0rphism1(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2021-02-28 10:42:21 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2021-02-28 10:42:41 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 10:43:29 +0100 <edwardk> well, if you want to play a simple first order version of the game, assume you could instantiate another copy of yourself, but one of you gets executed, but you have a 50% chance of "you" being the copy, do you care? delay the execution 10 years so it takes with it 10 years of memories, do you care then?
2021-02-28 10:44:12 +0100 <boxscape> My current best guess is I wouldn't care in the first case, but would in the second case
2021-02-28 10:44:42 +0100 <edwardk> caring about this tends to bite folks who are looking for consistent ethical frameworks harder, folks who care about utilitarianism and variants and the like.
2021-02-28 10:45:18 +0100 <boxscape> I've been meaning to read Bostrom's paper about infinities in ethics because that seems where this tends to break down, but haven't gotten around to it
2021-02-28 10:45:25 +0100 <boxscape> s/seems/seems to be
2021-02-28 10:45:27 +0100ixlun(~user@213.205.241.12)
2021-02-28 10:45:30 +0100 <edwardk> fair
2021-02-28 10:45:39 +0100catt(~r@31.127.31.99)
2021-02-28 10:46:05 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2021-02-28 10:47:00 +0100 <edwardk> i don't personally tend to think it takes infinities for that to come up, a "Heat Signature" grade teleporter malfunction seems to hit all the same salient points
2021-02-28 10:47:32 +0100 <boxscape> hm I'm not sure what that means
2021-02-28 10:47:47 +0100 <edwardk> (Heat Signature the game has an npc who is a clone of herself created by a teleporter accident, who was contractually/culturally obligated to off either her original self or the cloned copy, but then reneged.)
2021-02-28 10:48:04 +0100 <boxscape> I see
2021-02-28 10:48:49 +0100mananamenos_(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net) (Ping timeout: 260 seconds)
2021-02-28 10:49:29 +0100edwardkshould go to bed or write more code. not sure which
2021-02-28 10:49:51 +0100 <ixlun> Hi all, if I've got `data Foo = Foo {num :: String, val :: Int, map :: Map String Int}' and I want to insert a new value into the map, is there a short hand I can use for constructing a new Foo with the new map returned from Map.insert?
2021-02-28 10:50:19 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 10:50:41 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 10:51:04 +0100 <edwardk> ixlun: foo = Foo "hello" mempty; bar = foo { map = Map.insert 1 2 (map foo) } -- is the common way to do this. you can shave a little bit by using RecordWildcards but they aren't popular. lenses is another way to make it more concise
2021-02-28 10:51:36 +0100 <edwardk> er foo = Foo "hello" 14 mempty -- missed your 'val' member
2021-02-28 10:52:31 +0100 <ixlun> Ah, didn't know about the `bar = foo {map = ... }' syntax
2021-02-28 10:52:50 +0100 <edwardk> with lenses you can get that down to something like foo & map.at 1 ?~ 2
2021-02-28 10:53:22 +0100 <ixlun> I remember starting to take a look at lenses and I got scared!
2021-02-28 10:53:48 +0100 <edwardk> there are some pretty gentle introductions, and a bunch of folks here and over in #haskell-lens happy to answer questions about them
2021-02-28 10:54:18 +0100knupfer(~Thunderbi@200116b82cc9eb004cd887aa2955feba.dip.versatel-1u1.de)
2021-02-28 10:54:26 +0100 <edwardk> unlike most haskell i recommend trying to get a feel for them from examples rather than studying the types super hard. then once you have the intuion the types peel themselves apart much easier when you go to try to figure out how they are actually implemented
2021-02-28 10:54:37 +0100 <edwardk> otherwise you spend a lot of time staring a trees and not seeing the forest
2021-02-28 10:55:09 +0100mananamenos(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net)
2021-02-28 10:55:14 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Ping timeout: 264 seconds)
2021-02-28 10:55:37 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 10:55:41 +0100 <ixlun> to be honest, that's kind of how I got to grips with applicative syntax. I brushed up on the types but it wasn't until I used parser combinators that I really got it.
2021-02-28 10:56:03 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 258 seconds)
2021-02-28 10:56:40 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-02-28 10:57:03 +0100 <ixlun> Just one question, the brace syntax that you used above, do I need a language extension for that?
2021-02-28 10:57:49 +0100 <tomsmeding> that syntax is ancient haskell :)
2021-02-28 10:58:52 +0100 <ixlun> Cool, thanks :)
2021-02-28 10:58:53 +0100 <edwardk> ixlun: that has been around since dirt
2021-02-28 10:59:20 +0100 <hyiltiz> cd
2021-02-28 10:59:53 +0100tomsmedingthinks somebody went home
2021-02-28 11:00:07 +0100 <edwardk> there's no place like $HOME
2021-02-28 11:00:16 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 11:02:45 +0100mayleesia(4d0db908@dynamic-077-013-185-008.77.13.pool.telefonica.de)
2021-02-28 11:03:41 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2021-02-28 11:04:52 +0100 <edwardk> hyiltiz: i could maybe scrape the content code out of comonad.com, but i think john wiegley already has a script for doing that.
2021-02-28 11:05:09 +0100mananamenos(~mananamen@193.red-88-11-66.dynamicip.rima-tde.net) (Ping timeout: 260 seconds)
2021-02-28 11:05:40 +0100 <hyiltiz> yeah i accidentally tried to go home in #haskell
2021-02-28 11:05:48 +0100 <hyiltiz> but #haskell is home so that is good
2021-02-28 11:06:22 +0100 <hyiltiz> edwardk: don't wanna bother u with that; if u dont have anything ready to dump at me, I can look up john wiegley's script
2021-02-28 11:07:04 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Read error: Connection timed out)
2021-02-28 11:07:34 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2021-02-28 11:07:36 +0100 <edwardk> ai dungeon's dragon model managed to perform a pretty convincing impression of me a few times
2021-02-28 11:09:07 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:d719:a529:2602:758:74a6) (Quit: Textual IRC Client: www.textualapp.com)
2021-02-28 11:10:03 +0100m4lvin(~m4lvin@w4eg.de) ()
2021-02-28 11:12:05 +0100 <edwardk> https://gist.github.com/ekmett/38513c7894e2d28863f8202acb1a3447 https://gist.github.com/ekmett/1b9ad5c361dfd1f23887ce1ab11a23fe -- it did a better job of staying in genre in the former
2021-02-28 11:12:44 +0100 <kuribas> ixlun: you can also write `set (map . at 1) 2 foo`, which I find more readable that the operators.
2021-02-28 11:13:56 +0100 <kuribas> There is a logic to the way lens operators are constructed, but I still find them ugly...
2021-02-28 11:14:11 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 272 seconds)
2021-02-28 11:14:36 +0100 <hyiltiz> those conversations look really fun
2021-02-28 11:14:56 +0100Svet_(~svet@90.200.185.163) (Ping timeout: 240 seconds)
2021-02-28 11:16:04 +0100 <kuribas> ixlun: I also find the documentation for micro-lens (which is lens-compatible) a bit more beginner-friendly.
2021-02-28 11:16:43 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-02-28 11:17:00 +0100 <hyiltiz-M> Or optics
2021-02-28 11:17:11 +0100 <olligobber> when I do `cabal repl' it loads one of my 16 module's functions, is there a way of not loading any?
2021-02-28 11:17:35 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
2021-02-28 11:18:25 +0100 <boxscape> edwardk were the "Edward:" parts in the first one generated as well or only the "Eliezer:" parts?
2021-02-28 11:20:18 +0100 <olligobber> ah, found this: https://github.com/haskell/cabal/issues/5374
2021-02-28 11:20:52 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2021-02-28 11:21:12 +0100 <edwardk> everything below the -- End Prompt is generated
2021-02-28 11:21:20 +0100 <boxscape> Huh, in that case I'm really impressed it came up with "I thought you didn't believe in ascribing zero or one hundred percent odds to anything?" and "So how many significant digits are there in that one hundred percent estimate?"
2021-02-28 11:21:31 +0100 <edwardk> both of them shocked me
2021-02-28 11:21:46 +0100 <edwardk> it does seem to have read a lot of yudkowsky though
2021-02-28 11:21:55 +0100 <edwardk> so i'm not surprised it put some of his style of words into my mouth
2021-02-28 11:22:03 +0100 <boxscape> hm, makes sense
2021-02-28 11:22:54 +0100 <edwardk> another example of confusing personalities between characters is this one https://gist.github.com/ekmett/6cd785180659e3c2f9284e5128c11025 it makes him out to be much more of a bad-ass than he is in real life ;)
2021-02-28 11:24:46 +0100 <olligobber> maybe I'll just use stack instead of cabal
2021-02-28 11:25:32 +0100 <edwardk> olligobber: in theory you can set you a .ghci file, but iirc cabal repl loads the first (or is it the last) module in the library
2021-02-28 11:26:25 +0100 <edwardk> olligobber: i guess you could add a second sublibrary with no modules and load it instead?
2021-02-28 11:27:28 +0100 <olligobber> it loads the first
2021-02-28 11:27:34 +0100 <olligobber> that seems hacky
2021-02-28 11:29:10 +0100 <edwardk> olligobber: i think the mindset is if you list things in alphabetical order you'll tend to place Foo at the top of the list before Foo.Bar Foo.Baz, etc.
2021-02-28 11:29:22 +0100 <edwardk> so it'll load a nice top level module
2021-02-28 11:29:36 +0100 <olligobber> I don't want it to load any module...
2021-02-28 11:29:51 +0100 <olligobber> hmm, stack won't load validated-literals
2021-02-28 11:29:54 +0100 <edwardk> i understand that. just giving a general sense of what it picks what it picks
2021-02-28 11:33:18 +0100toorevitimirp(~tooreviti@117.182.182.60) (Remote host closed the connection)
2021-02-28 11:33:46 +0100todda7(~torstein@athedsl-258913.home.otenet.gr) (Read error: Connection reset by peer)
2021-02-28 11:33:58 +0100 <olligobber> ugh, best solution seems to be a dummy Empty module
2021-02-28 11:33:59 +0100 <olligobber> :(
2021-02-28 11:34:02 +0100todda7(~torstein@athedsl-258913.home.otenet.gr)
2021-02-28 11:34:12 +0100average(uid473595@gateway/web/irccloud.com/x-fxgddkvvlaaxcpgp)
2021-02-28 11:34:51 +0100toorevitimirp(~tooreviti@117.182.182.60)
2021-02-28 11:35:29 +0100 <edwardk> adding another package to your cabal project that depends on the project you want the guts of but which doesn't export any modules?
2021-02-28 11:35:46 +0100Ishutin_(~ishutin@80-95-70-202.pool.digikabel.hu)
2021-02-28 11:35:46 +0100 <edwardk> then cabal repl yourdummyproject ?
2021-02-28 11:35:57 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 11:39:13 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-ssveckbgtfjmjehe) (Quit: Connection closed for inactivity)
2021-02-28 11:39:37 +0100Ishutin(~ishutin@92-249-193-15.pool.digikabel.hu) (Ping timeout: 272 seconds)
2021-02-28 11:39:47 +0100daffy(01c8aa98@1.200.170.152)
2021-02-28 11:40:50 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 264 seconds)
2021-02-28 11:44:03 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:cc64:29af:c80:536f)
2021-02-28 11:44:04 +0100kuribas(~user@ptr-25vy0i8a0npfg024kq6.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2021-02-28 11:48:11 +0100fendor(~fendor@078132053193.public.t-mobile.at)
2021-02-28 11:48:33 +0100 <tomsmeding> olligobber: you know that ':m' will unfocus all modules?
2021-02-28 11:48:56 +0100rdivyanshu(uid322626@gateway/web/irccloud.com/x-qtewvwtwengjftbg)
2021-02-28 11:50:00 +0100 <olligobber> tomsmeding, a way to do `:m' automatically after cabal loads the modules would be good, but I don't think it's possible
2021-02-28 11:51:21 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 11:51:49 +0100todda7(~torstein@athedsl-258913.home.otenet.gr) (Ping timeout: 260 seconds)
2021-02-28 11:54:06 +0100 <tomsmeding> olligobber: it doesn't seem so; you can inject additional ghci startup scripts, but those run before the modules are loaded
2021-02-28 11:55:46 +0100 <olligobber> yeah :(
2021-02-28 11:55:50 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Ping timeout: 264 seconds)
2021-02-28 11:57:36 +0100 <tomsmeding> olligobber: for a nice hack, you can take the command line that cabal uses to start ghci, remove all the modules from it, and then pass a -ghci-script that :add's those modules and then does :m
2021-02-28 11:57:44 +0100 <tomsmeding> that seems to work for me on a simple project
2021-02-28 11:57:51 +0100 <daffy> what does the error message "ambiguous type variable" mean? i using a function that is supposed to output four types, and the actual output seems to contain "Any" as one of the types. I'm assuming the "Any" type is where the ambiguity is coming from but I can't tell why it's one of the types
2021-02-28 12:08:37 +0100 <olligobber> so in my .cabal file, I have an executable that includes the library in the build-depends, and the library includes a bunch of things in its build-depends, but when it builds the executable it doesn't have the things in the library's build-depends
2021-02-28 12:10:47 +0100todda7(~torstein@athedsl-258913.home.otenet.gr)
2021-02-28 12:11:24 +0100kiwi_3697(51f28de3@gateway/web/cgi-irc/kiwiirc.com/ip.81.242.141.227)
2021-02-28 12:12:32 +0100Franciman(~francesco@host-82-49-79-189.retail.telecomitalia.it)
2021-02-28 12:13:42 +0100kiwi_3697(51f28de3@gateway/web/cgi-irc/kiwiirc.com/ip.81.242.141.227) ()
2021-02-28 12:14:33 +0100 <boxscape> daffy "ambiguous type variable" means there is not enough context to determine how a type variable should be instantiated. For example, in `read :: Read a => String -> a`, `a` is a type variable, and if you try to just do `read "42"` without context, you'll get such an error because it doesn't know what `a` should be. `Any` is a special type that
2021-02-28 12:14:33 +0100 <boxscape> ghc uses in certain contexts to instantiate type variables if it doesn't know how else it should instantiate them - but Any should be a consequence, not the source of the issue here, I would think.
2021-02-28 12:14:52 +0100 <daffy> hmmm
2021-02-28 12:15:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 12:15:10 +0100 <daffy> i see
2021-02-28 12:15:18 +0100psutcliffe(~psutcliff@2a00:801:3f2:4b56:e93e:1663:ff0c:6c42)
2021-02-28 12:17:03 +0100 <boxscape> daffy feel free to post a link to code if you need more specific help
2021-02-28 12:17:16 +0100 <xsperry> if you pass the result of read "42" to some function, though, it will use the type of the argument to that function to determine what read should return
2021-02-28 12:18:48 +0100 <daffy> I'm using the function fromLists from hip, and I'm passing it something of type [[Pixel Y Double]].
2021-02-28 12:18:59 +0100 <daffy> fromLists :: forall arr cs e. Array arr cs e => [[Pixel cs e]] -> Image arr cs e
2021-02-28 12:19:06 +0100 <daffy> this is the type of fromLists
2021-02-28 12:19:36 +0100 <daffy> _ :: [[Pixel Y Double]] -> Image Any Y Double  and i believe this is the type of the variable I'm storing the result of fromLists to
2021-02-28 12:19:49 +0100todda7(~torstein@athedsl-258913.home.otenet.gr) (Ping timeout: 260 seconds)
2021-02-28 12:21:00 +0100 <boxscape> hm so it doesn't know what `arr` should be
2021-02-28 12:21:18 +0100 <daffy> which arr is it talking about? I'm a bit confused about the type signature
2021-02-28 12:24:55 +0100 <boxscape> I haven't used hip unfortunately so I'm not 100% sure how it works, it looks like there's a BaseArray class which has instances for various array types like `VU` (unboxed vectors) and others, and this is what `arr` should be filled with as well
2021-02-28 12:25:06 +0100 <boxscape> in Image
2021-02-28 12:25:13 +0100 <boxscape> 's argument
2021-02-28 12:26:26 +0100 <boxscape> daffy can you try adding a type signature `[[Pixel Y Double]] -> Image VU Y Double`?
2021-02-28 12:27:22 +0100 <boxscape> basically arr determines which underlying array representation you use
2021-02-28 12:27:37 +0100 <daffy> when I read the image originally i specific VS
2021-02-28 12:27:44 +0100 <daffy> as the array representation
2021-02-28 12:27:49 +0100 <daffy> *specified
2021-02-28 12:27:50 +0100 <boxscape> ah, okay, in that case use VS
2021-02-28 12:28:25 +0100 <daffy> the type signature right now is IO (Inte.Image GHC.Types.Any Y Double)  though
2021-02-28 12:28:29 +0100 <daffy> I'm doing this in main
2021-02-28 12:28:33 +0100 <daffy> and the function is in a do block
2021-02-28 12:29:23 +0100 <boxscape> in that case, can you try IO (Image VS Y Double)?
2021-02-28 12:29:34 +0100 <boxscape> though I'm not sure why it would be "Inte.Image"
2021-02-28 12:29:58 +0100__monty__(~toonn@unaffiliated/toonn)
2021-02-28 12:30:20 +0100 <daffy> oh Inte is just an alias for one of the packages
2021-02-28 12:30:26 +0100 <boxscape> ah, that makes sense
2021-02-28 12:30:40 +0100 <olligobber> cabal is such a pain
2021-02-28 12:32:03 +0100 <[exa]> olligobber: if I got your previous message right, you'd expect that dependencies are imported transitively?
2021-02-28 12:32:15 +0100 <[exa]> s/imported/exposed/
2021-02-28 12:32:27 +0100 <olligobber> yeah
2021-02-28 12:32:41 +0100 <olligobber> if a needs b and b needs c, then a needs c, right?
2021-02-28 12:33:20 +0100 <[exa]> yeah, and the package is not getting installed for you?
2021-02-28 12:33:32 +0100 <[exa]> ie. the middle library compilation dies with not having a dependency?
2021-02-28 12:33:33 +0100 <olligobber> I'll share my .cabal and the error
2021-02-28 12:33:41 +0100 <olligobber> but yeah, that's what's happening
2021-02-28 12:34:09 +0100 <daffy> boxscape it worked
2021-02-28 12:34:42 +0100 <daffy> so the problem was that i had to specify what arr?
2021-02-28 12:34:48 +0100 <olligobber> https://gist.github.com/olligobber/6ba9cfba3953f7320eb350db621b16fb
2021-02-28 12:35:03 +0100 <boxscape> daffy: nice. I can't really tell you without more context why it didn't know what that variable should be, but generally speaking you can always get rid of "ambiguous type variable" errors by adding type signatures
2021-02-28 12:35:20 +0100 <daffy> ah, ok
2021-02-28 12:35:38 +0100 <daffy> so are the type signatures automatically generated by vscode no good?
2021-02-28 12:35:52 +0100 <boxscape> daffy ah, the "Any" was generated by VSCode?
2021-02-28 12:36:34 +0100 <daffy> uhhh no the the "Any" was when I hovered over the function
2021-02-28 12:36:49 +0100 <daffy> and it said it had Any as one of the types
2021-02-28 12:37:08 +0100 <daffy> IO (Inte.Image GHC.Types.Any Y Double) was what was generated by vscode
2021-02-28 12:38:20 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139)
2021-02-28 12:39:15 +0100dsrt^(dsrt@ip98-184-89-2.mc.at.cox.net) ()
2021-02-28 12:39:39 +0100 <[exa]> olligobber: well so it's thinking that you want to import the library file as a source of the executable
2021-02-28 12:39:39 +0100 <boxscape> daffy I would guess that VSCode should generally produce decent type signatures, though I haven't tried it. In this particular case though it's unhelpful, because it also doesn't know how to properly fill the ambiguous type variable.
2021-02-28 12:40:03 +0100 <xsperry> do you get the same type in ghci with your old code?
2021-02-28 12:40:12 +0100 <[exa]> olligobber: which is kinda hard to explain to the compiler. Suggest separating src/ and lib/ ?
2021-02-28 12:40:27 +0100vs^(vs@ip98-184-89-2.mc.at.cox.net)
2021-02-28 12:40:30 +0100 <olligobber> [exa], use src for the executables and lib for the library?
2021-02-28 12:40:32 +0100 <boxscape> xsperry keep in mind that this is inside an IO block so not trivial to ask for a type in ghci
2021-02-28 12:40:55 +0100srk(~sorki@gateway/tor-sasl/sorki) (Remote host closed the connection)
2021-02-28 12:40:55 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Remote host closed the connection)
2021-02-28 12:41:00 +0100 <xsperry> type holes would work
2021-02-28 12:41:06 +0100 <xsperry> typed*
2021-02-28 12:41:09 +0100 <[exa]> olligobber: yeah. Just to make this perfectly unambiguous for the downstream compiler
2021-02-28 12:41:10 +0100srk(~sorki@gateway/tor-sasl/sorki)
2021-02-28 12:41:15 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2021-02-28 12:41:53 +0100daffy80(01c8aa98@1.200.170.152)
2021-02-28 12:41:59 +0100 <[exa]> unfortunately the `import` statements cannot easily distinguish between external library and local file
2021-02-28 12:42:03 +0100 <daffy80> boxscape ah okay I see
2021-02-28 12:42:04 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 12:42:08 +0100 <olligobber> oh I see
2021-02-28 12:42:56 +0100 <[exa]> olligobber: to fix that, cabal would need to pass explicit file lists of files that should not be touched in the build, which becomes rather clumsy with growing projects
2021-02-28 12:43:18 +0100 <olligobber> yay it compiled
2021-02-28 12:43:40 +0100 <olligobber> though my ghc-options got ignored...
2021-02-28 12:44:46 +0100 <daffy> boxscape if I wanted to display the image, I would have to do in a separate function? because displayImage outputs type IO() but that doesn't match the type signature i added
2021-02-28 12:45:05 +0100cartwright(~chatting@gateway/tor-sasl/cantstanya) (Remote host closed the connection)
2021-02-28 12:46:18 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 245 seconds)
2021-02-28 12:46:24 +0100 <[exa]> olligobber: actually I never used shared options like this so cannot tell (blind suggestion: bump cabal req version to one that supports it)
2021-02-28 12:47:04 +0100 <[exa]> `common` is supported only since 2.2
2021-02-28 12:47:23 +0100 <boxscape> daffy you should be able to do it in the same function. displayImage has type `Image arr cs e -> IO ()` I'm guessing?
2021-02-28 12:47:26 +0100cartwright(~chatting@gateway/tor-sasl/cantstanya)
2021-02-28 12:47:38 +0100 <daffy80> yessir
2021-02-28 12:48:17 +0100 <olligobber> [exa], ah, ty
2021-02-28 12:48:54 +0100 <[exa]> olligobber: anyway, packaging is hard and the amount of surprise is often surprising.
2021-02-28 12:49:54 +0100 <boxscape> daffy80 and you want this function you're in to return `IO (Image VS Y Double)`?
2021-02-28 12:50:33 +0100 <daffy80> yeap, the same type that I read it as
2021-02-28 12:52:23 +0100 <boxscape> daffy the last line in your do block should be a value of that type then, so if you want to display it first, you can write `do <first few lines> ioImg <- lastLine; displayImage lastLine; return lastLine`
2021-02-28 12:52:27 +0100James_F1(~James_F@139.28.218.148) (Remote host closed the connection)
2021-02-28 12:52:29 +0100 <boxscape> where semicolons are newlines
2021-02-28 12:52:58 +0100 <boxscape> ehh
2021-02-28 12:52:59 +0100 <boxscape> wait
2021-02-28 12:53:12 +0100 <boxscape> `do <first few lines> img <- lastLine; displayImage img; return lastLine`
2021-02-28 12:53:18 +0100 <boxscape> ^ should have been this daffy80
2021-02-28 12:53:42 +0100daffy(01c8aa98@1.200.170.152) (Ping timeout: 240 seconds)
2021-02-28 12:54:03 +0100 <boxscape> do let me know if that's not a comprehensible way of sharing code
2021-02-28 12:54:29 +0100 <daffy80> sorry what is lastLine?
2021-02-28 12:54:46 +0100 <boxscape> daffy80 just referring to the last line of your current do block in that function
2021-02-28 12:54:52 +0100 <daffy80> oh haha
2021-02-28 12:55:07 +0100 <boxscape> daffy80 oh sorry it's still wrong
2021-02-28 12:55:15 +0100 <boxscape> `do <first few lines> img <- lastLine; displayImage img; return img`
2021-02-28 12:55:20 +0100 <boxscape> should have been this..
2021-02-28 12:56:15 +0100 <daffy80> Ahh okay
2021-02-28 12:56:30 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 12:56:31 +0100 <daffy80> Do I need to change the type signature accordingly?
2021-02-28 12:56:41 +0100 <daffy80> Because I'm outputting something different
2021-02-28 12:57:51 +0100 <boxscape> daffy80 you shouldn't have to - the type of displayImage is different, but if the last line is `return img`, that's what the type of that function is (the type of a do block is always the type of the last line). `<-` unwraps it from `IO` and `return` rewraps `img` into IO, so the type ought to be the same as before
2021-02-28 12:57:55 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2021-02-28 12:59:32 +0100 <daffy80> I meant like before when I was working on getting fromList to work, I changed the type signature , do I keep that?
2021-02-28 12:59:57 +0100 <boxscape> daffy80 if my mental image of what your code looks like is correct then yes, you keep that
2021-02-28 13:00:16 +0100 <daffy80> ok I see
2021-02-28 13:00:53 +0100 <daffy80> So <- allows you to extract something from IO?
2021-02-28 13:01:08 +0100 <daffy80> But when the do block ends it still outputs as IO?
2021-02-28 13:01:35 +0100sphalerite(~sphalerit@NixOS/user/lheckemann) (Quit: updates!)
2021-02-28 13:01:45 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 264 seconds)
2021-02-28 13:02:49 +0100 <boxscape> daffy80 technically <- is syntactic sugar for the >>= function, but you'll learn about that when you learn about monads. The type of an IO do block is always `IO (something)`, but inside the IO block, you can "get rid" of the IO wrapping with `<-`. But the type of the last line has to be `IO (something)`, so in this case we have to use the `return`
2021-02-28 13:02:49 +0100 <boxscape> function to wrap it back into IO so the type is correct.
2021-02-28 13:03:17 +0100 <boxscape> (to be clear, it has very little to do with the `return` keyword in other languages)
2021-02-28 13:03:56 +0100 <daffy80> oh
2021-02-28 13:04:02 +0100kritzefitz(~kritzefit@212.86.56.80)
2021-02-28 13:04:12 +0100 <daffy80> Yeah I've been treating <- as an assignment operator
2021-02-28 13:04:42 +0100 <boxscape> it is meant to be reminiscent of that though it works fairly differently
2021-02-28 13:05:24 +0100 <boxscape> do-blocks are meant to look like imperative code, hence also the choice of the `return` name
2021-02-28 13:05:38 +0100 <daffy80> I see
2021-02-28 13:05:48 +0100int80h(uid148779@gateway/web/irccloud.com/x-xjmwrihbawesmufs)
2021-02-28 13:06:57 +0100 <daffy80> what is the difference between = and <- then? I guess you can use <- to work in the IO monad while = doesn't allow you to?
2021-02-28 13:07:47 +0100 <boxscape> you can use `let x = something` inside a do block. This is somewhat similar to `y <- something`, but if something has type `IO A`, then `x :: IO A` and `y :: A`.
2021-02-28 13:08:26 +0100 <daffy80> ahh ok
2021-02-28 13:08:34 +0100 <boxscape> (so if you want to pass `something` to a function that expects an A, not an IO A, you need to use <- to get access to it)
2021-02-28 13:08:47 +0100 <daffy80> I see
2021-02-28 13:08:54 +0100 <daffy80> This kind of reminds me of pointer access
2021-02-28 13:09:11 +0100 <__monty__> That's very different.
2021-02-28 13:09:11 +0100sphalerite(~sphalerit@NixOS/user/lheckemann)
2021-02-28 13:09:22 +0100 <__monty__> Think of it as passing an argument to a function.
2021-02-28 13:09:26 +0100 <hugo> 'do x <- something; return x' is equal to 'something >>= (\x -> return x)'
2021-02-28 13:09:31 +0100 <__monty__> Don't try to equate it with concepts you have from other languages.
2021-02-28 13:09:45 +0100 <xsperry> which is equal to 'something' :)
2021-02-28 13:09:48 +0100 <hugo> As people have said above, bind (>>=) unwraps the monad context from a value
2021-02-28 13:10:07 +0100 <hugo> xsperry: I know, but minimum viable example ;)
2021-02-28 13:10:18 +0100 <daffy80> and <- is just syntactic sugar for bind?
2021-02-28 13:10:41 +0100 <hugo> daffy80: yes. The entire 'do' notatation is just syntactic sugar for bind
2021-02-28 13:10:47 +0100 <boxscape> @undo do x <- something; return x
2021-02-28 13:10:47 +0100 <lambdabot> something >>= \ x -> return x
2021-02-28 13:11:31 +0100 <boxscape> @undo img <- lastLine; displayImage img; return img
2021-02-28 13:11:31 +0100 <lambdabot> <unknown>.hs:1:5:Parse error: <-
2021-02-28 13:11:37 +0100 <boxscape> @undo do img <- lastLine; displayImage img; return img
2021-02-28 13:11:37 +0100 <lambdabot> lastLine >>= \ img -> displayImage img >> return img
2021-02-28 13:11:45 +0100 <xsperry> daffy80, did you try using do and <- with monads other than IO?
2021-02-28 13:11:59 +0100xff0x(~xff0x@2001:1a81:5349:9200:2ca8:4ef3:12c9:ba81) (Ping timeout: 272 seconds)
2021-02-28 13:12:00 +0100 <daffy80> no, im just getting into haskell
2021-02-28 13:12:28 +0100xff0x(~xff0x@2001:1a81:5349:9200:2806:fad1:e222:a1c8)
2021-02-28 13:12:40 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
2021-02-28 13:12:44 +0100knupfer(~Thunderbi@200116b82cc9eb004cd887aa2955feba.dip.versatel-1u1.de) (Ping timeout: 240 seconds)
2021-02-28 13:13:23 +0100 <hugo> Try 'do Just 10; Nothing; Just 20'
2021-02-28 13:13:56 +0100 <Aleksejs> can I define types in lambdabot expressions?
2021-02-28 13:14:08 +0100 <boxscape> daffy80 are you familiar with list comprehensions?
2021-02-28 13:14:38 +0100 <boxscape> @let data Foo124 = Foo124
2021-02-28 13:14:40 +0100 <daffy80> I've heard of the term yes
2021-02-28 13:14:40 +0100 <lambdabot> Defined.
2021-02-28 13:14:52 +0100 <boxscape> ^ Aleksejs
2021-02-28 13:14:59 +0100 <Aleksejs> nice
2021-02-28 13:15:58 +0100 <daffy80> hugo in GHCi?
2021-02-28 13:16:08 +0100 <boxscape> daffy80 list comprehensions in haskell are also more or less do notation, i.e. [ x + y | x <- [1..5] , y <- [1..6] ] is the same as `do x <- [1..5]; y <- [1..6]; return x + y`, so lists are another example of where do notation can be nice
2021-02-28 13:16:31 +0100 <boxscape> IO is just the place where it comes up most often
2021-02-28 13:17:07 +0100 <daffy80> So the do notation is just for readability?
2021-02-28 13:17:12 +0100 <boxscape> yes
2021-02-28 13:17:33 +0100 <daffy80> Ahh
2021-02-28 13:17:47 +0100clog(~nef@bespin.org)
2021-02-28 13:18:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-02-28 13:19:12 +0100 <hugo> daffy80: Raw do-notations in GHCi is clumsy. Try writing the following to a file and compiling it instead:
2021-02-28 13:19:15 +0100 <hugo> main :: IO ()
2021-02-28 13:19:17 +0100 <hugo> main = putStrLn . show $ do Just 10; Nothing; Just 20
2021-02-28 13:19:21 +0100 <boxscape> Aleksejs fwiw you may find yahb more convenient which is just directly a bridge to ghci
2021-02-28 13:19:31 +0100 <boxscape> % data Foo123 = FOo123
2021-02-28 13:19:31 +0100 <yahb> boxscape:
2021-02-28 13:21:00 +0100 <daffy80> it returns Nothing when I run that hugo
2021-02-28 13:21:59 +0100 <hugo> daffy80: That's expected. I wanted to show an example of do (and bind) on a different monad than IO
2021-02-28 13:22:19 +0100Deide(~Deide@217.155.19.23)
2021-02-28 13:23:02 +0100 <xsperry> > do x <- Just 10; y <- Just 20; return (x+y)
2021-02-28 13:23:04 +0100 <lambdabot> Just 30
2021-02-28 13:23:09 +0100 <xsperry> > do x <- Nothing; y <- Just 20; return (x+y)
2021-02-28 13:23:11 +0100 <daffy80> Hmm what is Just doing?
2021-02-28 13:23:11 +0100 <lambdabot> Nothing
2021-02-28 13:23:47 +0100 <hugo> daffy80: Just and Nothing are the two instances of the Maybe datatype. Which represent the posibility of a value being there
2021-02-28 13:24:03 +0100 <xsperry> Nothing is roughly equivalent to null reference in other languages. and Just is a constructor that indicates there's a value in Maybe
2021-02-28 13:24:19 +0100 <daffy80> I see
2021-02-28 13:24:38 +0100 <daffy80> So Maybe is a monad?
2021-02-28 13:24:44 +0100 <xsperry> yes
2021-02-28 13:25:02 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-02-28 13:25:28 +0100 <xsperry> difference being that there's no all-encompassing null that is included in every type, you have to use Maybe to get null (Nothing)
2021-02-28 13:27:02 +0100SchwarzeLocke(~SchwarzeL@178.239.168.171)
2021-02-28 13:27:46 +0100int80h(uid148779@gateway/web/irccloud.com/x-xjmwrihbawesmufs) ()
2021-02-28 13:27:46 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2021-02-28 13:28:01 +0100 <daffy80> right
2021-02-28 13:28:22 +0100 <xsperry> notice the similarity to IO do block, Just 20 is Maybe a, and x <- Just 20, x is a (where a is Num a => a, some numerical type)
2021-02-28 13:30:21 +0100 <daffy80> so any instance of a Monad can be used in a do block ?
2021-02-28 13:30:33 +0100 <xsperry> yes
2021-02-28 13:31:10 +0100 <daffy80> ic ic
2021-02-28 13:31:34 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 260 seconds)
2021-02-28 13:32:52 +0100 <boxscape> (though only one Monad per do block)
2021-02-28 13:33:24 +0100 <boxscape> i.e. you can't use <- to unwrap `IO String` if the do Block is supposed to return `Maybe Int` in the end
2021-02-28 13:33:46 +0100knupfer(~Thunderbi@200116b82cc9eb0070e901fffe4f30ff.dip.versatel-1u1.de)
2021-02-28 13:34:00 +0100 <daffy80> what determines what is supposed to return ?
2021-02-28 13:34:06 +0100 <daffy80> whichever one comes first?
2021-02-28 13:34:23 +0100 <boxscape> the type of the last line is the type of the do block
2021-02-28 13:34:26 +0100knupfer(~Thunderbi@200116b82cc9eb0070e901fffe4f30ff.dip.versatel-1u1.de) (Remote host closed the connection)
2021-02-28 13:34:31 +0100 <daffy80> oh
2021-02-28 13:34:44 +0100 <boxscape> so if you write `putStrLn "hi"` as last line, it will be a IO do block
2021-02-28 13:34:51 +0100 <daffy80> Ah ok
2021-02-28 13:35:09 +0100 <hugo> For me to properly get my head around all the intricacies of bind I had to reimplement it in a different language
2021-02-28 13:35:14 +0100 <boxscape> though on the other hand if you write `line <- getLine` somewhere in the middle, it will also infer that it should be an IO do block, it'll just complain if the last line doesn't match that
2021-02-28 13:35:44 +0100 <daffy80> hugo yeah I feel like I'm thinking of everything in terms of other languages
2021-02-28 13:36:26 +0100 <daffy80> right so the main thing to remember is to  only have one monad per do block
2021-02-28 13:36:39 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 13:36:40 +0100 <hugo> daffy
2021-02-28 13:36:40 +0100 <boxscape> right
2021-02-28 13:37:52 +0100 <hugo> daffy80: reimplementing bind in a different language was mostly to avoid implementing bind in terms of bind
2021-02-28 13:38:52 +0100 <hugo> Also, the much more relaxed type system of scheme (which was what I wrote it in) allowed me to experiment with mixing types inside a do block, and got to see why it doesn't work
2021-02-28 13:40:17 +0100 <daffy80> I find the type system in haskell tough to get used to
2021-02-28 13:40:39 +0100 <boxscape> I find it so hard to go back to less strict systems at this point
2021-02-28 13:40:55 +0100 <daffy80> oh really
2021-02-28 13:41:02 +0100 <Uniaika> yeah it's a pain :/
2021-02-28 13:41:15 +0100 <daffy80> Shouldn't it go the other way
2021-02-28 13:41:24 +0100 <Uniaika> you benefit from so much without having to compromise because you also have powerful abstractions
2021-02-28 13:41:26 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 264 seconds)
2021-02-28 13:41:26 +0100ixlun(~user@213.205.241.12) (Read error: Connection reset by peer)
2021-02-28 13:41:29 +0100 <hugo> The type system can be a hindrance until you get your head around it.
2021-02-28 13:41:51 +0100 <boxscape> every time I make a silly mistake I think "-.- this wouldn't have happened with haskell"
2021-02-28 13:41:51 +0100cheater(~user@unaffiliated/cheater)
2021-02-28 13:42:12 +0100 <boxscape> (except for the silly mistakes that still coul have happened with haskell :P)
2021-02-28 13:42:15 +0100 <hugo> I only just recently learned to actually leaverage the type system to my advantage
2021-02-28 13:43:31 +0100 <daffy80> what are some of those advantages?
2021-02-28 13:45:13 +0100 <hugo> In my current project I needed to parse messages of varying type. My code more or less looks like 'decoder = F <$> decoder <*> decoder <*> decoder'
2021-02-28 13:45:36 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2021-02-28 13:45:54 +0100ixlun(~user@213.205.241.12)
2021-02-28 13:45:54 +0100 <hugo> Where each instance of decoder has a different return type. Decided by F's type
2021-02-28 13:46:33 +0100o1lo01ol1o(~o1lo01ol1@89.214.221.60)
2021-02-28 13:46:33 +0100o1lo01ol1o(~o1lo01ol1@89.214.221.60) (Client Quit)
2021-02-28 13:46:39 +0100 <Uniaika> hugo: applicative functors <3
2021-02-28 13:47:05 +0100daffy(01c8aa98@1.200.170.152)
2021-02-28 13:47:22 +0100daffy80(01c8aa98@1.200.170.152) (Quit: Connection closed)
2021-02-28 13:48:01 +0100o1lo01ol1o(~o1lo01ol1@89.214.221.60)
2021-02-28 13:49:36 +0100kam1(~kam1@5.125.126.175)
2021-02-28 13:51:38 +0100 <daffy> @boxs
2021-02-28 13:51:38 +0100 <lambdabot> Maybe you meant: docs b52s
2021-02-28 13:51:42 +0100 <daffy> oops
2021-02-28 13:51:56 +0100 <daffy> boxscape i tried your suggestion but vscode is screaming at me
2021-02-28 13:52:07 +0100 <boxscape> oh no!
2021-02-28 13:52:10 +0100 <boxscape> can you paste the code?
2021-02-28 13:52:11 +0100 <daffy> i think i misunderstood what you were saying lol
2021-02-28 13:52:24 +0100 <boxscape> on https://paste.tomsmeding.com/ or similar
2021-02-28 13:52:48 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 13:53:59 +0100 <daffy> https://paste.tomsmeding.com/GP2eJ91K
2021-02-28 13:55:10 +0100viluon(uid453725@gateway/web/irccloud.com/x-nrcpcvymghsotxnv)
2021-02-28 13:55:25 +0100 <boxscape> daffy ah, looks like you just need `return fin` instead of `return img`
2021-02-28 13:56:51 +0100 <boxscape> daffy since displayImage returns `IO ()`, the type of `img` in this case becomes `()`, and the type of `return img` is `IO ()` again, whereas the type of `fin` is `Image ...`, so `return fin` gives you `IO (Image ...)`, which is what you need
2021-02-28 13:56:56 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Ping timeout: 240 seconds)
2021-02-28 13:57:01 +0100 <daffy> it worked but how come? isn't img holding the result of displayImage
2021-02-28 13:57:11 +0100 <boxscape> indeed
2021-02-28 13:57:17 +0100 <boxscape> but you want to return the result of fromLists
2021-02-28 13:57:21 +0100 <boxscape> not the result of displayImage
2021-02-28 13:57:54 +0100 <boxscape> the useful part of displayImage is that it has a side effect (i.e. displaying the image), not that it returns something interesting
2021-02-28 13:58:49 +0100ambiso9(~ambiso@209.182.239.205)
2021-02-28 13:58:59 +0100 <boxscape> in fact, its return value doesn't contain any interesting information, since there's only one possible value that's in `()` -- that value is also called `()`. functions that have return type `IO ()` are like functions that have return type void in C or Java
2021-02-28 13:59:10 +0100 <daffy> hmm but if i'm not returning img how come the image is still displayed?
2021-02-28 13:59:31 +0100 <xsperry> in the same way putStrLn doesn't return the string it prints
2021-02-28 13:59:37 +0100 <daffy> oh wait fin itself is an image
2021-02-28 13:59:54 +0100 <daffy> oh okay i see what u mean
2021-02-28 14:01:17 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2021-02-28 14:01:29 +0100kritzefitz(~kritzefit@212.86.56.80)
2021-02-28 14:02:12 +0100 <boxscape> daffy since you're not using img you can also replace `img <- displayImage fin` with just `displayImage fin`
2021-02-28 14:02:21 +0100fendor(~fendor@078132053193.public.t-mobile.at) (Ping timeout: 264 seconds)
2021-02-28 14:02:51 +0100 <Clint> and is there a purpose in not having main :: IO () ?
2021-02-28 14:03:22 +0100 <boxscape> ah that's a good point
2021-02-28 14:04:02 +0100 <daffy> not having? or having
2021-02-28 14:04:42 +0100 <boxscape> daffy `main` typically has the type `IO ()`, since its only purpose (usually) is to perform an IO action, not to return anything
2021-02-28 14:05:17 +0100 <boxscape> daffy in your case that would mean having the last line be `displayImage fin` instead of adding `return fin` at the end
2021-02-28 14:05:44 +0100 <daffy> oh
2021-02-28 14:06:22 +0100 <boxscape> daffy though then you would have to make sure that it knows it should be using `VS` somewhere else, for example by adding the signature to `let fin = I.fromLists a :: Inte.Image I.VS Y Double`
2021-02-28 14:06:38 +0100 <infinisil> It probably would make sense for main to be `IO ExitCode`
2021-02-28 14:07:15 +0100 <xsperry> it would make average main longer though, since you want to return 0 in most cases
2021-02-28 14:07:18 +0100 <boxscape> infinisil does that work, as in, will the OS accept that as exit code?
2021-02-28 14:07:34 +0100 <infinisil> Oh no it doesn't work currently, I'm pretty sure at least
2021-02-28 14:07:38 +0100 <boxscape> I see
2021-02-28 14:07:39 +0100 <xsperry> no, return of main is ignored (except in ghci)
2021-02-28 14:08:24 +0100 <daffy> ok
2021-02-28 14:09:06 +0100 <daffy> if i'm writing to a single folder, does the forward slash go before or after the name of the folder? i've tried both but both give me errros
2021-02-28 14:09:23 +0100 <boxscape> writing what?
2021-02-28 14:09:55 +0100 <daffy> writing image to a file
2021-02-28 14:10:01 +0100 <daffy> i mean
2021-02-28 14:10:16 +0100 <daffy> yeah writing image to a file lol
2021-02-28 14:10:21 +0100 <enikar> is it possible to have a different type for main than IO ()?
2021-02-28 14:10:34 +0100 <boxscape> enikar I think `IO t` works, for any t
2021-02-28 14:11:07 +0100 <enikar> ok. That wonders me.
2021-02-28 14:11:12 +0100 <boxscape> daffy hm, in principle I would think something like "foldrName/fileName" should work, though I haven't used the hip functions
2021-02-28 14:11:44 +0100 <boxscape> enikar I'm pretty sure that's mostly just so you can use IO actions as the last line in main without having to explicitly discard the result
2021-02-28 14:11:55 +0100 <boxscape> s/IO actions/IO actions which don't have type IO ()
2021-02-28 14:19:13 +0100 <enikar> but nothing can read this result. For what is it usefull?
2021-02-28 14:21:11 +0100 <boxscape> enikar say you want to end your program with saying "press enter to exit the program" and then wait for enter to be pressed. You can do that by writing `do putStrLn "press enter"; getLine`. But the type of this is `IO String` - so you couldn't do this if the type had to be IO ()
2021-02-28 14:21:55 +0100 <daffy> oh i'm an idiot i just forgot to specify the name of the file
2021-02-28 14:22:01 +0100 <daffy> thanks boxscape for the help
2021-02-28 14:22:07 +0100 <boxscape> you're welcome
2021-02-28 14:22:55 +0100 <boxscape> enikar if it had to be IO () the last line would have to be `void getLine` instead - not a huge difference, I admit
2021-02-28 14:24:59 +0100 <xsperry> enikar, ghci can read the result. I sometimes take advantage of that (though rarely)
2021-02-28 14:25:38 +0100 <boxscape> I wonder if a haskell REPL was assumed to become a thing when the committee came up with this rule
2021-02-28 14:25:56 +0100 <boxscape> I imagine probably?
2021-02-28 14:26:11 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2021-02-28 14:28:12 +0100 <boxscape> hm can't figure out whether Miranda has a REPL
2021-02-28 14:32:32 +0100 <enikar> boxscape: I see. But for continuing the programm, IO () should also work, I bet. am I wrong? To Continue, I just call main recursively.
2021-02-28 14:32:43 +0100 <enikar> but never mind.
2021-02-28 14:32:48 +0100 <boxscape> yeah
2021-02-28 14:35:46 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-lljagtdqleuggsro)
2021-02-28 14:35:49 +0100son0p(~son0p@181.58.39.182) (Quit: leaving)
2021-02-28 14:36:16 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 268 seconds)
2021-02-28 14:38:30 +0100Varis(~Tadas@unaffiliated/varis)
2021-02-28 14:51:54 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:cc64:29af:c80:536f) (Ping timeout: 246 seconds)
2021-02-28 14:52:20 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2021-02-28 14:53:22 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 14:56:36 +0100bitmagie(~Thunderbi@200116b806dcda002112473b8db035bd.dip.versatel-1u1.de)
2021-02-28 14:57:23 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 14:58:14 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Ping timeout: 264 seconds)
2021-02-28 14:58:25 +0100soft-warm(44695313@ip68-105-83-19.sd.sd.cox.net)
2021-02-28 14:59:26 +0100hendi(uid489601@gateway/web/irccloud.com/x-cyumymliypkvjqpl)
2021-02-28 14:59:52 +0100soft-warm(44695313@ip68-105-83-19.sd.sd.cox.net) (Client Quit)
2021-02-28 15:01:04 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
2021-02-28 15:01:23 +0100dxld(~dxld@rush.pub.dxld.at) (Remote host closed the connection)
2021-02-28 15:02:34 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 15:02:54 +0100soft-warm(44695313@ip68-105-83-19.sd.sd.cox.net)
2021-02-28 15:02:56 +0100ambiso9(~ambiso@209.182.239.205) (Quit: The Lounge - https://thelounge.chat)
2021-02-28 15:03:36 +0100svet_(~svet@90.200.185.163)
2021-02-28 15:04:38 +0100ambiso9(~ambiso@209.182.239.205)
2021-02-28 15:05:17 +0100ADG1089__(~aditya@110.226.222.179)
2021-02-28 15:05:22 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr)
2021-02-28 15:05:39 +0100 <ADG1089__> anyone running haskell on arch?
2021-02-28 15:07:49 +0100forgottenone(~forgotten@176.42.27.254) (Remote host closed the connection)
2021-02-28 15:08:55 +0100forgottenone(~forgotten@176.42.27.254)
2021-02-28 15:10:48 +0100 <ADG1089__> how to automatically add extra deps based on hints from stack build?
2021-02-28 15:11:20 +0100 <int-e> ADG1089__: I've done that for a while... I recommend only using the distro compiler to compile your own
2021-02-28 15:11:43 +0100 <int-e> stack works I suppose
2021-02-28 15:12:01 +0100carlomagno(~cararell@148.87.23.10)
2021-02-28 15:12:02 +0100 <nshepperd2> step 1 of using haskell on arch is to uninstall all haskell-related arch packages
2021-02-28 15:12:07 +0100 <int-e> but then it shouyld no longer matter that you're on arch
2021-02-28 15:13:11 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 15:14:31 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 15:15:15 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 15:15:17 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 15:15:35 +0100 <ADG1089__> problem is llvm is v11 on arch, latest ghc supports v10 or 9 i think
2021-02-28 15:15:57 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139) (Remote host closed the connection)
2021-02-28 15:17:18 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-fhpztltksioqsdcb)
2021-02-28 15:18:03 +0100deja(~deja@212095008174.public.telering.at) (Quit: requested)
2021-02-28 15:18:38 +0100renzhi(~renzhi@2607:fa49:653f:eb00::5bc7)
2021-02-28 15:19:02 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139)
2021-02-28 15:19:14 +0100mk2048(3e85a292@h62-133-162-146.dyn.bashtel.ru)
2021-02-28 15:19:24 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 240 seconds)
2021-02-28 15:19:33 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-02-28 15:19:44 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-02-28 15:21:17 +0100 <int-e> ADG1089__: Oh, that may be a problem, but I can't help. I only used the native code generator (on x86-64)...
2021-02-28 15:23:36 +0100hendursa1(~weechat@gateway/tor-sasl/hendursaga) (Quit: hendursa1)
2021-02-28 15:23:49 +0100 <int-e> Arch just isn't a very nice distribution, I'm afraid... some packages just need slots to be used sanely, and llvm is one of them. not to mention the insanity of continually updating haskell packages shipped as shared libraries with no promise of binary compatibility between versions
2021-02-28 15:23:57 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga)
2021-02-28 15:25:15 +0100luigy(~luigy@104.236.106.229) (*.net *.split)
2021-02-28 15:25:15 +0100xcin(~x@159.203.132.140) (*.net *.split)
2021-02-28 15:25:15 +0100debugloop(~danieln@unaffiliated/debugloop) (*.net *.split)
2021-02-28 15:25:22 +0100luigy(~luigy@104.236.106.229)
2021-02-28 15:25:33 +0100debugloop(~danieln@unaffiliated/debugloop)
2021-02-28 15:25:48 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga) (Remote host closed the connection)
2021-02-28 15:25:52 +0100mk2048(3e85a292@h62-133-162-146.dyn.bashtel.ru) (Quit: Connection closed)
2021-02-28 15:26:07 +0100xcin(~x@159.203.132.140)
2021-02-28 15:27:31 +0100daffy(01c8aa98@1.200.170.152) (Quit: Connection closed)
2021-02-28 15:28:11 +0100hendursaga(~weechat@gateway/tor-sasl/hendursaga)
2021-02-28 15:28:52 +0100 <ADG1089__> int-e: what distro would you recommend then?
2021-02-28 15:29:40 +0100 <nshepperd2> ADG1089__: you can install llvm10 to roll back
2021-02-28 15:32:21 +0100 <hpc> whatever you're most comfortable installing ghcup on, probably
2021-02-28 15:32:33 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 245 seconds)
2021-02-28 15:34:40 +0100 <ADG1089__> I usually install ghcup and use it to install cabal, hls, ghc. Also install stack using wget for projects that require it.
2021-02-28 15:34:50 +0100 <ADG1089__> Install global libraries using cabal
2021-02-28 15:34:54 +0100 <int-e> ADG1089__: I don't know, I'm on debian unstable for development needs but still manage my own ghc installations. it can definitely install several llvm versions though
2021-02-28 15:35:09 +0100 <hpc> bleh, stack
2021-02-28 15:35:27 +0100 <ADG1089__> hpc: what do you recommend?
2021-02-28 15:35:32 +0100 <hpc> if a project is so delicate that only stack can handle its build environment, i don't want to touch it
2021-02-28 15:35:53 +0100dxld(~dxld@rush.pub.dxld.at)
2021-02-28 15:36:24 +0100 <ADG1089__> this i smy project: https://github.com/adityagupta1089/Project-Euler-Haskell
2021-02-28 15:38:44 +0100kosmikus_(~kosmikus@nullzig.kosmikus.org) (Remote host closed the connection)
2021-02-28 15:40:30 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-02-28 15:40:52 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr)
2021-02-28 15:46:45 +0100kosmikus(~kosmikus@haskell/developer/kosmikus)
2021-02-28 15:49:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-02-28 15:51:06 +0100geekosaur(ae68c070@cpe-174-104-192-112.neo.res.rr.com)
2021-02-28 15:51:29 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 15:53:57 +0100kam1(~kam1@5.125.126.175) (Ping timeout: 264 seconds)
2021-02-28 15:54:55 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 15:56:18 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
2021-02-28 15:59:43 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Ping timeout: 260 seconds)
2021-02-28 16:00:49 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139) (Read error: Connection reset by peer)
2021-02-28 16:01:25 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139)
2021-02-28 16:02:12 +0100redcherri(bab724e7@186.183.36.231)
2021-02-28 16:04:02 +0100p8m(p8m@gateway/vpn/protonvpn/p8m) (Remote host closed the connection)
2021-02-28 16:04:44 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-02-28 16:05:06 +0100p8m(p8m@gateway/vpn/protonvpn/p8m)
2021-02-28 16:05:45 +0100eoyath(uid489605@gateway/web/irccloud.com/x-jbebfqsuczylpppq)
2021-02-28 16:06:00 +0100tv(~tv@unaffiliated/tv) (Read error: Connection reset by peer)
2021-02-28 16:06:43 +0100ep1ctetus(~epictetus@ip72-194-215-136.sb.sd.cox.net)
2021-02-28 16:08:06 +0100ADG1089__(~aditya@110.226.222.179) (Quit: Konversation terminated!)
2021-02-28 16:08:10 +0100Tario(~Tario@201.192.165.173)
2021-02-28 16:11:33 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 16:14:39 +0100redcherri(bab724e7@186.183.36.231) ()
2021-02-28 16:15:05 +0100usr25(~usr25@unaffiliated/usr25)
2021-02-28 16:16:03 +0100 <BigLama> tomsmeding: hi
2021-02-28 16:17:54 +0100 <BigLama> tomsmeding: Here's a follow-up about my issue with the Req library. The author answered me by email : "HTTP connections are indeed reused in Req, but this is just to make HTTP
2021-02-28 16:17:54 +0100 <BigLama> calls happen faster."
2021-02-28 16:18:20 +0100 <BigLama> tomsmeding: I switched to wreq which solved my issue (it has a session mechanism)
2021-02-28 16:19:12 +0100 <BigLama> He also said to do like you suggested by passing the cookieJar manually
2021-02-28 16:21:00 +0100 <__monty__> That was my suspicion, connection sharing and sessions are two different things.
2021-02-28 16:21:24 +0100systemhalted(~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net)
2021-02-28 16:21:47 +0100 <BigLama> Right. So I don't know exactly how session are preserved, except that there are cookiese involved
2021-02-28 16:22:02 +0100 <BigLama> cookies*
2021-02-28 16:23:14 +0100tv(~tv@unaffiliated/tv)
2021-02-28 16:24:45 +0100mayleesia(4d0db908@dynamic-077-013-185-008.77.13.pool.telefonica.de) (Quit: Connection closed)
2021-02-28 16:25:02 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:de89:ba5e:8412:9d71)
2021-02-28 16:25:32 +0100urodna(~urodna@unaffiliated/urodna)
2021-02-28 16:26:34 +0100systemhalted(~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net) (Ping timeout: 260 seconds)
2021-02-28 16:27:39 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 16:29:55 +0100dolio(~dolio@haskell/developer/dolio) (Quit: ZNC 1.8.2 - https://znc.in)
2021-02-28 16:32:22 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 260 seconds)
2021-02-28 16:33:45 +0100dolio(~dolio@haskell/developer/dolio)
2021-02-28 16:36:31 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:98b:c360:694b:b651)
2021-02-28 16:38:19 +0100cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 260 seconds)
2021-02-28 16:38:44 +0100neiluj(~jco@91-167-203-101.subs.proxad.net)
2021-02-28 16:38:44 +0100neiluj(~jco@91-167-203-101.subs.proxad.net) (Changing host)
2021-02-28 16:38:44 +0100neiluj(~jco@unaffiliated/neiluj)
2021-02-28 16:39:59 +0100vchlup_(~vchlup@115.128.broadband17.iol.cz) (Ping timeout: 260 seconds)
2021-02-28 16:41:06 +0100sQVe(~sQVe@unaffiliated/sqve)
2021-02-28 16:41:47 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2021-02-28 16:42:23 +0100sQVe(~sQVe@unaffiliated/sqve) (Client Quit)
2021-02-28 16:42:50 +0100mrioqueiroz(~mrioqueir@186.251.19.98)
2021-02-28 16:43:48 +0100 <__monty__> Afaik there's many mechanisms so cookies don't technically have to be involved.
2021-02-28 16:45:19 +0100kam1(~kam1@5.125.126.175)
2021-02-28 16:46:10 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:98b:c360:694b:b651) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 16:48:37 +0100 <Philonous> What's the best practice for wrapping C libraries? c2sh still?
2021-02-28 16:49:14 +0100 <geekosaur> I don't think c2hs has ever been a best practice; it fails in too many cases
2021-02-28 16:49:25 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:98b:c360:694b:b651)
2021-02-28 16:49:30 +0100 <geekosaur> hsc2hs is the usual way
2021-02-28 16:55:20 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 16:56:35 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2021-02-28 16:58:43 +0100z0k(~user@115-186-141-91.nayatel.pk) (Ping timeout: 272 seconds)
2021-02-28 16:59:55 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Ping timeout: 240 seconds)
2021-02-28 16:59:57 +0100sdrodge(~sdrodge@unaffiliated/sdrodge) (Quit: WeeChat 3.0)
2021-02-28 17:01:01 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 17:01:04 +0100sdrodge(~sdrodge@unaffiliated/sdrodge)
2021-02-28 17:01:08 +0100swarmcollective(~joseph@cpe-65-31-18-174.insight.res.rr.com)
2021-02-28 17:01:53 +0100vnz(~vnz@unaffiliated/vnz) (Quit: ZNC - http://znc.in)
2021-02-28 17:01:53 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:de89:ba5e:8412:9d71) (Ping timeout: 272 seconds)
2021-02-28 17:01:57 +0100 <davean> Philonous: I would agree that c2hs is not a good idea.
2021-02-28 17:03:06 +0100 <geekosaur> there's also inline-c
2021-02-28 17:03:17 +0100 <davean> inline-c is rather different. Great for its uses!
2021-02-28 17:03:36 +0100 <davean> I don't think of it at all as solving the same problem, but who knows what their actual problem is.
2021-02-28 17:03:50 +0100vnz(~vnz@51.15.143.225)
2021-02-28 17:03:50 +0100vnz(~vnz@51.15.143.225) (Changing host)
2021-02-28 17:03:50 +0100vnz(~vnz@unaffiliated/vnz)
2021-02-28 17:03:58 +0100 <davean> actually the best binding solution I knows involves mixing hsc2hs and inline-c
2021-02-28 17:07:16 +0100 <swarmcollective> I'm trying to find a way to replicate this functionality with Data.Text: last $ concat $ sortOn length $ group $ sort "abacad"
2021-02-28 17:07:57 +0100 <swarmcollective> However, it seems as though Data.Text does not have a `sort`, so the following does not produce the same output: T.last $ T.concat $ sortOn T.length $ T.group $ T.pack "abacad"
2021-02-28 17:08:07 +0100 <davean> No, of course it doesn't
2021-02-28 17:08:17 +0100 <davean> But that doesn't cause a problem persay.
2021-02-28 17:08:31 +0100 <davean> You'd get a list of texts, because texts contain charactures, and you'd sort the list
2021-02-28 17:08:47 +0100Alleria(~textual@zrcout.mskcc.org)
2021-02-28 17:08:55 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 17:09:07 +0100 <davean> You just need to keep straight what you're talking about
2021-02-28 17:09:11 +0100AlleriaGuest50271
2021-02-28 17:09:32 +0100 <swarmcollective> Is T.unpack the simplest solution?
2021-02-28 17:09:41 +0100 <EvanR> yeah sorting a packed text seems tricky at best
2021-02-28 17:10:01 +0100 <dolio> Is this just getting the most frequent character?
2021-02-28 17:10:03 +0100 <davean> group :: Text -> [Text]
2021-02-28 17:10:07 +0100 <davean> No, that should be fine
2021-02-28 17:10:19 +0100 <dolio> There's probably a better way than that code.
2021-02-28 17:10:23 +0100 <swarmcollective> Right, the character that occurs most often.
2021-02-28 17:10:50 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-02-28 17:11:17 +0100 <EvanR> walk through the text updating a map representing a histogram
2021-02-28 17:11:39 +0100 <davean> Right
2021-02-28 17:11:53 +0100 <dolio> For instance, it's rebuilding the string just to take the last character, but you could drop all but the last group instead. But also yeah, keeping track of a map or something is probably better than that.
2021-02-28 17:12:35 +0100 <swarmcollective> I'll give it a try with the Map Char Int (or similar)
2021-02-28 17:12:51 +0100 <dolio> Oh, sorting and then taking the last character is worse than sorting by the opposite order, most likely, as well.
2021-02-28 17:13:15 +0100 <dolio> But that won't matter for a map.
2021-02-28 17:13:39 +0100 <Philonous> davean, inline-c seems convenient, however, I'm mostly look for a way to automatically convert C-enums to Haskell data including the Enum instance
2021-02-28 17:14:32 +0100 <minoru_shiraeesh> serialize and then deserialize?
2021-02-28 17:14:35 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 17:14:39 +0100 <davean> Right, Philonous, different tasks.
2021-02-28 17:15:11 +0100 <Philonous> Treating unicode strings as a list of code points can lead you astray, since you're most likely interested in grapheme clusters rather than code points.
2021-02-28 17:15:48 +0100 <davean> Yah, theres never a right way to do anything with unicode :/
2021-02-28 17:16:06 +0100 <EvanR> there's the old fallback, "my data is mainly ascii anyway" xD
2021-02-28 17:16:21 +0100Uniaikahisses in French alphabet
2021-02-28 17:16:37 +0100 <davean> I like that Uniaika only uses ASCII to hiss in french.
2021-02-28 17:16:41 +0100Uniaikacan also hiss in German -> ßßßßßßßßß
2021-02-28 17:16:55 +0100 <minoru_shiraeesh> Philonous: why would you want to automatically convert C-enums to Haskell data? you invoke C code from Haskell, or the opposite way?
2021-02-28 17:17:11 +0100 <Uniaika> what's up davean? :)
2021-02-28 17:17:23 +0100 <Philonous> I want to call into C
2021-02-28 17:17:33 +0100jlamothe_jlamothe
2021-02-28 17:17:41 +0100 <EvanR> for french, you could execute a graven rite to ensure your data is precomposed
2021-02-28 17:19:00 +0100 <davean> Uniaika: I don't know, I've been avoiding checking in for the day to find out whats up because then I'd have to start dealing with it.
2021-02-28 17:19:39 +0100 <Uniaika> davean: eh, I feel you
2021-02-28 17:19:42 +0100 <Uniaika> <3 <3
2021-02-28 17:21:33 +0100boxscape(4ff0baf3@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.243) (Ping timeout: 264 seconds)
2021-02-28 17:22:42 +0100kevin__(~kevin@pool-100-37-189-79.nycmny.fios.verizon.net)
2021-02-28 17:25:39 +0100bitmagie(~Thunderbi@200116b806dcda002112473b8db035bd.dip.versatel-1u1.de) (Quit: bitmagie)
2021-02-28 17:29:10 +0100jumper149(~jumper149@130.75.103.194)
2021-02-28 17:31:40 +0100dropFM(~dropFM@cpc1-brnt3-2-0-cust108.4-2.cable.virginm.net)
2021-02-28 17:31:41 +0100jamm_(~jamm@unaffiliated/jamm)
2021-02-28 17:32:37 +0100lazyshrk(~lazyshrk@128.199.58.13)
2021-02-28 17:32:48 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 17:33:19 +0100Franciman(~francesco@host-82-49-79-189.retail.telecomitalia.it) (Quit: Leaving)
2021-02-28 17:33:31 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 17:33:44 +0100jamm_(~jamm@unaffiliated/jamm) (Client Quit)
2021-02-28 17:36:25 +0100ezrakilty(~ezrakilty@97-113-55-149.tukw.qwest.net)
2021-02-28 17:39:46 +0100conal(~conal@192.145.118.103) (Quit: Computer has gone to sleep.)
2021-02-28 17:40:16 +0100dyeplexer(~lol@unaffiliated/terpin)
2021-02-28 17:40:35 +0100ezrakilty(~ezrakilty@97-113-55-149.tukw.qwest.net) (Ping timeout: 240 seconds)
2021-02-28 17:40:47 +0100dropFM(~dropFM@cpc1-brnt3-2-0-cust108.4-2.cable.virginm.net) (Quit: Leaving)
2021-02-28 17:41:55 +0100poscat(~poscat@114.243.61.85) (Quit: ZNC 1.8.2 - https://znc.in)
2021-02-28 17:43:57 +0100poscat(~poscat@114.243.61.85)
2021-02-28 17:44:05 +0100jamm_(~jamm@unaffiliated/jamm)
2021-02-28 17:44:56 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 17:45:12 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 17:45:13 +0100jamm__(~jamm@unaffiliated/jamm)
2021-02-28 17:47:00 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 17:47:35 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 17:48:15 +0100jamm_(~jamm@unaffiliated/jamm) (Ping timeout: 240 seconds)
2021-02-28 17:49:24 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
2021-02-28 17:49:29 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 17:51:03 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:98b:c360:694b:b651) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 17:51:55 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 240 seconds)
2021-02-28 17:51:55 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:98b:c360:694b:b651)
2021-02-28 17:54:14 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
2021-02-28 17:55:24 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 17:55:56 +0100berberman_(~berberman@unaffiliated/berberman) (Quit: ZNC 1.8.2 - https://znc.in)
2021-02-28 17:56:54 +0100berberman(~berberman@unaffiliated/berberman)
2021-02-28 18:02:24 +0100 <swarmcollective> The map as histogram works well: fst (M.foldlWithKey most (' ', 0 :: Int) (T.foldl hist M.empty (T.pack "abacad"))) Thanks for the help!
2021-02-28 18:03:37 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 18:12:23 +0100dora(~irfan@117.222.64.138)
2021-02-28 18:16:18 +0100kritzefitz(~kritzefit@212.86.56.80)
2021-02-28 18:16:34 +0100 <hololeap> extensible effects seems like a cool concept, but it seems mostly unused. why is that?
2021-02-28 18:17:33 +0100 <geekosaur> very slow, iirc
2021-02-28 18:18:14 +0100 <geekosaur> the existing effect systems are all fairly heavyweight
2021-02-28 18:19:23 +0100 <dmj`> hololeap: some use free monads, free monads allocate a lot, lots of allocations increases GC time, GC time slows you down. Not easy to optimize away either.
2021-02-28 18:19:28 +0100 <c_wraith> Not convinced the utility is actually there
2021-02-28 18:21:03 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:a3ba:befb:e670:2e90)
2021-02-28 18:21:24 +0100 <[exa]> hololeap: sometimes it's easier to just write your monad in the right way from scratch, and there's no software I know of that would really gain much from using the extensible effects. Also haskell people _love_ simple exercises, such as writing the right monad.
2021-02-28 18:21:36 +0100dora(~irfan@117.222.64.138) (Quit: leaving)
2021-02-28 18:21:56 +0100 <[exa]> hololeap: anyway there's Eff and it has users and some performance benefits, it might be interesting to look around there
2021-02-28 18:22:05 +0100fendor(~fendor@178.115.128.216.wireless.dyn.drei.com)
2021-02-28 18:23:13 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 18:23:17 +0100 <hololeap> fair enough
2021-02-28 18:23:22 +0100 <swarmcollective> hololeap, have you looked at fused-effects? (It is on my todo list)
2021-02-28 18:23:49 +0100 <hololeap> i started learning purescript and it sounds like they use it quite a bit
2021-02-28 18:24:57 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-02-28 18:25:00 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 18:25:01 +0100 <maerwald> hololeap: https://github.com/hasura/eff
2021-02-28 18:25:05 +0100pera(~pera@unaffiliated/pera)
2021-02-28 18:25:08 +0100 <dolio> Extensible effects are actually used all the time, in the form of mtl.
2021-02-28 18:25:11 +0100 <maerwald> that's a WIP zero-cost (or so) one
2021-02-28 18:25:30 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:98b:c360:694b:b651) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 18:25:32 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 18:25:40 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 18:25:43 +0100 <[exa]> hololeap: btw check out the tagless final encoding (first 3 googles should do), IMHO it's a pretty good alternative, feels a bit more lightweight
2021-02-28 18:26:00 +0100 <maerwald> hololeap: you might also wanna watch https://www.youtube.com/watch?v=0jI-AlWEwYI
2021-02-28 18:26:32 +0100d34df00d(~d34df00d@104-14-27-213.lightspeed.austtx.sbcglobal.net)
2021-02-28 18:26:37 +0100 <d34df00d> Hi!
2021-02-28 18:26:59 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 18:27:20 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:90e2:dd27:98b8:d1b2)
2021-02-28 18:27:33 +0100 <d34df00d> I want to contribute to a project that uses tasty for tests (and tasty's quickcheck integration in particular). One of the tests involves a property over bytestrings. What's the right way to ensure that quickcheck also checks sufficiently large bytestrings?
2021-02-28 18:27:51 +0100Kaeipi(~Kaiepi@47.54.252.148) (Remote host closed the connection)
2021-02-28 18:27:54 +0100 <d34df00d> My modification introduces branching for strings longer than N, so I want to make sure that those are indeed checked.
2021-02-28 18:29:29 +0100 <tomsmeding> BigLama: indeed, in the vast majority of cases, website sessions are kept using a cookie on the client side; cookies have nothing to do with connection sharing, but require you to keep a cookie jar. Some libraries do that for you, some don't; notably, plain 'curl' in the terminal also doesn't, but can be configured to use a cookie jar
2021-02-28 18:29:36 +0100 <tomsmeding> browsers, of course, store cookies automatically
2021-02-28 18:29:37 +0100 <[exa]> d34df00d: you can make an extra test with a predicate like `length str > N ==> myfunctionWorksOn str`
2021-02-28 18:29:37 +0100mrioqueiroz(~mrioqueir@186.251.19.98) (Ping timeout: 276 seconds)
2021-02-28 18:29:57 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 18:29:59 +0100jumper149(~jumper149@130.75.103.194) (Quit: WeeChat 3.0.1)
2021-02-28 18:30:13 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 260 seconds)
2021-02-28 18:30:26 +0100 <[exa]> d34df00d: alternatively there might be some quickcheck tooling for generating longer strings; similar to the NonEmpty that it has for lists. Or you can write your own.
2021-02-28 18:30:44 +0100 <d34df00d> [exa]: oh, that's a good idea! I remember seeing something for rejecting inputs in raw quickcheck. What's the right way to do that in tasty-speak?
2021-02-28 18:30:59 +0100 <d34df00d> I'm rather lost at the "and" in "tasty and quickcheck".
2021-02-28 18:31:26 +0100usr25(~usr25@unaffiliated/usr25) (Quit: Leaving)
2021-02-28 18:31:44 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
2021-02-28 18:32:03 +0100 <maerwald> dolio: there was a lengthy argument by alexis why mtl isn't really an effects system, but I got lost in all the arguments
2021-02-28 18:33:18 +0100 <shapr> where was that discussion?
2021-02-28 18:33:23 +0100 <maerwald> here on IRC
2021-02-28 18:33:31 +0100 <maerwald> I think I have it somewhere
2021-02-28 18:35:23 +0100 <maerwald> shapr: https://paste.tomsmeding.com/ds5KKItJ
2021-02-28 18:35:35 +0100 <maerwald> I think it was that
2021-02-28 18:35:52 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 18:35:55 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 18:36:28 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 18:36:29 +0100 <[exa]> d34df00d: well not sure how much tasty modifies that, I don't know it at all. The advice was plain quickcheckish. :D
2021-02-28 18:40:11 +0100knupfer(~Thunderbi@200116b82cc9eb00a0beb8f34ef315a0.dip.versatel-1u1.de)
2021-02-28 18:40:56 +0100 <tomsmeding> d34df00d: what tasty interface are you using, exactly?
2021-02-28 18:41:19 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 18:41:55 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Remote host closed the connection)
2021-02-28 18:42:10 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 18:42:11 +0100 <tomsmeding> in particular, if you're using tasty-quickcheck: that package just re-exports (most of) quickcheck's functionality, I believe
2021-02-28 18:42:15 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 18:42:20 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 18:42:29 +0100 <d34df00d> [exa]: that's still a good advice! I completely forgot about samples rejection and was only looking at the modifiers.
2021-02-28 18:42:34 +0100 <d34df00d> tomsmeding: https://github.com/haskell/bytestring/blob/master/tests/Properties/ByteString.hs#L285-L286 this one.
2021-02-28 18:42:47 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 18:43:18 +0100 <tomsmeding> I see 'import Test.Tasty.QuickCheck' -- it seems my suspicion was correct :)
2021-02-28 18:44:19 +0100toorevitimirp(~tooreviti@117.182.182.60) (Remote host closed the connection)
2021-02-28 18:46:26 +0100vicfred(~vicfred@unaffiliated/vicfred)
2021-02-28 18:47:09 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 245 seconds)
2021-02-28 18:49:19 +0100geowiesnot_bis(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2021-02-28 18:50:05 +0100ddellacosta(~ddellacos@86.106.143.201)
2021-02-28 18:51:25 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 18:54:18 +0100kevin__(~kevin@pool-100-37-189-79.nycmny.fios.verizon.net) (Quit: Leaving)
2021-02-28 18:55:21 +0100conal(~conal@192.145.118.163)
2021-02-28 18:55:54 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 18:56:43 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:01:09 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 19:01:29 +0100ClaudiusMaximus(~claude@191.123.199.146.dyn.plus.net)
2021-02-28 19:01:29 +0100ClaudiusMaximus(~claude@191.123.199.146.dyn.plus.net) (Changing host)
2021-02-28 19:01:29 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus)
2021-02-28 19:02:03 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:02:19 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 19:02:21 +0100ADG1089__(~aditya@110.226.222.179)
2021-02-28 19:04:37 +0100dyeplexer(~lol@unaffiliated/terpin) (Remote host closed the connection)
2021-02-28 19:06:33 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 19:07:27 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:07:30 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:08:29 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:08:34 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:09:36 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:09:51 +0100redmp(~redmp@172.58.38.148)
2021-02-28 19:10:45 +0100geowiesnot_bis(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 264 seconds)
2021-02-28 19:12:01 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:90e2:dd27:98b8:d1b2) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 19:13:59 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 19:14:55 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:15:01 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:15:40 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-02-28 19:16:03 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:17:23 +0100rajivr(uid269651@gateway/web/irccloud.com/x-nydprmgitcsjloxf) (Quit: Connection closed for inactivity)
2021-02-28 19:18:03 +0100mayleesia(4d0db908@dynamic-077-013-185-008.77.13.pool.telefonica.de)
2021-02-28 19:20:57 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 19:21:19 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:22:14 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:23:06 +0100mayleesia(4d0db908@dynamic-077-013-185-008.77.13.pool.telefonica.de) (Quit: Connection closed)
2021-02-28 19:25:34 +0100Tops21(~Tobias@dyndsl-095-033-017-115.ewe-ip-backbone.de)
2021-02-28 19:26:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-02-28 19:27:40 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:27:46 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:28:07 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 276 seconds)
2021-02-28 19:28:48 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:29:25 +0100Tops2(~Tobias@dyndsl-095-033-017-115.ewe-ip-backbone.de) (Ping timeout: 276 seconds)
2021-02-28 19:30:02 +0100aveltras(uid364989@gateway/web/irccloud.com/x-miyjlxdpioeuznoz)
2021-02-28 19:30:18 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
2021-02-28 19:30:58 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2021-02-28 19:31:17 +0100akasha(~user@unaffiliated/akasha) (Read error: Connection reset by peer)
2021-02-28 19:31:56 +0100tanuki_(~quassel@173.168.154.189) (Ping timeout: 240 seconds)
2021-02-28 19:32:28 +0100epicte7us(~epictetus@ip72-194-215-136.sb.sd.cox.net)
2021-02-28 19:33:33 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 19:33:36 +0100ep1ctetus(~epictetus@ip72-194-215-136.sb.sd.cox.net) (Ping timeout: 240 seconds)
2021-02-28 19:35:07 +0100tanuki(~quassel@173.168.154.189)
2021-02-28 19:35:11 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:36:56 +0100kritzefitz(~kritzefit@212.86.56.80) (Ping timeout: 240 seconds)
2021-02-28 19:37:16 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-02-28 19:39:06 +0100emmanuel_erc(~user@cpe-74-71-106-64.nyc.res.rr.com) (Remote host closed the connection)
2021-02-28 19:39:39 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 245 seconds)
2021-02-28 19:40:26 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:40:33 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-02-28 19:40:53 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr)
2021-02-28 19:41:35 +0100Franciman(~francesco@host-82-49-79-189.retail.telecomitalia.it)
2021-02-28 19:42:17 +0100vs^(vs@ip98-184-89-2.mc.at.cox.net) ()
2021-02-28 19:42:21 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2021-02-28 19:42:42 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2021-02-28 19:42:49 +0100seneca(~epictetus@152.89.204.185)
2021-02-28 19:43:09 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 19:44:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 19:44:54 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 19:45:54 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:45:55 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:46:39 +0100epicte7us(~epictetus@ip72-194-215-136.sb.sd.cox.net) (Ping timeout: 260 seconds)
2021-02-28 19:46:52 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:46:56 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:47:28 +0100Kaiepi(~Kaiepi@47.54.252.148)
2021-02-28 19:48:23 +0100seneca(~epictetus@152.89.204.185) (Quit: Leaving)
2021-02-28 19:48:24 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2021-02-28 19:49:02 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:49:04 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:50:06 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:50:09 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 19:51:10 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:55:16 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 240 seconds)
2021-02-28 19:55:20 +0100usr25(~usr25@unaffiliated/usr25)
2021-02-28 19:55:28 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 19:55:51 +0100__minoru__shirae(~shiraeesh@5.101.59.4)
2021-02-28 19:56:04 +0100minoru_shiraeesh(~shiraeesh@109.166.56.139) (Ping timeout: 276 seconds)
2021-02-28 19:56:39 +0100ADG1089__(~aditya@110.226.222.179) (Remote host closed the connection)
2021-02-28 19:58:23 +0100deja(~deja@212095008174.public.telering.at)
2021-02-28 19:59:57 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 20:00:45 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:03:32 +0100berberman_(~berberman@unaffiliated/berberman)
2021-02-28 20:04:55 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 272 seconds)
2021-02-28 20:05:19 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 20:08:02 +0100dxld(~dxld@rush.pub.dxld.at) (Remote host closed the connection)
2021-02-28 20:11:22 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:11:40 +0100Rudd0(~Rudd0@185.189.115.108) (Ping timeout: 276 seconds)
2021-02-28 20:12:09 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
2021-02-28 20:13:01 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-02-28 20:16:09 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-02-28 20:16:37 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:16:40 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:17:39 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:17:40 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:18:49 +0100kritzefitz(~kritzefit@212.86.56.80)
2021-02-28 20:18:54 +0100fendor(~fendor@178.115.128.216.wireless.dyn.drei.com) (Remote host closed the connection)
2021-02-28 20:18:55 +0100falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Read error: Connection reset by peer)
2021-02-28 20:20:01 +0100fendor(~fendor@178.115.128.216.wireless.dyn.drei.com)
2021-02-28 20:22:49 +0100Pickchea(~private@unaffiliated/pickchea)
2021-02-28 20:24:34 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 260 seconds)
2021-02-28 20:25:55 +0100tsrt^(tsrt@ip98-184-89-2.mc.at.cox.net)
2021-02-28 20:26:21 +0100raul782(~raul782@190.239.55.127)
2021-02-28 20:27:50 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 20:29:27 +0100conal(~conal@192.145.118.163) (Quit: Computer has gone to sleep.)
2021-02-28 20:30:15 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:a3ba:befb:e670:2e90) (Ping timeout: 272 seconds)
2021-02-28 20:30:21 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:30:26 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:31:28 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:31:29 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:32:35 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 20:33:31 +0100raul782(~raul782@190.239.55.127) ()
2021-02-28 20:33:36 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:37:18 +0100nullniverse(~null@unaffiliated/nullniverse)
2021-02-28 20:37:59 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 20:38:51 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:40:32 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-02-28 20:40:45 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 264 seconds)
2021-02-28 20:40:49 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Remote host closed the connection)
2021-02-28 20:40:52 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr)
2021-02-28 20:40:56 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net)
2021-02-28 20:41:14 +0100conal(~conal@192.145.118.119)
2021-02-28 20:42:55 +0100tanuki(~quassel@173.168.154.189)
2021-02-28 20:43:02 +0100hiroaki_(~hiroaki@2a02:908:4b18:8c40:2d1:b436:dd9b:cc7)
2021-02-28 20:43:42 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 20:43:49 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
2021-02-28 20:44:10 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:44:14 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:45:15 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:45:55 +0100jamm__(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2021-02-28 20:48:09 +0100hendi(uid489601@gateway/web/irccloud.com/x-cyumymliypkvjqpl) ()
2021-02-28 20:48:21 +0100hendi(uid489601@gateway/web/irccloud.com/x-ftqhmsnmlpiygdyy)
2021-02-28 20:49:15 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 240 seconds)
2021-02-28 20:49:30 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:53:10 +0100Tene(~tene@poipu/supporter/slacker/tene) (Ping timeout: 272 seconds)
2021-02-28 20:53:36 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 240 seconds)
2021-02-28 20:53:45 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:53:47 +0100ByronJohnson(~bairyn@unaffiliated/bob0) (Ping timeout: 272 seconds)
2021-02-28 20:53:49 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:54:54 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 260 seconds)
2021-02-28 20:54:55 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 20:55:50 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:55:57 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:56:36 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 20:56:50 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-02-28 20:57:00 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:57:01 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 20:57:37 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 20:57:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-02-28 20:57:59 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 20:58:05 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 21:00:01 +0100mynickisrandom(uid148779@gateway/web/irccloud.com/x-rsvsinemprsbzqpy)
2021-02-28 21:01:00 +0100drakonis(~drakonis@unaffiliated/drakonis)
2021-02-28 21:02:28 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 260 seconds)
2021-02-28 21:03:44 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 21:03:50 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net)
2021-02-28 21:04:14 +0100Tene(~tene@mail.digitalkingdom.org)
2021-02-28 21:04:14 +0100Tene(~tene@mail.digitalkingdom.org) (Changing host)
2021-02-28 21:04:14 +0100Tene(~tene@poipu/supporter/slacker/tene)
2021-02-28 21:04:53 +0100ByronJohnson(~bairyn@unaffiliated/bob0)
2021-02-28 21:05:09 +0100petersen(~petersen@redhat/juhp) (Ping timeout: 246 seconds)
2021-02-28 21:06:18 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 245 seconds)
2021-02-28 21:07:01 +0100buggymcbugfix(sid432603@gateway/web/irccloud.com/x-naqvoueakkcopuie) (Quit: Connection closed for inactivity)
2021-02-28 21:07:13 +0100petersen(~petersen@redhat/juhp)
2021-02-28 21:07:40 +0100jack1909(~qpls@cpeb4750e67d202-cmf81d0fad5840.cpe.net.fido.ca)
2021-02-28 21:08:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2021-02-28 21:09:22 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
2021-02-28 21:11:36 +0100errst(~errst@unaffiliated/tirej)
2021-02-28 21:11:54 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus) (Quit: ->)
2021-02-28 21:12:48 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:256c:b3b1:f90:ff2a)
2021-02-28 21:14:02 +0100geowiesnot_bis(~user@87-89-181-157.abo.bbox.fr)
2021-02-28 21:14:25 +0100son0p(~son0p@181.136.122.143)
2021-02-28 21:16:00 +0100psutcliffe(~psutcliff@2a00:801:3f2:4b56:e93e:1663:ff0c:6c42) (Quit: Leaving)
2021-02-28 21:16:12 +0100kenran(~kenran@i59F67BBA.versanet.de)
2021-02-28 21:16:15 +0100 <amx> do we apply the PVP rules regarding removed/changed datatypes to Internal modules too?
2021-02-28 21:16:46 +0100 <edwardk> amx: my usual rule of thumb is to state that any .Internal module explicitly does not follow the PVP
2021-02-28 21:16:46 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 21:16:59 +0100 <edwardk> amx: otherwise we actively disincentivize library authors from providing them.
2021-02-28 21:17:23 +0100 <amx> agreed
2021-02-28 21:17:24 +0100 <edwardk> the cost of accessing guts is your code becomes more sensitive to minor changes that way, but its not 'free' from disincentive for library authors
2021-02-28 21:17:30 +0100 <edwardk> er now
2021-02-28 21:17:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 21:18:13 +0100rdivyanshu(uid322626@gateway/web/irccloud.com/x-qtewvwtwengjftbg) (Quit: Connection closed for inactivity)
2021-02-28 21:18:52 +0100cyphase(~cyphase@unaffiliated/cyphase)
2021-02-28 21:20:10 +0100coot(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) ()
2021-02-28 21:20:40 +0100coot_(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
2021-02-28 21:27:10 +0100invent[m](inventmatr@gateway/shell/matrix.org/x-jrwragskqrfqezvh)
2021-02-28 21:29:45 +0100average(uid473595@gateway/web/irccloud.com/x-fxgddkvvlaaxcpgp) (Quit: Connection closed for inactivity)
2021-02-28 21:31:21 +0100kenran(~kenran@i59F67BBA.versanet.de) (Remote host closed the connection)
2021-02-28 21:31:35 +0100knupfer(~Thunderbi@200116b82cc9eb00a0beb8f34ef315a0.dip.versatel-1u1.de) (Quit: knupfer)
2021-02-28 21:31:39 +0100kenran(~kenran@i59F67BBA.versanet.de)
2021-02-28 21:31:42 +0100knupfer1(~Thunderbi@200116b82cc9eb00ed7c90a7ebf5ce01.dip.versatel-1u1.de)
2021-02-28 21:33:13 +0100knupfer1(~Thunderbi@200116b82cc9eb00ed7c90a7ebf5ce01.dip.versatel-1u1.de) (Client Quit)
2021-02-28 21:35:02 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 21:35:09 +0100pera(~pera@unaffiliated/pera) (Ping timeout: 260 seconds)
2021-02-28 21:36:53 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Remote host closed the connection)
2021-02-28 21:37:10 +0100kderme(4fa758c1@ppp079167088193.access.hol.gr)
2021-02-28 21:39:25 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3)
2021-02-28 21:39:47 +0100aveltras(uid364989@gateway/web/irccloud.com/x-miyjlxdpioeuznoz) (Quit: Connection closed for inactivity)
2021-02-28 21:39:49 +0100 <hyiltiz-M> Is there a Haskell library (or wrapper) that provides cross-platform (including mobile devices such as android and iOS) UI support? Kind of like flutter, libui, qt and the like, but without requiring the dev to write boilerplate to marshal stuff around.
2021-02-28 21:40:17 +0100 <Uniaika> no
2021-02-28 21:40:26 +0100 <Uniaika> this is an incredibly hard problem
2021-02-28 21:40:27 +0100 <hyiltiz-M> Would be awesome to abstract away the platforms inside a monad :D
2021-02-28 21:40:33 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-02-28 21:40:36 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 240 seconds)
2021-02-28 21:40:52 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr)
2021-02-28 21:41:29 +0100 <hyiltiz-M> Wire seems to have cross platform apps some of which are written in Haskell and almost all in FP languages
2021-02-28 21:41:29 +0100ixlun(~user@213.205.241.12) (Read error: Connection reset by peer)
2021-02-28 21:42:33 +0100redmp(~redmp@172.58.38.148) (Ping timeout: 264 seconds)
2021-02-28 21:42:57 +0100 <hyiltiz-M> Since they are switching languages and hence projects, I guess their “monad” is at the project level
2021-02-28 21:43:35 +0100ixlun(~user@213.205.241.12)
2021-02-28 21:43:35 +0100nineonine(~nineonine@2604:3d08:7785:9600:8c3e:8d1a:de68:76d3) (Ping timeout: 240 seconds)
2021-02-28 21:46:22 +0100 <Uniaika> a monad is not the proper abstraction here
2021-02-28 21:46:44 +0100 <BigLama> tomsmeding: " website sessions are kept using a cookie on the client side; cookies have nothing to do with connection sharing" => what is the difference between sessions and connection sharing then ?
2021-02-28 21:46:49 +0100 <BigLama> I'm confused :/
2021-02-28 21:47:22 +0100tanuki(~quassel@173.168.154.189)
2021-02-28 21:48:43 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 21:48:48 +0100 <alexfmpe> hyiltiz-M: depends on what you mean, I guess - reflex-platform has a bunch of cross-compiling stuff (some has been upstreamed to nixpkgs) so you can compile reflex-dom apps to web/desktop/mobile, but the common UI abstraction is really the DOM (though outside of the web version, the only JS involved is for rendering)
2021-02-28 21:49:56 +0100dxld(~dxld@rush.pub.dxld.at)
2021-02-28 21:50:39 +0100 <alexfmpe> Miso might also have mobile targets - I could have sworn I remember seeing that in the readme but can't find it
2021-02-28 21:51:11 +0100banyanRob(49f11cfb@c-73-241-28-251.hsd1.ca.comcast.net) (Quit: Connection closed)
2021-02-28 21:52:24 +0100xff0x(~xff0x@2001:1a81:5349:9200:2806:fad1:e222:a1c8) (Ping timeout: 240 seconds)
2021-02-28 21:52:42 +0100xff0x(xff0x@gateway/vpn/mullvad/xff0x)
2021-02-28 21:53:11 +0100slack1256(~slack1256@45.4.2.52)
2021-02-28 21:54:32 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-vdnrjtitbesdywow)
2021-02-28 21:54:33 +0100nullniverse(~null@unaffiliated/nullniverse) (Read error: Connection reset by peer)
2021-02-28 21:54:54 +0100nullniverse(~null@unaffiliated/nullniverse)
2021-02-28 21:55:12 +0100pera(~pera@unaffiliated/pera)
2021-02-28 21:55:41 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-02-28 21:56:37 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
2021-02-28 21:57:12 +0100rednaZ[m](r3dnazmatr@gateway/shell/matrix.org/x-welbcejgukwlyvmz)
2021-02-28 21:57:13 +0100 <rednaZ[m]> Does anybody know why core coercion arguments exist at run time? What run time information to they contain?
2021-02-28 21:57:36 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 240 seconds)
2021-02-28 22:00:16 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-02-28 22:00:29 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2) (Remote host closed the connection)
2021-02-28 22:00:49 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-02-28 22:00:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 245 seconds)
2021-02-28 22:03:53 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-lljagtdqleuggsro) ()
2021-02-28 22:04:54 +0100nullniverse(~null@unaffiliated/nullniverse) (Read error: Connection reset by peer)
2021-02-28 22:05:10 +0100nullniverse(~null@unaffiliated/nullniverse)
2021-02-28 22:05:12 +0100nullniverse(~null@unaffiliated/nullniverse) (Max SendQ exceeded)
2021-02-28 22:05:46 +0100heatsink(~heatsink@2600:1700:bef1:5e10:692f:34e4:c65a:92f2)
2021-02-28 22:06:11 +0100tanuki(~quassel@173.168.154.189)
2021-02-28 22:06:20 +0100 <Cale> rednaZ[m]: How do they exist at runtime? I was pretty sure coercions got erased when core is translated to stg
2021-02-28 22:06:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 22:07:00 +0100 <rednaZ[m]> -ddump-stg disagrees.
2021-02-28 22:07:00 +0100 <edwardk> hyiltiz-M: maybe the qt-quick bindings? or using threepenny-gui to drive an electron app?
2021-02-28 22:07:09 +0100xff0x(xff0x@gateway/vpn/mullvad/xff0x) (Ping timeout: 264 seconds)
2021-02-28 22:07:20 +0100 <edwardk> hyiltiz-M: both of those are broadly portable and 'write once' for the most part from the haskell side
2021-02-28 22:07:29 +0100 <dolio> stg isn't runtime, either, though.
2021-02-28 22:07:40 +0100 <Cale> true
2021-02-28 22:08:00 +0100 <rednaZ[m]> There is also the indicator that they can form a lambda that kills sharing.
2021-02-28 22:08:01 +0100 <dolio> Isn't stg still possible to type check?
2021-02-28 22:08:02 +0100 <edwardk> beyond that you start hitting things like linking out to imgui and wrapping vulkan/opengl/directx as a shallow interaction layer, but none of those except qt-quick looks very native
2021-02-28 22:08:03 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2021-02-28 22:08:40 +0100 <Cale> dolio: It's imperative-ish code, but... maybe?
2021-02-28 22:08:43 +0100 <rednaZ[m]> dolio: type arguments are not in stg
2021-02-28 22:08:44 +0100 <edwardk> dolio: i thought we'd started adding those branch coalescing moves where it takes Left a -> Left a -- even when the types don't match, etc. to STG
2021-02-28 22:08:54 +0100xff0x(~xff0x@2001:1a81:5349:9200:2806:fad1:e222:a1c8)
2021-02-28 22:09:16 +0100 <dolio> Ah, perhaps.
2021-02-28 22:09:27 +0100 <rednaZ[m]> If I have `binder = \ coercion -> f x`, f x is not memoized.
2021-02-28 22:09:37 +0100 <rednaZ[m]> So this tells me that the coercion argument either exists at run time or there is a crazy bug in GHC.
2021-02-28 22:10:18 +0100 <dolio> Just because sharing is lost doesn't mean coercions are explicitly represented at runtime.
2021-02-28 22:10:31 +0100 <rednaZ[m]> ?
2021-02-28 22:10:51 +0100 <Cale> Causing things to be shared when they otherwise wouldn't be, would itself be regarded as a bug, I think
2021-02-28 22:11:03 +0100 <edwardk> rednaz[m]: i can make things that take a 0-width argument and still turn the result into call-by-name.
2021-02-28 22:11:20 +0100 <edwardk> e.g. (##) -> Int#
2021-02-28 22:11:37 +0100 <edwardk> so even if the argument is erased it can affect 'memoization'
2021-02-28 22:11:49 +0100 <rednaZ[m]> Why would you want that though?
2021-02-28 22:11:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2021-02-28 22:12:06 +0100 <edwardk> rednaZ[m]: funny you should ask. i actually _have_ to use it in code i'm writing now ;)
2021-02-28 22:12:08 +0100 <Cale> Because sharing things can result in exponentially increasing the amount of memory required
2021-02-28 22:12:23 +0100 <edwardk> i use type Lev (a :: TYPE r) = (()~()) => a -- in practice
2021-02-28 22:12:46 +0100 <edwardk> ifThenElse :: Bool -> Lev a -> Lev a -> a; ifThenElse True a _ = a; ifThenElse False _ b = b
2021-02-28 22:12:50 +0100 <dolio> There are probably situations where code needs to be emitted for an infinite loop that involves carrying around formal 0-width parameters that are only eliminated at a sufficiently low level for everything to already be sequential.
2021-02-28 22:13:04 +0100 <edwardk> gives me a levity polymorphic if then else in RebindableSyntax that works for all runtimereps with one implementation that is properly laze
2021-02-28 22:13:21 +0100 <edwardk> er lazy
2021-02-28 22:13:45 +0100 <Cale> Here's an example (though I don't have one with a zero-width argument off-hand): permutations [] = [[]]; permutations (x:xs) = permutations xs ++ map (x:) (permutations xs)
2021-02-28 22:13:50 +0100 <Cale> oops
2021-02-28 22:13:55 +0100 <Cale> that should be combinations
2021-02-28 22:13:56 +0100 <edwardk> so e.g. if you ifThenElse True 1# undefined -- it evaluates to 1# not undefined, like you'd get if you magically passed arguments 'a' at the right runtimerep.
2021-02-28 22:13:57 +0100 <Cale> of course
2021-02-28 22:14:14 +0100 <dolio> Because otherwise an equation that gets proved by an infinite loop might be 'optimized' to and unsound function.
2021-02-28 22:14:34 +0100 <Cale> If we change it to share: combinations (x:xs) = let cs = combinations xs in cs ++ map (x:) cs
2021-02-28 22:14:36 +0100 <edwardk> yeah dolio demonstrated this to me when i was trying to do a similar batch of tricks back when we worked together
2021-02-28 22:15:01 +0100 <edwardk> now i make my newtype based versions of these things using evil pattern synonym tricks to regenerate the ~''s
2021-02-28 22:15:34 +0100 <Cale> Then we have a space leak, where we have to hang on to cs at least until halfway through the list (and sublists of cs until much later)
2021-02-28 22:15:37 +0100fendor_(~fendor@178.165.129.154.wireless.dyn.drei.com)
2021-02-28 22:15:57 +0100 <rednaZ[m]> Unfortunately I have a case where I wish the equality constraint would not destroy sharing.
2021-02-28 22:16:03 +0100 <rednaZ[m]> Is there a way to tell GHC that?
2021-02-28 22:16:08 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2021-02-28 22:16:29 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2021-02-28 22:17:57 +0100fendor(~fendor@178.115.128.216.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
2021-02-28 22:17:58 +0100 <edwardk> rednaZ[m]: the pattern i'd probably use is to do something like capture the f x outside of the lambda that is taking the equality witness by computing y = f (unsafeCoerce x) or whatever. then inside the lambda prove the type of x matches the type of f's arguments using your equality then return y, otherwise leave it alone
2021-02-28 22:17:59 +0100 <Cale> Maybe, though it seems like it would be tricky in practice -- if you can somehow define the body outside the coercion lambda
2021-02-28 22:18:13 +0100 <edwardk> its a thunk with an invalid type but you never force it except when the types line up
2021-02-28 22:18:19 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 260 seconds)
2021-02-28 22:18:22 +0100 <Cale> Ah yeah
2021-02-28 22:18:30 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
2021-02-28 22:19:00 +0100 <edwardk> that should restore sharing
2021-02-28 22:20:26 +0100tanuki(~quassel@173.168.154.189)
2021-02-28 22:21:10 +0100 <rednaZ[m]> I have to think about whether I can apply that to my case. I have just uploaded my case too if you are curious, https://github.com/prednaz/open-sum/blob/type_equality/app/Main.hs#L38 .
2021-02-28 22:21:44 +0100 <rednaZ[m]> It is about checked exceptions and what happens if you evaluate a computation twice catching the exceptions in different order.
2021-02-28 22:22:06 +0100 <rednaZ[m]> Than you would want sharing.
2021-02-28 22:22:37 +0100xlei(znc@unaffiliated/xlei) (Ping timeout: 256 seconds)
2021-02-28 22:22:37 +0100 <rednaZ[m]> The type variable of OpenSum is a phantom type.
2021-02-28 22:23:11 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:256c:b3b1:f90:ff2a) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-02-28 22:23:15 +0100nullniverse(~null@unaffiliated/nullniverse)
2021-02-28 22:23:47 +0100elfets(~elfets@37.201.23.96)
2021-02-28 22:24:20 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed)
2021-02-28 22:24:29 +0100 <edwardk> OpenSum = Dynamic?
2021-02-28 22:25:25 +0100 <edwardk> oh, no, there's a list argument
2021-02-28 22:25:34 +0100edwardkgoes and reads
2021-02-28 22:25:41 +0100 <rednaZ[m]> data OpenSum list = forall value. Typeable value => OpenSum value
2021-02-28 22:26:07 +0100 <rednaZ[m]> `list` is a phantom type-level list
2021-02-28 22:26:10 +0100 <edwardk> why do you need the Typeable btw, rather than just the list index?
2021-02-28 22:26:29 +0100 <rednaZ[m]> Because then the run-time representation is different
2021-02-28 22:26:43 +0100 <rednaZ[m]> for different list orders
2021-02-28 22:26:59 +0100 <rednaZ[m]> and the list order has to be determined by the order of catching
2021-02-28 22:27:04 +0100 <edwardk> fair
2021-02-28 22:27:10 +0100 <rednaZ[m]> because it cannot stay undetermined
2021-02-28 22:27:29 +0100 <rednaZ[m]> which is kind of funny
2021-02-28 22:28:09 +0100 <rednaZ[m]> there is no other reason why I can only catch the type at the head of the list
2021-02-28 22:28:43 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2021-02-28 22:29:05 +0100gienah(~mwright@gentoo/developer/gienah) (Quit: Lost terminal)
2021-02-28 22:29:15 +0100 <rednaZ[m]> I am still in the process of trying your idea out but I am afraid, it is probably only effective if I apply it to user code.
2021-02-28 22:33:33 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 264 seconds)
2021-02-28 22:34:03 +0100nf(~n@monade.li) (Ping timeout: 260 seconds)
2021-02-28 22:34:04 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2021-02-28 22:34:12 +0100nf__(~n@monade.li)
2021-02-28 22:34:46 +0100nf__nf
2021-02-28 22:36:21 +0100 <edwardk> ok, if you're using this to hold Exceptions anyways, you'll always have a Typeable constraint, i guess my grumbles there are mostly sated
2021-02-28 22:36:58 +0100nullniv15(~null@unaffiliated/nullniverse)
2021-02-28 22:37:20 +0100nullniverse(~null@unaffiliated/nullniverse) (Read error: No route to host)
2021-02-28 22:37:21 +0100nullniv15(~null@unaffiliated/nullniverse) (Read error: Connection reset by peer)
2021-02-28 22:37:45 +0100nullniverse(~null@unaffiliated/nullniverse)
2021-02-28 22:37:46 +0100nullniverse(~null@unaffiliated/nullniverse) (Max SendQ exceeded)
2021-02-28 22:38:00 +0100geekosaur(ae68c070@cpe-174-104-192-112.neo.res.rr.com) (Quit: Connection closed)
2021-02-28 22:38:42 +0100 <NieDzejkob> I have a set of tuples (a, b, c) and I need to retrieve the ones with matching a or b at different moments. Is there a better way to do this than multiple Maps that I have to keep in sync manually?
2021-02-28 22:39:20 +0100Tario(~Tario@200.119.184.155)
2021-02-28 22:40:33 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-02-28 22:40:48 +0100 <rednaZ[m]> edwardk: I would not have the Typeable constraint if it did not seem like the most promising approach right now. GHC is actually often floating the expensive computation out from under the coercion argument lambda recovering sharing already. But it is not often enough.
2021-02-28 22:40:52 +0100zebrag(~inkbottle@aaubervilliers-654-1-83-46.w86-212.abo.wanadoo.fr)
2021-02-28 22:41:01 +0100redmp(~redmp@172.58.38.156)
2021-02-28 22:43:06 +0100psutcliffe(~psutcliff@2a00:801:3f2:4b56:e93e:1663:ff0c:6c42)
2021-02-28 22:44:02 +0100 <hololeap> NieDzejkob: define "better"
2021-02-28 22:44:11 +0100 <NieDzejkob> less error-prone
2021-02-28 22:44:52 +0100 <NieDzejkob> Making illegal states unrepresentable and all that
2021-02-28 22:45:08 +0100 <hololeap> i'm actually having a hard time imagining what you're talking about
2021-02-28 22:45:30 +0100 <edwardk> rednaZ[m]: generally whenever i see a Typeable constraint i try to move to atze van der ploeg's keys or find some other way to recover type information, just a rule of thumb, because Typeable is quite the blunt instrument and gets in the way when i want region parameters for things like ST s, etc.
2021-02-28 22:46:10 +0100 <edwardk> rednaZ[m]: not saying that this is doable in your circumstance, just giving you my mental model
2021-02-28 22:46:31 +0100 <hololeap> it almost sounds like you would need dependent types to do this at the type level, but, again, i'm not really understanding what you're trying to do
2021-02-28 22:46:39 +0100 <dolio> Create a type that represents the set of triples, with the operations you want. Implement it however, and use it in the dependent code.
2021-02-28 22:47:58 +0100 <ij> Can a type become concrete by adding more typeclass constraints?
2021-02-28 22:48:18 +0100 <edwardk> ij: is one of them x ~ MyConcreteType ?
2021-02-28 22:49:40 +0100 <hololeap> edwardk: that doesn't really make it concrete though, does it? it will just fail on anything except one specific type.
2021-02-28 22:50:01 +0100 <ij> No, it doesn't look like it. hip's "e" pixel channel type is first constrained by Elevator e, which doesn't compile when given to writeImage, but then, if I add (Elevator e, Fractional e) by "image / 400" (or similar), then it compiles
2021-02-28 22:50:20 +0100 <ij> well, maybe I ought to check what the involved typeclass definitions look like
2021-02-28 22:50:31 +0100 <ij> maybe they have that "a ~ b"
2021-02-28 22:50:54 +0100 <hololeap> (/) requires Fractional
2021-02-28 22:50:59 +0100 <hololeap> :t (/)
2021-02-28 22:51:00 +0100 <lambdabot> Fractional a => a -> a -> a
2021-02-28 22:51:21 +0100 <ij> right, but why would it make it choose a concrete type? that I don't understand or how rather
2021-02-28 22:51:25 +0100 <edwardk> hololeap: Bool isn't really concrete, it just fails if the type is anything except Bool ;)
2021-02-28 22:52:04 +0100 <edwardk> ij: guessing what you have is defaulting kicking in when Fractional is applied
2021-02-28 22:52:39 +0100 <hololeap> edwardk: while `foo :: x ~ Bool => x` is semantically the same as `x :: Bool`, i would think they are not the same at the compiler/technical level
2021-02-28 22:53:01 +0100 <edwardk> hololeap: they are the same modulo a core coercion you can't see
2021-02-28 22:53:41 +0100 <edwardk> every GADT you've ever used has compiled the latter into the former in the different constructor definitions
2021-02-28 22:53:57 +0100 <ij> https://kseo.github.io/posts/2017-01-04-type-defaulting-in-haskell.html
2021-02-28 22:53:58 +0100 <hololeap> ok, fair enough. so will `main :: x ~ IO () => x` compile?
2021-02-28 22:54:05 +0100 <ij> Fractional defaults to Double indeed
2021-02-28 22:54:26 +0100vchlup_(~vchlup@nat.brnet.cz)
2021-02-28 22:54:30 +0100 <edwardk> data Foo a where Foo :: Foo Int; makes Foo :: forall a. (a ~ Int) => Foo a
2021-02-28 22:54:31 +0100 <hololeap> (with a definition for main, obviously)
2021-02-28 22:55:05 +0100kderme48(4fa758c1@ppp079167088193.access.hol.gr)
2021-02-28 22:55:09 +0100 <edwardk> hololeap: yes
2021-02-28 22:55:31 +0100 <hololeap> good to know :)
2021-02-28 22:55:32 +0100 <edwardk> {-# Language TypeFamilies #-}; main :: x ~ IO () => x; main = print "hello" runhaskell main.hs ===> "hello"
2021-02-28 22:57:03 +0100kderme(4fa758c1@ppp079167088193.access.hol.gr) (Ping timeout: 240 seconds)
2021-02-28 22:57:25 +0100dansho(~dansho@ec2-52-69-229-22.ap-northeast-1.compute.amazonaws.com)
2021-02-28 22:57:30 +0100nullniverse(~null@unaffiliated/nullniverse)
2021-02-28 22:57:31 +0100nullniverse(~null@unaffiliated/nullniverse) (Max SendQ exceeded)
2021-02-28 22:57:33 +0100 <rednaZ[m]> edwardk: The fundamental problem when trying to get a OpenSum type is that Haskell does not have type-level sets. This makes me think of row polymorphism. What happened to ermine?
2021-02-28 22:57:57 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Quit: Lost terminal)
2021-02-28 22:58:52 +0100 <edwardk> rednaZ[m]: i got cancer and eventually left the company right as corporate will to carry it to completion flagged.
2021-02-28 22:59:49 +0100 <edwardk> then i got better and landed at digital asset for a while and worked on daml instead
2021-02-28 22:59:56 +0100 <dansho> does this look like an unreasonable amount of allocations? if im reading right its about 1G/s http://codepad.org/7MbUjQ21
2021-02-28 22:59:57 +0100 <rednaZ[m]> edwardk: Sorry to heart that. I hope you are o.k.
2021-02-28 23:00:26 +0100 <edwardk> rednaZ[m]: afaict its all good now. I take a pill or two a day, but everything seems fine
2021-02-28 23:00:28 +0100Rudd0(~Rudd0@185.189.115.108)
2021-02-28 23:00:50 +0100 <rednaZ[m]> edwardk: In PureScript row's can contain the same label multiple times. Was this different in ermine?
2021-02-28 23:00:56 +0100 <edwardk> yes
2021-02-28 23:01:00 +0100 <rednaZ[m]> nice
2021-02-28 23:01:09 +0100 <dolio> It really isn't nice.
2021-02-28 23:01:11 +0100 <rednaZ[m]> That is how I understood it from that one youtube video.
2021-02-28 23:01:23 +0100 <edwardk> ermine rowtypes used 'can be partitioned into' constraints. which are apparently their own brand of crazy.
2021-02-28 23:01:36 +0100 <tomsmeding> BigLama: "connection" in "connection sharing" refers to the TCP connection, as in a TCP socket (or perhaps TLS connection if you're using https). If you give the header 'Connection: keep-alive' in a HTTP request, you can send another request on the same connection. This is advantageous since you don't have to setup the connection multiple times, which is fairly expensive when using TLS (https).
2021-02-28 23:01:36 +0100 <tomsmeding> It's not so expensive when using plain http, but still removes some overhead.
2021-02-28 23:01:45 +0100 <rednaZ[m]> edwardk: Seems like the way to avoid label duplication.
2021-02-28 23:01:48 +0100 <edwardk> Elem e es becomes 'exists x. such that es can be parititoned into e and x.
2021-02-28 23:02:10 +0100 <edwardk> similarly Lacks e es becomes exists y. such that y can be partitioned into e and es
2021-02-28 23:02:11 +0100 <tomsmeding> BigLama: this is purely a performance thing; this has nothing to do with logins or anything on that level.
2021-02-28 23:02:23 +0100 <edwardk> that part i liked. the practical aspects of typechecking it? not so much
2021-02-28 23:03:02 +0100 <rednaZ[m]> edwardk: I think of rows as type-level maps from type-level strings to types.
2021-02-28 23:03:21 +0100 <edwardk> xplat had a nice scheme involving describing such row types in terms of complete atomic boolean algebras, but we never got around to switching from the ad hoc pile of rules we made up to that.
2021-02-28 23:03:54 +0100 <rednaZ[m]> edwardk: Have you ever thought about general type-level maps from types to types?
2021-02-28 23:04:13 +0100cyphase(~cyphase@unaffiliated/cyphase) (Read error: Connection reset by peer)
2021-02-28 23:04:16 +0100 <rednaZ[m]> Than I could encode type-level sets as maps with index type unit.
2021-02-28 23:04:17 +0100 <edwardk> rednaZ[m]: have you look at ur/web?
2021-02-28 23:04:30 +0100 <rednaZ[m]> What is that?
2021-02-28 23:04:32 +0100 <edwardk> rednaZ[m]: you're basically reinventiong adam chlipala's baby
2021-02-28 23:04:36 +0100 <edwardk> er reinventing
2021-02-28 23:05:12 +0100kenran(~kenran@i59F67BBA.versanet.de) (Quit: leaving)
2021-02-28 23:05:49 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2021-02-28 23:06:23 +0100 <rednaZ[m]> Thanks for the pointer at adam chlipala. What is ur/web?
2021-02-28 23:06:37 +0100SchwarzeLocke(~SchwarzeL@178.239.168.171) (Remote host closed the connection)
2021-02-28 23:06:50 +0100 <rednaZ[m]> Ah, found it. http://www.impredicative.com/ur/
2021-02-28 23:07:41 +0100 <dolio> I kind of think that, in real retrospect, the rows in ermine were a fundemantally wrong choice for the use case.
2021-02-28 23:07:54 +0100 <edwardk> i agree
2021-02-28 23:08:05 +0100 <edwardk> lots of heavy lifting put to poor use
2021-02-28 23:08:07 +0100dcoutts_dcoutts
2021-02-28 23:08:11 +0100 <dolio> The databases don't actually do natural joins automatically.
2021-02-28 23:08:47 +0100 <dolio> So the real underlying rows automatically introduce duplicate fields that are only eliminated by further operations.
2021-02-28 23:08:48 +0100 <rednaZ[m]> Do you think allowing label duplication is the better choice?
2021-02-28 23:09:03 +0100 <dolio> In some situations, yes.
2021-02-28 23:09:29 +0100 <rednaZ[m]> In a general-purpose language?
2021-02-28 23:09:49 +0100 <edwardk> the joinOn (or joinWith, i forget the names) were the real workhorse of the language.
2021-02-28 23:10:03 +0100 <edwardk> and that didn't lean on 'natural' joins at all
2021-02-28 23:10:33 +0100 <dolio> That doesn't have an answer. You don't need rows for "general purpose". You need them for various features of a general purpose language, and which feature they're for might make duplicates or non-duplicates better.
2021-02-28 23:10:55 +0100 <dolio> I would say people under-estimate duplicates, though.
2021-02-28 23:10:57 +0100 <edwardk> in retrospect a more natural fit to sql would probably have been to have fully qualified Table.FieldName names or something, and then allow FieldName access to those when they were unambiguous, or something awful like that.
2021-02-28 23:10:58 +0100 <rednaZ[m]> I feel like I need checked exceptions pretty badly.
2021-02-28 23:11:01 +0100cyphase(~cyphase@unaffiliated/cyphase)
2021-02-28 23:11:15 +0100 <slack1256> Does anyone know if "space invariants" were developed onto a full theory? link: https://apfelmus.nfshost.com/blog/2013/08/21-space-invariants.html
2021-02-28 23:11:21 +0100 <edwardk> rednaZ[m]: when i throw an exception at you, what do you do then?
2021-02-28 23:11:40 +0100 <dolio> Okay, well, checked exceptions are actually an example where duplicates are good.
2021-02-28 23:11:46 +0100 <edwardk> i used to be more bullish on checked exceptions
2021-02-28 23:11:58 +0100 <BigLama> tomsmeding: thanks a lot :)
2021-02-28 23:12:20 +0100 <rednaZ[m]> edwardk: I handle it if I can. I `error` if I know it cannot happen effectively turning the exception into an unchecked one.
2021-02-28 23:12:35 +0100 <dolio> Because there's a problem with checked exceptions and polymorphism/abstraction.
2021-02-28 23:12:37 +0100 <edwardk> but given i can basically throw anything at any thread i've since become a bit more prosaic about the fact that checked exceptions just means the more exotic code path never gets tested and that exotic code path is super important in most concurrent programming situations
2021-02-28 23:13:11 +0100 <rednaZ[m]> I would already be happy about checked exceptions in pure code.
2021-02-28 23:13:29 +0100 <rednaZ[m]> instead of using `Either SomeException` or similar
2021-02-28 23:14:25 +0100 <edwardk> same issue arises there. you wind up with an Either case for things you are manually putting in expensive boxes and then taking out and putting back in expensive boxes all the time, and 'real exceptions' which blow up your leaky abstraction and are sadly cheaper.
2021-02-28 23:14:41 +0100 <dolio> If you have `f : (a -> b throws e) -> ...` where `f g = try ... g x ... catch { Exn1 -> ... }`, then the naive way for that to work violates the abstraction of `e`, because if `e` happens to contain `Exn1`, your handler will actually catch it.
2021-02-28 23:14:51 +0100 <edwardk> it _galls_ me that ReaderT (IORef s) IO -- is generally cheaper/faster than StateT s IO
2021-02-28 23:14:59 +0100tsrt^(tsrt@ip98-184-89-2.mc.at.cox.net) ()
2021-02-28 23:15:01 +0100 <edwardk> same diff for EitherT variants
2021-02-28 23:16:03 +0100 <rednaZ[m]> I do not care that much about performance.
2021-02-28 23:16:05 +0100nrh^(nrh@ip98-184-89-2.mc.at.cox.net)
2021-02-28 23:16:06 +0100 <dolio> So, either you muck about with lacks predicates for `e`, or you say that `e` is properly abstract, and you cannot catch `Exn1` from `e` even if it's there. But that is equivalent to being able to push on a duplicate `Exn1` field that gets caught by your handler.
2021-02-28 23:16:29 +0100coot_(~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2021-02-28 23:16:36 +0100 <rednaZ[m]> But I think you can even track "real exceptions" if you had row types.
2021-02-28 23:16:39 +0100catt(~r@31.127.31.99) (Ping timeout: 260 seconds)
2021-02-28 23:16:41 +0100 <dolio> The duplicate fields is how Koka does this for algebraic effects.
2021-02-28 23:16:52 +0100 <edwardk> rednaZ[m]: i get angry when i pay asymptotically more garbage because of administrative details in my language, the extra garbage then becomes additional heap walks slowly my program asymptotically.
2021-02-28 23:17:05 +0100 <edwardk> er slowing
2021-02-28 23:17:47 +0100 <dolio> It automatically had duplicate effects because it was written by Daan Liejen, and he just reused his records stuff.
2021-02-28 23:18:36 +0100 <dolio> So early papers say things like, "we haven't come up with a good use for this." But it turns out to be a way of solving a problem.
2021-02-28 23:18:51 +0100 <rednaZ[m]> edwardk: "asymptotically" in which argument?
2021-02-28 23:19:24 +0100orion(~orion@unaffiliated/orion) (Quit: "")
2021-02-28 23:20:19 +0100 <dolio> This is apparently called "tunnelling" when people were just talking about exceptions.
2021-02-28 23:20:25 +0100alx741(~alx741@181.196.68.52)
2021-02-28 23:20:28 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 245 seconds)
2021-02-28 23:20:33 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2021-02-28 23:20:58 +0100 <edwardk> rednaZ[m]: i do a bunch of state operations, especially abstract ones using MonadState s m, and i shed the carcasses of discarded (a, s) tuples all throughout my program, growing my heap. now i pay proportional to the size of my youngest generation (plus some occasional large collections) to clean up after myself.
2021-02-28 23:21:47 +0100 <edwardk> rednaZ[m]: its why i get annoyed at times working in haskekl. e.g. if i build a queue and put things in and take them off the other end of the job queue because of gc i have to pay proportional to the size of the queue, rather than the churn in the queue. (there's some tricks i keep playing with with compact regions to mitigate that)
2021-02-28 23:21:47 +0100tanuki(~quassel@173.168.154.189)
2021-02-28 23:21:52 +0100 <edwardk> er haskell
2021-02-28 23:22:28 +0100SatanX(~SatanX@185.204.1.185)
2021-02-28 23:22:29 +0100 <edwardk> with epoch based memory reclamation i can usually pay 'gc' overhead proportional to the churn, but i can't use that here directly.
2021-02-28 23:22:49 +0100SatanXGuest68145
2021-02-28 23:22:58 +0100 <rednaZ[m]> I agree.
2021-02-28 23:23:24 +0100__minoru__shirae(~shiraeesh@5.101.59.4) (Ping timeout: 245 seconds)
2021-02-28 23:23:36 +0100 <edwardk> the win in the ReaderT case is that its not constantly shedding tuple carcasses to the heap. you pay to deref when you access it.
2021-02-28 23:24:27 +0100 <edwardk> it annoys me that this is the path to the fastest haskell code i can write =)
2021-02-28 23:25:04 +0100 <dolio> I guess if I were pressed, I'd say that set-like records are always the wrong semantics. Deduplication and reordering of fields are convenience features for local interaction of a particular presentation of a row, but expecting abstract rows to deduplicate and reorder gets you in a lot of trouble.
2021-02-28 23:25:28 +0100svet_(~svet@90.200.185.163) (Ping timeout: 245 seconds)
2021-02-28 23:25:38 +0100xlei(znc@unaffiliated/xlei)
2021-02-28 23:25:58 +0100 <rednaZ[m]> edwardk: But what is the problem with `ReaderT (IORef s) IO`?
2021-02-28 23:26:21 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-02-28 23:27:22 +0100 <edwardk> rednaZ[m]: honestly not much other than you get stuck with the IO on the bottom driving the computation forward unlike the lazier state monad which has super powers
2021-02-28 23:27:48 +0100 <edwardk> on the plus side this fixes the fail issues with state
2021-02-28 23:28:08 +0100 <edwardk> on the minus side all the cool brain bending state tricks fall away like they do in everyone's effect systems
2021-02-28 23:28:10 +0100 <nshepperd> is there a continuation based StateT which doesn't make any tuples?
2021-02-28 23:28:21 +0100__minoru__shirae(~shiraeesh@5.101.59.4)
2021-02-28 23:28:22 +0100 <edwardk> nshepperd: yes
2021-02-28 23:28:43 +0100 <edwardk> still has the exception safety problems that the "ReaderT IO" pattern advocates complain about
2021-02-28 23:29:03 +0100 <edwardk> and ghc is not always great about seeing through the cps to optimize it
2021-02-28 23:29:05 +0100 <nshepperd> oh, sure
2021-02-28 23:29:09 +0100 <edwardk> especially when abstract
2021-02-28 23:29:18 +0100 <nshepperd> exception safety is futile :)
2021-02-28 23:29:38 +0100 <edwardk> nshepperd: you never write any code that needs to use more than one core do you? =)
2021-02-28 23:32:16 +0100curiousgay(~AdminUser@178.217.208.8)
2021-02-28 23:32:37 +0100Franciman(~francesco@host-82-49-79-189.retail.telecomitalia.it) (Quit: Leaving)
2021-02-28 23:35:46 +0100 <nshepperd> sometimes i do
2021-02-28 23:35:59 +0100 <rednaZ[m]> dolio: I do not understand your point with the `throws e` example.
2021-02-28 23:36:09 +0100 <edwardk> fair, i was being mildly facetious
2021-02-28 23:36:40 +0100 <nshepperd> speaking of, is there any ghc flag to make my program default to +RTS -N
2021-02-28 23:36:44 +0100 <rednaZ[m]> dolio: Surely, you should not be able to write a function `f` that catches all possible exceptions.
2021-02-28 23:36:59 +0100 <dolio> f catches a single exception.
2021-02-28 23:37:19 +0100kupi(uid212005@gateway/web/irccloud.com/x-qxtkrwfdkyjvofwt)
2021-02-28 23:37:21 +0100 <edwardk> you meam like -threaded -rtsopts -with-rtsopts=-N ?
2021-02-28 23:37:37 +0100 <nshepperd> that sounds like what i want
2021-02-28 23:37:48 +0100 <rednaZ[m]> dolio: `f : (a -> b throws e) -> b` would have to catch all, would it not?
2021-02-28 23:37:48 +0100 <dolio> Oh, I actually wrote a misleading signature, I guess. It should be: `f : (a -> b throw e) -> c throw e`
2021-02-28 23:38:21 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2021-02-28 23:39:18 +0100 <dolio> The point is that abstraction is broken, because the details of the exceptions used in the implementation of `f` leak into the type of its argument.
2021-02-28 23:39:31 +0100 <rednaZ[m]> You can write `f : (a -> b throws {Exn1 | r}) -> b throws r`, can you not?
2021-02-28 23:39:35 +0100 <dolio> Or the type is imprecise/unsound.
2021-02-28 23:39:38 +0100 <nshepperd> i wrote a gloss application that seems to be poorly responsive without -N (which i didn't think was meant to happen and maybe means some ffi call is "unsafe" that shouldn't be?)
2021-02-28 23:40:15 +0100__minoru__shirae(~shiraeesh@5.101.59.4) (Ping timeout: 240 seconds)
2021-02-28 23:41:08 +0100 <nshepperd> playing with writing a gui toolkit in gloss and reactive-banana
2021-02-28 23:41:10 +0100 <dolio> You can do that if you want your checked exceptions to be anti-modular.
2021-02-28 23:41:40 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-02-28 23:44:15 +0100 <rednaZ[m]> Why is that anti-modular?
2021-02-28 23:44:33 +0100 <rednaZ[m]> Because "the details of the exceptions used in the implementation of `f` leak into the type of its argument"?
2021-02-28 23:45:14 +0100 <dolio> Because the implementation details of `f` affect how it behaves on a parameter that would otherwise have an abstract type.
2021-02-28 23:45:26 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-02-28 23:46:00 +0100 <dolio> It means that `g` can't throw Exn1 exceptions without them accidentally getting handled by `f`, which uses them for its own purposes.
2021-02-28 23:47:09 +0100vchlup_(~vchlup@nat.brnet.cz) (Ping timeout: 245 seconds)
2021-02-28 23:50:06 +0100usr25_tm(~usr25@unaffiliated/usr25)
2021-02-28 23:50:09 +0100 <dolio> Another way of explaining the problem is that exception handlers are usually dynamically scoped, and dynamic scoping is anti-modular.
2021-02-28 23:50:28 +0100 <dolio> For perhaps more obvious reasons.
2021-02-28 23:51:13 +0100 <dolio> And the answer in that presentation is to make handlers statically scoped.
2021-02-28 23:51:14 +0100 <rednaZ[m]> Either g's or f's module defines and owns the Exn1 type. The Exn1 type becomes part of that modules specification.
2021-02-28 23:51:23 +0100 <rednaZ[m]> If the other module acts in a way that causes problems it is violating what the first modules specification is asking from a user.
2021-02-28 23:51:37 +0100 <rednaZ[m]> ...of that module.
2021-02-28 23:52:00 +0100 <rednaZ[m]> All specifications are expecting some preconditions.
2021-02-28 23:52:21 +0100 <rednaZ[m]> That is normal, is it not?
2021-02-28 23:52:35 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2021-02-28 23:53:49 +0100usr25(~usr25@unaffiliated/usr25) (Ping timeout: 245 seconds)
2021-02-28 23:54:20 +0100aarvar(~foewfoiew@2601:602:a080:fa0:d4c5:1ad7:b189:949e)
2021-02-28 23:56:28 +0100 <dolio> Well, that probably isn't a good assumption. But even if f's implementation 'owns' the exception, its type is cluttered with implementation details.
2021-02-28 23:57:08 +0100 <dolio> And those implementation details will build more and more clutter in the types that are just saying details that aren't supposed to matter about the implementations.
2021-02-28 23:57:29 +0100 <slack1256> Is there an update for https://www.slideshare.net/tibbe/highperformance-haskell ?
2021-02-28 23:57:43 +0100 <NieDzejkob> Is there a shorter way of writing r { field = f (field r) }?
2021-02-28 23:57:59 +0100 <dibblego> over f
2021-02-28 23:58:22 +0100 <slack1256> I was thinking on how to approach a project from the ground up with performance in mind (I have to show numbers :P ). This is an alternative to first writing it and then make it performant.
2021-02-28 23:59:18 +0100__minoru__shirae(~shiraeesh@5.101.59.4)
2021-02-28 23:59:20 +0100 <dolio> If you represent checked exceptions with `Either`, for instance, it's not possible for `f :: (a -> Either e b) -> Either e c` to accidentally catch the exceptions from the argument, via parametricity.
2021-02-28 23:59:22 +0100 <rednaZ[m]> NieDzejkob: `over #field f` if you are using https://hackage.haskell.org/package/optics or https://hackage.haskell.org/package/lens.
2021-02-28 23:59:54 +0100 <NieDzejkob> I don't use either yet, any opinions on optics vs lens vs microlens?