Home liberachat/#haskell: Logs Calendar

Logs on 2021-11-01 (liberachat/#haskell)

00:00:02 × zopsi quits (zopsi@2600:3c00::f03c:91ff:fe14:551f) (Quit: Oops)
00:01:02 zopsi joins (~zopsi@irc.dir.ac)
00:03:33 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
00:04:39 azimut joins (~azimut@gateway/tor-sasl/azimut)
00:09:50 × proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 260 seconds)
00:15:28 × CannabisIndica quits (~herb@user/mesaboogie) (Quit: ZNC - https://znc.in)
00:15:58 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
00:17:08 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
00:17:10 euandreh joins (~euandreh@2804:14c:33:9fe5:9d95:c71:11e4:3e0f)
00:18:43 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
00:20:39 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
00:21:30 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
00:21:55 Lord_of_Life_ is now known as Lord_of_Life
00:26:10 lavaman joins (~lavaman@98.38.249.169)
00:30:50 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
00:30:59 × acidjnk quits (~acidjnk@p5487d843.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
00:40:34 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
00:42:34 <janus> is it allowed to to make a Haskell Wiki article on fog? or would it worsen the problem? hmmm
00:45:09 <monochrom> I don't think the readership would be interested in IRC drama :)
00:46:00 <sm> not a good idea
00:48:47 <janus> sm: did you upgrade to Monterey? does it work?
00:49:21 <Nachtgespenst> What was the drama about fog?
00:49:31 <sm> not yet janus. shapr reports no problems
00:49:41 <sm> there wasn't any
00:51:31 <shapr> eh?
00:51:36 <Axman6> Did Apple manage to make a major release which _didn't_ break GHC? That's impressive!
00:52:19 <shapr> although today my laptop kernel panicked twice, and I wasn't compiling
00:53:40 CannibisIndica joins (~herb@user/mesaboogie)
00:55:25 × shailangsa quits (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) (Remote host closed the connection)
00:56:47 × CannibisIndica quits (~herb@user/mesaboogie) (Client Quit)
00:57:13 CannabisIndica joins (~herb@user/mesaboogie)
00:57:26 <shapr> Axman6: I think it broke everything else
00:57:34 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:57:34 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
00:57:34 wroathe joins (~wroathe@user/wroathe)
01:02:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
01:05:01 × xlei quits (znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Quit: ZNC - https://znc.in)
01:10:35 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
01:12:48 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:13:16 proboscis joins (~proboscis@14.137.28.197)
01:15:41 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
01:15:52 lavaman joins (~lavaman@98.38.249.169)
01:18:54 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:20:02 × Midjak quits (~Midjak@82-65-111-221.subs.proxad.net) (Quit: This computer has gone to sleep)
01:20:18 × proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 260 seconds)
01:21:42 xlei joins (znc@pool-68-129-84-118.nycmny.fios.verizon.net)
01:22:51 × peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Quit: Must not waste too much time here...)
01:23:06 <Axman6> Classic. Definitely waiting for the .1
01:25:00 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.3)
01:25:28 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
01:25:50 <geekosaur> this does not exactly make me regret ditching Apple
01:26:37 × xlei quits (znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Quit: ZNC - https://znc.in)
01:27:24 proboscis joins (~proboscis@115-189-129-241.mobile.spark.co.nz)
01:29:36 xlei joins (znc@pool-68-129-84-118.nycmny.fios.verizon.net)
01:29:53 tafama is now known as tafa
01:30:06 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
01:33:10 trillp joins (~trillp@69.233.98.238)
01:38:24 <dsal> shapr: compile more!
01:40:24 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
01:40:36 LiaoTao_ joins (~LiaoTao@gateway/tor-sasl/liaotao)
01:41:07 <Cajun> does apple seriously kernel panic that often? if so im shocked
01:44:06 × proboscis quits (~proboscis@115-189-129-241.mobile.spark.co.nz) (Ping timeout: 260 seconds)
01:44:53 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
01:46:21 hololeap joins (~hololeap@user/hololeap)
01:47:06 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
01:49:28 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:50:33 <Axman6> It's been a couple of years since I've had one, but they tend to crop up occasionally with new major OS releases, when they do things like rrqrite their whole graphics framework or security stuff you'd somewhat expect that to happen sometimes
01:51:00 <dsal> I've had a couple, but I'm running new hardware and all the bleeding edge stuff I can get.
01:51:12 <dsal> And much of the software I'm running is emulated.
01:52:35 <justsomeguy> I've had kernel panics on every operating system I've used. (Windows, Linux, FreeBSD, Cisco IOS, Android ...)
01:53:51 × mvk quits (~mvk@2607:fea8:5cc1:300::d3fb) (Ping timeout: 245 seconds)
01:55:46 <geekosaur> it's been a decade since I had a linux kernel panic. that said I don't run bleeding edge kernels or weird hardware
01:56:25 × catman quits (~catman@user/catman) (Read error: Connection reset by peer)
01:56:39 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
01:57:45 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
01:58:31 <justsomeguy> My laptop has an ACPI implementation bug.
01:59:39 justsomeguy really should spend some time investigating it, it's been bugging him for six years, now.
01:59:53 proboscis joins (~proboscis@115-189-129-110.mobile.spark.co.nz)
02:02:40 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
02:03:05 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:03:20 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
02:06:46 × frobnicator quits (~frobnicat@185-227-75-147.dsl.cambrium.nl) (Ping timeout: 245 seconds)
02:09:06 catman joins (~catman@user/catman)
02:10:05 <Axman6> the one that surprises me least is Cisco IOS
02:10:33 × n3t quits (n3t@user/n3t) (Read error: Connection reset by peer)
02:12:31 × m5zs7k quits (aquares@web10.mydevil.net) (Quit: m5zs7k)
02:12:46 n3t joins (~n3t@s45.mydevil.net)
02:14:22 m5zs7k joins (aquares@web10.mydevil.net)
02:15:06 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
02:18:27 × nrl^ quits (~nrl@wsip-98-188-242-6.mc.at.cox.net) (Remote host closed the connection)
02:19:30 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
02:19:42 mvk joins (~mvk@2607:fea8:5cc1:300::d3fb)
02:23:28 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
02:45:05 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:47:44 × mvk quits (~mvk@2607:fea8:5cc1:300::d3fb) (Quit: Konversation terminated!)
02:50:15 × n3t quits (~n3t@s45.mydevil.net) (Changing host)
02:50:15 n3t joins (~n3t@user/n3t)
02:50:47 × euandreh quits (~euandreh@2804:14c:33:9fe5:9d95:c71:11e4:3e0f) (Ping timeout: 264 seconds)
02:51:59 × xff0x quits (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) (Ping timeout: 264 seconds)
02:53:33 xff0x joins (~xff0x@2001:1a81:537f:9c00:f676:7afa:ede:1e04)
03:02:11 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 264 seconds)
03:05:38 fef joins (~thedawn@user/thedawn)
03:05:50 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
03:13:03 mbuf joins (~Shakthi@122.174.251.211)
03:16:40 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
03:16:41 × proboscis quits (~proboscis@115-189-129-110.mobile.spark.co.nz) (Read error: Connection reset by peer)
03:17:16 proboscis joins (~proboscis@115-189-129-110.mobile.spark.co.nz)
03:24:04 desophos joins (~desophos@2601:249:1680:a570:b44c:753b:291d:308f)
03:24:57 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
03:25:08 × desophos quits (~desophos@2601:249:1680:a570:b44c:753b:291d:308f) (Client Quit)
03:26:27 × catman quits (~catman@user/catman) (Read error: Connection reset by peer)
03:27:59 rtypo joins (~alex@user/rtypo)
03:28:01 × hololeap quits (~hololeap@user/hololeap) (Read error: Connection reset by peer)
03:29:19 hololeap joins (~hololeap@user/hololeap)
03:30:02 × proboscis quits (~proboscis@115-189-129-110.mobile.spark.co.nz) (Ping timeout: 260 seconds)
03:34:21 rtypo parts (~alex@user/rtypo) (WeeChat 3.3)
03:37:10 × alx741 quits (~alx741@181.196.69.253) (Quit: alx741)
03:40:53 boxscape_ joins (~boxscape_@mue-88-130-59-084.dsl.tropolys.de)
03:41:53 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
03:42:13 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
03:42:13 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
03:42:13 wroathe joins (~wroathe@user/wroathe)
03:43:07 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
03:46:21 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 245 seconds)
03:48:30 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
03:49:02 catman joins (~catman@user/catman)
03:57:33 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
04:00:54 yauhsien_ joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
04:00:54 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
04:03:57 × darkstarx quits (~darkstard@2601:1c2:300:c8a0::6c32) (Quit: Leaving)
04:05:47 × yauhsien_ quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
04:11:47 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
04:11:56 darkstardevx joins (~darkstard@2601:1c2:300:c8a0::6c32)
04:12:26 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
04:13:11 img joins (~img@user/img)
04:13:49 × darkstardevx quits (~darkstard@2601:1c2:300:c8a0::6c32) (Remote host closed the connection)
04:14:14 darkstardevx joins (~darkstard@2601:1c2:300:c8a0::6c32)
04:14:46 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 260 seconds)
04:16:39 × trillp quits (~trillp@69.233.98.238) (Quit: nyaa~)
04:22:18 × boxscape_ quits (~boxscape_@mue-88-130-59-084.dsl.tropolys.de) (Ping timeout: 260 seconds)
04:35:03 trillp joins (~trillp@69.233.98.238)
04:37:42 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
04:42:20 lavaman joins (~lavaman@98.38.249.169)
04:53:45 × sprout_ quits (~quassel@2a02:a467:ccd6:1:8872:6fff:30a7:51e0) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
04:53:50 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
04:54:03 sprout joins (~quassel@2a02:a467:ccd6:1:8872:6fff:30a7:51e0)
05:12:32 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:14:26 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
05:24:20 lavaman joins (~lavaman@98.38.249.169)
05:29:11 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
05:29:46 cjb72647 joins (~cjbayliss@user/cjb)
05:30:00 quazimodo joins (~quazimodo@n1-40-235-47.bla1.nsw.optusnet.com.au)
05:31:16 <quazimodo> if someone was going to write a function called 'compose' to do right to left composition, as an exercise, what would the type look like?
05:31:32 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
05:31:55 <quazimodo> in typescript we have to do all sorts of finite function type overloads to handle the case for each size of tuple of lambdas
05:31:58 <dibblego> @type flip (.)
05:31:59 <lambdabot> (a -> b) -> (b -> c) -> a -> c
05:32:04 × cjb quits (~cjbayliss@user/cjb) (Ping timeout: 260 seconds)
05:32:19 <quazimodo> dibblego: what happens when you have 10 of those lambdas?
05:32:26 <dibblego> wot now?
05:33:01 <quazimodo> (a -> b) -> (b -> c) -> (c -> d) ... all the way to -> (j -> k) -> a -> k
05:33:17 <dibblego> @type flip ((.) . (.))
05:33:18 <lambdabot> (a1 -> a2 -> b) -> (b -> c) -> a1 -> a2 -> c
05:33:22 <dibblego> ?
05:34:05 <quazimodo> @type flip ((.) . (.) . (.))
05:34:14 <quazimodo> :(
05:34:19 <quazimodo> it hates me
05:34:21 <quazimodo> @type flip ((.) . (.) . (.))
05:34:22 <lambdabot> (a1 -> a2 -> a3 -> b) -> (b -> c) -> a1 -> a2 -> a3 -> c
05:35:03 <dibblego> brb
05:35:12 × cjb72647 quits (~cjbayliss@user/cjb) ()
05:37:10 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
05:38:37 Jing joins (~textual@103.121.208.115)
05:40:44 <dibblego> @type f g h -> h . g . f
05:40:45 <lambdabot> error: parse error on input ‘->’
05:40:47 <dibblego> @type \f g h -> h . g . f
05:40:48 <lambdabot> (a -> b1) -> (b1 -> b2) -> (b2 -> c) -> a -> c
05:40:52 <dibblego> maybe you mean that
05:51:00 ghoulguy is now known as glguy
05:54:12 × retroid_ quits (~retro@2e41e9c8.skybroadband.com) (*.net *.split)
05:54:12 × infinity0 quits (~infinity0@occupy.ecodis.net) (*.net *.split)
05:54:12 × Unhammer quits (~Unhammer@user/unhammer) (*.net *.split)
05:54:12 × koz quits (~koz@2404:4408:430f:a900:ca69:658c:ba89:aa9f) (*.net *.split)
05:54:12 × riatre quits (~quassel@2001:310:6000:f::5198:1) (*.net *.split)
05:54:12 × Patternmaster quits (~georg@li1192-118.members.linode.com) (*.net *.split)
05:54:12 × stilgart quits (~Christoph@chezlefab.net) (*.net *.split)
05:54:12 × Arsen quits (~arsen@managarm/dev/Arsen) (*.net *.split)
05:54:12 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (*.net *.split)
05:54:12 × hongminhee quits (sid295@tinside.irccloud.com) (*.net *.split)
05:54:12 × jackdk quits (sid373013@cssa/jackdk) (*.net *.split)
05:54:12 × pjlsergeant quits (sid143467@hampstead.irccloud.com) (*.net *.split)
05:54:12 × stevenxl quits (sid133530@uxbridge.irccloud.com) (*.net *.split)
05:54:12 × rubin55 quits (sid175221@hampstead.irccloud.com) (*.net *.split)
05:54:12 × berberman quits (~berberman@user/berberman) (*.net *.split)
05:54:12 × hexology quits (~hexology@user/hexology) (*.net *.split)
05:54:12 × thonkpod quits (~thonkpod@user/thonkpod) (*.net *.split)
05:54:13 × vgtw quits (~vgtw@c-6a60205c.07-348-756d651.bbcust.telenor.se) (*.net *.split)
05:54:13 × gawen_ quits (~gawen@user/gawen) (*.net *.split)
05:54:13 × energizer quits (~energizer@user/energizer) (*.net *.split)
05:54:13 × Eoco quits (~ian@x-160-94-179-157.acm.umn.edu) (*.net *.split)
05:54:13 × maerwald quits (~maerwald@user/maerwald) (*.net *.split)
05:54:13 × haskl quits (~haskl@user/haskl) (*.net *.split)
05:54:13 × dfg quits (dfg@user/dfg) (*.net *.split)
05:54:13 × barrucadu quits (~barrucadu@carcosa.barrucadu.co.uk) (*.net *.split)
05:54:13 × greenbourne277 quits (~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0) (*.net *.split)
05:54:13 × Athas quits (athas@sigkill.dk) (*.net *.split)
05:54:13 × robertm quits (robertm@lattice.rojoma.com) (*.net *.split)
05:54:13 × flukiluke quits (~m-7humut@plum.alephc.xyz) (*.net *.split)
05:54:13 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (*.net *.split)
05:54:13 × canta quits (~canta@user/canta) (*.net *.split)
05:54:13 × royo quits (~royo@user/royo) (*.net *.split)
05:54:13 × koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (*.net *.split)
05:54:13 × incertia quits (~incertia@d4-50-26-103.nap.wideopenwest.com) (*.net *.split)
05:54:13 × exarkun quits (~exarkun@user/exarkun) (*.net *.split)
05:54:13 × caubert quits (~caubert@136.244.111.235) (*.net *.split)
05:54:13 × root1 quits (root@2600:3c02::f03c:92ff:fe1a:c779) (*.net *.split)
05:54:21 riatre joins (~quassel@2001:310:6000:f::5198:1)
05:54:21 royo joins (~royo@user/royo)
05:54:22 Athas joins (athas@2a01:7c8:aaac:1cf:ca09:aa6a:e1e8:dce5)
05:54:24 jackdk joins (sid373013@cssa/jackdk)
05:54:25 Patternmaster joins (~georg@li1192-118.members.linode.com)
05:54:26 stilgart joins (~Christoph@chezlefab.net)
05:54:27 koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com)
05:54:30 rubin55 joins (sid175221@id-175221.hampstead.irccloud.com)
05:54:32 koz joins (~koz@2404:4408:430f:a900:ca69:658c:ba89:aa9f)
05:54:33 stevenxl joins (sid133530@id-133530.uxbridge.irccloud.com)
05:54:33 root1 joins (root@2600:3c02::f03c:92ff:fe1a:c779)
05:54:34 canta joins (~canta@cvm0.d5k.one)
05:54:34 caubert joins (~caubert@136.244.111.235)
05:54:35 hongminhee joins (sid295@id-295.tinside.irccloud.com)
05:54:35 pjlsergeant joins (sid143467@id-143467.hampstead.irccloud.com)
05:54:43 greenbourne277 joins (~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0)
05:54:43 Eoco joins (~ian@x-160-94-179-157.acm.umn.edu)
05:54:44 robertm joins (robertm@lattice.rojoma.com)
05:54:46 × canta quits (~canta@cvm0.d5k.one) (Changing host)
05:54:46 canta joins (~canta@user/canta)
05:54:52 Unhammer joins (~Unhammer@2a01:799:60:df00::237)
05:54:52 thonkpod joins (~thonkpod@2001:19f0:ac01:b46:5400:1ff:fec7:d73d)
05:54:58 Arsen joins (~arsen@managarm/dev/Arsen)
05:55:05 × Unhammer quits (~Unhammer@2a01:799:60:df00::237) (Changing host)
05:55:05 Unhammer joins (~Unhammer@user/unhammer)
05:55:11 exarkun joins (~exarkun@user/exarkun)
05:55:14 × thonkpod quits (~thonkpod@2001:19f0:ac01:b46:5400:1ff:fec7:d73d) (Changing host)
05:55:14 thonkpod joins (~thonkpod@user/thonkpod)
05:55:28 dfg joins (~dfg@li490-89.members.linode.com)
05:55:31 × dfg quits (~dfg@li490-89.members.linode.com) (Changing host)
05:55:31 dfg joins (~dfg@user/dfg)
05:55:35 maerwald joins (~maerwald@mail.hasufell.de)
05:55:42 haskl joins (~haskl@user/haskl)
05:55:50 incertia joins (~incertia@d4-50-26-103.nap.wideopenwest.com)
05:55:56 berberman joins (~berberman@user/berberman)
05:55:57 hexology joins (~hexology@user/hexology)
05:55:57 gawen joins (~gawen@user/gawen)
05:56:03 vgtw joins (~vgtw@c-6a60205c.07-348-756d651.bbcust.telenor.se)
05:56:19 rkrishnan joins (~user@223.226.59.167)
05:56:20 infinity0 joins (~infinity0@occupy.ecodis.net)
05:56:30 energizer joins (~energizer@user/energizer)
05:58:48 retroid_ joins (~retro@2e41e9c8.skybroadband.com)
05:59:00 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
05:59:29 barrucadu joins (~barrucadu@carcosa.barrucadu.co.uk)
05:59:46 Maxdamantus joins (~Maxdamant@user/maxdamantus)
06:00:31 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
06:00:43 <dsal> :t (&)
06:00:44 <lambdabot> a -> (a -> b) -> b
06:01:34 <dsal> I don't know why I was thinking that was similar to flip (.) other than being late. heh
06:01:37 lavaman joins (~lavaman@98.38.249.169)
06:01:49 <dibblego> @type flip ($) -- you might be thinking of that
06:01:50 <lambdabot> a -> (a -> c) -> c
06:02:20 <dsal> I think it's just how . and $ are sometimes interchangeable.
06:02:50 × schuelermine[m] quits (~schuelerm@user/schuelermine) (*.net *.split)
06:02:50 × lisq quits (~quassel@lis.moe) (*.net *.split)
06:02:50 × fakehacker[m] quits (~fakehacke@2001:470:69fc:105::b5f0) (*.net *.split)
06:02:50 × surgeon[m] quits (~surge9nma@2001:470:69fc:105::f585) (*.net *.split)
06:02:50 × unclechu quits (~unclechu@2001:470:69fc:105::354) (*.net *.split)
06:02:50 × fcortesi quits (~fcortesi@2001:470:69fc:105::f3a9) (*.net *.split)
06:02:50 × alexfmpe[m] quits (~alexfmpem@2001:470:69fc:105::38ba) (*.net *.split)
06:02:50 × Morrow[m] quits (~morrowmma@2001:470:69fc:105::1d0) (*.net *.split)
06:02:50 × the-coot[m] quits (~the-cootm@2001:470:69fc:105::95f) (*.net *.split)
06:02:50 × denbrahe[m] quits (~denbrahem@2001:470:69fc:105::19c0) (*.net *.split)
06:02:50 × psydroid quits (~psydroid@user/psydroid) (*.net *.split)
06:02:50 × hugo quits (znc@verdigris.lysator.liu.se) (*.net *.split)
06:02:50 × ddb quits (~ddb@ipv6two.tilde.club) (*.net *.split)
06:02:50 × tito quits (tito@tilde.team) (*.net *.split)
06:02:50 × phaazon quits (~phaazon@2001:41d0:a:fe76::1) (*.net *.split)
06:02:50 × mht quits (~mht@2a03:b0c0:3:e0::1e2:c001) (*.net *.split)
06:02:50 × meridion quits (~meridion@punt.hetgrotebos.org) (*.net *.split)
06:02:51 × madnight_ quits (~madnight@static.59.103.201.195.clients.your-server.de) (*.net *.split)
06:02:51 × noddy quits (~user@user/noddy) (*.net *.split)
06:02:51 × acro quits (~acro@user/acro) (*.net *.split)
06:02:51 × Ankhers quits (~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com) (*.net *.split)
06:02:51 × rookie101 quits (~rookie@207.154.204.166) (*.net *.split)
06:02:51 × bastelfreak quits (~bastelfre@basteles-bastelknecht.bastelfreak.org) (*.net *.split)
06:02:51 × dunj3 quits (~dunj3@kingdread.de) (*.net *.split)
06:02:51 × dexterfoo quits (dexter@2a01:7e00::f03c:91ff:fe86:59ec) (*.net *.split)
06:02:51 × aforemny quits (~aforemny@static.248.158.34.188.clients.your-server.de) (*.net *.split)
06:02:51 × dixie quits (~dixie@real.wilbury.sk) (*.net *.split)
06:02:51 × xnbya quits (~xnbya@2a01:4f8:c17:cbdd::1) (*.net *.split)
06:02:51 × V quits (~v@anomalous.eu) (*.net *.split)
06:02:51 × tired quits (~tired@user/tired) (*.net *.split)
06:02:51 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (*.net *.split)
06:02:51 × janus quits (janus@anubis.0x90.dk) (*.net *.split)
06:02:51 × relrod quits (~relrod@redhat/ansible.staff.relrod) (*.net *.split)
06:02:51 × tristanC quits (~tristanC@user/tristanc) (*.net *.split)
06:02:51 × dfordvm quits (~dfordivam@tk2-219-19469.vs.sakura.ne.jp) (*.net *.split)
06:02:51 × sphynx quits (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (*.net *.split)
06:02:51 × bcoppens quits (~bartcopp@vpn2.bartcoppens.be) (*.net *.split)
06:02:51 × res0nat0r8 quits (~Fletch@dia.whatbox.ca) (*.net *.split)
06:02:51 × Hobbyboy quits (Hobbyboy@hobbyboy.co.uk) (*.net *.split)
06:02:51 × cpape quits (~user@2a01:4f9:c010:632d::1) (*.net *.split)
06:02:57 xnbya joins (~xnbya@2a01:4f8:c17:cbdd::1)
06:02:57 meridion joins (~meridion@punt.hetgrotebos.org)
06:02:58 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
06:02:59 bcoppens joins (~bartcopp@vpn2.bartcoppens.be)
06:02:59 dunj3 joins (~dunj3@kingdread.de)
06:02:59 cpape joins (~user@2a01:4f9:c010:632d::1)
06:03:00 dixie joins (~dixie@real.wilbury.sk)
06:03:02 res0nat0r8 joins (~Fletch@dia.whatbox.ca)
06:03:02 tristanC joins (~tristanC@163.172.94.116)
06:03:03 sphynx joins (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288)
06:03:04 lisq joins (~quassel@lis.moe)
06:03:05 tito joins (tito@tilde.team)
06:03:06 janus joins (janus@anubis.0x90.dk)
06:03:06 phaazon joins (~phaazon@2001:41d0:a:fe76::1)
06:03:07 relrod joins (~relrod@redhat/ansible.staff.relrod)
06:03:15 × tristanC quits (~tristanC@163.172.94.116) (Changing host)
06:03:15 tristanC joins (~tristanC@user/tristanc)
06:03:17 dexterfoo joins (dexter@2a01:7e00::f03c:91ff:fe86:59ec)
06:03:17 Hobbyboy joins (Hobbyboy@hobbyboy.co.uk)
06:03:19 V joins (~v@anomalous.eu)
06:03:21 bastelfreak joins (~bastelfre@basteles-bastelknecht.bastelfreak.org)
06:03:21 mht joins (~mht@mht.wtf)
06:03:26 ddb joins (~ddb@ipv6two.tilde.club)
06:03:30 madnight joins (~madnight@static.59.103.201.195.clients.your-server.de)
06:03:30 tired joins (~tired@user/tired)
06:03:31 dfordvm joins (~dfordivam@tk2-219-19469.vs.sakura.ne.jp)
06:03:46 Ankhers joins (~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com)
06:03:58 rookie101 joins (~rookie@207.154.204.166)
06:05:02 hugo joins (znc@verdigris.lysator.liu.se)
06:05:10 surgeon[m] joins (~surge9nma@2001:470:69fc:105::f585)
06:05:43 <dibblego> only syntactically
06:05:48 <dibblego> f $ g $ h
06:05:50 <dibblego> f $ (g $ h)
06:05:53 <dibblego> f . g . h
06:05:56 <dibblego> oops
06:06:22 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
06:06:36 acro joins (~acro@user/acro)
06:06:55 the-coot[m] joins (~the-cootm@2001:470:69fc:105::95f)
06:06:55 fcortesi joins (~fcortesi@2001:470:69fc:105::f3a9)
06:07:12 fakehacker[m] joins (~fakehacke@2001:470:69fc:105::b5f0)
06:07:22 schuelermine[m] joins (~schuelerm@user/schuelermine)
06:08:11 aforemny joins (~aforemny@static.248.158.34.188.clients.your-server.de)
06:09:17 shailangsa joins (~shailangs@host217-39-45-200.range217-39.btcentralplus.com)
06:09:36 unclechu joins (~unclechu@2001:470:69fc:105::354)
06:10:54 denbrahe[m] joins (~denbrahem@2001:470:69fc:105::19c0)
06:11:05 Morrow[m] joins (~morrowmma@2001:470:69fc:105::1d0)
06:11:06 psydroid joins (~psydroid@user/psydroid)
06:11:06 alexfmpe[m] joins (~alexfmpem@2001:470:69fc:105::38ba)
06:12:12 v01d4lph4 joins (~v01d4lph4@223.190.95.48)
06:12:12 × v01d4lph4 quits (~v01d4lph4@223.190.95.48) (Changing host)
06:12:12 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
06:17:52 <jackdk> quazimodo: is a tuple the best choice here? Can you compose the functions sooner so you're not carrying wide tuples around everywhere?
06:18:43 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
06:28:49 Guest16 joins (~Guest16@103.99.84.6)
06:29:53 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
06:30:40 ec joins (~ec@gateway/tor-sasl/ec)
06:38:01 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
06:38:27 chexum joins (~quassel@gateway/tor-sasl/chexum)
06:46:28 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:51:26 lavaman joins (~lavaman@98.38.249.169)
06:51:26 <quazimodo> jackdk: it's more of a mental exercise, I use typescript a lot in our business and it doesn't compose/curry the same way as haskell
06:51:55 <quazimodo> i suppose in haskell the compose operation operates on pairs, never a big tuple of functions that are passed into a function
06:52:26 <dibblego> nah, compose in haskell operates on functions, and all functions in haskell take exactly one argument
06:53:30 <quazimodo> the people who came up with this stuff are arcane wizards honestly
06:54:12 Lycurgus joins (~juan@98.4.112.204)
06:56:10 <jackdk> I don't think so. It's more that they've started from a different set of baseline assumptions than the ones you're used to, and as you practice more and internalise those assumptions you'll find it easier to think about.
06:56:14 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
06:56:25 × phma quits (~phma@host-67-44-208-63.hnremote.net) (Read error: Connection reset by peer)
06:57:00 <jackdk> (Although, yes, there are some terrifically smart people around, and it's an absolute privilege to build atop their work.)
06:57:15 phma joins (~phma@host-67-44-209-24.hnremote.net)
06:58:43 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
07:03:04 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
07:03:20 boxscape_ joins (~boxscape_@mue-88-130-59-184.dsl.tropolys.de)
07:03:30 ec joins (~ec@gateway/tor-sasl/ec)
07:07:15 cheater joins (~Username@user/cheater)
07:08:25 zincy_ joins (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2)
07:08:51 × qwedfg quits (~qwedfg@user/qwedfg) (Read error: Connection reset by peer)
07:09:49 lavaman joins (~lavaman@98.38.249.169)
07:09:57 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
07:11:23 Lycurgus now that he's used it, thinks of typescript as just a more OO js, not related to FP in the hs sense
07:12:18 qwedfg joins (~qwedfg@user/qwedfg)
07:14:38 <quazimodo> Lycurgus: we try to use it functionally but it's not
07:15:38 <Lycurgus> no it isn't but a lot pkgs use it, and I find it convenient
07:16:20 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:16:58 <Lycurgus> xstate is the one I was trynna think of
07:17:44 <Lycurgus> a lot of react pkgs too
07:19:20 × brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection)
07:20:21 <quazimodo> xstate is useful, we use it
07:20:59 × zincy_ quits (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection)
07:21:56 <Lycurgus> it's an almost embarrasing but extremely common cognitive error, from "type" to assume FP because hs
07:25:56 gehmehgeh joins (~user@user/gehmehgeh)
07:30:53 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 265 seconds)
07:36:49 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
07:39:31 × aegon quits (~mike@174.127.249.180) (Quit: leaving)
07:40:28 fendor joins (~fendor@77.119.160.25.wireless.dyn.drei.com)
07:54:10 × quazimodo quits (~quazimodo@n1-40-235-47.bla1.nsw.optusnet.com.au) (Ping timeout: 260 seconds)
07:55:33 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
07:56:20 lortabac joins (~lortabac@2a01:e0a:541:b8f0:1b26:eada:1c7:e76b)
07:56:51 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
08:01:45 × fendor quits (~fendor@77.119.160.25.wireless.dyn.drei.com) (Read error: Connection reset by peer)
08:01:58 cheater joins (~Username@user/cheater)
08:02:42 fendor joins (~fendor@77.119.160.25.wireless.dyn.drei.com)
08:04:43 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection)
08:05:25 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
08:05:33 hendursa1 joins (~weechat@user/hendursaga)
08:09:06 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
08:11:00 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:11:21 acidjnk joins (~acidjnk@p200300d0c74411311cbabef3984b18e3.dip0.t-ipconnect.de)
08:16:25 LiaoTao_ is now known as LiaoTao
08:17:27 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
08:17:51 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:17:53 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
08:18:07 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection)
08:18:43 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
08:22:52 <kritzefitz> Does the PVP specify an exception for upper bounds on base? People are asking me to weaken the upper bound for base to `< 5` in one of my libraries. But from what I understand, that wouldn't be compliant with PVP.
08:23:58 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
08:29:23 mc47 joins (~mc47@xmonad/TheMC47)
08:32:12 cfricke joins (~cfricke@user/cfricke)
08:33:29 <dminuoso> kritzefitz: No.
08:33:59 <dminuoso> kritzefitz: Since base has a history of breaking changes, its simpler to just use set-notation + ^ notation, to quickly add known working base versions
08:35:22 <kritzefitz> That's the approach I have taken so far. But I guess people are annoyed that they have to poke me for updated bounds on every GHC release.
08:36:13 <dminuoso> kritzefitz: It's the trade off between honest version bounds, and the risk of breaking builds in the future.
08:37:11 <mc47> Hello, I'm having a question about GHC, specifically the -Wincomplete-uni-patterns flag. It feels too agressive, since things like `let [i1,i2] = map f [w1,w2]` are also handled as errors
08:37:34 <mc47> Is this a conscious choice? Isn't it possible to detect that this is safe somehow?
08:37:56 <dminuoso> Yes and no.
08:38:43 <mc47> how so? I could think of some abstract interpretation pass that might detect this
08:39:07 <mc47> (No idea how or where GHC implements these checks)
08:39:25 <dminuoso> mc47: Im not entirely sure about incomplete-uni-patterns, but the incomplete-patterns is ridiculously complicated to do right.
08:39:40 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
08:40:21 <dminuoso> It wasnt until about 2 years ago until someone figured out how to it correctly, there was a WIP branch in ghc to implement it, not sure whether it has been merged already.
08:41:04 <dminuoso> SPJ once put it this way, there are problems that look simple and are hard to solve, problems that look hard but are hard to solve, and then there's incomplete pattern matches, which looked hard and was hard to solve.
08:42:12 chomwitt joins (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374)
08:43:13 <dminuoso> mc47: The difficulty really is writing a generic algorithm that works over arbitrary code. In your example, we'd have to leverage either a law (namely that map cant change the length of a list), or do this diagnostic *after* inlining.
08:43:35 <dminuoso> Without either, you're in incomplete patterns territory
08:44:24 <dminuoso> GHC right now doesn't really know about such laws, and doing diagnostics after inlining seems quite hard, given that the diagnostic would have to operate on completely transformed core - and then somehow map the results back to the original code (which might not be applicable at all)
08:44:29 <mc47> Makes sense, but aren't these laws written anywhere?
08:44:41 <mc47> oh
08:45:10 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
08:45:25 <lortabac> type-class laws are just conventions, nothing prevents you from writing instances that break the laws
08:45:32 <mc47> It was a breeze proving `length xs = length (map f xs)` with Isabelle
08:45:34 <mc47> yeah yeah that's true
08:45:36 <dminuoso> Well in case of `map` you know this law to hold, lortabac.
08:45:46 <dminuoso> So one could really teach GHC about this.
08:46:17 <lortabac> ok but that would mean adding special cases to the exaustiveness checker
08:46:19 <dminuoso> But then you have to wonder, whether special casing for this singular function is going to add much value.
08:46:20 <dminuoso> Yeah
08:46:46 <mc47> Do you recommend and reading material or talks about where this is implemented in the GHC pipeline?
08:46:51 <mc47> true
08:47:31 <mc47> or any "getting started" guide on GHC? The more theoretical the better :D
08:47:43 <dminuoso> mc47: https://www.youtube.com/watch?v=SWO5OzSxD6Y
08:47:45 <dminuoso> Is a good starting point
08:48:08 <dminuoso> In there SPJ should at some point refer to the paper he helped author that is the basis for this new exhaustiveness checker
08:48:22 <dminuoso> Note, that this is not what GHC does not right, but will be doing (?) in the near future
08:48:41 <dminuoso> What GHC does right now in terms of exhausitiveness checking is very complicated and highly error prone
08:48:58 <dminuoso> Few things have provoked as many error reports as that singular part. :)
08:49:08 <mc47> thank you
08:49:10 arjun joins (~user@user/arjun)
08:49:44 <mc47> I guess we'll just disable -Wincomplete-uni-patterns for GHC 9.2.1 for the time being, many things just look too ugly
08:53:23 tremon joins (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl)
08:56:24 fendor_ joins (~fendor@77.119.160.25.wireless.dyn.drei.com)
08:56:24 × fendor quits (~fendor@77.119.160.25.wireless.dyn.drei.com) (Read error: Connection reset by peer)
08:56:42 <tomsmeding> isn't this the Lower Your Guards paper? https://www.microsoft.com/en-us/research/uploads/prod/2020/03/lower-your-guards-icfp20.pdf
08:57:17 Guest396 joins (~Guest39@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
08:58:39 <dminuoso> tomsmeding: Looks like, yes. Couldn't find it on short notice
08:59:19 <tomsmeding> I read it a while ago, is quite readable IIRC :)
09:00:08 × kar1 quits (~kar1@2001:470:69fc:105::c308) (Quit: You have been kicked for being idle)
09:00:47 <mc47> Awesome! THanks tomsmeding
09:01:21 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
09:01:38 alzgh joins (~alzgh@user/alzgh)
09:01:55 ec joins (~ec@gateway/tor-sasl/ec)
09:01:55 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
09:04:41 <alzgh> Can someone help me understand `>>`? The doc says it chains actions while discarding any value produced by the first action but when I do `putStrLn "hello" >> putStrLn "goodbye"` it outputs both words. Is this because writing "hello" is an effect and not a value produced by `putStrLn`? If so, can you give me an example where the value produced is discarded? Thank you.
09:05:07 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
09:05:15 <tomsmeding> % return 42 >> putStrLn "goodbye" -- alzgh
09:05:16 <yahb> tomsmeding: goodbye
09:05:52 <tomsmeding> the value is the thing of type 'a' in the 'IO a', or more generally the 'm a' where m is a Monad
09:06:03 <tomsmeding> the effect is all the other stuff that you can do in the monad
09:06:27 <alzgh> right, thank you tomsmeding
09:07:44 L29Ah joins (~L29Ah@wikipedia/L29Ah)
09:07:55 gentauro joins (~gentauro@user/gentauro)
09:10:09 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Ping timeout: 268 seconds)
09:11:10 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:15:06 chele joins (~chele@user/chele)
09:15:08 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:17:11 × tafa quits (~tafa@2a04:52c0:101:85c::1) (Ping timeout: 245 seconds)
09:17:21 tafa joins (~tafa@2a04:52c0:101:85c::1)
09:21:33 <kritzefitz> Can I force cabal to skip building a specific build-tool-depends and instead use one found one the path or specified via `--with-PROG`?
09:21:36 × Jing quits (~textual@103.121.208.115) (Remote host closed the connection)
09:23:26 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
09:28:26 <kritzefitz> More specifically: I installed GHC 9.2.1 via ghcup. Now I can't build packages with hsc2hs, because hsc2hs-0.68.7 doesn't build with base-1.16.0.0 and hsc2-hs0.68.8 is not on hackage. Using a hsc2hs compiled with an older base or using the hsc2hs shipped with ghc-9.2.1 would probably work, but I don't know how to prevent "cabal build" from wanting to build a new hsc2hs.
09:29:17 <arjun> kritzefitz: maybe try cabal build --alow-newer
09:29:30 <arjun> not sure if that would work tho
09:29:47 <arjun> --allow-newer* typo
09:32:38 <kritzefitz> That seems to work. Or rather it seems to reveal that the ghc-9.2 I installed seems to be completely broken and always fail with a linker error.
09:33:00 <arjun> yea, 9.2.1 is still new
09:33:31 <arjun> common thing to do in this case is wait for the libs to catch-up
09:33:45 <fvr> whats the linker error?
09:33:51 <arjun> and move to an older, stabler version, like 8.10.7
09:35:02 <kritzefitz> “cannot find -lnuma“ and then some missing symbols. I guess I'm just missing some dependency libraries on my system.
09:35:32 <kritzefitz> Yup, install libnuma-dev helped.
09:36:16 <kritzefitz> And now hsc2hs also works. Thanks for the help!
09:36:54 oxide joins (~lambda@user/oxide)
09:38:24 <arjun> kritzefitz: np
09:38:47 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
09:39:08 <kritzefitz> I usually use more stable versions of GHC for my day-to-day development. But people specifically asked me to upgrade one of my libraries to GHC-9.2.
09:39:37 <arjun> kritzefitz: it has the native arm codegen, so that might be the reason : P
09:42:51 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
09:43:09 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
09:43:38 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
09:44:26 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
09:44:51 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
09:46:32 <timCF> Hello! Let's say I do have 2 different cabal/stack Haskell packages which do export 2 different modules with the same name Foo. My package is using them both as dependencies. How do I import/use 2 different modules named Foo separately?
09:48:34 <int-e> there's https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/exts/package_qualified_imports.html
09:49:22 × xff0x quits (~xff0x@2001:1a81:537f:9c00:f676:7afa:ede:1e04) (Ping timeout: 260 seconds)
09:49:37 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
09:52:55 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
09:54:31 xff0x joins (~xff0x@2001:1a81:537f:9c00:f676:7afa:ede:1e04)
09:56:24 × acidjnk quits (~acidjnk@p200300d0c74411311cbabef3984b18e3.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
09:57:34 tdwamdors^ joins (~tdwamdors@wsip-98-188-242-6.mc.at.cox.net)
09:57:36 <merijn> timCF: The recommended solution is: publically shame the authors to "stop fucking doing that"
10:03:08 acidjnk joins (~acidjnk@p200300d0c74411311cbabef3984b18e3.dip0.t-ipconnect.de)
10:03:42 fef joins (~thedawn@user/thedawn)
10:05:41 × fef quits (~thedawn@user/thedawn) (Client Quit)
10:08:05 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
10:08:51 shidima joins (~user@188-206-67-204.mobile.kpn.net)
10:11:28 <shidima> Can some one tell me what I'm doing wrong here: https://pastebin.com/DeyjxsiC
10:11:44 <shidima> Am I creating the type wrong?
10:14:38 <Hecate> shidima: okay so
10:15:02 <Hecate> shidima: how many arguments does the constructor "Individual" have?
10:17:18 × shidima quits (~user@188-206-67-204.mobile.kpn.net) (Read error: Connection reset by peer)
10:19:48 Jing joins (~textual@103.121.208.52)
10:19:54 fef joins (~thedawn@user/thedawn)
10:21:57 <arjun> .
10:22:11 <arjun> oh, they left?
10:22:15 <arjun> nvm
10:23:22 fef parts (~thedawn@user/thedawn) ()
10:24:12 <Hecate> yep :')
10:24:22 <arjun> \o Hecate
10:27:22 <merijn> As is tradition
10:30:34 Guest|83 joins (~Guest|83@101.100.131.49)
10:30:55 × Guest|83 quits (~Guest|83@101.100.131.49) (Client Quit)
10:33:32 <alzgh> when I add libraries to the `build-depends` directive in my `.cabal` file, I don't need to separately install those libraries? cabal will download and install them for me automatically?
10:34:01 <Hecate> alzgh: yes absolutely :)
10:34:03 <Hecate> arjun: o/
10:34:05 <Hecate> merijn: indeed
10:34:08 <arjun> alzgh: sure
10:34:44 <arjun> i neat trick i picked up earlier, you may not even mention the bounds initially
10:35:07 <arjun> you just go build-depends: base,text,time etc
10:35:16 <arjun> then run cabal gen-bounds
10:35:55 <alzgh> I'm just a little bit confused about where cabal installs them. Is it per project? So, I don't need to worry about version hell on global level between different projects? Also, what about `cabal install` then?
10:36:00 phma_ joins (~phma@host-67-44-209-61.hnremote.net)
10:36:28 <arjun> alzgh: you don't need to worry about cabal hell anymore with cabal 3.0+
10:36:55 <arjun> these are installed in .cabal in home in unix or the relevant counterpart in windows
10:37:20 × phma quits (~phma@host-67-44-209-24.hnremote.net) (Read error: Connection reset by peer)
10:37:39 <alzgh> nice, so `cabal install` is not needed anymore?
10:37:50 <arjun> it is
10:37:56 <merijn> alzgh: All installed dependencies are tagged with a hash of their (and transitive dependencies) code/config
10:38:17 <merijn> alzgh: So you can have unlimited number of parallel installs of the same packages with conflicting configuration
10:38:29 <arjun> well, if you're building a executable and want to install it, else, you can work with cabal run or cabal build
10:39:03 × yahb quits (xsbot@user/mniip/bot/yahb) (Ping timeout: 268 seconds)
10:40:46 <alzgh> Thank you, I think I'm starting to understand. So, the selling point of Stack isn't enabling different/parallel versions of the same package (maybe it was before cabal 3.0), but rather guaranteeing that different package work smoothly together like in a stable distro.
10:41:39 <arjun> totes, it's like a snapshot of package versions that are bound to play nice with each other and will always will, given the same resolver version.
10:42:21 <alzgh> thank you :D
10:42:46 <geekosaur> it was before cabal 2.0
10:44:38 × Guest16 quits (~Guest16@103.99.84.6) (Quit: Client closed)
10:44:49 × mniip quits (mniip@libera/staff/mniip) (Ping timeout: 633 seconds)
10:48:38 × maerwald quits (~maerwald@mail.hasufell.de) (Changing host)
10:48:38 maerwald joins (~maerwald@user/maerwald)
10:49:21 <maerwald> arjun: sup
10:49:41 <arjun> maerwald: \o
10:49:48 <arjun> how you been doin mate
10:50:32 <maerwald> doing haskell on windows mostly
10:50:38 <maerwald> which gives me odd pleasure
10:50:51 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
10:50:52 <maerwald> I'm not sure if it's good or bad
10:51:02 Farzad joins (~FarzadBek@178.131.25.90)
10:51:10 <arjun> i tried it sometime back, it surprisingly works well enough, doesn't it
10:51:15 <arjun> ghcup is champ
10:51:33 yahb joins (xsbot@user/mniip/bot/yahb)
10:51:53 mniip joins (mniip@libera/staff/mniip)
10:51:59 <maerwald> mostly due to my abstract-filepath stuff
10:52:10 <maerwald> trying to migrate my directory package fork to windows
10:52:46 <maerwald> reading windows API is like looking at a car crash from a distance... it shouldn't be fun, but it is
10:52:50 × phma_ quits (~phma@host-67-44-209-61.hnremote.net) (Ping timeout: 260 seconds)
10:53:01 <arjun> lmao
10:54:17 <maerwald> I still don't really know what junction points are
10:54:57 phma_ joins (~phma@host-67-44-209-61.hnremote.net)
10:55:25 phma_ is now known as phma
10:55:37 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
10:55:48 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
10:58:00 <maerwald> also, the semantics of what an "executable" is on windows are... well
10:58:02 <maerwald> complicated
10:58:25 <arjun> the refactor was great, looks likes a different code-base now but still familiar and sort of cleaner
10:58:37 <maerwald> directory package uses a hardcoded list https://github.com/haskell/directory/blob/f0da64307959fcd2225c01f97df851ff45285e68/System/Directory/Internal/Windows.hsc#L633
10:58:43 <maerwald> which seems wrong too
10:59:21 <maerwald> then there is a PATHEXT variable, but to be really complete you'd also need to look up some random registry entries
10:59:41 <arjun> are we testing on windows 11?
10:59:42 <maerwald> and then it's still not clear what "executable" means, because it's not a file attribute
11:00:03 <arjun> cause that probably might have changed things a bit
11:00:18 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
11:00:19 <maerwald> not sure
11:00:40 alx741 joins (~alx741@181.196.69.253)
11:03:44 × kritzefitz quits (~kritzefit@debian/kritzefitz) (Changing host)
11:03:44 kritzefitz joins (~kritzefit@user/kritzefitzm/x-3779698)
11:04:38 × kritzefitz quits (~kritzefit@user/kritzefitzm/x-3779698) (Changing host)
11:04:38 kritzefitz joins (~kritzefit@debian/kritzefitz)
11:04:40 × Nachtgespenst quits (~user@user/siracusa) (Quit: Bye!)
11:04:56 kritzefitz is now known as kritzefitz[m]
11:05:12 kritzefitz[m] is now known as kritzefitz
11:05:54 __monty__ joins (~toonn@user/toonn)
11:07:00 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
11:07:40 × Guest396 quits (~Guest39@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
11:07:43 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
11:08:24 kritzefitz[m] joins (~kritzefit@fw-front.credativ.com)
11:08:56 × kritzefitz[m] quits (~kritzefit@fw-front.credativ.com) (Changing host)
11:08:56 kritzefitz[m] joins (~kritzefit@debian/kritzefitz)
11:09:41 × kritzefitz[m] quits (~kritzefit@debian/kritzefitz) (Client Quit)
11:11:30 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Ping timeout: 260 seconds)
11:12:42 AlexNoo_ joins (~AlexNoo@94.233.241.118)
11:14:55 × Alex_test quits (~al_test@178.34.163.209) (Ping timeout: 260 seconds)
11:15:30 × AlexZenon quits (~alzenon@178.34.163.209) (Ping timeout: 260 seconds)
11:16:35 × AlexNoo quits (~AlexNoo@178.34.163.209) (Ping timeout: 264 seconds)
11:20:15 Alex_test joins (~al_test@94.233.241.118)
11:20:57 AlexZenon joins (~alzenon@94.233.241.118)
11:24:19 arjun parts (~user@user/arjun) (ERC (IRC client for Emacs 28.0.50))
11:25:16 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
11:28:17 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 246 seconds)
11:28:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
11:28:41 xkuru joins (~xkuru@user/xkuru)
11:29:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:29:42 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
11:30:12 × xkuru quits (~xkuru@user/xkuru) (Client Quit)
11:30:55 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:31:03 xkuru joins (~xkuru@user/xkuru)
11:38:51 <Hecate> maerwald: plz don't trainwreck the GHC proposal ticket 😭
11:39:08 <maerwald> spj started the discussion
11:39:12 <maerwald> not me
11:39:24 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
11:39:31 <maerwald> and it's true, there are only two options: 1. overlays, 2. downstream patches
11:39:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:40:30 <maerwald> and this surely touches the core issue: smooth upgrades
11:45:34 × chele quits (~chele@user/chele) (Ping timeout: 268 seconds)
11:50:30 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
11:51:06 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:54:35 euandreh joins (~euandreh@2804:14c:33:9fe5:bc44:afc4:50a0:6ab8)
11:55:05 Guest10 joins (~Guest10@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
12:03:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:06:16 AlexNoo_ is now known as AlexNoo
12:07:17 guniberas joins (~guniberas@42.191.188.121)
12:11:53 × Guest10 quits (~Guest10@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
12:19:05 shriekingnoise joins (~shrieking@186.137.144.80)
12:20:49 chexum_ joins (~quassel@gateway/tor-sasl/chexum)
12:21:22 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
12:22:11 <tomjaguarpaw> There's a third option of trying to instill a pervasive sense of responsibility across the community so that this issue doesn't arise so often
12:22:18 <maerwald> tomjaguarpaw: :D
12:22:21 <tomjaguarpaw> Admittedly that is very hand and fraught with many difficulties
12:22:39 <tomjaguarpaw> *hard
12:23:06 <tomjaguarpaw> But ultimately I don't think a community can escape its own culture with technical solutions
12:24:12 <maerwald> I mean... what confuses me is that we're relatively quick with package takeovers, but overly conservative with NMUs. While, in the end: both have the danger of incompetency sneaking in. That's just how it is.
12:34:05 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
12:36:47 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
12:40:24 × xff0x quits (~xff0x@2001:1a81:537f:9c00:f676:7afa:ede:1e04) (Remote host closed the connection)
12:40:26 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 268 seconds)
12:40:41 xff0x joins (~xff0x@2001:1a81:537f:9c00:f94d:493e:e9e:5a9)
12:44:32 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
12:55:34 × yrlnry quits (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 260 seconds)
12:56:16 × dermato quits (~dermatobr@cpe-70-114-219-76.austin.res.rr.com) (Ping timeout: 260 seconds)
12:58:06 dermato joins (~dermatobr@cpe-70-114-219-76.austin.res.rr.com)
12:59:23 dartford joins (~dartford@176-157-77-163.abo.bbox.fr)
13:00:38 <dartford> hi, whats up with the tunes log?
13:00:48 <dartford> http://tunes.org/~nef/logs/haskell/21.09.14
13:01:04 <dartford> i cant find yesterdays conversation
13:01:18 <dartford> oh ok, i can see it in the header
13:01:51 × acowley quits (~acowley@c-68-83-22-43.hsd1.nj.comcast.net) (Ping timeout: 260 seconds)
13:02:05 <dartford> wow, it sure is less organised than when it was grouped by date
13:02:27 <dartford> i wonder if tomsmeding would consider that option, or linking it back to the old tunes log somehow
13:03:10 <tomsmeding> dartford: see the "calendar" link at the top of ircbrowse
13:03:30 <dartford> horay!
13:03:46 <dartford> how goes it, havent been online in a while
13:03:50 <tomsmeding> is there anyone who actually uses that browse view with 3000+ pages of content?
13:04:04 <tomsmeding> like, there's the "recent" view which could be useful, and there's calendar
13:04:05 × alzgh quits (~alzgh@user/alzgh) (Ping timeout: 256 seconds)
13:04:10 <dartford> last time we spoke you helped me with a buffer, for which i was most thankful
13:04:21 <dartford> have you got any cool projects on the go at the moment?
13:04:32 <tomsmeding> making the browse view efficient has _serious_ implications on the database structure :p
13:04:35 <dartford> (i was using the handle fog at the time)
13:04:39 <tomsmeding> ah!
13:04:45 <tomsmeding> I remember FogBuffer.hs :)
13:05:02 Sgeo joins (~Sgeo@user/sgeo)
13:05:12 <tomsmeding> that's... slightly more than a year ago, I think?
13:05:14 <dartford> im stuck with probabilty monad at the moment, but i tried asking yeasterday and it ended up as gobeldygook
13:05:31 <dartford> tomsmeding: yeah, i have been basically out of action for about that long
13:05:32 tomsmeding is currently looking more closely at automatic differentiation
13:05:49 <tomsmeding> somehow the university decided that it was a good idea to let me do a phd
13:06:23 <dartford> well if your maintaining the haskell logs id say you probs have the credentials
13:06:28 <tomsmeding> :D
13:06:34 <dartford> most of the aplicants are just tramps after a free lunch
13:06:37 <tomsmeding> "maintaining"
13:06:47 <dartford> "able to establish"
13:08:13 <tomsmeding> fun thing is, a while ago I added some route timing statistics to ircbrowse
13:08:28 <dartford> yes, that does sound fun.... not
13:08:33 <tomsmeding> apparently I did something wrong regarding memory usage because it went from being ~constant to rising like 500M per day
13:08:56 <tomsmeding> turned it off after I became tired of 'systemctl restart ircbrowse'
13:08:59 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
13:09:31 <dartford> basically, the probability monad i envisage is a variant of a state, where instead of just being able to "view" the state, as an input to the update of the carry
13:09:52 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
13:09:55 <dartford> ie, from within the monad, being able to draw the value using <- from the monadic wrapper
13:10:08 <dartford> that instead, a "pdf" could be drawn from using the <-
13:10:26 <dartford> and somehow behind the scenes this would be handling the replacement of the seed for the rng
13:10:45 <tomsmeding> there is no implementation of a probability monad yet that does what you want??
13:10:49 <tomsmeding> s/??/?/
13:11:17 <dartford> er, i mean, maybe there is, but maybe not, i think i need to use StateL to preserve an applicative instance
13:11:43 <dartford> the conclusion of yesterdays garbled discord was that i should use Data.Functo.Compose
13:11:48 <dartford> instead of pairs
13:11:53 <tomsmeding> "preserve an applicative instance" -- do you mean 'pure = return ; (<*>) = ap' ?
13:11:54 <dartford> to build up larger states
13:12:09 <dartford> hmm, the applicative instance of StateL
13:12:24 <tomsmeding> hoogle doesn't know what StateL is
13:12:33 <dartford> which can be located following links in the hadocks starting from the implementation of mapAccumL
13:13:38 × fjmorazan_ quits (~quassel@user/fjmorazan) (Quit: fjmorazan_)
13:13:44 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Ping timeout: 268 seconds)
13:14:02 <dartford> https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Functor.Utils.html#StateL
13:14:13 fjmorazan joins (~quassel@user/fjmorazan)
13:14:29 <tomsmeding> ah I see
13:14:40 <tomsmeding> so StateL would be the same as State from transformers, right?
13:14:46 <tomsmeding> and StateR the dual, sortof
13:14:46 <dartford> i got there by clicking the StateL word here; https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Traversable.html#mapAccumL
13:14:57 <dartford> yeah
13:15:11 <dartford> you want to traverse from the left if your given an infinite stream you want to consume lazily
13:15:15 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
13:15:26 <tomsmeding> right
13:15:35 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
13:15:40 <tomsmeding> so what prevents you from using State from transformers?
13:15:43 <dartford> hololeap suggested;
13:15:43 <dartford> % :t \f -> runState . traverse (state . f)
13:15:43 <yahb> dartford: Traversable t => (a -> s -> (b, s)) -> t a -> s -> (t b, s)
13:15:52 <dartford> is that the state you mean?
13:15:55 <tomsmeding> yeah
13:16:06 <dartford> idk if that has the same applicative instance
13:16:15 <dartford> that allows it to be lazy when used in traverse
13:16:32 <dartford> like, how traversing from the right is certainly not going to be lazy
13:16:43 acowley joins (~acowley@c-68-83-22-43.hsd1.nj.comcast.net)
13:16:45 <dartford> lets check
13:17:28 <tomsmeding> seems to be the same
13:17:51 <tomsmeding> apart from the pair being swapped of course
13:17:54 <dartford> https://hackage.haskell.org/package/transformers-0.6.0.2/docs/src/Control.Monad.Trans.State.Lazy.html#withStateT
13:17:56 <dartford> its just below that
13:19:12 <tomsmeding> yeah
13:19:25 <maerwald> are there any good automatic ways to observe and benchmark memory fragmentation?
13:19:30 <tomsmeding> that's the Lazy variant; the Strict variant seems to be the same but missing the lazy tuples
13:19:30 hololeap joins (~hololeap@user/hololeap)
13:19:45 <maerwald> the only post on this topic I can find is https://www.well-typed.com/blog/2020/08/memory-fragmentation which is an odyessey of manual debugging
13:20:04 <dartford> tomsmeding: lazy tuples!? is that what the ~ i doing there?
13:20:13 <dartford> s/i/is
13:20:39 alzgh joins (~alzgh@user/alzgh)
13:21:28 yrlnry joins (~mjd@pool-100-11-2-80.phlapa.fios.verizon.net)
13:21:31 <tomsmeding> yeah wrong terminology, that's an irrefutable pattern match officially
13:21:46 <tomsmeding> > case undefined of (a, b) -> ()
13:21:48 <lambdabot> *Exception: Prelude.undefined
13:21:54 <tomsmeding> > case undefined of ~(a, b) -> ()
13:21:55 <lambdabot> ()
13:22:03 <tomsmeding> > case undefined of ~(a, b) -> a
13:22:05 <lambdabot> *Exception: Prelude.undefined
13:22:29 <tomsmeding> dartford: the pattern match always succeeds and doesn't force the value being matched, and is thus also lazy
13:22:41 <tomsmeding> usages effectively become projections
13:24:00 <dartford> hmm, nice
13:24:12 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
13:24:31 <dartford> so its use in the StateT Applicative instance reasures us that the traversal should be lazy
13:24:52 <dartford> ie that we get a rewrite rule for the instance of mapAccumL defined using runState above
13:25:05 <dartford> that combines to subsequent mapAccumL's into one
13:25:22 <dartford> as if it were just consuming one element at a time and passing it through to the next scanner
13:26:13 <tomsmeding> yeah the StateL is also lazy, because let bindings are lazy, so its behaviour would be equivalent to the .Lazy version from transformers, with the ~ matches
13:26:50 <dartford> wait, iv gotten distracted, i forgot what we were trying to do
13:27:10 <dartford> good info about how its lazy though
13:28:56 <dartford> ok, so i want to make something like an existing probability monad
13:29:06 <dartford> but that uses the Compose idea to build up the state
13:29:29 <dartford> and then factor away the functionality so that the user doesnt actually see the "top layer" where the seed is
13:29:31 tomsmeding is not sure what the Compose idea is, but has to go anyway -- meetings meetings
13:30:23 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 268 seconds)
13:30:39 <dartford> the idea is that if you use the Applicative instance of Data.Functor.Compose to smash together two StateL's into what should effectively then opperate *lazily* as StateL does, by the Applicative instance offered by Compose
13:30:48 <dartford> tomsmeding: ok, thanks for your help
13:31:03 <dartford> ill wait to see if anyone else picks up the convo before continuing
13:31:37 cfricke joins (~cfricke@user/cfricke)
13:31:39 hololeap_ joins (~hololeap@user/hololeap)
13:32:09 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
13:32:41 <dartford> i guess in the worst case i would just have to write my own version of compose, posibly that just accepts stateL encoded data, to ensure its applicative instance is lazy as required
13:32:54 <dartford> not quite sure how that would work, but anyway...
13:33:11 <dartford> this is turning into a nightmare
13:33:41 <[exa]> do you have some example of code of how the probability monad should work?
13:33:46 <dartford> probablistic stream algebras they say, easy they say
13:34:21 <dartford> [exa]: thats very simple. something like do; x <- gausian1d (0,1)
13:34:37 <[exa]> what's the type of `x` after that?
13:34:39 × hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1)
13:34:42 <dartford> or, gausian1d (0,1) >>= \x -> ...
13:34:45 <[exa]> "type"....semantics
13:34:49 <dartford> x :: Double here
13:34:58 <[exa]> so it draws from the distribution, I see
13:35:02 <dartford> yeah
13:35:14 <dartford> and this requires the rng seed is updated behind the scenes
13:35:17 <[exa]> ok so far that's a monad that just holds a RNG
13:35:20 <dartford> its in a StateL composition somehow
13:35:31 <dartford> yeah, its just a fancy version of a pair with an int
13:35:39 <[exa]> how did you get to StateL?
13:35:45 <dartford> probably one of these lazy pairs from the StateT applicative instance example
13:35:58 <dartford> [exa] StateL appears in mapAccumL
13:36:11 <dartford> this is the basis for the idea of scanners
13:36:20 <[exa]> trying to hoogle in vain, lemme click backlog
13:36:30 <dartford> not all applicatives being lazy, scanners being the subset of traversals which use lazy applicatives, basically
13:37:02 <dartford> [exa] dont worry, we can work even with a custom instance, as long as it has a lazy applicative instance
13:37:18 <[exa]> oh wow that's the StateLegendary, with the tuple that just™ fmaps™
13:37:27 <dartford> ie that when used with traverse that we get a rewrite rule for two subsequent mapAccumL's to compose into one
13:37:42 <dartford> [exa]: pardon1?
13:38:08 <[exa]> what would be an example of the 2 mapAccumL's ?
13:38:15 <[exa]> (that should compose)
13:38:19 <dartford> let me get the type hang on
13:38:23 <dartford> :t mapAccumL
13:38:23 <lambdabot> Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c)
13:38:40 <dartford> so the functions that you want to compose are these ... er wait let me uncurry that
13:38:46 <dartford> :t uncurry mapAccumL
13:38:47 <lambdabot> Traversable t => (a -> b -> (a, c), a) -> t b -> (a, t c)
13:39:00 <dartford> so you would have 2 of that first argument
13:39:11 <dartford> each needs its own initial state
13:39:15 <dartford> and state update function
13:39:24 <dartford> then, the initial states should compose into a pair
13:39:44 <dartford> and then you would have the `a' appearing in the state update function also ending up as a pair
13:39:55 <dartford> so it acts to accept and update the tuple of both states
13:39:57 <dartford> clear?
13:40:11 <[exa]> not sure what's the point of that
13:40:20 <[exa]> wait
13:40:58 <dartford> well, suppose it wasnt lazy, then you couldnt do that
13:41:00 <[exa]> why'd you want to compose the tuples manually when you'd have a monad below that does it for you? (mapAccumL kinda becomes traverse)
13:41:12 <dartford> notionally it nyams up one element at a time, and passes it through to the next accumulator
13:41:22 <dartford> next scanner
13:41:24 <dartford> whatever
13:41:46 <dartford> its just the idea that we get an algebra for scanners as a result of the lazyness
13:41:53 <dartford> it wouldnt *work* if it wasnt lazy
13:42:02 <dartford> but its difficult to express that
13:42:15 <[exa]> so you want something like: mapAccumL (...) `magicCompose` mapAccumL (...) ?
13:42:18 <dartford> because the first thing would hang, you would never be able to realise the composed version
13:42:32 <[exa]> it's as difficult as writing an example of the cool thing it does at the end
13:42:38 <dartford> [exa] exactly, it becomes monoidal under `magicCompose'
13:42:57 hendursaga joins (~weechat@user/hendursaga)
13:43:15 <dartford> but only with the lazy applicatives, so instead of bothering with traverse that could break, and supplying StateL's only
13:43:23 <[exa]> ok and what would be the problem of writing that as `traverse (...) >> traverse (...)` with a custom state inside, as lazy as you want?
13:43:34 <dartford> just combine them to keep the user from breaking it, and end up with Scanners as an actual thing
13:44:04 <dartford> kind of as a safety net, and to encapsulate this idea of stream transduction only working with lazy applicatives
13:44:05 <[exa]> (or *> to keep it applicative)
13:44:29 hololeap_ is now known as hololeap
13:44:50 <dartford> im not sure i understand
13:45:11 <dartford> you could certainly write it using traverse
13:45:24 <dartford> perhaps you dont agree with the notion of scanners as being well motivated
13:45:24 <Tisoxin> Are GADts a complete replacement for the normal data type declarations?
13:46:09 <dartford> Tisoxin: no, you do away with user defined records, but gain something in terms of actual type signatures, eg being able to add constraints
13:46:30 <Tisoxin> hm
13:46:40 <Tisoxin> I have a problem apart from records
13:47:06 <[exa]> dartford: re "safety", what would be the unsafe situation there? It starts consuming randomness forever?
13:47:34 <[exa]> also not sure what "scanners" is, pls elucidate. :]
13:48:37 <dartford> well suppose one traverse used StateR by mistake
13:49:02 <dartford> then it would hang, and none of the values would make it through to the next state update function aka scanner
13:49:20 <Tisoxin> dartford: I need the equivalent of `type Test = (String, Expr)`, where Expr should be a GADT
13:49:20 <dartford> [exa] scanners is just traversals where the applicative is restricted to StateL
13:49:37 <dartford> thats easy
13:49:39 <[exa]> ok good, and why should it hang?
13:49:46 <[exa]> it doesn't click still
13:49:55 <dartford> because if it tries to consume the last element first, and the stream is infinite...
13:49:59 <Tisoxin> `type Test = (Int, Expr (forall p. p))` apparently doesn't work yet (v. 8.10.7 GHC)
13:50:04 <dartford> you cant traverse streams from the right
13:50:20 <dartford> streams being strictly infinite lists
13:50:27 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
13:50:37 × chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
13:50:50 <dartford> so, while i can write a Traversable instance, it might break, so i should just be contented with being restricted to using scanners instead
13:51:07 chexum joins (~quassel@gateway/tor-sasl/chexum)
13:51:07 <dartford> ie, write a Scanner instance, not a Traversable instance, when you have a strictly infinite list
13:51:15 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds)
13:51:17 <[exa]> ah okay, cool, so basically you want a kinda-total subset of all possible operations on streams
13:51:42 <dartford> the traversables that dont hang
13:51:46 <c_wraith> lazy state is neither necessary nor sufficient for that
13:51:48 <dartford> traversals*
13:52:11 <dartford> c_wraith: there are some subtelties to do with IO we encountered yesterday
13:52:42 <dartford> basically, you have to have IO in the stack of composed StateL's if its going to be able to do anything
13:52:45 <dartford> is that what you mean?
13:52:51 <dartford> what else is wrong with it?
13:53:14 <[exa]> dartford: where did you get IO in there?
13:53:20 <c_wraith> using a lazy state type doesn't actually guarantee the operations you do with it are sufficiently non-strict
13:53:22 <[exa]> I thought it's a RNG monad :]
13:53:33 <dartford> oh no, even more stacked things
13:54:11 <c_wraith> and there are a lot of other Applicative instances which can work in certain cases.
13:54:16 <dartford> c_wraith: are you saying that depending on how the state update function uses the encoutered elements, that somehow they could demand the next element, and break the whole thing!?
13:54:19 <dartford> that would be terrible!
13:54:44 <[exa]> dartford: SW eng advice-- make a maximal sample that works for you now, and then show us how you break it, that's going to trigger people into solving it. For me this stuff here is pretty much too abstract.
13:54:47 <dartford> the IO thing was just because if you want it to return any effect before it reaches the end of the infinite stream
13:54:51 <c_wraith> yes, you can create unfounded circular data dependencies
13:55:02 <dartford> well, lets not do that
13:55:08 <dartford> :-/
13:55:13 <dartford> not sure what to say really
13:55:20 <dartford> scanners recieve pushback
13:55:29 <dartford> i like the idea anyway
13:55:39 <dartford> i dont need traverse, just mapAccumL
13:55:42 <dartford> in some cases
13:55:43 <[exa]> dartford: to prevent the magic strictness from happening you can make your own "realworld token" and pass it around
13:55:52 <c_wraith> also, for what it's worth, you really should be modelling traverse_ instead of traverse
13:56:20 <dartford> [exa] that sounds utterly brutal
13:56:22 <[exa]> dartford: but at that point you just want to materialize a complete eDSL for it, and avoid reliance on haskell strictness rules
13:56:24 <dartford> but like it could work!
13:56:25 <[exa]> yep
13:56:41 <dartford> whats traverse_ ?
13:56:56 <c_wraith> part of Foldable
13:57:07 <dartford> oh, like >> instead of >>= ? to prevent some kind of applicative effect spilling over?
13:57:19 <dartford> % :t traverse_
13:57:20 <yahb> dartford: (Foldable t, Applicative f) => (a -> f b) -> t a -> f ()
13:57:24 <[exa]> yeah, basically `traverse ..thesame... >> return ()`
13:57:42 <dartford> no, it should update the contents to not be ()
13:57:44 <c_wraith> To prevent memory waste caused by holding on to values that will never get returned
13:57:49 <dartford> otherwise it cant do mapAccumL
13:58:07 <dartford> its supposed to update the encountered elements, and change the carried state
13:58:16 <[exa]> dartford: then you want `($> ())`
13:58:42 <[exa]> (what's the human name for $> ? fmapconst?)
13:58:53 <dartford> the values will be returned? or they have to just be producing effects?
13:59:02 <dartford> er, i mean, no certainly they are returned
13:59:03 <c_wraith> I get the feeling that what you're really looking for is some kind of streaming abstraction
13:59:10 <dartford> thats how the next scanner has values to opperate on
13:59:24 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:59:31 <dartford> only the rewritten version, written into one overall state update function, acting on the full tuples of states
13:59:35 <[exa]> dartford: btw did you see Selective? I've got a serious feeling you're heading somewhere that way
13:59:36 <dartford> acts like you say
14:00:02 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 260 seconds)
14:00:21 <dartford> [exa] i was under the impression that what i had was very much complete, and superior in many ways to existing approaches of which im aware
14:00:32 Maxdamantus joins (~Maxdamant@user/maxdamantus)
14:02:24 <[exa]> dartford: I didn't see much of it yet, sorry :]
14:02:45 <[exa]> (likely missed a few important pastebins)
14:04:40 <dartford> is there a paper for selective? it looks like an actual thing
14:04:56 <dminuoso> Mmm, what kind of paper are you looking for?
14:04:58 <dartford> [exa] not to worry
14:05:03 <dminuoso> There's really not much to it
14:05:15 <dartford> this one i think!
14:05:15 <dartford> https://www.staff.ncl.ac.uk/andrey.mokhov/selective-functors.pdf
14:05:21 <[exa]> yep that one
14:05:28 <dminuoso> Yeah, that's the original paper
14:05:34 <dartford> dminuoso: whats the idea?
14:05:54 <dminuoso> dartford: So with selective functors you get something between applicative and monad.
14:05:55 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:05:55 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:05:55 wroathe joins (~wroathe@user/wroathe)
14:06:31 <dminuoso> You have static analyzability, because the *potential* effects are predetermined, and yet you have the power of chosing effects based on previous results.
14:06:50 <dminuoso> They're kind of like monads but with predetermined possible outcomes
14:07:57 <[exa]> re static analyzability, I kinda hoped to use that here to get some easy assurances on whether the stuff terminates or explodes
14:08:02 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
14:08:06 <dminuoso> One use case is say `optparse-applicative`, where this static analyzability allows the library to derive a parser and documentation from the specification. If we upgrade its applicative to selective functors, you can do something where say one command flag `-a` decides what further command flags are allowed.
14:08:32 <dminuoso> Another is if you had parser combinators with selective functors, you can statically analyze and optimize at compile time (say via TH).
14:09:26 <maerwald> dminuoso: https://imgflip.com/i/5skojf
14:09:28 × dibblego quits (~dibblego@haskell/developer/dibblego) (Read error: Connection reset by peer)
14:11:29 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
14:11:35 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
14:15:06 ubert joins (~Thunderbi@p548c9652.dip0.t-ipconnect.de)
14:17:57 max22- joins (~maxime@2a01cb088335980078b9d498c24675c0.ipv6.abo.wanadoo.fr)
14:18:53 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com)
14:18:53 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
14:18:53 dibblego joins (~dibblego@haskell/developer/dibblego)
14:19:57 × Axman6 quits (~Axman6@user/axman6) (Ping timeout: 260 seconds)
14:20:30 × JimL quits (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 260 seconds)
14:22:48 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
14:23:20 JimL joins (~quassel@89-162-2-132.fiber.signal.no)
14:23:22 × tput quits (~tim@S0106a84e3fe54613.ed.shawcable.net) (Ping timeout: 260 seconds)
14:25:02 cigsender joins (~cigsender@74.124.58.162)
14:28:49 <Hecate> cigsender: hello you :)
14:28:49 img joins (~img@user/img)
14:29:04 <cigsender> salut Hecate :p
14:29:13 <Hecate> cigsender: how are you doing?
14:29:47 <cigsender> not bad! pondering the CLC issues that have been sparking discussion
14:29:52 <cigsender> and you?
14:32:25 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
14:32:49 × Jing quits (~textual@103.121.208.52) (Quit: Textual IRC Client: www.textualapp.com)
14:32:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
14:34:11 <Hecate> cigsender: pondering if I should pile-up with my own proposal to imitate Rust on having PartialEq/PartialOrd :3
14:34:26 <Hecate> but we need the mechanism to change a typeclass's superclass ± seamlessly first
14:34:40 <Hecate> and I simply do not posess the brainpower to implement that
14:34:50 <Hecate> hmm
14:34:57 <Hecate> that being said we could have them separated
14:35:07 <Hecate> without any superclass dependency
14:35:38 <Hecate> and say "y'all we give you three years to add PartialEq & PartialOrd to your stuff"
14:36:01 <maerwald> we'll first have to come up with a new proposal process before we can discuss that
14:36:17 <Hecate> isn't there already the new proposal process, maerwald ?
14:36:18 <cigsender> a new proposal process for GHC?
14:36:28 <Hecate> I'm speaking of base here
14:36:46 <maerwald> a proposal process for asking questions
14:36:55 <Hecate> tss
14:36:59 <Hecate> silly maerwald
14:37:09 <maerwald> only occasionally
14:38:05 cigsender sighs in bureaucracy
14:38:28 × mjrosenb quits (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
14:38:47 <Hecate> oh btw cigsender, you're not in https://github.com/haskell-core/core-libraries-proposals ?
14:38:51 neurocyte0132889 joins (~neurocyte@45.10.60.185)
14:38:51 × neurocyte0132889 quits (~neurocyte@45.10.60.185) (Changing host)
14:38:51 neurocyte0132889 joins (~neurocyte@user/neurocyte)
14:38:51 <Hecate> in the table of the README
14:39:16 × dibblego quits (~dibblego@haskell/developer/dibblego) (Read error: Connection reset by peer)
14:39:54 <cigsender> oh yeah the new link is https://github.com/haskell/core-libraries-committee
14:40:01 <cigsender> i'd never heard of that other one
14:40:06 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
14:40:13 <Hecate> :'')
14:40:21 <Hecate> I had it in my browser history apparently
14:40:33 <Hecate> chessai should remove that org
14:41:00 geekosaur keeps misreading that /nick as "cisgender" and wondering why you'd point that up
14:41:52 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:42:19 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:42:32 × alx741 quits (~alx741@181.196.69.253) (Ping timeout: 268 seconds)
14:44:02 jespada joins (~jespada@190.7.36.46)
14:44:28 Fred9 joins (~Fred@78-73-197-175-no2480.tbcn.telia.com)
14:46:10 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com)
14:46:10 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
14:46:10 dibblego joins (~dibblego@haskell/developer/dibblego)
14:46:44 <Hecate> geekosaur: yes, same brainfart here
14:46:45 <Hecate> :D
14:46:58 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Read error: Connection reset by peer)
14:49:21 betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be)
14:49:46 <maerwald> . o O ( maybe a proposal process for all my issue trackers )
14:50:37 TomWesterhout[m] joins (~twesterho@2001:470:69fc:105::1:2918)
14:52:41 neurocyte0132889 joins (~neurocyte@45.10.60.185)
14:52:41 × neurocyte0132889 quits (~neurocyte@45.10.60.185) (Changing host)
14:52:41 neurocyte0132889 joins (~neurocyte@user/neurocyte)
14:53:47 drdo6 joins (~drdo@roach0.drdo.eu)
14:55:06 × johnjay quits (~pi@192.142.100.50) (Ping timeout: 260 seconds)
14:55:34 × drdo quits (~drdo@roach0.drdo.eu) (Ping timeout: 260 seconds)
14:55:34 drdo6 is now known as drdo
14:56:51 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:56:51 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:56:51 wroathe joins (~wroathe@user/wroathe)
14:57:46 johnjay joins (~pi@192.142.100.50)
14:57:51 <cigsender> the trick is: i'm not cisgender :D
14:58:12 × dartford quits (~dartford@176-157-77-163.abo.bbox.fr) (Quit: Connection closed)
14:58:16 <merijn> I pretty much assumed that was an intentional spoonerism for that reason
14:59:02 <merijn> I get irrationally annoyed by the name, because my brain wants to parse it as, like, SIGSENDER or some other unix signal >.>
14:59:21 <maerwald> that's some serious PTSD right there :D
14:59:31 × tdwamdors^ quits (~tdwamdors@wsip-98-188-242-6.mc.at.cox.net) (Remote host closed the connection)
14:59:53 <merijn> maerwald: I had to dig through cpython source code with an open APUE to figure out what they broke and how, so yes :p
15:01:34 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
15:02:50 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection)
15:03:26 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
15:04:16 <maerwald> I'll switch gladly with you, then you can try to figure out how blockchains work
15:04:25 <merijn> Easy
15:04:33 <merijn> They don't. Next question :)
15:04:53 <maerwald> next question would be: how did I end up here
15:04:56 maerwald mumbles
15:06:21 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:1b26:eada:1c7:e76b) (Quit: WeeChat 2.8)
15:07:09 <merijn> So, in Dutch (and German, I think?) we have a term for "feeling shame for someone else's behaviour". I wonder if we can invent a similar term for when other people's behaviour traumatises me in their place. Because that'd describe the effect of "everyone else's posix code" on me >.>
15:07:44 <maerwald> posix has principles at least, even if some are misguided
15:08:26 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
15:09:10 <maerwald> also, I've been looking more closely into windows filesystem API
15:09:17 <maerwald> so if you think you've seen it all... well
15:09:28 <merijn> maerwald: My complaint isn't with posix
15:09:43 <merijn> maerwald: My complaint is that people write *terrible* posix code using deprecated and broken interfaces
15:09:50 <maerwald> well, posix provides difficult APIs
15:09:59 <merijn> Yes, but people *think* they're easy
15:10:32 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
15:10:54 × acidjnk quits (~acidjnk@p200300d0c74411311cbabef3984b18e3.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
15:11:14 <maerwald> well, I looked at posix_spawn and the process code that uses it... it's also a family of functions (as always) with initilization and all sorts of stuff you don't care about
15:11:31 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds)
15:12:02 neurocyte0132889 joins (~neurocyte@45.10.60.185)
15:12:02 × neurocyte0132889 quits (~neurocyte@45.10.60.185) (Changing host)
15:12:02 neurocyte0132889 joins (~neurocyte@user/neurocyte)
15:12:09 <maerwald> it's almost like you need an algorithm to correctly use posix API
15:13:41 <maerwald> windows API documentation is much nicer... the awful details are usually 5 clicks away and the base page gives you an impression of "wow, this function is surely well-defined"
15:13:44 <maerwald> until you run it
15:13:58 <shapr> @quote
15:13:58 <lambdabot> xentrac says: I [15;2~|"
15:14:02 <shapr> whoa
15:15:13 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Ping timeout: 268 seconds)
15:15:46 zys joins (~zys@116.21.145.62)
15:21:42 × zys quits (~zys@116.21.145.62) (Ping timeout: 260 seconds)
15:23:26 slowButPresent joins (~slowButPr@user/slowbutpresent)
15:24:51 mjrosenb joins (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net)
15:25:00 × cigsender quits (~cigsender@74.124.58.162) (Quit: Lost terminal)
15:26:34 alx741 joins (~alx741@181.196.69.253)
15:28:44 cigsender joins (~cigsender@74.124.58.162)
15:31:14 × Farzad quits (~FarzadBek@178.131.25.90) (Quit: Leaving)
15:35:12 × sy4 quits (~sy4@user/sy4) (Quit: WeeChat 1.9.1)
15:35:34 zmt01 joins (~zmt00@user/zmt00)
15:35:42 × jespada quits (~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:37:20 jespada joins (~jespada@190.7.36.46)
15:37:39 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
15:38:02 × jespada quits (~jespada@190.7.36.46) (Client Quit)
15:40:51 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
15:44:15 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
15:44:42 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
15:45:18 × Fred9 quits (~Fred@78-73-197-175-no2480.tbcn.telia.com) (Quit: Connection closed)
15:48:11 lbseale joins (~lbseale@user/ep1ctetus)
15:48:59 Null_A joins (~null_a@2601:645:8700:2290:f456:9370:22df:9c55)
15:51:01 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
15:52:41 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Quit: Leaving.)
15:52:57 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
15:52:57 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Client Quit)
15:53:25 fendor__ joins (~fendor@77.119.197.65.wireless.dyn.drei.com)
15:54:41 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
15:55:24 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
15:55:42 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
15:56:33 × fendor_ quits (~fendor@77.119.160.25.wireless.dyn.drei.com) (Ping timeout: 268 seconds)
15:56:57 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
15:58:45 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Client Quit)
15:59:25 × acidsys quits (~LSD@2.lsd.systems) (Excess Flood)
15:59:57 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
16:00:00 acidsys joins (~LSD@2.lsd.systems)
16:01:10 <[exa]> ignoring the fact that unbounded dependencies are Just Bad, is there any reason why would cabal choose to install a historical brick-0.26 incompatible with any current base in case I specify unbounded `build-depends: base, brick, vty, vector` ?
16:01:22 <[exa]> (alternatively, is there any option for tracking the decisions & finding why's ?
16:01:48 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
16:02:12 <myShoggoth> Haskell Foundation Office Hours: https://www.twitch.tv/myshoggoth
16:02:28 <c_wraith> was there a previous build plan for that project that it might still be getting some version info from?
16:02:34 <maerwald> [exa]: it has less dependencies... check the diff of them
16:02:38 <maerwald> one of them must be the reason
16:03:05 <[exa]> like, if I specify something sane like `brick > 0.60`, the new version (0.64.2 afaik) gets installed without any problems
16:03:21 <[exa]> so just kinda thinking why cabal decides on the older
16:03:54 <[exa]> "less dependencies" is a criterion for selection?
16:04:02 <maerwald> no
16:04:05 <shapr> myShoggoth: whoa, I'll come to office hours if these happen regularly.
16:04:07 <[exa]> c_wraith: how do I find that?
16:04:30 <[exa]> (the project is completely new and fresh)
16:04:33 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds)
16:04:38 <c_wraith> then no, there wouldn't be.
16:04:53 <maerwald> it's possible that it's trying older versions before e.g. checking different flag configuration
16:05:07 <[exa]> hm that could work with brick+vty
16:06:49 <jlamothe> Does anyone know if there's an equivalent to bracket that'll work on an arbitrary MonadIO?
16:07:21 <maerwald> @hoogle bracket
16:07:22 <lambdabot> Control.Exception bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
16:07:22 <lambdabot> Control.Exception.Base bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
16:07:22 <lambdabot> GHC.IO bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
16:07:53 <c_wraith> jlamothe: that's not possible in general. But there are several packages that provide classes that can work, like MonadCatch
16:08:04 <cigsender> jlamothe: check in UnliftIO? there's a bunch of MonadIO versions of base functions there
16:08:21 <maerwald> https://hackage.haskell.org/package/exceptions-0.10.4/docs/Control-Monad-Catch.html#v:bracket
16:08:24 neurocyte0132889 joins (~neurocyte@45.10.60.185)
16:08:24 × neurocyte0132889 quits (~neurocyte@45.10.60.185) (Changing host)
16:08:24 neurocyte0132889 joins (~neurocyte@user/neurocyte)
16:08:28 <maerwald> no need to look in unliftioo
16:08:53 <jlamothe> That's what I thought. I basically wanted to confirm that I wasn't missing something.
16:09:14 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 260 seconds)
16:10:35 <jlamothe> It's fine. I can work with just a regular IO. I was just trying (unsuccessfully) to be fancy.
16:10:49 <c_wraith> [exa]: what version of ghc?
16:11:31 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
16:12:19 <jlamothe> I generally hate exceptions. I much prefer functions whose output types have a way of representing a failure state, then you don't have to worry about forgetting to catch it.
16:14:05 <[exa]> c_wraith: 9.0.1, fresh from the binary builds, same cabal
16:14:47 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection)
16:15:45 <c_wraith> [exa]: hmm. testing with ghc 9.2 makes me suspicious...
16:16:50 <c_wraith> [exa]: yeah, I think I see what's going on. brick 0.26 has a base <5 constraint. starting at 0.26.1, it gets a tighter bound on base
16:17:15 <[exa]> aaaaaah yes that could make some sense
16:17:15 <c_wraith> [exa]: I think the solver is preferring wider version bounds
16:17:49 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
16:18:32 <[exa]> yeah that makes sense because the 0.26 actually fails on Monoid/Semigroup portability bug
16:19:14 <[exa]> ....someone could really fix that in hackage. :D
16:19:37 <[exa]> anyway yeah thanks for catching this, sounds plausible to me
16:21:58 <maerwald> c_wraith: that sounds like a bug :>
16:22:05 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
16:22:09 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Remote host closed the connection)
16:22:47 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
16:23:40 <[exa]> oioi
16:24:48 <[exa]> no like, technically there's no problem with picking that version (from cabal side) because it looks plausible and certainly seems to cause less compilation
16:26:01 <c_wraith> maerwald: doesn't sound like a bug to me. it's a heuristic for finding *some* package set that satisfies the requested constraints.
16:26:25 <c_wraith> I would say maybe it's not an ideal heuristic. but that's not the same as being just wrong.
16:26:53 <maerwald> it's picking an older version, while a newer version would satisfy the constraints as well
16:27:05 <maerwald> that's undesired
16:27:07 <geekosaur> how's it supposed to know it's wrong? it needs the constraints to make sense
16:28:24 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
16:29:36 <c_wraith> isn't there a package manager for another language that, by policy, will always pick the oldest set of packages that satisfy the constraints?
16:29:48 <c_wraith> people don't always want the newest thing.
16:30:29 <c_wraith> (I think lock files are a better solution to what that package manager was trying to do, but that's a different issue)
16:31:57 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
16:33:34 Lycurgus joins (~juan@98.4.112.204)
16:33:52 <maerwald> I think the number of people who expect this behavior is low
16:34:06 ystael joins (~ystael@user/ystael)
16:36:58 <c_wraith> which provides a good argument that the heuristic could be improved. but that's not the same as "this is a bug"
16:37:40 <c_wraith> a big would imply it wasn't fulfilling its spec. it is here... the spec is very loose.
16:38:07 <c_wraith> my spelling, on the other hand, might be considered buggy
16:39:14 <[exa]> maerwald: you might get "recompile everything after each cabal update" if you forced newer versions... but yeah here it could make some sense
16:39:26 <maerwald> c_wraith: we can debate semantics of the term "bug", sure
16:39:36 <maerwald> I think breaking users expectations is a bug
16:39:39 <[exa]> I assume the brick 0.26 version in hackage can't be "fixed" anymore?
16:39:56 <maerwald> [exa]: I think it can be marked as deprecated
16:39:59 <maerwald> which affects the solver
16:40:13 <c_wraith> a metadata revision could also be issued
16:40:19 <[exa]> where's the button for that? :D
16:40:32 <maerwald> you need to be a maintainer to do that
16:40:42 <c_wraith> I'm not sure anyone other than hackage trustees can do that
16:40:58 <geekosaur> hm. wouldn't you have to deprecate it and all earlier versions, in case it decides to build an even older one?
16:41:09 <[exa]> likely
16:41:25 <awpr> I revise my version bounds all the time. it's not limited to Hackage trustees
16:41:47 <c_wraith> I used to work with the author of brick. but I no longer have a convenient way to yell at him. :P
16:41:52 <[exa]> so the best way to communicate that would be IMO to open an issue in brick repo?
16:42:22 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 260 seconds)
16:42:30 <maerwald> only time will tell
16:42:50 <[exa]> I'm going to open it and see
16:48:02 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
16:48:03 <sm> cabal's "randomly" picking an ancient version on any given day is if not a functionality bug, certainly a terrible ux fail
16:48:20 <sclv> it doesn't randomly pick ancient versions on any given day
16:48:30 <sclv> it has a greedy solver that tries newest first
16:48:38 <sclv> and is deterministic
16:48:42 <c_wraith> in some sense, it was trying to maximize for forward compatibility
16:48:46 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
16:49:08 <c_wraith> sclv: well, as we've discovered, that isn't exactly what it does.
16:49:14 <sclv> but there's no perfect heuristic and also solving is np complete so moving to a nongreedy algorithm could introduce significant complexity
16:49:22 <geekosaur> rather than my doing a cabal update and having my whole xmonad+contrib setup getting rebuilt?
16:49:29 <sclv> c_wraith: i mean, in the code, its literally a greedy algorithm
16:49:33 <sclv> that tries newest first
16:49:49 <sclv> if it didn't do that, that's because there's some backtracking issue that drove it away from that goal
16:49:49 <maerwald> sm: well, what's the alternative: don't solve at all? :D
16:49:54 <c_wraith> sclv: it appears that it tries the thing with the highest version bound first.
16:50:12 <c_wraith> sclv: otherwise it wouldn't prefer brick 0.26
16:50:18 <awpr> perhaps it chose the newest base and then chose the only brick that worked with that?
16:50:22 <sclv> hrm, that doesn't sound right -- i would check the code
16:50:27 <sm> maerwald: that's an alternative yes, hence stack
16:50:37 <maerwald> sm: and when you NEED a solver, you do what? :)
16:50:39 <sclv> the solver is big but its factored to be easy to read
16:50:49 <sclv> also you can look at the -v3 trace of the solver to see why its making choices
16:50:59 × Null_A quits (~null_a@2601:645:8700:2290:f456:9370:22df:9c55) (Remote host closed the connection)
16:51:02 <sm> you use it obviously. There's a right time for each approach
16:51:02 <geekosaur> I don't think it can choose the newest base, base is pinned by the compiler
16:51:10 <maerwald> sm: except stack doesn't have one
16:51:23 <sm> I didn't say it did!
16:51:29 <c_wraith> [exa]: any chance you're actually on GHC 9.2?
16:51:33 <sclv> like if it tries to pick a newer something else first, and the newer bricks have upper bounds on that thing, then that'll cause an older brick to be picked
16:51:36 <maerwald> sm: right, but you don't need stack to disable the solver
16:51:36 <sclv> because it is greedy
16:51:54 <sclv> instead, if you disallow that, then it is forced to use a newer brick and bactrack on the older choice
16:52:09 <sclv> greedy algos vary in their result based on the order of goals
16:52:19 <sclv> there's goal reordering heuristics in cabal, but they're necesarily ad hoc
16:52:23 <c_wraith> because pure greedy based on version would explain this if you ran it against GHC 9.2
16:54:19 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
16:54:21 <[exa]> c_wraith: 9.0.1
16:54:52 thyriaen joins (~thyriaen@dynamic-077-011-154-101.77.11.pool.telefonica.de)
16:55:08 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 268 seconds)
16:55:26 v01d4lph4 joins (~v01d4lph4@106.215.90.6)
16:55:26 × v01d4lph4 quits (~v01d4lph4@106.215.90.6) (Changing host)
16:55:26 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
16:55:43 hololeap joins (~hololeap@user/hololeap)
16:55:50 <maerwald> windows filetime epoch starts in 1601-01-01 ... that's honestly how this OS feels like
16:56:06 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Read error: Connection reset by peer)
16:56:36 <[exa]> re brick version bounds, feel free to discuss here https://github.com/jtdaugherty/brick/issues/341
16:56:37 neurocyte0132889 joins (~neurocyte@45.10.60.185)
16:56:37 × neurocyte0132889 quits (~neurocyte@45.10.60.185) (Changing host)
16:56:37 neurocyte0132889 joins (~neurocyte@user/neurocyte)
16:57:15 <janus> maerwald: at least it has broken compat with the Antikythera mechanism from 87 BC :P
16:57:24 <[exa]> awpr: I assume there's no weird trick needed for changing of the dependencies in hackage and it just works?
16:57:52 × thyriaen quits (~thyriaen@dynamic-077-011-154-101.77.11.pool.telefonica.de) (Client Quit)
16:58:16 <awpr> right, there's a link on the package page to edit package information, and from there a link to edit each version's cabal file (only maintainers + trustees can access it, though)
16:58:50 v01d4lph_ joins (~v01d4lph4@106.215.91.221)
16:59:39 Papa_ is now known as papa
16:59:48 <sm> my point: a solver as free and powerful as cabal's current default behavior is not ideal for most users - it is too smart for them to predict and on any given day depending on factors they can't see, it can suddenly give new and unexpected results. most of the time it works brilliantly but it can't be completely relied on, without special extra configuration
16:59:59 <sclv> right. any maintainer can add correct upper bounds to their package, and they can use the matrix for that
17:00:11 <sclv> to see what works and doesnt
17:00:34 <sclv> trustees get involved when maintainers are not available or responsive
17:00:41 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
17:00:57 <sclv> re solvers: there's no such thing as a "dumber" solver. you either solve bounds or you dont
17:01:23 dsrt^ joins (~dsrt@wsip-98-188-242-6.mc.at.cox.net)
17:01:53 <sm> sclv: I can imagine adding some extra constraints and safety belts though
17:02:14 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection)
17:05:18 fendor__ is now known as fendor
17:07:34 ec joins (~ec@gateway/tor-sasl/ec)
17:10:03 econo joins (uid147250@user/econo)
17:10:31 <[exa]> sclv: is there any quick way to project the fails from matrix into version bounds? :] (the response was fast, here: https://github.com/jtdaugherty/brick/issues/341#issuecomment-956409689 )
17:10:46 nickkkkk_all joins (~nick_all@139.102.124.132)
17:12:17 <awpr> +1, I would find that useful too -- I anticipate a lot of my packages will work with 9.2 at all versions, and manually typing in the cabal file changes to each one sounds unpleasant
17:12:22 <sm> (eg, save the plan on first success and stick to it until told otherwise ?)
17:13:00 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
17:13:11 <awpr> er, I was responding to the GitHub comment rather than the IRC message -- want a CLI for bumping version bounds, rather than automation of updating bounds according to the matrix
17:13:24 × thonkpod quits (~thonkpod@user/thonkpod) (Ping timeout: 260 seconds)
17:14:52 <[exa]> I guess you want a better CLI than a sed exercise right. :]
17:15:13 thonkpod joins (~thonkpod@user/thonkpod)
17:15:16 <awpr> sed would be fine, I suppose, but I don't know of a way to apply it to the metadata on Hackage
17:15:50 <awpr> I suppose there could be a curl-accessible way of uploading revisions, but I'm not sure I'd trust my own sed script with pushing directly to Hackage
17:17:22 dartford joins (~dartford@176-157-77-163.abo.bbox.fr)
17:18:08 <[exa]> maybe something for just downloading all packages/metadata to a git repo and pushing the changed stuff back could make 99% of it
17:18:18 × rkrishnan quits (~user@223.226.59.167) (Ping timeout: 260 seconds)
17:24:10 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
17:29:03 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
17:29:11 <dartford> i have to say, i cant understand why selective was proposed for this problem
17:30:06 <dartford> maybe its because of the carry?
17:30:10 <dartford> is that a decent use case?
17:30:28 <dartford> the "accumulater" or state in mapAccumL
17:30:55 <dartford> the paper mentions about "depending on previous values" - i wonder if selective formalises the notion of an accumlator or carry
17:31:10 <dartford> but perhaps i dont understand it, can anyone say?
17:31:31 <[exa]> dartford: not sure if it's the right abstraction but it adds the notion of a "regularly analyzable computation" which you kinda seemed to want
17:31:46 <[exa]> dartford: I might have missed the point as well
17:32:34 <dartford> this probably isnt the language i would understand unfortunately
17:32:54 <dartford> is what i said right?
17:33:44 Guest41 joins (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
17:33:49 <dartford> what makes you think that a "regularly analyzable computation" is what i was after?
17:34:11 <dartford> seems like a tuatological redefinition, since it isnt itself comprehensible in an obvious way
17:34:20 <dartford> place is riddled with them
17:35:43 <dartford> i dont even understand how applicative effects are suposed to be independent
17:35:55 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
17:36:03 <dartford> and that monadic effects by contrast are "dependent on previous effects"
17:36:14 <dartford> and i dont get what it means to "statically declare an effect"
17:36:24 <dartford> its like gibberish soup at this point
17:36:49 <sclv> dartford: it sounds to me like you don't have enough background in the basics to be trying to ask the questions you're asking
17:37:17 <sclv> you can try writing the code you want directly with no typeclasses
17:37:23 <dartford> [exa] why did you think thats what i need?
17:37:24 <sclv> or you can buckle up and read some tutorials and ooks
17:37:28 <sclv> books
17:37:51 <dartford> thats quite condescending. just an observation
17:38:25 <[exa]> dartford: it helped me when trying to do a monad that computes weirdly measured dimensions of stuff, this seemed similar :]
17:38:40 <dartford> what does it mean to "declare" an effect?
17:38:58 <[exa]> dartford: anyway the truth is that I really don't get your problem completely, more code examples of what you want to achieve would really help
17:39:01 <davean> declare, definition: formally announce the beginning of (a state or condition).
17:39:04 <sclv> [exa]: the matrix bounds can turn into base constraints, which can suffice.
17:39:04 <dartford> [exa] - ah, no wonder that wasnt apparent!
17:39:09 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:39:16 <davean> reveal one's intentions or identity.
17:39:48 <[exa]> "write a part of declarative program"
17:39:50 <dartford> [exa] i was just asking what selective does
17:40:52 <dartford> or, how applicative is "independent" effects, vs monads as effects which can depend on previous effects
17:40:58 <dartford> i dont see how that works at all
17:41:08 <dartford> but have plenty of "background" in both
17:41:11 <davean> dartford: well, look at the type class
17:41:18 <davean> No, you clearly lack background
17:41:25 <sclv> [exa]: there's also https://github.com/phadej/trustee
17:41:56 <davean> dartford: so with Applicative you get "(<*>) :: f (a -> b) -> f a -> f b"
17:42:04 <davean> as your (only) way to combine effects
17:42:08 ec joins (~ec@gateway/tor-sasl/ec)
17:42:12 <dartford> davean: right, i dont understand the jargon. but have been using applicative and monad for nearly 15 years now
17:42:18 <[exa]> dartford: ah there. it's like applicatives, it can do effects that depend on previous effects, but it's highly restricted (unlike in full monads). The restriction could ensure that you almost get monads but don't do the problematic operation you were mentioning there
17:42:20 <sclv> [exa]: and i know some people have bulk edit scripts but i don't know where. you can just open a ticket at https://github.com/haskell-infra/hackage-trustees/issues to ask for help as well
17:42:39 <davean> dartford: how could you change one given one you combined before it? You clearly can't
17:42:50 <[exa]> sclv: ah nice thanks! (cc awpr -- the link some 6 lines above)
17:43:15 <dartford> which probelamatic opperation!?
17:43:50 <[exa]> dartford: eating data from an end of an infinite list, iirc
17:43:51 <dartford> davean: are you saying the order of sequential composition matters?
17:43:59 <davean> dartford: no, I didn't say that
17:44:07 <sclv> ?where lyah
17:44:07 <lambdabot> http://www.learnyouahaskell.com/
17:44:11 <dartford> could you explain what you meant?
17:44:37 <dartford> [exa] oh right, thanks
17:45:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:45:30 <davean> dartford: I give you a :: f a and b :: f b, if I combine them - in either order - how can you change what f a or f b is?
17:45:39 <davean> you very clearly can't
17:46:07 <davean> Applicatively only gives you the ability to build an f c using the a and bs
17:47:48 <dartford> i wonder if thats because they sequence together in an order independent way...
17:48:01 <davean> Really though, you should read a tutorial
17:49:03 <dartford> i just read some of the comments people were saying about me at the top of this chatlog and im actually on the verge of tears
17:49:12 <dartford> im going to have to come back to this another time
17:49:14 × dartford quits (~dartford@176-157-77-163.abo.bbox.fr) (Quit: Connection closed)
17:50:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
17:52:54 <maerwald> https://haskellweekly.news/survey/2021.html
17:56:35 × mbuf quits (~Shakthi@122.174.251.211) (Quit: Leaving)
17:56:47 × nickkkkk_all quits (~nick_all@139.102.124.132) (Ping timeout: 268 seconds)
17:56:47 × guniberas quits (~guniberas@42.191.188.121) (Ping timeout: 268 seconds)
17:57:43 cosimone joins (~user@93-47-228-135.ip115.fastwebnet.it)
17:59:25 Null_A joins (~null_a@2601:645:8700:2290:f456:9370:22df:9c55)
18:02:43 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
18:05:05 <shapr> yay survey!
18:05:08 emf joins (~emf@2620:10d:c090:400::5:f24f)
18:05:11 <davean> "Do you use Haskell?" Where is the "I neither confirm or deny I engage in this deviant act"?
18:06:22 × euandreh quits (~euandreh@2804:14c:33:9fe5:bc44:afc4:50a0:6ab8) (Ping timeout: 260 seconds)
18:07:13 euandreh joins (~euandreh@2804:14c:33:9fe5:9dc4:877c:4cec:30b6)
18:07:18 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Ping timeout: 260 seconds)
18:07:30 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection)
18:08:16 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
18:08:30 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
18:08:46 × yrlnry quits (~mjd@pool-100-11-2-80.phlapa.fios.verizon.net) (Ping timeout: 260 seconds)
18:10:14 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
18:10:33 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
18:12:58 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
18:13:34 × v01d4lph_ quits (~v01d4lph4@106.215.91.221) (Remote host closed the connection)
18:13:39 <monochrom> I think the close-tab/window button is th "I neither confirm nor deny" button :)
18:14:04 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
18:16:12 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
18:16:22 nickkkkk_all joins (~nick_all@139.102.124.132)
18:17:46 × euandreh quits (~euandreh@2804:14c:33:9fe5:9dc4:877c:4cec:30b6) (Ping timeout: 268 seconds)
18:18:37 × Null_A quits (~null_a@2601:645:8700:2290:f456:9370:22df:9c55) (Remote host closed the connection)
18:23:11 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
18:27:52 timCF_ joins (~timCF@m91-129-101-112.cust.tele2.ee)
18:32:31 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
18:35:01 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds)
18:36:51 <timCF_> Did anybody thought how might be possible to express in Haskell type system some sort of typical school-math compatible computations like `let distance :: Meter = 1; let time :: Second = 2; let speed :: Meter `Per` Second = distance / time`? Ideally in a way where left and right sides of `Per` type constructor will simplify themselves to canonical form and remove redundant type factor (in case something
18:36:57 <timCF_> is presented in both left and right and might be remove because of redundancy)
18:37:58 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
18:38:17 neurocyte0132889 joins (~neurocyte@45.10.60.185)
18:38:17 × neurocyte0132889 quits (~neurocyte@45.10.60.185) (Changing host)
18:38:17 neurocyte0132889 joins (~neurocyte@user/neurocyte)
18:38:33 Vajb joins (~Vajb@2001:999:66:281c:27a0:1549:39e5:8b1a)
18:38:48 <davean> monochrom: ok, perfect. Thank you for your assistance, I've answered thusly
18:39:08 <davean> timCF_: Thats pretty standard
18:39:23 <davean> https://hackage.haskell.org/package/dimensional etc
18:39:26 yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net)
18:39:28 <davean> timCF_: people use that all the time
18:39:46 <davean> (Theres several other implimentations, that just happens to be the one I've been using when I need it)
18:41:12 × chomwitt quits (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
18:41:40 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
18:42:00 <timCF_> davean: cool, thanks! How this kind of stuff is named in general? I just had no idea which keywords to hoogle :)
18:42:07 <tomsmeding> units?
18:43:04 <tomsmeding> case in point: https://hackage.haskell.org/package/units (I had no idea this library existed, the name just matches my guess)
18:45:22 <timCF_> tomsmeding: looks good as well!
18:46:44 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
18:47:51 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
18:48:04 <davean> timCF_: uh, its dimensional analysis
18:48:08 <davean> isthe general term
18:50:09 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
18:51:04 × nickkkkk_all quits (~nick_all@139.102.124.132) (Ping timeout: 268 seconds)
18:51:20 <timCF_> davean: thanks!
18:52:34 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
18:54:28 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
18:58:26 nickkkkk_all joins (~nick_all@139.102.124.132)
19:03:26 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
19:04:08 × nickkkkk_all quits (~nick_all@139.102.124.132) (Quit: Leaving)
19:05:15 × max22- quits (~maxime@2a01cb088335980078b9d498c24675c0.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
19:07:11 euandreh joins (~euandreh@2804:14c:33:9fe5:3a97:eaba:c01a:d700)
19:09:28 brainfreeze joins (~brainfree@2a03:1b20:4:f011::20d)
19:09:28 Nachtgespenst joins (~user@user/siracusa)
19:09:33 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
19:12:05 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
19:12:31 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:21:54 × Vajb quits (~Vajb@2001:999:66:281c:27a0:1549:39e5:8b1a) (Read error: Connection reset by peer)
19:22:29 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
19:23:22 × cosimone quits (~user@93-47-228-135.ip115.fastwebnet.it) (Ping timeout: 260 seconds)
19:25:23 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:31:05 justsomeguy joins (~justsomeg@user/justsomeguy)
19:35:14 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Read error: Connection reset by peer)
19:35:27 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
19:37:04 vicfred joins (~vicfred@user/vicfred)
19:40:34 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
19:43:02 jakalx parts (~jakalx@base.jakalx.net) ()
19:44:41 <[exa]> awpr: anyway apparently the brick maintainer used this https://github.com/hackage-trustees/hackage-cli to do the edits very quickly, might be useful for the stuff you mentioned
19:45:04 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
19:45:09 <awpr> oh nice, that looks like exactly what I was looking for
19:45:28 × greyrat quits (~greyrat@ip202.ip-51-178-215.eu) (Ping timeout: 252 seconds)
19:45:53 greyrat joins (~greyrat@ip202.ip-51-178-215.eu)
19:46:10 <sm> +1
19:48:06 jakalx joins (~jakalx@base.jakalx.net)
19:52:22 max22- joins (~maxime@2a01cb0883359800a1b4cd1a3eb225c1.ipv6.abo.wanadoo.fr)
19:53:31 × Kaiepi quits (~Kaiepi@156.34.44.192) (Remote host closed the connection)
19:53:44 × tcard_ quits (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Remote host closed the connection)
19:53:51 Kaiepi joins (~Kaiepi@156.34.44.192)
19:54:00 tcard_ joins (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp)
19:55:26 × oxide quits (~lambda@user/oxide) (Quit: oxide)
19:58:05 <justsomeguy> How do I write literal values for Float values like -Infinity and NaN? -Infinity doesn't work in GHCi, but -1/0 does?
19:58:36 <justsomeguy> Ah, scratch that, I've just found the relevant section in the haskell report.
19:58:46 <monochrom> :)
19:59:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
20:05:14 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 246 seconds)
20:07:15 juhp joins (~juhp@128.106.188.220)
20:15:28 <shapr> justsomeguy: what's the answer? I don't know!
20:15:43 mikoto-chan joins (~mikoto-ch@185.237.102.121)
20:17:27 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
20:18:29 chomwitt joins (~chomwitt@ppp-2-85-245-90.home.otenet.gr)
20:18:42 <dsal> I wanted to ask, but then people would know I was stupid.
20:19:50 <shapr> dsal: I don't care if people think I ask stupid questions, I want to know the answers more
20:19:52 <dsal> I avoid floating point so much, I generally try to keep my code as point free as possible just in case one of them decides to start floating away.
20:21:03 <janus> is there really a literal for this? it seems so odd that i can't find it here https://hackage.haskell.org/package/base-4.16.0.0/docs/src/GHC.Float.html
20:22:06 <janus> seems roundabout to define isNaN as a foreign function if there were a way to write "== NaN"
20:22:24 <geekosaur> I don't think two NaNs compare equal?
20:22:29 <dsal> Isn't == NaN always False?
20:22:37 <geekosaur> NaN follows some really weird rules
20:22:46 <dolio> Right.
20:23:18 <dsal> This is one of the reasons floating point is painful to work in.
20:23:38 × mikoto-chan quits (~mikoto-ch@185.237.102.121) (Ping timeout: 260 seconds)
20:23:45 <dsal> You treat them like regular numbers, and then sometimes the answer can't be represented properly and sometimes it's not a number at lal.
20:24:04 <janus> ok but the comparison with negative zero is a foreign function
20:24:38 <geekosaur> that's because
20:24:42 <geekosaur> > -0 == 0
20:24:44 <lambdabot> True
20:25:01 <geekosaur> > -0.0 == 0.0
20:25:03 <lambdabot> True
20:25:15 aristid___ joins (sid1599@id-1599.uxbridge.irccloud.com)
20:25:23 mikoto-chan joins (~mikoto-ch@185.237.102.118)
20:25:27 <janus> oh ok
20:25:29 <geekosaur> negative zero is the same as zero for all but a few functions thta care about quadrants
20:25:39 <geekosaur> (e.g. atan2)
20:26:09 aristid___ is now known as aristid
20:26:18 <geekosaur> as dsal said, this is why FP is painful
20:26:30 <geekosaur> (and the same painful in all languages)
20:26:47 <dsal> The pain was standardized.
20:26:57 <[exa]> hopefully one day all FP equality comparisons will just return False
20:27:22 <janus> > atan2 (0) (-1)
20:27:24 <lambdabot> 3.141592653589793
20:27:29 <janus> > atan2 (-0) (-1)
20:27:31 <lambdabot> -3.141592653589793
20:27:36 <aristid> fixed point (or any other alternative to FP) is not exactly a panacea though
20:28:04 <dsal> Adding negative numbers in general was a bad idea. Zero was already bad enough.
20:28:10 <[exa]> janus: noooooo
20:28:29 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 268 seconds)
20:29:01 <janus> i don't use atan anyway because i don't want untanned people to feel excluded
20:29:28 justsomeguy joins (~justsomeg@user/justsomeguy)
20:29:36 <dsal> If I were a geometrist cooped up in my office all day, I could probably use atan.
20:30:25 <aristid> so i'm the creator of the "aws" hackage package, but i haven't had time to maintain it for a long time (i don't really even use haskell these days)
20:30:32 <aristid> thoughts on how to find a new maintainer?
20:30:47 × fendor quits (~fendor@77.119.197.65.wireless.dyn.drei.com) (Remote host closed the connection)
20:31:11 jespada joins (~jespada@190.7.36.46)
20:31:18 <geekosaur> mail to haskell-cafe?
20:31:45 <geekosaur> or if you have any outstanding PRs, offer to pass maintainership to whoever submitted them
20:31:54 <sagax> https://termbin.com/54b5
20:31:55 <aristid> i don't want to join any mailing lists :p
20:31:57 <cigsender> project-matchmaking?
20:32:04 <Hecate> cigsender: not yet! :<
20:32:11 <cigsender> :(
20:33:46 <geekosaur> sagax: you don't. printf is a fragile hack in Haskell
20:33:48 <Hecate> aristid: hi! the haskell-cafe mailing-list is your best bet to reach out for new maintainers. I would also advise that you use social media platforms like Twitter (with the #haskell hashtag) because lots of professionals are also monitoring and interacting on those platforms
20:34:09 <aristid> looks like joeyh_ has an outstanding PR to aws :D
20:34:26 <maerwald> "advise that you use social media" <-- uhm...
20:34:41 × max22- quits (~maxime@2a01cb0883359800a1b4cd1a3eb225c1.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
20:34:46 <janus> is irc social media?
20:34:51 <aristid> yeah i guess i can tweet something
20:34:54 fendor joins (~fendor@77.119.197.65.wireless.dyn.drei.com)
20:34:56 <geekosaur> possibly antisocial media
20:35:21 <geekosaur> (then again that's also how I feel about twitter most of the time)
20:35:52 <aristid> Hecate: is there a way to interact haskell-cafe without adding any more emails to my email? i am too close to email bankruptcy already.. :D
20:35:55 <maerwald> janus: no, because here you get banned if you post your bikini pics
20:36:09 <sagax> geekosaur: what better then `printf`?
20:36:44 <janus> maerwald: i have a collection of ansi porn that i can show you if connect to my server
20:36:46 <sagax> for output with formatting
20:36:58 <maerwald> janus: you seems like a trustworthy person, why not
20:37:06 <geekosaur> sagax, printf (badly) wraps the numeric formatting functions in https://downloads.haskell.org/ghc/latest/docs/html/libraries/base-4.15.0.0/Numeric.html
20:37:10 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
20:37:15 <Hecate> aristid: I can cross-post to it if you need to avoid new MLs :P But I'd advise you to post on the Haskell Discourse then :)
20:37:37 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
20:39:03 × jespada quits (~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:39:36 <aristid> Hecate: https://twitter.com/aristidb/status/1455273103278346244?s=21 - retweet would be appreciated :)
20:40:13 <Hecate> aristid: 👍
20:43:11 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:50:42 × mikoto-chan quits (~mikoto-ch@185.237.102.118) (Ping timeout: 268 seconds)
20:50:59 zero is now known as yin
20:52:03 mikoto-chan joins (~mikoto-ch@185.237.102.115)
20:53:09 × mikoto-chan quits (~mikoto-ch@185.237.102.115) (Client Quit)
20:53:33 dartford joins (~dartford@176-157-77-163.abo.bbox.fr)
20:54:33 <dartford> ok - i want to give this another try, but im going to try and take it slow. im recovering from blast trauma and i hope the other users can be considerate of this
20:54:43 <dartford> im sorry im not totally with it, but im trying my best
20:56:13 <Hecate> salut dartford
20:56:22 <dartford> hi
20:58:06 <dartford> i dont understand the termanology used in the paper "Selective Applicative Functors"
20:58:21 <dartford> eg when describing the type of bind
20:58:24 <dartford> :t (>>=)
20:58:25 <lambdabot> Monad m => m a -> (a -> m b) -> m b
20:58:35 <sclv> [exa]: btw also there's hackage-cli for bulk editing bounds https://github.com/hackage-trustees/hackage-cli
20:58:46 <dartford> it says;
20:58:47 <dartford> The operator takes two arguments: an effectful computation f a, which yields a value of type a
20:58:47 <dartford> when executed
20:59:20 <janus> sclv: 20:44 <..... [exa]> awpr: anyway apparently the brick maintainer used this https://github.com/hackage-trustees/hackage-cli to do the edits very quickly, might be useful for the stuff you mentioned
20:59:25 <dartford> i have never heard of a monad f, applied to the type `a' being called "an effectful computation"
20:59:30 <sclv> oh nice :-)
20:59:42 <Hecate> dartford: Monads are here to provide the means to have effectful computations in Haskell
20:59:44 <dartford> eg, the list monad, i normally just think of as a kind of container
20:59:47 <Hecate> that's literally their whole purpose
20:59:52 <Hecate> in Haskell
21:00:05 <sclv> you can also think of the list monad as encompasing the "nondterminism effect"
21:00:09 <dartford> er, well yeah i guess IO was crucial in the dev of haskell
21:00:24 <sclv> where instead of one value, you have a nondeterministic collection of values
21:00:26 <Hecate> dartford: https://wiki.haskell.org/Monads_as_computation
21:00:37 <dartford> but monads in general also include flattenable containers like list
21:00:43 <sclv> monads were introduced for effects in general -- not just IO, but state, nondeterminism, etc
21:00:51 <dartford> which is the kind of bind instance im more used to dealing with
21:00:56 <janus> but shouldn't it be a set instead of a list if it were really about nondeterminism
21:01:05 <dartford> its not
21:01:09 <Hecate> I think the Monad instance for List was also here to provide support for list comprehension operational semantics?
21:01:23 <sclv> the monad instance for list was for nondeterminism
21:01:27 <Hecate> as ok :)
21:01:35 <sclv> https://www.cs.cmu.edu/~crary/819-f09/Moggi91.pdf
21:01:44 <Hecate> I have to admit I'm never doing (consciously) non-determinism by hand
21:01:59 <sclv> but this is all historical. you don't have to _agree_ that this is the fundamental way to think about them. you just have to understand that people _do_ think about them that way
21:02:01 <dartford> its flattenable
21:02:05 <sclv> so you can read the papers
21:02:06 <dartford> thats its monadic behaviour
21:02:19 <monochrom> janus: All of {list, tree, multiset/bag, set} can be used for non-determinism, you have a lot of choice about how much intermediate information to throw away.
21:02:36 <sclv> the monadic behavior is just that it obeys the laws. its pure calculation. anything else is just a more intuitive way we have of talking about some aspect of the thing
21:02:48 <dartford> sclv: good call, id rather not speak of nondetermanism at all if thats ok
21:02:56 <monochrom> For example, if you choose set, you throw away multiplicity.
21:03:04 <sclv> well you _have_ to understand the effect standpoint if you want to read papers that take it
21:03:07 <dartford> i get that its important to the discussion of pure vs escaping effects though
21:03:11 <sclv> so i don't want to convince you that this is the right standpoint
21:03:18 <dartford> fair
21:03:18 <sclv> i just want to help you read the paper by answering your question
21:03:24 <monochrom> But nothing says that the only correct thing to do is to throw away multiplicity.
21:03:58 Midjak joins (~Midjak@82-65-111-221.subs.proxad.net)
21:04:10 <dartford> ok, so if we are talking about "effects" this is something to do with the "impure" contents?
21:04:20 <monochrom> In the case of fitting monads to the Monad type class, you also can't add the Eq constraint to say you want sets.
21:05:03 <dartford> i think the point is that we want something like IO effects but in a pure setting, right?
21:06:07 <dartford> the idea just being to understand how `Monad f => f a' expresses "an effectful computation"
21:06:10 <sclv> you can be simpler. "Maybe" is the nontermination effect
21:06:38 <dartford> ok, so if i have Just 1
21:06:42 <janus> i feel like i am not understanding what people mean when they say non-determinism here. because it doesn't involve randomness. wikipedia says "even for the same input, can exhibit different behaviors on different runs"
21:06:46 <dartford> hows that "an effectful computation" ?
21:06:57 <janus> but what is the definition that people use when they associate lists with nondeterminism?
21:07:02 <dartford> seems more like a container with a value in
21:07:19 <sclv> its the computation that terminates and yields 1
21:07:22 <dartford> but where we wouldnt know that it actually has a value just from the type
21:07:27 <sclv> as opposed to Nothing, which is the computation that does not terminate
21:07:32 <aristid> i think the point is just that you can build functions that rely on nothing but the monad laws, and they will work for all instances of monad - any intuition to explain monads may be helpful but is never the whole picture
21:07:37 <dartford> sclv: ok, right, that sounds like we are getting somewhere
21:07:43 <sclv> the Moggi paper I linked above is the origin of all this
21:07:44 <monochrom> I simply take it as "4 has two square roots, 2 and -2, how do I express multi-valued functions?"
21:07:47 <sclv> before haskell even had monads
21:08:11 <dartford> aristid: the problem is the whole paper is written in this language of effects
21:08:28 <monochrom> In fact one of the Moggi papers had monad transformers too heh.
21:08:37 <sclv> `Either String` is error because `Right 1` is the computation which yields 1 and `Left "hello"` is the computation that errors with "hello"
21:09:09 <dolio> Non-determinism doesn't involve randomness in general.
21:09:11 <dartford> hows it "effectful" though?
21:09:11 <sm> janus: my limited understanding: it's not saying random, but "multiple answers", ie no one definite answer
21:09:12 <sclv> janus: lists are nondeterminism because they encompass computaions that can have multiple outcomes
21:09:30 <sclv> so like "all possible paths through a tree"
21:09:34 <dartford> dolio: right, a "pottentially" hanging computation is nondetermanistic, right?
21:09:47 <dartford> idk if it will return or not
21:09:48 <dolio> Non-deterministic Turing machines don't do random branches. They either do every branch, or they magically pick the right branch every time, depending on how you want to think about it.
21:10:00 <sm> so really it's deterministic, just multiple. Confusing term.
21:10:03 <aristid> lol i haven't hung out in this channel for many years, and still i recognize a few of the people
21:10:43 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Remote host closed the connection)
21:10:46 <dartford> the kind of people that start and end a sentence with "right", right?
21:10:53 <janus> but it requires you to choose an order for them, and you can even choose to have infinite answers.. that just seems like two major differences to how non-deterministic turing machines work
21:11:02 <monochrom> Well, S->(S,a) is also both "mutable state" and "but it's a stateless function from S to (S,a)".
21:11:17 <sclv> some papers use "bags" or "unsorted multisets" for true nondeterminism
21:11:25 <sclv> but we just use list historically because its easier to write :-)
21:11:26 <dartford> is it nesacary to understand nondetermanism to understand effectful computations?
21:11:30 <dartford> why are we talking about it?
21:11:35 <dolio> dartford: Yeah, no answers is encompassed by non-determinism, too.
21:11:40 <sclv> its necessary to understand why people call list the "nondeterminism effect"
21:11:44 <monochrom> You will always have this double-speak tension when using math functions to model non-math things.
21:11:48 <dartford> i mean, as an example other than that uses randomness
21:12:03 <sclv> if you want to forget about lists and only thing about other monads, like state, or writer, or maybe for effects
21:12:07 <sclv> then we can ignore nondeterminism for now
21:12:11 <dartford> thanks
21:12:19 Null_A joins (~null_a@2601:645:8700:2290:7887:7a6d:751e:a369)
21:12:26 <janus> hmmm all right, i suppose it is correct that programming rarely matches programming 100%
21:12:35 <dartford> ok, so, forgetting about how containers are used to model nondetermanism, as in, options
21:12:53 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 268 seconds)
21:13:02 <dartford> [1..], it contains all the numbers, idk which one to select, or something like that
21:13:12 <monochrom> "I have a partial function X -> Y, oh let's express it by X -> Maybe Y, oh wait now I have a total function again..." same deal.
21:13:24 <dartford> "could be any of them if i draw a number from it", or something like that, idk
21:13:32 <monochrom> You have to know you are talking 2 levels at the same time.
21:14:11 <sclv> how you select a value from a list is known as an _algebra_ for a monad
21:14:11 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
21:14:21 <dartford> so, if we just talk about embedding "effects" in monads, are we just talking about being able to change the contents?
21:14:35 <sclv> no, we say that monads model effects
21:14:37 <dartford> some older notion akin to saying "weer going to lens into part of it"
21:14:46 <sclv> it has nothing to do with lenses
21:14:54 <dartford> sclv: thats the termanology i dont understand
21:15:12 <dartford> i mean, if i have writer, then the effect is changing part of it right?
21:15:23 <cigsender> monads "are" the effects. a `Maybe a` is an `a` with the effect of being possibly-empty
21:15:27 <sclv> we mean that if `m` is a monad, the difference between `a -> b` and `a -> m b` is that the latter can be thought of as "the former, but with some effect"
21:15:31 <dartford> or a state rather, if i want to read the value it contains in order to be able to update it
21:15:45 <dartford> basically, i was working with the state monad almost exclusivly for this
21:15:47 <sclv> a problem is you're thinking only of containers
21:15:52 <sclv> monads aren't always containers
21:15:54 <dartford> so changing the contents becomes the thing
21:16:01 <sclv> for example, the continuation monad is not a container
21:16:13 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
21:16:20 <dartford> so how is that an efectful computation?
21:16:29 <janus> why is it not a container? just because it can contain a function? :P
21:16:30 <dartford> if the effect is other than changing the value it contanes
21:16:50 <sclv> because call/CC is an effect
21:16:55 <dartford> weer talking about ((a->b) -> b) right?
21:16:57 <sclv> a control flow effect
21:17:03 <dartford> seems to contain a value of type `a' to me
21:17:03 <maerwald> sclv: it just moves you to another container
21:17:10 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection)
21:17:18 <dartford> % :t callCC
21:17:18 <yahb> dartford: MonadCont m => ((a -> m b) -> m a) -> m a
21:17:27 <janus> sclv: but i can use Cont just fine without call/cc? i don't understand how the existence of call/cc changes whether it is a container or not?
21:17:47 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
21:17:50 <dartford> so it contains a `a -> m b' ?
21:18:01 <dolio> What's your definition of, "container"?
21:18:10 <dartford> i can retrive the value
21:18:13 <dartford> or change it
21:18:19 <dartford> depends what instances it satisfies
21:18:24 <dartford> but there are some values
21:18:40 <dartford> and they appear in a way decorated by the nature of the container
21:18:44 <monochrom> janus: Try to wing "(a -> S -> (R, S)) -> S -> (R, S)" as a container? >:) (That's "ContT R (State S) a")
21:19:00 <dartford> eg a functor is a container in an obvious way because of how fmap can change the values
21:19:21 <sclv> a functor is not a container
21:19:23 <monochrom> I'm OK with not talking about callCC. Although, callCC still exists.
21:19:28 <dartford> ie, because functor is a superclass of monad, so then, there must be values that i can at least fmap over
21:19:34 <cigsender> dartford: given a type `a`, the type `Maybe a` may or may not hold a value of `a`. But `Maybe a` is not a monad, it is a type. `Maybe` is teh monad
21:20:05 <sclv> its a fine intuition at first, but it doesn't hold for more complex types very easily
21:20:31 <dartford> but if you can opperate on the values, they must be there, inside it
21:20:37 <dartford> so it contains them
21:20:44 <dartford> :t fmap
21:20:45 <lambdabot> Functor f => (a -> b) -> f a -> f b
21:20:59 <sclv> `data Phantom a = Phantom`
21:21:03 <dartford> values of type `a' are having a function applied to them
21:21:05 <davean> dartford: absotely not
21:21:13 <sclv> its a "container of zero as" but how is that useful
21:21:16 <dartford> sclv: seems like the always empty container...
21:21:21 <maerwald> I think most haskellers think of "collections" or something similar when you say "container"
21:21:23 <dartford> its a wierd edge case sure
21:21:33 <maerwald> I have no problem with "container" as a more abstract term
21:21:35 <sclv> there's also a formal theory of containers from ghani et al.
21:21:40 <davean> dartford: what about (data Function b = F Int -> b)
21:21:44 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
21:21:45 <dsal> It seems weird to refer to a function as "containing" a thing.
21:21:45 <davean> wheres the b inside that?
21:21:58 <dartford> anyway, even if you only had a getter, id still call it a container, since it can have the values retrived
21:22:16 <janus> i guess i don't have a definition of container. is Maybe a container according to anyone?
21:22:20 <sclv> but things with getters are not necessarily functors, and some functors, like phantom, have no getters
21:22:34 <monochrom> I accept that Maybe is a container.
21:22:43 <dartford> davean: thats a much better idea, that doesnt seem to be a container of values of type b
21:22:45 <dsal> I think of Maybe as a container.
21:22:46 <monochrom> I don't have a definition either. I don't think we need one.
21:22:50 <sclv> maybe also fits the formal definition: https://www.sciencedirect.com/science/article/pii/S0304397505003373
21:22:57 <davean> dartford: its also clearly a functor
21:23:03 <davean> via compose.
21:23:06 <janus> but Cont has a Susp constructor which is just like Just. so it seems weird that Maybe is a container but Cont wouldn't be
21:23:24 <monochrom> What I don't accept is the stance "Maybe is only a container".
21:23:42 <janus> you could choose a polymorphic type parameter for Cont which would make the input type Void and have it be 'isomorphic' to Maybe, no
21:24:10 <davean> dartford: infact, its also a common monad - reader
21:24:19 <dartford> there are no values inside the reader monad
21:24:30 <dartford> so its not a container
21:24:32 <dartford> ok, done
21:24:36 <dartford> so, back to effects
21:24:53 <monochrom> I treat "container" on the same level as "compiler", "interpreter", "programming". I expect grey areas. I expect disagreements.
21:24:57 <janus> oh no, i meant the "Done" constructor for Cont. Not Susp, which is the one that would be 'disabled' with Void
21:24:59 <dartford> (we conclude that "not all monads can be thought of as containers, even though they are functors)
21:25:10 <davean> monochrom: A box is a container, a Box is not.
21:25:16 <janus> right ok, i accept it is a grey area
21:25:18 <monochrom> haha
21:25:39 <dartford> ie, being able to fmap over values of the type parameter, does not mean the Functor contains values of that type that can be "got"
21:25:49 <monochrom> Is YAML a programming language? >:)
21:26:01 <dartford> erp
21:26:02 <monochrom> ("No! It's a container language!")
21:26:06 <janus> haha :P
21:26:09 <davean> monochrom: yes, and you made me think about it, so thats a crime against humanity and I want you prosecuted
21:26:18 <monochrom> haha
21:26:26 <dartford> shots fired
21:26:28 × cigsender quits (~cigsender@74.124.58.162) (Quit: leaving)
21:26:31 <monochrom> Belated Halloween activities.
21:26:43 <dartford> soooo, effects?
21:27:02 <sclv> like you've gotten three answers on effects and a link to one or two papers
21:27:17 acidjnk joins (~acidjnk@p200300d0c7441145a0f2d1eed66e92ec.dip0.t-ipconnect.de)
21:27:19 <dartford> if we refuse to consider containers, are we left with things more obviously embodying the notion of "effectful computations" ?
21:27:20 <sclv> do you have a specific question
21:27:23 <dsal> If covariant functors are boxes, are contravariant functors conveyor belts?
21:27:33 <sclv> no, we should _also_ consider things you personally think of as containers
21:27:35 <sclv> like maybe
21:27:42 <dartford> ah ok
21:27:43 <dartford> thanks
21:27:51 <dartford> i wasnt sure what was being suggested
21:28:01 <sclv> the potential nontermination effect is a very nice simple one
21:28:08 <sclv> as is reader, and state
21:28:22 <dartford> so what was the "effect" of Maybe?
21:28:33 <sclv> potential nontermination
21:28:43 <davean> dsal: a falsehood implies anything you want it to, so maybe?
21:29:18 <dartford> ok, so, because Nothing certainly returns, but Just nastyLoopingThing wont...
21:29:37 <sclv> pretend we're in a language without loops
21:29:41 <dartford> i suppose i might be thinking of effects as basically being IO
21:29:43 <sclv> or without infinite recursion
21:29:46 <dartford> i guess thats whats wrong
21:30:03 <dartford> Just doInfiniteWorkForever
21:30:24 <dartford> sclv: ok, i dont know how to make that not terminate without loops or recursion...
21:30:33 <dartford> i cant unfold infinite containers?
21:30:41 <sclv> you can also simulate IO with appropriate monads. https://hackage.haskell.org/package/IOSpec-0.3.1.1
21:30:56 <dartford> im just not sure thats whats *meant* by effec
21:30:59 <dartford> effect*
21:31:08 <sclv> dartford: i'm saying, to think of Maybe as nontermination as an effect, it helps to think of yourself in a language that has no unlimited recursion
21:31:14 <dartford> since pottential nontermination is supposed to be thought of as an effect apparently
21:31:22 <sclv> and Maybe is the effect of halting
21:31:35 <sclv> or rather of not terminating
21:31:41 <sclv> not by infinite loop, but by getting "stuck"
21:31:46 <dartford> huh? you mean, Just? or Nothing?
21:31:53 <sclv> Maybe itsel
21:31:55 <monochrom> I think "no answer / failure" is much better than "non-termination".
21:31:58 <sclv> sure
21:32:05 <sclv> i'm using the old terminology
21:32:11 <dartford> oooh right, just "this might return"
21:32:13 <dartford> fine
21:32:15 <sclv> you can think of it as "null pointer semantics"
21:32:15 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:32:22 <dartford> so Nothing, is it hanging
21:32:26 <dartford> notionally
21:32:44 <sclv> sure
21:32:55 <dartford> monochrom: right, or you would need some way to make a hanging computation, which would require loops
21:33:06 <dartford> idk why it was "helpful" to consider a language without loops...
21:33:25 <dartford> so just to be sure, this is an "effect" why?
21:33:26 <sclv> because loops are complicated to model as an effect and are beyond the scope of what we're talking about here
21:33:34 <dartford> because its impure?
21:33:40 <sclv> there's a richer monad that introduces a "real" notion of loops as an effect
21:34:10 <sclv> not because its impure, but because you can't rule them out with types and then introduce models of them without a richer type system
21:34:13 <sclv> its... complicated
21:34:24 <sclv> because of the halting problem, basically
21:34:29 <dartford> argh
21:34:35 <dartford> thwarted once more
21:34:37 <sclv> so i'm advising ignoring it
21:35:02 <dartford> yeah, im never going to be able to read this stupidly written paper in the absurd incomprehensible jargon
21:35:10 <sclv> don't be mean to the paper
21:35:16 <sclv> its a great paper by very talented people
21:35:16 <dartford> sorry paper
21:35:31 <dartford> yeah, that have grapled with the incomprehensible far too much
21:35:32 <sclv> and i'm sorry you can't read it, but its written in a way very comrehensible compared to most
21:35:41 <dartford> all their girfriends are already divorced them
21:35:49 <sclv> ok seriously stop it
21:35:56 <maerwald> :D
21:35:57 <dartford> make it simple yo
21:36:09 <sclv> these are lovely people and you making personal attacks on them is winning you no friends
21:36:15 <sclv> i'm sorry you're having a hard time with the paper
21:36:15 mmhat joins (~mmh@55d4a9b2.access.ecotel.net)
21:36:21 <sclv> there is NO EXCUSE for that sort of rudeness
21:36:26 <sclv> to our friends and community members
21:36:35 <maerwald> what's the paper in question even
21:36:36 <dartford> i meant that their girlfriends would be angry at people wasting their time, not that they were unlovable
21:36:48 <monochrom> The "selective" paper.
21:36:48 <dartford> you misunderstood
21:36:57 <dartford> i did not mean any form of rudeness
21:37:03 <sclv> maerwald: the selective functors paper by mokhov, simon marlow et al
21:37:11 <dartford> other than to the forces of constant derailment that beset our beloveds
21:37:20 <sclv> seriously i'm going to ask the ops to kick you
21:37:35 <dartford> why?
21:37:43 <maerwald> I like selective
21:37:44 <dartford> because you thought i was being rude when i didnt mean to be
21:37:46 <sclv> for the continued trolling you're doing right now
21:37:47 <dartford> i appolgise
21:37:54 <dartford> im trying to molify you
21:37:58 <dartford> im sorry!
21:38:09 <sclv> ok just stop it, and ask questions if you have them
21:38:11 <dartford> im not trying to troll, i dont know how to get you to not be mad at me
21:38:18 <sclv> simply don't insult people
21:38:34 <dartford> i honestly dindt mean to
21:38:40 <monochrom> Yes I basically ban all sour-grape attitudes.
21:38:47 <monochrom> and entitlement attitudes.
21:39:06 <geekosaur> surprised you haven't already
21:39:10 <dartford> i feel like im being misconstrued, i meant no offence
21:39:14 <janus> but fog keeps coming back even though he is 'bannable'?
21:39:23 <dartford> please stop!
21:39:34 <dartford> i cant deal with this
21:39:36 × dartford quits (~dartford@176-157-77-163.abo.bbox.fr) (Quit: Connection closed)
21:39:44 <janus> i don't understand it. it is entitled if you fill multiple screens and refuse to read, but it happens again and again
21:39:46 <davean> janus: who claimed monochrom was good at banning people?
21:39:48 <sclv> oh dartford is fog?
21:40:01 <sclv> jesus i had no idea, wouldn't have engaged
21:40:07 <monochrom> I did, heh.
21:40:13 <sclv> sigh
21:40:17 ChanServ sets mode +o geekosaur
21:40:47 <davean> Is there some origin story to fog?
21:40:49 geekosaur sets mode +b *!*@176-157-77-163.abo.bbox.fr
21:40:57 geekosaur sets mode -o geekosaur
21:41:03 <geekosaur> enough with that
21:41:10 <dolio> janus: Here's something to think about. I can write `Cont r (Either (b -> r) b)`. Does it contain an `Either (b -> r) b`?
21:41:19 <dibblego> the story is: long-term repetition of the above and I recommend: ban
21:41:38 <davean> dibblego: oh I know that, I'm just curious if theres an actual story or thats just who they are
21:41:44 <maerwald> I don't know. I always found it entertaining and only mildly disruptive
21:41:47 <davean> I certainly don't think its to anyone's benefit for them to be back
21:41:56 <dolio> If so, which one?
21:44:54 <dolio> Importantly, I can write a single value that works for all `r` and `b`. No need for particular choices.
21:48:36 nickkkkk_all joins (~nick_all@2603-6011-f940-1d00-0000-0000-0000-0002.res6.spectrum.com)
21:50:31 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
21:51:02 <nickkkkk_all> hi guys. i'm reading the cabal docs and i'm a little confused. i ran cabal init thinking it would be interactive like the docs said. when i ran it, it gave me a Changelog.md app/Main.hs and a .cabal file (where I need to add some libraries that aren't exposed yet which I'm trying to learn how to do). but the hs source code has "module Main where" at the top so it doesn't look like it will build an
21:51:02 <nickkkkk_all> executable. could someone clarify? sorry for the noob question
21:51:49 <sclv> its fine, they switched the interactive and the not interactive flags and the docs are out of date
21:52:01 <sclv> but they will be correct again next release (where they switched the flags back)
21:52:06 <monochrom> cabal init -i, then it still asks you one last time and you have to say "I really want interactive" (I forgot whether that's a "yes" or "no")
21:52:20 <nickkkkk_all> oh ok. thanks
21:52:35 <monochrom> You can also edit your .cabal/config
21:53:09 <nickkkkk_all> yea i just didn't want to do that manually yet since i don't really know what i'm doing, but i'll search the docs
21:53:16 <monochrom> But sadly it will still ask you "are you really sure you want interactive? I really want to sell you the non-interactive version"
21:53:28 <janus> dolio: it must contain an "Either (b -> r) b" because you could choose r to be "Either (b -> r) b" and the "a -> r" function to be 'id'. is the problem here that it recursive?
21:53:35 <davean> The non-interactive version sucks
21:53:54 <dolio> janus: It's not recursive.
21:53:55 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
21:54:16 <maerwald> cabal should get some inspiration from summoner
21:54:20 <janus> what do you mean by "Importantly, i can write a single value". important for which goal? sorry i am dense
21:54:23 <sclv> nickkkkk_all: just rerun it with the `-i` flag after clearning out what it generated. interactive is the better default and its coming back. switching the behavior was a misfeature
21:54:33 <maerwald> https://asciinema.org/a/314375 like that
21:54:37 <nickkkkk_all> i don't need the module syntax right? i'm not going to be using this code as an external module. i'm following along with a course
21:54:41 × Null_A quits (~null_a@2601:645:8700:2290:7887:7a6d:751e:a369) (Remote host closed the connection)
21:54:44 <nickkkkk_all> sclv: thanks
21:54:56 <monochrom> janus, I don't know the answer either (oh wait what I have done? >:) ), but I very much worry about the same r being used in both "Cont r" and "b->r".
21:55:02 <dolio> janus: It's important because there is no value of `Either (b -> r) b` in general. :)
21:55:16 Null_A joins (~null_a@2601:645:8700:2290:7887:7a6d:751e:a369)
21:55:25 <sclv> nickkkkk_all: you always want `module Main where` to start your main app file if you're building an executable
21:55:57 <sclv> every haskell file has `module Something where` near the top -- Main is just the name that the main module of an executable has
21:55:57 <dolio> No way to write a well defined one for all `r` and `b`, at least.
21:56:14 <geekosaur> "module Main where" will be the default for an executable, but there's no harm in saying it explicitly
21:56:19 <monochrom> Normally if I'm looking at "Cont r (Either x y)" I am OK with "yes it contains an Either x y value", but that's when x and y are independent of r.
21:56:49 <monochrom> And actually it's more like "module Main(main)"
21:56:54 <janus> dolio: but isn't this similar to saying "Maybe a" is not a container because i can choose Void and then it can't actually store anything?
21:57:38 <janus> dolio: why should we be able to choose a value for a generic type for it to be a container?
21:57:38 <maerwald> containers are more like possibilities... so actually non-determinism :D
21:58:28 × Guest41 quits (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
21:59:45 × Null_A quits (~null_a@2601:645:8700:2290:7887:7a6d:751e:a369) (Ping timeout: 268 seconds)
21:59:48 <nickkkkk_all> ok that makes sense. the only haskell i've ever written was for xmonad.hs which i guess technically isn't an executable
22:00:17 <dolio> Is my value of `Cont r (Either (b -> r) b)` just empty, like the Maybe value?
22:00:22 <nickkkkk_all> the interactive init process was much better
22:00:32 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349)
22:02:06 <dsal> I'm annoyed at how my coverage test marks things as yellow when they weren't touched even though there's not much room for them to be wrong.
22:02:11 × brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving)
22:05:58 <dolio> For instance, there's no well-defined value `Cont r r` for arbitrary `r`.
22:06:44 × ubert quits (~Thunderbi@p548c9652.dip0.t-ipconnect.de) (Remote host closed the connection)
22:06:57 × chomwitt quits (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Remote host closed the connection)
22:08:36 <nickkkkk_all> ok is this what I should do? build-depends: codeworld-api, ...
22:08:37 <janus> dolio: right, but regarding polymorphic types i regard it is possibly containing information (optimistic?). i don't see why there needs to be a value for an arbitrary instantiation
22:09:00 <janus> dolio: i see it as consistent with "Maybe" being a container
22:09:35 <nickkkkk_all> when i ran "cabal install codeworld-api" it said that the libraries weren't exposed because i didn't use the --lib flag so i think this is what i'm supposed to do but i'm not sure
22:09:39 <janus> and i'd even argue that Solo/Identity are containers even though there is no value to construct for an arbitrary instantiation
22:09:55 <janus> maybe i am not understanding the point about your Either containing a function...
22:10:13 <monochrom> build-depends is preferred.
22:10:36 <monochrom> But --lib is OK if you still want "I just run ghci and I have the library available"
22:10:45 <janus> but i guess i have made the term so permissive that it becomes meaningless :P
22:11:13 <dolio> I don't know what Solo is. Identity is arguably a container of exactly one thing.
22:11:48 <nickkkkk_all> i don't really want that. i'm only working with codeworld api in a project so i can follow along with this course. i don't think the api is used after lecture 4 and i'll move on to "real" code bases
22:11:54 <janus> dolio: i just learnt about this, it is some new one-tuple in ghc 9.2: https://www.reddit.com/r/haskell/comments/qjgg60/fyi_we_have_1tuple_in_base_since_ghc_92/hiurwzr/?context=3
22:11:55 <dolio> The point of `Cont r r` was that a `Cont r` can't just be an empty container.
22:12:49 <janus> ooh ok, so it should be able to be empty to be a container? that makes sense, i guess
22:13:11 <dolio> So, `Cont r a` can't just be empty, and no values of `Either (b -> r) b` can be demonstrated, but we can demonstrate `Cont r (Either (b -> r) b)`.
22:13:52 <sclv> nickkkkk_all: if you're using a recent cabal you don't need to install the deps explicitly
22:14:12 <sclv> as long as you use cabal commands `cabal build` `cabal repl` etc it'll install and mange em for you
22:14:21 <sclv> based on your .cabal file
22:14:25 <dolio> It's fine to consider containers that can't be empty. But how can you have a container that can't be empty but also not be able to have anything to put in it?
22:14:57 <nickkkkk_all> sclv: oh nice
22:15:13 <nickkkkk_all> on another note: dist-newstyle/build/x86_64-linux/ghc-8.10.7/haskell-fun-0.1.0.0/x/haskell-fun/build/haskell-fun/ why????????????/
22:15:24 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
22:17:04 <monochrom> You can use "cabal install --install-method=copy --overwrite-policy=always --installdir=<???>"
22:17:45 <sclv> the length paths are because we can have crosscomp and share between multiple compilers and also have different subcomponents
22:18:06 <nickkkkk_all> ok that's better. so far the cabal defaults are very annoying...
22:18:08 <sclv> its pretty hard to cut them down without accidentally creating the possibility of incompatible build products being shared
22:18:34 <nickkkkk_all> sclv: that makes sense. so the default path is good for a real project i assume?
22:18:50 <sclv> well its unavoidable, it seems
22:18:59 <sclv> unfortunate though
22:19:15 <sclv> `cabal run` will run an executable too, so... eh
22:19:20 <dsal> Is there a place where HPC bugs are filed? It seems particularly strange that RecordWildCards doesn't show up as record field accesses.
22:19:30 <dsal> I'm sure that's a really slimy bag of worms.
22:20:03 <nickkkkk_all> this is a huge learning curve :)
22:20:24 <monochrom> "cabal run" oversteps its place regarding what should go to stdout.
22:20:43 <nickkkkk_all> monochrom: what does that mean
22:21:10 <monochrom> You get an extra "Up to date" line for example.
22:21:13 <sclv> dsal: those go in the general ghc bug tracker. i think there's a tag or category that would class em as hpc
22:22:06 <dsal> https://gitlab.haskell.org/ghc/ghc/-/issues/17834
22:22:08 <monochrom> So suppose your program is meant to output valid json to stdout. Well now your stdout is polluted.
22:22:10 <dsal> Looks like someone's already found it.
22:23:54 <sclv> monochrom: do you think the correct solution is to add a flag for quiet mode or "no junk" or the like? if so and if you can think of the right flag name, please open a ticket
22:24:26 × fendor quits (~fendor@77.119.197.65.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
22:24:27 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
22:24:28 <geekosaur> sclv, seems to me that should go to stderr
22:24:39 <sclv> oh fair point
22:24:39 <geekosaur> (and yes, that's annoyed me as well)
22:24:52 <monochrom> To be honest, I simply don't use cabal run.
22:24:52 <nickkkkk_all> yea that sounds like a reasonable thing. in my case i don't care. my code isn't even working for some reason anyway
22:25:10 <monochrom> And there are multiple reasons, not just this one.
22:25:19 <monochrom> There is no use case at all.
22:26:13 <nickkkkk_all> it says "Open me on http://127.0.0.1:3000/" but firefox is saying unable to connect
22:26:21 <monochrom> If I want to use an exe regularly, "cabal install" is the right thing to do, and with --installdir=<something actually on PATH>. Why would I cd into some development directory to "cabal run" for a program I use regulary?
22:26:42 <geekosaur> nickkkkk_all, what kind of system are you on? could it have a firewall preventing such connections?
22:26:43 <monochrom> If I want to test, "cabal repl" and "cabal test" have got that covered.
22:26:51 <monochrom> So, when do I need "cabal run" again?
22:27:04 <dsal> Yeah, the other hpc case that bugged me was about derived instances. Technically, I haven't tested all aspects of various derived junk. But also, I feel like that's not my job.
22:27:08 <nickkkkk_all> i don't have any firewalls
22:27:40 <geekosaur> monochrom, I use iit for programs where the executable would be ephemeral anyway — I'm constantly rejiggering various things inside the program
22:28:13 <nickkkkk_all> that's the case i'm using it for right now. a dumb program that i'm just writing for learning purposes
22:28:24 <geekosaur> so "cabal run" keeps track for me of when a rebuild is needed, and I don't have an executable in $PATH that'll just have to be overwritten in a few hours anyway
22:28:38 <monochrom> Yeah there are a few rare moments when I make peace with dist-newstyle/xxx/yyy/zzz/x/xxx
22:28:38 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
22:28:45 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
22:28:59 <sclv> filed a ticket for cabal run, but honestly its probably a bit of a PITA to fix since that shares output with all the other cabal commands
22:30:22 <nickkkkk_all> geekosaur: it also tells me i need to recompile with the -threaded flag. could that be it?
22:30:39 <geekosaur> (also I only use it when working on a particular project so I don't really want it on $PATH anyway)
22:31:08 <geekosaur> nickkkkk_all, that should not prevent connections, I think
22:31:24 <geekosaur> although if it's demanding -threaded you probably should enable it
22:31:51 <sclv> you can add -threaded to the ghc options in the cabal file
22:32:57 quazimodo joins (~quazimodo@n1-40-235-47.bla1.nsw.optusnet.com.au)
22:34:16 G_w joins (~Gw@197.3.191.56)
22:34:32 <nickkkkk_all> there isn't a section for that so i guess i'll have to make one
22:34:42 <nickkkkk_all> just ghc-options:?
22:35:02 <monochrom> ghc-options: in the same section as the exe's section
22:36:12 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
22:36:30 hololeap joins (~hololeap@user/hololeap)
22:36:35 <nickkkkk_all> that fixed my issue. thanks for the help guys. hopefully before long i won't be asking so many questions
22:36:40 <nickkkkk_all> i'm gonna get to coding
22:40:48 <hpc> hopefully you keep asking questions forever, they just get increasingly complicated and obscure :D
22:46:36 <nickkkkk_all> that's definitely the plan
22:47:20 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:49:35 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
22:54:39 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
22:55:02 ec joins (~ec@gateway/tor-sasl/ec)
22:56:50 thblt joins (~thblt@user/thblt)
22:59:31 Axman6 joins (~Axman6@user/axman6)
23:00:29 Lycurgus joins (~juan@98.4.112.204)
23:01:38 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
23:01:59 burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk)
23:03:40 MQ-17J joins (~MQ-17J@8.6.144.203)
23:06:58 × burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
23:20:03 zero joins (~z@user/zero)
23:21:36 <nickkkkk_all> what does this code do? https://paste.tomsmeding.com/1Ek8WGYt
23:22:02 <Axman6> what do you think it does?
23:22:02 <nickkkkk_all> well i guess it doesn't do anything. what does it mean?
23:22:04 <geekosaur> loop forever
23:22:28 <geekosaur> hm, actually as written it should throw <<loop>>
23:22:50 <Axman6> > let y = y + 1 in y :: Integer
23:22:50 × yrlnry quits (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 260 seconds)
23:22:52 <lambdabot> *Exception: <<loop>>
23:22:55 <geekosaur> the `y`s on both sides of the `=` are the same `y`, so it will forever chase its own tail
23:23:01 × yin quits (~z@user/zero) (Ping timeout: 245 seconds)
23:23:10 <nickkkkk_all> so a recursive definition
23:23:14 <geekosaur> yes
23:23:15 <hpc> "to calculate y, calculate y and add 1 to it"
23:23:15 <nickkkkk_all> but it isn't a function
23:23:40 <hpc> yep, you can write recursive non-function things
23:23:59 <Axman6> https://i.kym-cdn.com/photos/images/newsfeed/001/393/652/116.jpg
23:24:01 <nickkkkk_all> as long as there is a way for it to be evaluated completely?
23:24:04 jushur joins (~human@user/jushur)
23:24:07 <hpc> you can even do it in other languages, it's just usually not as useful
23:24:17 <hpc> void* x = &x; // for instance
23:24:58 <nickkkkk_all> but that's not really the same thing. i get what you're going fo rthough
23:25:13 <nickkkkk_all> haskell is strange.
23:25:16 __xor joins (~xor@72.49.199.147)
23:25:19 <hpc> > let ones = 1 : ones
23:25:20 <lambdabot> <no location info>: error: not an expression: ‘let ones = 1 : ones’
23:25:24 <hpc> > let ones = 1 : ones in ones -- doh
23:25:25 <lambdabot> [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1...
23:25:32 <geekosaur> doesn't need that.
23:25:32 <geekosaur> > let ones = 1 : ones in ones
23:25:32 <geekosaur> what's needed is that it can be lazily productive before it recurses
23:25:32 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
23:25:33 <lambdabot> [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1...
23:25:44 <hpc> > let x = error x in x -- here's a fun one
23:25:45 <lambdabot> "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex...
23:25:51 <Axman6> > let fibs = 1:1: zipWith (+) fibs (tail fibs)
23:25:52 <lambdabot> <no location info>: error:
23:25:52 <lambdabot> not an expression: ‘let fibs = 1:1: zipWith (+) fibs (tail fibs)’
23:26:04 <Axman6> > let fibs = 1:1: zipWith (+) fibs (tail fibs) in fibs
23:26:06 <lambdabot> [1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17...
23:26:46 × _xor quits (~xor@72.49.199.147) (Ping timeout: 245 seconds)
23:26:55 <nickkkkk_all> lmfao
23:26:55 <hpc> lambdabot has some definitions of the infinite list of primes memorized, but i forget how to print them out
23:27:11 geekosaur joins (~geekosaur@xmonad/geekosaur)
23:27:16 <hpc> it's like @where prime_55, or something like that
23:27:21 <hpc> for a 55-character definition
23:27:41 <nickkkkk_all> just write some haskell to calculate the zeros of the complex zeta function and append them to a list
23:27:53 <hpc> recursive definitions are all over the place, you'll want to get very comfortable with them
23:28:15 <hpc> at the value level, at the type level, in the abstract, etc
23:28:18 <hpc> @src fix
23:28:18 <lambdabot> fix f = let x = f x in x
23:28:38 <Axman6> I keep forgetting to save a gist of the simple mutually recursive primes generator
23:28:45 <nickkkkk_all> i mean it makes sense mathematically. i'm just trying to adjust from imperative style to functional. i like it more i just have to relearn how to think
23:30:45 <nickkkkk_all> but i'm gonna have to log off or i'll never do my chem lab report and it's due tomorrow at 8 am :D
23:32:00 × nickkkkk_all quits (~nick_all@2603-6011-f940-1d00-0000-0000-0000-0002.res6.spectrum.com) (Quit: Leaving)
23:33:02 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:35:18 <Axman6> ok, finally decided to save this as a gist so I can find it again https://gist.github.com/axman6/79be372a4b8507432bcabea42c488c62
23:35:51 <Axman6> I thow there's a lot of optimisations to be made
23:38:15 Codaraxis joins (~Codaraxis@user/codaraxis)
23:40:07 <Axman6> I wonder how well this would work in GHC: https://krebsonsecurity.com/2021/11/trojan-source-bug-threatens-the-security-of-all-code/
23:41:19 <monochrom> Hecate answered this in haskell-cafe: https://gitlab.haskell.org/ghc/ghc/-/issues/20263
23:42:01 jespada joins (~jespada@190.7.36.46)
23:44:17 zzz joins (~z@user/zero)
23:44:49 <Axman6> Interesting, I wonder if the researchers contacted the GHC team? the timing seems about right
23:46:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:47:40 × zero quits (~z@user/zero) (Ping timeout: 268 seconds)
23:47:41 zzz is now known as zero
23:47:57 <thblt> Axman6: The Rust report on the same bug says they've been notified of it privately by the researchers before they went public. I guess same goes for GHC? (no source on the latter though)
23:48:30 <geekosaur> one can infer the same from the sequence of events in the ticket and its open date
23:48:47 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:48:47 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
23:48:47 wroathe joins (~wroathe@user/wroathe)
23:48:50 <geekosaur> in particular there was a "set visibility public" event
23:48:52 <Axman6> Just a bit surprised they'd even thing about GHC!
23:48:55 <Axman6> think*
23:49:34 <thblt> Btw the Rust solution is roughly the same, they added an on-by-default linter that fails build that contains those control codes in comments or strings.
23:51:11 × jespada quits (~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:54:49 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
23:55:42 × betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Ping timeout: 268 seconds)
23:58:46 × xff0x quits (~xff0x@2001:1a81:537f:9c00:f94d:493e:e9e:5a9) (Ping timeout: 268 seconds)
23:59:27 xff0x joins (~xff0x@2001:1a81:537f:9c00:96ab:881b:fbec:f66f)

All times are in UTC on 2021-11-01.