Home liberachat/#haskell: Logs Calendar

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

00:00:02 × zopsi quits (~zopsi@irc.dir.ac) (Quit: Oops)
00:00:09 peterhil joins (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
00:00:39 <arahael> davean: from the registry package?
00:00:41 <monochrom> Catching exceptions without IO will be very tricky and fragile. Note that reallyUnsafePtrEquality does not involve IO.
00:00:53 zopsi joins (zopsi@2600:3c00::f03c:91ff:fe14:551f)
00:01:10 <arahael> monochrom: in IO would be fine.
00:01:15 <davean> arahael: no, from base
00:01:28 <arahael> davean: it does not show up in hoogle!
00:01:42 <monochrom> But I suppose "evaluate (reallyUnsafePtrEquality x y)" may improve.
00:01:43 <davean> arahael: Why use hoogle? https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-Coerce.html
00:02:03 <monochrom> However, I have never tried it, I have zero confidence this does anything at all.
00:02:05 <arahael> davean: because i didnt know it was in Data.Coerce.
00:02:31 <davean> arahael: Neither did I
00:02:46 adam_ joins (uid515807@id-515807.tooting.irccloud.com)
00:03:22 <arahael> ok, just looked at the sig, it is basically a-> b. how would i use that?
00:03:26 <adam_> #haskell beginners
00:03:36 <arahael> i want a -> a -> Bool
00:03:51 <arahael> ie, "are these the same object?"
00:04:12 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds)
00:04:24 desantra joins (~skykanin@user/skykanin)
00:04:33 <davean> arahael: It does it at the type level
00:04:40 <arahael> davean: not what i want.
00:04:50 <davean> ah, ok
00:04:52 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
00:04:56 <myShoggoth> Haskell Foundation August Update: https://discourse.haskell.org/t/haskell-foundation-august-update/3006
00:05:18 <davean> arahael: then how are you processing these different forms?
00:05:45 <arahael> davean: "if the object is different, re-render the display".
00:06:19 <yushyin> Merch Shop? oO :D
00:06:43 <davean> oh wait, you want to know if the binary representation, in memory, is equal?
00:06:48 <davean> I do not tihnk this will do what you want
00:06:58 <arahael> davean: indeed. exact physical equality.
00:07:17 <davean> arahael: That doesn't make sense in Haskell
00:07:28 <davean> That doesn't tell you if its the same object or not
00:07:44 <arahael> davean: why not?
00:08:06 <davean> arahael: for example, because the GC reorganised memory while you were looking
00:08:22 <arahael> davean: then they wont be equal, thats fine.
00:08:26 <davean> So now its components have different values but its the same one
00:08:37 <arahael> so it'll just redraw.
00:08:46 <davean> arahael: address equality is better, or equality is better
00:08:53 <davean> address equality is also far faster
00:09:14 <davean> like, thousands of times faster
00:09:16 <arahael> address equality is usually how most languages do this.
00:09:32 <davean> Because its saner
00:09:43 <davean> But thats not the same thing is bit equality
00:10:15 <arahael> i think we are getting hung up on semantics a bit.
00:10:59 <arahael> unless you are suggesting that the bits can change quite often in normal use cases?
00:11:02 <davean> With IORef neither bit equality or address equality would reprent if it had changed
00:11:08 <davean> arahael: Of course they do!
00:11:17 <davean> Constantly
00:11:40 <arahael> oh? doesnt a new object get created whenever updating a structure?
00:11:46 <davean> Every GC for sure, if its not unpacked
00:12:47 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
00:12:54 <davean> Plus bit-wise comparison is just SUPER slow
00:13:04 <arahael> Ah, so I'd best introduce a tag of my own or something that I update whenever I want to say "this has changed".
00:13:09 <arahael> So I could check the revision tag.
00:13:17 <arahael> (brb - short meeting)
00:14:00 <davean> well if you keep a reference to the last version, and you do pointer equality, and you don't have any refs in your datastructure, you're pretty good
00:14:23 <davean> You can also get a stable name if you HAVE to avoid the ref
00:16:36 <davean> I'd keep a ref to the old one, make sure my display function wasn't in IO/ST so it couldn't deref an (IO/ST)Ref/MVar/TVar/Etc, and use unsafe pointer equality
00:26:40 napping parts (~brandon@65.128.58.64) ()
00:26:42 × desantra quits (~skykanin@user/skykanin) (Quit: WeeChat 3.2)
00:37:22 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
00:37:28 × renzhi quits (~xp@2607:fa49:6500:3d00::d986) (Quit: WeeChat 2.3)
00:39:20 renzhi joins (~xp@2607:fa49:6500:3d00::d986)
00:45:41 <arahael> Ok, just finished up that meeting. Ah, that's an intriguing option, so it sounds like there are a bunch of options I would have to explore.
00:46:13 <arahael> And a ref to the old and current ones would work well.
00:52:44 favonia joins (~favonia@user/favonia)
00:55:20 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:57:52 × opac quits (~opac@ip-28-56.sn2.clouditalia.com) (Quit: Going offline, see ya! (www.adiirc.com))
00:58:19 alx741 joins (~alx741@186.178.108.235)
01:03:05 × SystemFFan quits (~SystemFFa@188.71.213.184) (Remote host closed the connection)
01:04:54 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 256 seconds)
01:11:20 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 244 seconds)
01:12:39 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:13:24 × favonia quits (~favonia@user/favonia) (Ping timeout: 244 seconds)
01:13:46 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:14:57 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 244 seconds)
01:15:37 thyriaen joins (~thyriaen@x4db7e539.dyn.telefonica.de)
01:16:02 hyiltiz joins (~quassel@31.220.5.250)
01:16:36 neurocyte6 joins (~neurocyte@45.93.108.142)
01:16:36 × neurocyte6 quits (~neurocyte@45.93.108.142) (Changing host)
01:16:36 neurocyte6 joins (~neurocyte@user/neurocyte)
01:18:24 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
01:18:49 × neurocyte quits (~neurocyte@user/neurocyte) (Ping timeout: 252 seconds)
01:18:49 neurocyte6 is now known as neurocyte
01:19:06 azeem joins (~azeem@62.19.37.175)
01:19:56 motherfsck joins (~motherfsc@user/motherfsck)
01:20:22 meinside_ is now known as meinside
01:21:06 × thyriaen quits (~thyriaen@x4db7e539.dyn.telefonica.de) (Quit: Leaving)
01:24:16 × d0ku quits (~d0ku@178.43.56.75.ipv4.supernova.orange.pl) (Ping timeout: 252 seconds)
01:27:34 × ouroboros quits (~ouroboros@user/ouroboros) (Ping timeout: 252 seconds)
01:28:03 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
01:32:27 favonia joins (~favonia@user/favonia)
01:34:29 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:34:40 × xff0x quits (~xff0x@2001:1a81:52bb:c200:954e:ca7f:9978:3e44) (Ping timeout: 240 seconds)
01:34:43 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
01:36:35 xff0x joins (~xff0x@2001:1a81:52f2:5d00:a43c:729f:4397:fe8e)
01:37:01 ouroboros joins (~ouroboros@user/ouroboros)
01:41:47 <zzz> let bindings are irrefutable by ddfault, right? so is there any difference between `let [a,b] = ... in ...` and `let ~[a,b] = ... in ...` ?
01:42:14 azeem joins (~azeem@62.19.37.175)
01:42:18 ormaaj is now known as ormaaj2
01:42:48 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
01:44:24 × dsrt^ quits (~dsrt@wsip-98-188-244-188.mc.at.cox.net) (Ping timeout: 244 seconds)
01:48:59 Neuromancer joins (~Neuromanc@user/neuromancer)
01:51:26 selve joins (~selve@bas2-montreal28-70-53-241-238.dsl.bell.ca)
01:52:26 <Cale> zzz: Nope, those are the same
01:54:13 × favonia quits (~favonia@user/favonia) (Ping timeout: 244 seconds)
01:54:22 _xor joins (~xor@74.215.232.67)
01:58:22 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 252 seconds)
01:58:55 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 252 seconds)
02:04:43 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:06:39 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
02:07:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
02:13:49 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 252 seconds)
02:15:31 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
02:24:11 × td_ quits (~td@94.134.91.147) (Ping timeout: 244 seconds)
02:26:08 td_ joins (~td@94.134.91.219)
02:30:16 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
02:33:04 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2)
02:35:46 mceldeen joins (~igloo@174-16-163-16.hlrn.qwest.net)
02:36:09 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
02:36:09 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
02:36:09 wroathe joins (~wroathe@user/wroathe)
02:36:37 selve parts (~selve@bas2-montreal28-70-53-241-238.dsl.bell.ca) ()
02:38:54 × mceldeen quits (~igloo@174-16-163-16.hlrn.qwest.net) (Remote host closed the connection)
02:40:17 sleblanc joins (~sleblanc@user/sleblanc)
02:40:18 justsomeguy joins (~justsomeg@user/justsomeguy)
02:40:43 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 244 seconds)
02:40:43 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 244 seconds)
02:41:16 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
02:53:42 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 256 seconds)
02:55:11 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 244 seconds)
02:55:28 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
02:56:43 × benin036932 quits (~benin@183.82.24.161) (Ping timeout: 252 seconds)
02:58:59 favonia joins (~favonia@user/favonia)
03:06:09 × alx741 quits (~alx741@186.178.108.235) (Quit: alx741)
03:06:37 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
03:06:54 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
03:08:13 × betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Ping timeout: 252 seconds)
03:11:10 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 240 seconds)
03:11:27 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
03:12:35 × otto_s quits (~user@p5de2f66c.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
03:14:32 otto_s joins (~user@p5de2f920.dip0.t-ipconnect.de)
03:16:15 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds)
03:17:04 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
03:17:21 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
03:17:34 gehmehgeh joins (~user@user/gehmehgeh)
03:21:19 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
03:24:25 × fjmorazan quits (~quassel@user/fjmorazan) (Quit: fjmorazan)
03:25:02 fjmorazan joins (~quassel@user/fjmorazan)
03:30:36 × favonia quits (~favonia@user/favonia) (Remote host closed the connection)
03:31:21 favonia joins (~favonia@user/favonia)
03:31:40 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 240 seconds)
03:31:40 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
03:31:57 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
03:33:26 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4859:a541:745f:7f0e) (Remote host closed the connection)
03:37:58 × renzhi quits (~xp@2607:fa49:6500:3d00::d986) (Ping timeout: 252 seconds)
03:38:22 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
03:38:22 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
03:38:22 wroathe joins (~wroathe@user/wroathe)
03:39:13 Guest4294 joins (~Guest42@223.18.154.68)
03:40:02 × TranquilEcho quits (~grom@user/tranquilecho) (Quit: WeeChat 2.8)
03:56:33 lavaman joins (~lavaman@98.38.249.169)
03:56:47 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:00:40 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
04:03:01 oxide joins (~lambda@user/oxide)
04:04:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:06:37 oxide_ joins (~lambda@user/oxide)
04:12:26 hololeap_ joins (~hololeap@user/hololeap)
04:12:38 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:12:41 × oxide quits (~lambda@user/oxide) (Ping timeout: 244 seconds)
04:12:48 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
04:19:42 hololeap_ is now known as hololeap
04:21:25 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
04:22:19 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
04:25:49 × oxide_ quits (~lambda@user/oxide) (Quit: oxide_)
04:26:03 oxide joins (~lambda@user/oxide)
04:29:34 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
04:34:10 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
04:37:55 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
04:38:40 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Ping timeout: 240 seconds)
04:44:12 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 244 seconds)
04:44:25 azeem joins (~azeem@62.19.37.175)
04:48:40 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 240 seconds)
04:49:23 azeem joins (~azeem@62.19.37.175)
04:53:18 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
04:53:52 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
04:54:24 azeem joins (~azeem@62.19.37.175)
04:56:48 betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be)
05:00:27 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:01:10 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 240 seconds)
05:01:29 azeem joins (~azeem@62.19.37.175)
05:10:44 Sgeo_ joins (~Sgeo@user/sgeo)
05:10:46 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
05:12:57 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 245 seconds)
05:22:28 × sleblanc quits (~sleblanc@user/sleblanc) (Ping timeout: 252 seconds)
05:24:22 kimjetwav joins (~user@2607:fea8:235f:9730:5f39:722f:3a32:7c97)
05:24:57 × Guest4294 quits (~Guest42@223.18.154.68) (Ping timeout: 256 seconds)
05:24:59 × aegon quits (~mike@174.127.249.180) (Quit: leaving)
05:25:10 × _xor quits (~xor@74.215.232.67) (Quit: brb)
05:26:19 lavaman joins (~lavaman@98.38.249.169)
05:26:21 vysn joins (~vysn@user/vysn)
05:29:05 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 250 seconds)
05:29:49 qbt joins (~edun@user/edun)
05:30:47 × qbt quits (~edun@user/edun) (Remote host closed the connection)
05:36:43 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
05:37:14 azeem joins (~azeem@62.19.37.175)
05:40:37 × peterhil quits (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 252 seconds)
05:51:06 <arahael> what's that ~ for?
05:58:33 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
05:59:19 <opqdonut> lazy pattern
05:59:26 <opqdonut> aka irrefutable pattern
06:00:20 <pavonia> > let yay ~(x,y) = "yay"; nay (x,y) = "nay" in (yay undefined, nay undefined)
06:00:21 <lambdabot> ("yay","*Exception: Prelude.undefined
06:01:44 <arahael> opqdonut: Thanks - that give sme some keywords :D
06:02:01 <Christoph[m]> https://wiki.haskell.org/Keywords#.7E
06:05:19 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 244 seconds)
06:11:00 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 244 seconds)
06:11:39 azeem joins (~azeem@62.19.37.175)
06:13:47 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
06:15:52 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
06:15:52 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
06:15:52 wroathe joins (~wroathe@user/wroathe)
06:18:14 × favonia quits (~favonia@user/favonia) (Ping timeout: 244 seconds)
06:19:23 max22- joins (~maxime@2a01cb08833598001c2c73c755058a4b.ipv6.abo.wanadoo.fr)
06:20:27 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
06:22:53 michalz joins (~michalz@185.246.204.55)
06:23:31 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 252 seconds)
06:28:14 Gurkenglas joins (~Gurkengla@dslb-088-075-022-191.088.075.pools.vodafone-ip.de)
06:29:47 × oxide quits (~lambda@user/oxide) (Quit: oxide)
06:30:07 × son0p quits (~ff@181.136.122.143) (Ping timeout: 244 seconds)
06:30:33 oxide joins (~lambda@user/oxide)
06:35:00 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:35:29 <taeaad> What is the relationship between a DAG and lambda calculus? Are the nodes in the graph states? Or are the domains and codomains? I've known for a while that Excel for example uses a DAG in the backend, and generally that there is a connection to functional programming, but just realised that I wouldn't be able to write out what the connection is.
06:37:00 <taeaad> Or from another perspectve, in the category Hask, is the appropriate DAG simply the generated by morphisms of Hask?
06:37:08 <taeaad> *the one
06:39:12 <taeaad> Hmm, I see Hask is not cartesian closed and doesn't have products or coproducts. So, should we think of "plantonic Hask" instead?
06:42:52 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:43:04 phma_ joins (~phma@host-67-44-208-4.hnremote.net)
06:43:40 × phma quits (phma@2001:0:c38c:c38c:2cd8:e4d3:bcd3:2ffb) (Ping timeout: 240 seconds)
06:46:42 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 245 seconds)
06:48:42 × jonathanx_ quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
06:50:04 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
06:53:56 mei joins (~mei@user/mei)
06:55:26 <[exa]> taeaad: excel uses the graphs for dependency tracking, no need for that in the "normal" lambda calculus unless you jump into specific implementations of lazy evaluation
06:55:27 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 245 seconds)
06:56:30 azeem joins (~azeem@62.19.37.175)
06:57:12 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:00:14 × Guest2602 quits (~user@2601:644:8500:8350::cc04) (Quit: ERC (IRC client for Emacs 27.2))
07:02:13 phma_ is now known as phma
07:09:23 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
07:09:40 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
07:10:06 slavaqq joins (~slavaqq@sdmail.sdserver.cz)
07:10:30 nschoe joins (~quassel@178.251.84.79)
07:12:18 azeem joins (~azeem@62.19.37.175)
07:18:54 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 256 seconds)
07:20:55 azeem joins (~azeem@62.19.37.175)
07:22:12 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
07:30:57 acidjnk_new joins (~acidjnk@p200300d0c7203039d576453b109ce99e.dip0.t-ipconnect.de)
07:36:25 Boomerang joins (~Boomerang@xd520f68c.cust.hiper.dk)
07:40:36 aman joins (~aman@user/aman)
07:40:44 hyiltiz joins (~quassel@31.220.5.250)
07:40:50 mc47 joins (~mc47@xmonad/TheMC47)
07:43:01 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:45:21 desophos joins (~desophos@c-24-14-63-128.hsd1.il.comcast.net)
07:45:38 lortabac joins (~lortabac@2a01:e0a:541:b8f0:2ef4:e718:7f42:663c)
07:46:03 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Remote host closed the connection)
07:49:40 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
07:51:58 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
07:54:55 × oxide quits (~lambda@user/oxide) (Quit: oxide)
07:56:59 hololeap_ joins (~hololeap@user/hololeap)
07:57:42 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
07:59:20 × sus quits (zero@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
07:59:48 sus joins (zero@user/zeromomentum)
08:00:43 ellie joins (~ellie@user/ellie)
08:02:48 dsrt^ joins (~dsrt@wsip-98-188-244-188.mc.at.cox.net)
08:05:21 hendursaga joins (~weechat@user/hendursaga)
08:08:33 lep is now known as lep-
08:09:24 × hendursa1 quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
08:09:28 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
08:09:29 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
08:10:03 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
08:10:24 lep- is now known as lep
08:10:26 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
08:12:21 <taeaad> [exa]: Why wouldn't you need tracking in lambda calculus?
08:12:55 <taeaad> Because you don't evaluate?
08:13:07 d0ku joins (~d0ku@178.43.56.75.ipv4.supernova.orange.pl)
08:13:27 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 244 seconds)
08:13:50 hiepph[m] joins (~hiepphmat@2001:470:69fc:105::e3a8)
08:15:40 hyiltiz joins (~quassel@31.220.5.250)
08:16:40 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
08:16:40 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
08:16:40 wroathe joins (~wroathe@user/wroathe)
08:16:52 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Remote host closed the connection)
08:19:42 neo1 joins (~neo3@cpe-292712.ip.primehome.com)
08:21:12 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 244 seconds)
08:21:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
08:22:04 azeem joins (~azeem@62.19.37.175)
08:24:42 <[exa]> taeaad: with λ you can use the leftmost redex rule to implement lazy evaluation, needs no tracking of anything
08:26:09 × kimjetwav quits (~user@2607:fea8:235f:9730:5f39:722f:3a32:7c97) (Remote host closed the connection)
08:26:25 <taeaad> [exa]: So, should one think of DAGs in the Haskell context at all?
08:26:27 kimjetwav joins (~user@2607:fea8:235f:9730:7b24:e3f4:a84d:7dd0)
08:26:42 <[exa]> if you elaborate a bit on what is the precise DAG you mentioned there it might be clearer, there are actually multiple DAGs that I can imagine there
08:26:43 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
08:26:49 <[exa]> like, the syntax is a DAG
08:26:59 azeem joins (~azeem@62.19.37.175)
08:27:37 <[exa]> evaluation order is a DAG, in contrast to actual structure of the thunks in STG which need not be one
08:27:43 <taeaad> [exa]: I was wondering if there is a general setting where we can compare languages with "functional aspects". R lang for example under the hood also has functional aspects, the details of which I haven't studied yet. If DAGs are not useful for that, the so be it.
08:27:44 × Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
08:28:52 <taeaad> What I am trying to say is that I would prefer to put R and Haskell into the same box and figure out what the right perspective is to do so. Just saying "use Lambda Calculus" isn't satisfactory since it ignores implementation aspect, and for example it ignores that R syntax is not functional.
08:29:05 <[exa]> hm, I see
08:29:27 acidjnk_new3 joins (~acidjnk@p200300d0c7203039d9c4482df4e2953e.dip0.t-ipconnect.de)
08:29:33 <taeaad> So perhaps it should be at the compiler or interpreter level.
08:29:34 <mjrosenb> ok, I've run `cabal new-build` under dtruss
08:29:47 <mjrosenb> and it looks like... it is looking for everything except View.hs
08:29:53 <[exa]> taeaad: my favorite tool for comparing languages is "how much complicated a machine you need to translate a program in language 1 to work perfectly in language 2"
08:30:23 <mjrosenb> https://gist.github.com/mjrosenb/8ef45507c9f9f8ec5782bc9f63765b92
08:30:35 <merijn> mjrosenb: "new-build" is pretty old development version of the command. v2-build (or just build in 3.0 and later) is better to get used to :p
08:31:21 <[exa]> taeaad: also, you could compare the way code gets compiled and prepared for runtime. R is eager with stack (and many small exceptions to the eagerness), haskell is CPSed (no stack) and lazy by default (with STG)
08:31:26 <merijn> mjrosenb: What's the cabal file/code, btw?
08:31:29 acidjnk joins (~acidjnk@p5487d0ba.dip0.t-ipconnect.de)
08:31:31 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:31:37 amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
08:32:17 <mjrosenb> merijn: https://gist.github.com/mjrosenb/8b55d33a3ac657dbb94733ff0aa72a0e
08:32:25 <taeaad> [exa]: That sounds like a productive approach to the question.
08:32:57 × acidjnk_new quits (~acidjnk@p200300d0c7203039d576453b109ce99e.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
08:33:37 benin0369323 joins (~benin@183.82.204.90)
08:34:25 × acidjnk_new3 quits (~acidjnk@p200300d0c7203039d9c4482df4e2953e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
08:34:44 <[exa]> taeaad: like, comparing languages is hard because you're comparing compilers aka translation systems. to be able to do some actual mathematics on that, I'd seriously advice to stay in the translation systems
08:35:21 <taeaad> Would also be useful to try to relate things back to the category of sets, which I see there are some discussions about Set vs. Hask, but to be honest set theory is less popular than perhaps warranted even in mathematics circles. But anyway, I'll read a bit about functional aspects of R and keep your translation example in mind.
08:35:57 <merijn> mjrosenb: I wonder why it think that thing is auto-generated...
08:36:05 <merijn> mjrosenb: Which version of cabal-install is this?
08:36:17 <[exa]> taeaad: I would be surprised if R could actually be modeled with any such formal system, the language is messy at best
08:36:38 <merijn> [exa]: That's an understatement
08:36:46 <[exa]> the "messy at best" ?
08:36:48 <[exa]> yeah.
08:36:59 <taeaad> Then one needs to improve it :P
08:37:18 <mjrosenb> cabal-install version 2.4.1.0
08:37:19 <mjrosenb> compiled using version 2.4.1.0 of the Cabal library
08:37:37 <taeaad> The main reason why R is enduring IMHO is 1) contains almost all stats known to man and 2) it's easy to write programs (that may be messy) even for people that are not coders.
08:38:13 <taeaad> So you could always improve whatever happens under the hood, though it seems many people have tried and failed (cf. parallelism).
08:38:25 <[exa]> taeaad: 1) it contains ggplot 2) in contains ggplot 3) people from other communities somehow still fail to see what's the quality of ggplot
08:38:52 <merijn> mjrosenb: First thing I would try is update to a more recent cabal-install. In 2.4 v2-build wasn't production ready yet
08:39:05 <taeaad> [exa]: Yes, of course, ggplot2 is revolutionary in a mundane sort of way.
08:39:22 <[exa]> I didn't see a plotting package that would go even half way there
08:39:39 <taeaad> This looks interesting: https://www.cambridge.org/core/books/theories-of-programming-languages/19530A88F3471B2A7D9891770B21DAF9.
08:39:51 <mjrosenb> merijn: I'm using miso, which ships with a pinned nix config. it is difficult to upgrade packages like that :-(
08:40:26 <taeaad> Do any of you know that book? _Theories of Programming Languages_ by John C. Reynolds.
08:40:28 × hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
08:40:58 <[exa]> yeah
08:42:28 <[exa]> taeaad: also, one generic advice for evaluating the programming languages is "what modifications do you need to add to lisp to get X"
08:42:50 <[exa]> I don't know many languages that can't be categorized that way
08:42:54 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 244 seconds)
08:44:52 × amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 252 seconds)
08:46:30 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:2ef4:e718:7f42:663c) (Quit: WeeChat 2.8)
08:47:47 × Kaiepi quits (~Kaiepi@156.34.44.192) (Read error: Connection reset by peer)
08:47:59 Kaiepi joins (~Kaiepi@156.34.44.192)
08:48:37 __monty__ joins (~toonn@user/toonn)
08:48:42 jippiedoe joins (~david@2a02-a44c-e14e-1-5fa0-8368-fcfd-eaa8.fixed6.kpn.net)
08:48:51 <merijn> mjrosenb: RIP
08:51:03 <tomsmeding> mjrosenb: at some point it printed that it couldn't find 'src', right?
08:52:50 <tomsmeding> but that short log fragment shows that it's looking in src, so /me confused
08:53:41 <mjrosenb> tomsmeding: yeah.
08:53:45 × Kaiepi quits (~Kaiepi@156.34.44.192) (Ping timeout: 244 seconds)
08:55:09 <taeaad> [exa]: That sounds even better, since it would improve my Lisp skills.
08:55:37 <taeaad> [exa]: Do you have a link to text on the topic?
08:58:07 Kaiepi joins (~Kaiepi@156.34.44.192)
09:01:35 <[exa]> not really
09:02:05 <[exa]> I was using it on students, proving most languages are just "scheme with something"
09:07:26 fendor joins (~fendor@77.119.206.17.wireless.dyn.drei.com)
09:07:40 × ellie quits (~ellie@user/ellie) (Quit: The Lounge - https://thelounge.chat)
09:07:54 ellie joins (~ellie@user/ellie)
09:09:01 <kuribas> how does it compare to SICP?
09:09:35 hyiltiz joins (~quassel@31.220.5.250)
09:09:45 pfurla_ joins (~pfurla@235.15.195.173.client.static.strong-in52.as13926.net)
09:10:15 <[exa]> ah good point, SICP is pure gold
09:12:19 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 252 seconds)
09:16:11 ubert joins (~Thunderbi@178.115.42.114.wireless.dyn.drei.com)
09:17:15 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
09:18:25 × jippiedoe quits (~david@2a02-a44c-e14e-1-5fa0-8368-fcfd-eaa8.fixed6.kpn.net) (Ping timeout: 252 seconds)
09:21:43 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Ping timeout: 252 seconds)
09:22:46 lortabac joins (~lortabac@2a01:e0a:541:b8f0:2ef4:e718:7f42:663c)
09:23:40 opac joins (~opac@ip-28-56.sn2.clouditalia.com)
09:27:58 Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
09:28:24 jippiedoe joins (~david@2a02-a44c-e14e-1-7698-d72a-af47-8c5f.fixed6.kpn.net)
09:34:16 × neurocyte quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
09:35:52 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 245 seconds)
09:36:30 azeem joins (~azeem@62.19.37.175)
09:37:54 neurocyte joins (~neurocyte@45.93.108.142)
09:37:54 × neurocyte quits (~neurocyte@45.93.108.142) (Changing host)
09:37:54 neurocyte joins (~neurocyte@user/neurocyte)
09:38:30 kenran joins (~kenran@b2b-37-24-119-190.unitymedia.biz)
09:40:21 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:42:11 elf_fortrez joins (~elf_fortr@adsl-64-237-239-250.prtc.net)
09:50:01 oxide joins (~lambda@user/oxide)
09:50:40 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 240 seconds)
09:51:24 azeem joins (~azeem@62.19.37.175)
09:59:07 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
09:59:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:01:49 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
10:02:37 × slavaqq quits (~slavaqq@sdmail.sdserver.cz) (Ping timeout: 256 seconds)
10:05:03 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:05:35 × juhp quits (~juhp@128.106.188.220) (Quit: juhp)
10:05:52 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:06:04 <lortabac> any suggestions for a simple templating library? I just need to replace a couple of placeholders in a text file
10:06:50 <dminuoso> lortabac: rawstring-qm works nicely for me.
10:07:03 × desophos quits (~desophos@c-24-14-63-128.hsd1.il.comcast.net) (Quit: Leaving)
10:07:39 <dminuoso> The included ToTextBuilder nicely fits in as well.
10:08:11 <dminuoso> It's what we use for generating emails in one of our projects. :)
10:08:32 <lortabac> I'll have a look, thanks
10:16:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:17:16 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:18:29 × ubert quits (~Thunderbi@178.115.42.114.wireless.dyn.drei.com) (Ping timeout: 244 seconds)
10:19:27 <tomsmeding> lortabac: if the template is only known at runtime, you could also use 'mustache'
10:20:21 <dminuoso> tomsmeding: mustache does not come with TH helpers, ensuring the presence at compile time right?
10:20:39 <tomsmeding> dminuoso: "if the template is only known at runtime" ;)
10:21:02 <tomsmeding> can't use quasiquotes with a template from a file provided at runtime :p
10:21:09 <dminuoso> You can use TH.
10:21:11 <dminuoso> Oh
10:21:15 <dminuoso> Heh, I guess you're right.
10:21:28 <dminuoso> But mustache could still provide TH helpers to hook that into compile time
10:21:33 <tomsmeding> true
10:21:46 <dminuoso> Who wouldn't want their compiler to do random IO on the disk.
10:21:52 <dminuoso> :-)
10:22:13 tomsmeding raises hand hesitantly
10:22:56 ghoul42 joins (~ghoul42@185.64.41.91)
10:23:00 <tomsmeding> you know what would be nice? limited IO at compile time
10:23:11 <tomsmeding> e.g. only reading files and only in the project directory
10:23:41 <dminuoso> Im not sure that's enough, as in principle the file API can do quite a bit of damage.
10:23:48 <tomsmeding> I bet that, plus all the TH stuff that doesn't actually do any IO, covers 99% of TH use cases
10:24:08 <dminuoso> I'd want an assurance that the compiler cant do nonsense on my system
10:24:44 <tomsmeding> what's unsafe about "only read operations in the project directory"?
10:24:54 <dminuoso> tomsmeding: It might be more realistic to use namespaces and cgroups to run TH perhaps.
10:24:58 <tomsmeding> or are you arguing that you're not going to be able to restrain opreations to that
10:25:06 <tomsmeding> right
10:25:25 <dminuoso> tomsmeding: The thing is, "the project directory" doesnt mean much in a file system with support for fuse, mount points, symlinks, etc
10:25:38 <tomsmeding> c.f. a discussion on one of the mailing lists a while back, concerning "safe haskell" vs "cgroups"
10:25:55 <tomsmeding> that's true
10:26:14 <tdammers> dminuoso: it is meaningful, but only if all other OS interactions are sandboxed too.
10:26:20 <tomsmeding> yes
10:26:26 <dminuoso> tdammers: Right.
10:26:35 <tomsmeding> or hm
10:26:45 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:26:49 <tomsmeding> I mean, if the person compiling the project mounts random stuff in the project directory
10:26:56 <dminuoso> tdammers: Well, it might still not be truly meaningful. If the directory contains a symlink towards somewhere else, is that inside the project directory or not?
10:27:06 <tomsmeding> I'd say yes
10:27:13 <tdammers> same
10:27:41 <dminuoso> Either way, cgroups+namespaces for TH might actually not be a terrible idea.
10:27:47 <tdammers> and that's fine, as long as the symlink was put there by the user; but if the TH code can create and manipulate symlinks, then that is indeed meaningless
10:28:03 <dminuoso> Right
10:28:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:28:50 <dminuoso> This is something Ive been wanting for a while, really. Each time I run `cabal update` and then build something, there's a chance my compiler will install ransomware or something else on my machine.
10:28:53 Kaipi joins (~Kaiepi@156.34.44.192)
10:29:09 × Kaiepi quits (~Kaiepi@156.34.44.192) (Remote host closed the connection)
10:29:24 <tomsmeding> but if you're going to run whatever you just compiled, all bets are off anyway
10:29:30 <dminuoso> If at least `cabal` had the tooling to give me a complete source diff for the transitive depenency closure after an update, it would be workable
10:29:50 <dminuoso> tomsmeding: Mmm that's true I guess
10:29:59 <tomsmeding> right, though that's a problem unrelated to TH
10:30:19 <dminuoso> So I guess, such an diff-after-update tool would be what I really want.
10:30:33 <dminuoso> That would be genuinely useful for a lot of reasons actually
10:30:52 <dminuoso> Get an idea whether perhaps someone broke PVP, or just get an idea what changed, for auditing the security
10:32:04 <maerwald> dminuoso: right... that's one of the problem with PVP/semver. They're manual.
10:32:11 <tomsmeding> and then cabal should always (unless explicitly told not to, I guess) print the total number of source lines changed in your transitive dependency graph since the last configure
10:32:35 <dminuoso> tomsmeding: Yes!
10:32:44 <tomsmeding> and then you get scary high numbers :p
10:33:18 <dminuoso> Well, there could be a variety of knobs. Say, a flag that does this only for direct dependencies
10:33:19 <tomsmeding> which illustrate the futility of the thing if you have a non-trivial dependency graph
10:33:59 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:34:01 <tomsmeding> (and, I guess, if you don't have the budget or incentive to really get high-assurance software)
10:34:06 tomsmeding has to go now though
10:34:22 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:34:59 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
10:34:59 <dminuoso> Or, perhaps, another flag that does this for actually imported modules.
10:35:12 <dminuoso> So you'd get control over how much changes you want to see
10:35:39 <dminuoso> So you'd have the choice of "all lines changed in the entire closure", "all lines changed in direct dependencies", and "all lines changed in imported modules".
10:39:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:40:26 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:41:25 × Gurkenglas quits (~Gurkengla@dslb-088-075-022-191.088.075.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
10:43:13 × ghoul42 quits (~ghoul42@185.64.41.91) (Quit: Client closed)
10:45:19 neo joins (~neo3@cpe-292712.ip.primehome.com)
10:45:21 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:46:05 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:46:24 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Quit: mikoto-chan)
10:46:39 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
10:48:04 × neo1 quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 252 seconds)
10:49:45 juhp joins (~juhp@128.106.188.220)
10:51:02 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:51:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:53:37 × elf_fortrez quits (~elf_fortr@adsl-64-237-239-250.prtc.net) (Ping timeout: 256 seconds)
10:57:14 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
10:57:14 AndrewYu is now known as Andrew
10:57:53 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:00:57 alx741 joins (~alx741@186.178.108.235)
11:03:38 arjun joins (~Srain@user/arjun)
11:04:01 × jippiedoe quits (~david@2a02-a44c-e14e-1-7698-d72a-af47-8c5f.fixed6.kpn.net) (Ping timeout: 252 seconds)
11:05:10 jakalx joins (~jakalx@base.jakalx.net)
11:15:31 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
11:19:15 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
11:20:52 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 245 seconds)
11:21:08 trcc joins (~trcc@2-104-60-169-cable.dk.customer.tdc.net)
11:23:22 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Ping timeout: 245 seconds)
11:24:16 azeem joins (~azeem@62.19.37.175)
11:24:18 sugarfunc joins (~Adium@49.206.52.35)
11:25:21 <sugarfunc> I'm new to haskell and i didn't quite understand haskell's indentation rules. I'm using Vim that comes installed in macOS by default. How many spaces should I use?
11:25:37 fendor_ joins (~fendor@91.141.68.147.wireless.dyn.drei.com)
11:26:04 <hpc> as many as you want - haskell works by alignment
11:26:34 × Kaipi quits (~Kaiepi@156.34.44.192) (Ping timeout: 252 seconds)
11:26:36 <hpc> everything at the same indentation level is in the same "block"
11:26:41 sugarfunc parts (~Adium@49.206.52.35) ()
11:26:48 <hpc> for example
11:26:58 <hpc> foo x y = do m <- x
11:27:10 <hpc> m' <- y
11:27:17 <hpc> ...
11:27:25 sugarfunc joins (~Adium@49.206.52.35)
11:27:34 <hpc> you might also prefer foo x y = do
11:27:37 <hpc> m <- x
11:27:41 <hpc> ...
11:28:14 × fendor quits (~fendor@77.119.206.17.wireless.dyn.drei.com) (Ping timeout: 244 seconds)
11:28:15 <hpc> er, when i said "indentation level" up there pretend i said "column" instead
11:28:18 <merijn> sugarfunc: For a super detailed explanation, see: https://en.wikibooks.org/wiki/Haskell/Indentation
11:28:29 <merijn> hpc: Or you can just be lazy and link the wikibook ;)
11:28:39 <hpc> i forgot it existed :D
11:29:35 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Quit: terminal restart)
11:29:56 <sugarfunc> thank you :-) i didn't knew that wikibooks has a book about haskell. I'm just done reading first chapter of "learn you some haskell for great good"
11:30:14 <[exa]> sugarfunc: any number of spaces is good but you need to consistently use spaces. I'm doing something like :set et sta sw=2 ts=2
11:30:36 jippiedoe joins (~david@2a02-a44c-e14e-1-a8a9-ba4a-b275-b19f.fixed6.kpn.net)
11:30:41 <hpc> sugarfunc: yeah, there's resources all over the place - https://www.haskell.org/documentation/
11:31:14 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:31:35 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Client Quit)
11:31:36 × sugarfunc quits (~Adium@49.206.52.35) (Quit: Leaving.)
11:33:35 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:34:26 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 244 seconds)
11:35:23 favonia joins (~favonia@user/favonia)
11:36:46 <andinus> are there more why haskell writeups?
11:36:49 <andinus> i read https://crypto.stanford.edu/~blynn/haskell/why.html
11:38:21 tfeb joins (~tfb@88.98.95.237)
11:39:42 Kaiepi joins (~Kaiepi@156.34.44.192)
11:40:50 echoone joins (~echoone@2a02:8109:a1c0:5d05:e9b0:6d7e:a321:5a85)
11:47:07 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 245 seconds)
11:47:21 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
11:47:28 neofromatrix joins (~Adium@49.206.52.35)
11:48:16 azeem joins (~azeem@62.19.37.175)
11:48:44 neofromatrix parts (~Adium@49.206.52.35) ()
11:48:56 amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
11:56:17 sleblanc joins (~sleblanc@user/sleblanc)
11:56:49 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
11:58:07 × ikex quits (ash@user/ikex) (Quit: ZNC - https://znc.in)
11:58:20 ikex joins (ash@user/ikex)
11:58:27 TranquilEcho joins (~grom@user/tranquilecho)
11:59:07 azeem joins (~azeem@62.19.37.175)
11:59:58 × max22- quits (~maxime@2a01cb08833598001c2c73c755058a4b.ipv6.abo.wanadoo.fr) (Ping timeout: 256 seconds)
12:00:08 <maerwald> andinus: the one from dijkstra that gets posted every other month
12:00:45 <maerwald> https://www.cs.utexas.edu/users/EWD/transcriptions/OtherDocs/Haskell.html
12:00:57 × Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
12:02:16 zer0bitz joins (~zer0bitz@dsl-hkibng31-58c384-213.dhcp.inet.fi)
12:02:19 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds)
12:02:31 <maerwald> `The additional advantage of functional programming with “lazy evaluation” is that it provides an environment that discourages operational reasoning.` -- although I don't think tht holds :p
12:02:57 <maerwald> I mean, beyond teaching code snippets
12:05:04 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:05:27 × oxide quits (~lambda@user/oxide) (Ping timeout: 245 seconds)
12:07:25 oxide joins (~lambda@user/oxide)
12:12:11 × tfeb quits (~tfb@88.98.95.237) (Quit: died)
12:13:29 tengu1 joins (~tengu1@cpe-70-121-244-14.neb.res.rr.com)
12:17:24 ubert joins (~Thunderbi@91.141.71.52.wireless.dyn.drei.com)
12:17:41 <andinus> thanks
12:23:52 Kaipi joins (~Kaiepi@156.34.44.192)
12:24:03 × Kaiepi quits (~Kaiepi@156.34.44.192) (Read error: Connection reset by peer)
12:24:20 slowButPresent joins (~slowButPr@user/slowbutpresent)
12:27:08 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 244 seconds)
12:28:04 dunj3 joins (~dunj3@2001:16b8:30cf:7000:7144:88af:3fb9:7fd1)
12:28:08 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
12:30:00 <echoone> testing
12:30:18 Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
12:30:52 × Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
12:30:55 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 252 seconds)
12:31:05 Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
12:36:03 <kuribas> operational reasoning = performance?
12:36:35 <kuribas> Perhaps they mean it discouraging from writing a series of steps.
12:36:41 <albet70> \k -> let k k' = k in k' it's equal to fix k, rigth?
12:36:46 <kuribas> Rather writing the "meaning" of the program.
12:36:59 <merijn> kuribas: Operational reasoning is *any* form of reasoning about how things are implemented/evaluated
12:37:06 <merijn> for performance or any other reason
12:38:04 <kuribas> well, I don't see how that could ever be an advantage...
12:40:06 <merijn> kuribas: Because it's an important math skill to separate "what" from "how"
12:40:27 <merijn> kuribas: It's the reason why I think compiler construction courses are one of the most crucial CS courses
12:40:34 <kuribas> merijn: indeed
12:40:38 acidjnk_new joins (~acidjnk@p200300d0c720303959598fb61e40d514.dip0.t-ipconnect.de)
12:40:44 <merijn> Because they're the only ones that separate "what does this mean" from "how can we implement/do it"
12:41:04 <merijn> Much bad programming comes from a priori thinking about "how" before having properly defined "what"
12:41:28 <merijn> But you can only teach that if you can somehow stop students from thinking about "how", which is notoriously hard
12:41:42 echoone55 joins (~echoone@2a02:8109:a1c0:5d05:2d85:bc81:1c9c:4feb)
12:41:47 <merijn> Hence, making operational reasoning hard is good, because it means they can't fall back to thinking about "how"
12:42:09 × echoone55 quits (~echoone@2a02:8109:a1c0:5d05:2d85:bc81:1c9c:4feb) (Client Quit)
12:42:35 echoone83 joins (~echoone@2a02:8109:a1c0:5d05:2d85:bc81:1c9c:4feb)
12:43:33 × echoone quits (~echoone@2a02:8109:a1c0:5d05:e9b0:6d7e:a321:5a85) (Ping timeout: 256 seconds)
12:44:11 × acidjnk quits (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
12:44:26 <maerwald> you have to do operational reasoning anyway if you do IO, ST, 90% of the monad transformer stacks, async, etc etc
12:45:33 <merijn> maerwald: Eventually, sure.
12:45:54 <merijn> maerwald: But most conventional programming languages waste too much time on it
12:46:18 jacks2 joins (~bc8167eb@217.29.117.252)
12:49:22 echoone83 is now known as echoone
12:50:15 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
12:51:33 <kuribas> but the danger of doing implementation before understanding exists in haskell too.
12:52:08 <maerwald> yeah, I don't think haskell can make something great out of a sloppy programmer
12:52:26 <merijn> This seems like moving goalposts
12:52:44 <merijn> Dijkstra said "it's good for teaching, because it discourages operational reasoning"
12:52:46 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
12:52:54 <maerwald> I know
12:53:00 <merijn> You guys: "but you still can and it won't fix arbitrary bad programmer behaviours!!"
12:53:10 <merijn> I mean...yeah, I guess
12:53:11 <maerwald> that's why I said that his sentence doesn't have much value beyond teaching
12:54:27 <echoone> Maybe there should be a second course called "Operational reasoning in programming" where they cover the nitty gritty.
12:54:52 pbrisbin joins (~patrick@pool-108-16-214-93.phlapa.fios.verizon.net)
12:54:54 max22- joins (~maxime@2a01cb08833598002194f34da34c193e.ipv6.abo.wanadoo.fr)
12:55:00 <maerwald> the thing is... most CS courses don't even talk much about operational vs denotational semantics
12:55:14 <echoone> True. I never learned that stuff in my CS degree.
12:55:25 <merijn> Most CS degrees are bad, yes
12:55:26 <maerwald> even in compiler course, we talked more about Chomsky than those things
12:55:58 <maerwald> yeah, I'm pretty confident my degree was a waste of time :)
12:56:09 <merijn> I'm pretty confident mine wasn't :p
12:56:21 <merijn> That's Dijkstra's entire point
12:56:29 <merijn> Just because most are shite, doesn't mean they *have* to be
12:57:12 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
12:57:34 <maerwald> I got fed so much of Java design patterns that I still have nightmares about observer patterns following me
12:57:41 <echoone> lol
12:57:42 <kuribas> merijn: Utrecht?
12:58:01 <kuribas> maerwald: Java design patterns are BS.
12:58:09 <merijn> kuribas: Nope, VU in Amsterdam
12:58:14 <kuribas> maerwald: or rather, they are so vague that the are always right.
12:58:18 <kuribas> merijn: right
12:58:26 <maerwald> kuribas: I suck at OOP
12:58:40 <kuribas> maerwald: that's ok :)
12:58:46 <echoone> I think everyone sucks at OOP.
12:58:51 × tengu1 quits (~tengu1@cpe-70-121-244-14.neb.res.rr.com) (Ping timeout: 256 seconds)
12:59:23 × Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
12:59:34 <absence> is it possible to derive aeson types for higher-kinded data? i've tried searching online and found monstrous workarounds, but there's also mention about a "future" QuantifiedConstraints extension that will simplify things, and i believe that's available now?
13:02:52 ravan joins (~ravan@42.201.198.151)
13:04:12 Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
13:05:12 × Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
13:05:47 Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
13:07:46 × sleblanc quits (~sleblanc@user/sleblanc) (Ping timeout: 252 seconds)
13:09:04 × trcc quits (~trcc@2-104-60-169-cable.dk.customer.tdc.net) (Remote host closed the connection)
13:09:36 trcc joins (~trcc@130.225.16.16)
13:12:32 × hendursaga quits (~weechat@user/hendursaga) (Quit: hendursaga)
13:12:58 hendursaga joins (~weechat@user/hendursaga)
13:13:49 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 252 seconds)
13:17:09 iqubic parts (~user@c-67-180-134-109.hsd1.ca.comcast.net) (ERC (IRC client for Emacs 28.0.50))
13:17:47 × Skyfire quits (~pyon@user/pyon) (Ping timeout: 240 seconds)
13:18:47 ravan parts (~ravan@42.201.198.151) (Leaving)
13:19:18 × max22- quits (~maxime@2a01cb08833598002194f34da34c193e.ipv6.abo.wanadoo.fr) (Ping timeout: 256 seconds)
13:19:53 shriekingnoise joins (~shrieking@186.137.144.80)
13:20:34 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
13:21:28 o0p4c joins (~opac@ip-28-56.sn2.clouditalia.com)
13:21:35 × opac quits (~opac@ip-28-56.sn2.clouditalia.com) (Read error: Connection reset by peer)
13:21:39 o0p4c is now known as opac
13:23:44 × __monty__ quits (~toonn@user/toonn) (Remote host closed the connection)
13:23:59 __monty__ joins (~toonn@user/toonn)
13:24:49 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Ping timeout: 252 seconds)
13:26:58 <kuribas> absence: could you use a newtype?
13:27:33 <kuribas> like: data Hk f = Hk (f Int) (f String); newtype HKProxy f a = HKProxy f a; instance ToJSON (f a) => ToJSON (HKProxy f a); instance ToJSON (Hk HKProxy)
13:28:16 × xsperry quits (~as@user/xsperry) ()
13:28:22 <kuribas> erm (Hk (HKProxy f))
13:29:23 <kuribas> hmm, I guess not...
13:31:46 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
13:32:05 kmein joins (~weechat@user/kmein)
13:32:34 × df quits (~ben@51.15.198.140) (Ping timeout: 240 seconds)
13:33:59 × koolazer quits (~koo@user/koolazer) (Ping timeout: 250 seconds)
13:36:49 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
13:37:10 × oxide quits (~lambda@user/oxide) (Ping timeout: 240 seconds)
13:39:04 oxide joins (~lambda@user/oxide)
13:42:14 max22- joins (~maxime@2a01cb0883359800ebf73839d72fccc8.ipv6.abo.wanadoo.fr)
13:46:39 × jacks2 quits (~bc8167eb@217.29.117.252) (Quit: quit)
13:47:24 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye)
13:51:47 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
13:55:04 × Boomerang quits (~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 252 seconds)
13:58:20 Sgeo joins (~Sgeo@user/sgeo)
14:01:20 × trcc quits (~trcc@130.225.16.16) (Remote host closed the connection)
14:01:42 × hololeap_ quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
14:02:52 ec_ joins (~ec@gateway/tor-sasl/ec)
14:04:18 × ec_ quits (~ec@gateway/tor-sasl/ec) (Client Quit)
14:04:32 ec_ joins (~ec@gateway/tor-sasl/ec)
14:06:03 × Vajb quits (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
14:06:03 <exarkun> https://github.com/PrivateStorageio/PaymentServer/blob/99.enforce-token-count/test/Stripe.hs#L86-L87 runs fine. https://github.com/PrivateStorageio/PaymentServer/blob/99.enforce-token-count/test/Redemption.hs#L72-L83 seems awfully similar to me but hangs for a few minutes before failing.
14:06:49 <exarkun> I dunno why
14:06:50 Vajb joins (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
14:07:01 <exarkun> And I dunno where to look to find out
14:08:41 df joins (~ben@justworks.xyz)
14:14:35 Everything joins (~Everythin@37.115.210.35)
14:14:42 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 245 seconds)
14:16:46 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
14:17:10 × BestSteve quits (~beststeve@2001-b011-0002-3b2a-06d9-f5ff-fe38-e249.dynamic-ip6.hinet.net) (Ping timeout: 245 seconds)
14:17:42 × qwedfg quits (~qwedfg@user/qwedfg) (Ping timeout: 244 seconds)
14:17:56 <[exa]> exarkun: how does it fail? OOM? timeout?
14:21:59 <exarkun> [exa]: On one run it reported OKFAIL Exception: WaiTestFailure "Expected status code 200, but received 400"
14:22:09 <exarkun> On another it just said FAIL w/ that exception
14:22:21 × vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.2)
14:23:47 <exarkun> I found the bug that leads to the 400 (instead of the 200) and if I fix that bug then it passes fast instead of failing slow ... so I guess that's some kind of clue, except it doesn't help me understand why it fails slow instead of failing fast.
14:25:11 hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com)
14:25:11 <[exa]> I only see an extra `encode` but that's likely ignorable
14:25:36 <__monty__> Sounds like a timeout.
14:25:45 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
14:25:49 BestSteve joins (~beststeve@220-135-3-239.HINET-IP.hinet.net)
14:32:20 marjinal1st joins (~Thunderbi@178.251.45.235)
14:33:47 vysn joins (~vysn@user/vysn)
14:33:58 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:33:58 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:33:58 wroathe joins (~wroathe@user/wroathe)
14:34:07 × jippiedoe quits (~david@2a02-a44c-e14e-1-a8a9-ba4a-b275-b19f.fixed6.kpn.net) (Ping timeout: 252 seconds)
14:36:04 ec_ joins (~ec@gateway/tor-sasl/ec)
14:38:01 × neo quits (~neo3@cpe-292712.ip.primehome.com) (Remote host closed the connection)
14:38:22 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 244 seconds)
14:38:26 neo joins (~neo3@cpe-292712.ip.primehome.com)
14:39:18 × echoone quits (~echoone@2a02:8109:a1c0:5d05:2d85:bc81:1c9c:4feb) (Quit: Client closed)
14:42:10 Gurkenglas joins (~Gurkengla@dslb-088-075-022-191.088.075.pools.vodafone-ip.de)
14:43:00 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
14:43:28 × acidjnk_new quits (~acidjnk@p200300d0c720303959598fb61e40d514.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
14:44:58 zachjs joins (~zachjs@c-24-8-115-19.hsd1.co.comcast.net)
14:45:01 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye)
14:45:45 <exarkun> okay application logic bug, all my fault
14:46:31 × kenran quits (~kenran@b2b-37-24-119-190.unitymedia.biz) (Quit: WeeChat info:version)
14:46:36 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
14:49:58 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
14:50:22 <timCF> Hello! Any `Async` users there? I have a question about process linking. Is `link` working always to one direction (propagation of exception from spawned process back to parent process), or it will propagate back as well? Also I'm looking for possibility to make all child `Async` processes terminated (cancelled) in case where parent process has been cancelled. Is `link` function the way to go, or there is
14:50:28 <timCF> some better function for this?
14:52:11 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving)
14:53:18 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
14:54:00 <timCF> Or maybe there is some other library which solves task of building such proccess trees (a bit similar to Erlang typical procees tree) better than `Async`?
14:56:08 <merijn> It can be done with async, but requires a bit of low level fiddling to get nice abstractions
14:56:12 × pfurla_ quits (~pfurla@235.15.195.173.client.static.strong-in52.as13926.net) (Ping timeout: 256 seconds)
14:59:11 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
14:59:54 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
15:00:02 × neo quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 252 seconds)
15:00:35 × turlando quits (~turlando@user/turlando) (Read error: Connection reset by peer)
15:04:55 × vysn quits (~vysn@user/vysn) (Ping timeout: 252 seconds)
15:05:19 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
15:05:19 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
15:05:19 turlando joins (~turlando@user/turlando)
15:09:06 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:2ef4:e718:7f42:663c) (Quit: WeeChat 2.8)
15:09:18 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
15:11:04 ec_ joins (~ec@gateway/tor-sasl/ec)
15:14:49 011AAA542 joins (~mc47@xmonad/TheMC47)
15:14:49 047AAD8YA joins (~mc47@xmonad/TheMC47)
15:14:52 × 047AAD8YA quits (~mc47@xmonad/TheMC47) (Client Quit)
15:14:57 × 011AAA542 quits (~mc47@xmonad/TheMC47) (Client Quit)
15:15:14 mc47 joins (~mc47@xmonad/TheMC47)
15:16:09 xsperry joins (~as@user/xsperry)
15:17:18 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
15:17:31 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 252 seconds)
15:19:12 hyiltiz joins (~quassel@31.220.5.250)
15:22:27 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
15:26:40 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Ping timeout: 240 seconds)
15:36:06 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
15:41:33 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:41:33 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
15:41:33 wroathe joins (~wroathe@user/wroathe)
15:47:36 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
15:50:58 hgolden joins (~hgolden2@cpe-172-114-84-61.socal.res.rr.com)
15:52:01 <kuribas> here's a handy function which I often need: buildMap :: Ord k => (a -> k) -> (a -> v) -> [a] -> Map.Map k [v]
15:52:15 <kuribas> buildMap getKey getValue = Map.map reverse . Map.fromListWith (++) . map (\x -> (getKey x, [getValue x]))
15:52:29 <kuribas> building up a map from a key and value.
15:52:34 <kuribas> and accumulating the values.
15:52:51 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
15:53:48 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 244 seconds)
15:54:05 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
15:56:13 × dajoer quits (~david@user/gvx) (Quit: leaving)
15:57:40 × xsperry quits (~as@user/xsperry) (Quit: quit)
15:59:23 ec_ joins (~ec@gateway/tor-sasl/ec)
15:59:29 × marjinal1st quits (~Thunderbi@178.251.45.235) (Ping timeout: 244 seconds)
16:05:42 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
16:05:48 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
16:07:23 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
16:07:28 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
16:07:37 justsomeguy joins (~justsomeg@user/justsomeguy)
16:09:26 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Remote host closed the connection)
16:09:28 lavaman joins (~lavaman@98.38.249.169)
16:12:02 jippiedoe joins (~david@2a02:a44c:e14e:1:88ae:c015:d0c7:4dd4)
16:14:13 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
16:16:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
16:17:24 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:21:13 qwedfg joins (~qwedfg@user/qwedfg)
16:22:28 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
16:23:04 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3))
16:23:25 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:28:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
16:29:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:31:46 × d0ku quits (~d0ku@178.43.56.75.ipv4.supernova.orange.pl) (Remote host closed the connection)
16:31:48 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
16:33:19 aegon joins (~mike@174.127.249.180)
16:33:24 Erutuon joins (~Erutuon@user/erutuon)
16:33:31 × zachjs quits (~zachjs@c-24-8-115-19.hsd1.co.comcast.net) (Quit: zachjs)
16:34:27 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
16:35:07 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
16:35:47 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:40:20 × jippiedoe quits (~david@2a02:a44c:e14e:1:88ae:c015:d0c7:4dd4) (Quit: Leaving)
16:40:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
16:41:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:43:28 SystemFFan joins (~SystemFFa@188.70.6.7)
16:45:15 ec_ joins (~ec@gateway/tor-sasl/ec)
16:46:30 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
16:47:45 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:49:05 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 244 seconds)
16:49:32 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
16:52:36 econo joins (uid147250@user/econo)
16:53:40 × Xe quits (~cadey@tailscale/xe) (Ping timeout: 240 seconds)
16:55:10 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
16:59:08 Xe joins (~cadey@tailscale/xe)
17:01:03 xsperry joins (~as@user/xsperry)
17:02:56 <tomsmeding> buildMap getKey getValue = Map.fromList . map ((,) <$> head . fst <*> map snd) . groupOn ((==) `on` fst) . sortBy (comparing fst) . map ((,) <$> getKey <*> getValue)
17:03:08 <tomsmeding> potentially more efficient because less (++) ?
17:03:53 × fendor_ quits (~fendor@91.141.68.147.wireless.dyn.drei.com) (Remote host closed the connection)
17:06:19 <tomsmeding> @tell kuribas https://ircbrowse.tomsmeding.com/day/lchaskell/2021/09/01?id=163897#trid163897
17:06:19 <lambdabot> Consider it noted.
17:13:01 × xsperry quits (~as@user/xsperry) ()
17:16:34 xsperry joins (~as@user/xsperry)
17:21:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:22:25 × pgib quits (~textual@173.38.117.72) (Ping timeout: 252 seconds)
17:23:22 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
17:24:11 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Quit: mikoto-chan)
17:24:16 × ec_ quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
17:24:38 ec_ joins (~ec@gateway/tor-sasl/ec)
17:26:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
17:33:09 desantra joins (~skykanin@user/skykanin)
17:34:15 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:36:50 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Remote host closed the connection)
17:39:03 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
17:40:24 × jrm quits (~jrm@156.34.187.65) (Quit: ciao)
17:41:22 <phaazon> @hoogle ifM
17:41:23 <lambdabot> Control.Monad.Extra ifM :: Monad m => m Bool -> m a -> m a -> m a
17:41:23 <lambdabot> Extra ifM :: Monad m => m Bool -> m a -> m a -> m a
17:41:23 <lambdabot> Protolude ifM :: Monad m => m Bool -> m a -> m a -> m a
17:41:52 jrm joins (~jrm@156.34.187.65)
17:43:22 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
17:43:34 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
17:43:47 Pickchea joins (~private@user/pickchea)
17:45:06 × qwedfg quits (~qwedfg@user/qwedfg) (Read error: Connection reset by peer)
17:45:33 ec_ joins (~ec@gateway/tor-sasl/ec)
17:48:40 qwedfg joins (~qwedfg@user/qwedfg)
17:49:54 ub joins (~Thunderbi@91.141.71.52.wireless.dyn.drei.com)
17:55:59 × alx741 quits (~alx741@186.178.108.235) (Quit: alx741)
17:56:18 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
17:58:06 × qwedfg quits (~qwedfg@user/qwedfg) (Read error: Connection reset by peer)
17:58:14 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
17:58:30 Guest10 joins (~Guest10@93-172-153-232.bb.netvision.net.il)
17:58:35 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:58:43 × ub quits (~Thunderbi@91.141.71.52.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
17:59:24 <Guest10> is there an efficient solution to the snail problem in haskell? https://www.codewars.com/kata/521c2db8ddc89b9b7a0000c1/haskell
18:00:40 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
18:00:54 <Guest10> i know https://rextester.com/NJMZH56113 but with all the transposes it offers a less efficient solution than the normal imperative solution
18:01:02 qwedfg joins (~qwedfg@user/qwedfg)
18:03:05 <int-e> but it's so short and idiomatic :P
18:03:57 <Guest10> ye i love that solution. just wondering about efficiency
18:04:45 <int-e> An efficient solution will have to forego lists, I think. And once you use arrays... it's kind of boring?
18:05:02 <Guest10> vectors probably
18:05:06 <Guest10> also yes
18:05:14 <Guest10> but im still interested
18:05:42 <Guest10> because we still need to think about efficiency in code. no matter how fucking beautiful that solution is
18:06:10 <monochrom> Use a 2D array and work on indexing tricks.
18:06:27 <monochrom> Note that array ≠ list.
18:07:06 <monochrom> The indexing trick is not boring.
18:08:26 <Guest10> monochrom idk how to do what you're saying in haskell. that's why i raised the subject
18:09:32 × idf quits (~idf@198.23.223.146) (Remote host closed the connection)
18:09:46 <Guest10> this was my solution in python which is not beautiful at all but works (without indexing tricks tho): https://pastebin.com/LgYCdfJv
18:10:34 <Guest10> just wondering if actually efficient solutions could be made in haskell and still be elegant
18:11:45 <monochrom> Do you already know how to use either the vector library from Hackage or the Data.Array module that comes with GHC?
18:12:32 × max22- quits (~maxime@2a01cb0883359800ebf73839d72fccc8.ipv6.abo.wanadoo.fr) (Ping timeout: 245 seconds)
18:15:10 <[exa]> Guest10: if you want to do that with lists, just splitting the lists in half gives a pretty interesting recursion scheme there tbh
18:15:15 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
18:16:54 zebrag joins (~chris@user/zebrag)
18:17:57 × benin0369323 quits (~benin@183.82.204.90) (Ping timeout: 244 seconds)
18:18:02 × OscarH quits (~OscarH@97e48a81.skybroadband.com) (Ping timeout: 252 seconds)
18:18:55 <Guest10> monochrom no
18:19:22 <int-e> > let go 0 _ x y = [(x,y)]; go n d x y = [(x+d*i,y) | i <- [0..n-1]] ++ [(x+d*n,y+d*i) | i <- [0..n-1]] ++ go (n-1) (-d) (x+d*n) (y+d*n); snail n = go (n-1) 1 0 0 in snail 3 -- just computing indices
18:19:24 <lambdabot> [(0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1)]
18:19:30 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 244 seconds)
18:19:36 <Guest10> [exa] umm ok
18:19:45 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
18:19:56 <monochrom> They you can start by tossing a coin to pick one and start learning.
18:20:18 <monochrom> Either one is just a matter of reading library doc and practicing.
18:21:41 <Guest10> well i already am learning it
18:21:52 <Guest10> just thought somebody would have a clever solution to suggest
18:22:11 <[exa]> hm let's convert some logicks to data
18:22:22 <[exa]> (because that is the way™)
18:23:22 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds)
18:23:42 <int-e> Well, the reverse . transpose thing is clever. You can mimic it with an array library that implements reversals and transposes and tails as *views* on an initial 2D array... keeping track of a linear transformation... but it's hard to justify that amount of code for this simple problem
18:23:43 <Guest10> im not fluent enough to come up with one myself I(tho learning) yet, but still interested in how would that even look like in haskell
18:24:21 <Guest10> int-e would you say it's just not a kind of problem haskell is good at solving?
18:24:38 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
18:25:07 <Guest10> well not literally haskel but you get what i mean
18:25:19 <int-e> Oh it's good enough. It doesn't get a chance to shine and it suffers from not having the concise array indexing notation that imperative programming languages tend to have.
18:25:30 <[exa]> guideWithLimits = [ (_1, (+1), width), (_2, (+1), height), (_1, (- 1), 1), (_2, (- 1), 1)]
18:25:33 <monochrom> I am not very thrilled with composing views, since there are about sqrt(n) views to compose eventually.
18:25:59 <int-e> monochrom: yes, which is why you keep track of a linear transformation as a matrix
18:26:18 <int-e> so you don't have to go through the whole stack on every access.
18:26:19 <[exa]> unfortunately it requires rotating the guide but that can be done in AO(1) with the lazy queue
18:26:34 <int-e> monochrom: or at least that's what I had in mind
18:30:21 <monochrom> [exa], I would replace "rotation" by cycle. cycle [x,y,z] = [x,y,z,x,y,z,x,y,z,...] not more rotation, just consumption.
18:30:31 ec_ joins (~ec@gateway/tor-sasl/ec)
18:32:10 <[exa]> monochrom: I need to update the bounds there, but yeah there might be a better way
18:32:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
18:33:25 <[exa]> anyway that was an exercise in "materialize the offsets for clarity", not saying it's good :]
18:33:26 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
18:36:13 lavaman joins (~lavaman@98.38.249.169)
18:36:29 Guest8166 joins (~lordgrenv@141.226.11.65)
18:37:53 max22- joins (~maxime@2a01cb0883359800f554d7694bd7e6d3.ipv6.abo.wanadoo.fr)
18:38:53 chisui joins (~chisui@200116b868aa2800d5eed5c8b9502c85.dip.versatel-1u1.de)
18:42:10 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
18:42:48 × desantra quits (~skykanin@user/skykanin) (Quit: WeeChat 3.2)
18:43:02 MQ-17J joins (~MQ-17J@8.21.10.6)
18:51:49 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Quit: mikoto-chan)
18:55:13 commuswift[m] joins (~commuswif@2001:470:69fc:105::e862)
18:55:51 × Guest10 quits (~Guest10@93-172-153-232.bb.netvision.net.il) (Ping timeout: 256 seconds)
18:55:52 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 245 seconds)
18:57:13 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 244 seconds)
18:57:38 azeem joins (~azeem@62.19.37.175)
18:57:51 justsomeguy joins (~justsomeg@user/justsomeguy)
19:02:49 burnsidesLlama joins (~burnsides@dhcp168-020.wadham.ox.ac.uk)
19:04:10 vysn joins (~vysn@user/vysn)
19:04:36 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:05:40 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
19:06:22 × lisq quits (~quassel@lis.moe) (Quit: lisq)
19:09:06 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 244 seconds)
19:09:56 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
19:10:32 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
19:10:46 lep is now known as lep-
19:11:00 hyiltiz joins (~quassel@31.220.5.250)
19:11:31 × burnsidesLlama quits (~burnsides@dhcp168-020.wadham.ox.ac.uk) (Remote host closed the connection)
19:12:58 × MQ-17J quits (~MQ-17J@8.21.10.6) (Ping timeout: 252 seconds)
19:13:23 MQ-17J joins (~MQ-17J@8.21.10.6)
19:14:32 burnsidesLlama joins (~burnsides@dhcp168-020.wadham.ox.ac.uk)
19:14:38 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
19:14:56 cloudy[m] joins (~cloudyclo@2001:470:69fc:105::50c0)
19:15:18 ec_ joins (~ec@gateway/tor-sasl/ec)
19:18:11 cloudy[m] is now known as cloudy
19:18:55 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 244 seconds)
19:20:07 × MQ-17J quits (~MQ-17J@8.21.10.6) (Ping timeout: 252 seconds)
19:21:18 lep- is now known as lep
19:21:28 × arjun quits (~Srain@user/arjun) (Remote host closed the connection)
19:23:00 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
19:23:56 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
19:24:51 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:24:51 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
19:24:51 wroathe joins (~wroathe@user/wroathe)
19:25:44 × superbil quits (~superbil@1-34-176-171.HINET-IP.hinet.net) (Ping timeout: 250 seconds)
19:29:47 echoone joins (~echoone@2a02:8109:a1c0:5d05:2d85:bc81:1c9c:4feb)
19:30:29 lep is now known as lep-
19:30:56 × nvmd quits (~nvmd@user/nvmd) (Ping timeout: 250 seconds)
19:31:02 × cloudy quits (~cloudyclo@2001:470:69fc:105::50c0) (Quit: Reconnecting)
19:31:14 lisq joins (~quassel@lis.moe)
19:31:16 cloudy joins (~cloudy@2001:470:69fc:105::50c0)
19:31:40 elf_fortrez joins (~elf_fortr@adsl-64-237-239-250.prtc.net)
19:32:08 × burnsidesLlama quits (~burnsides@dhcp168-020.wadham.ox.ac.uk) (Remote host closed the connection)
19:33:23 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
19:33:33 × chisui quits (~chisui@200116b868aa2800d5eed5c8b9502c85.dip.versatel-1u1.de) (Quit: Client closed)
19:33:35 × elf_fortrez quits (~elf_fortr@adsl-64-237-239-250.prtc.net) (Client Quit)
19:33:48 burnsidesLlama joins (~burnsides@dhcp168-020.wadham.ox.ac.uk)
19:39:22 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 252 seconds)
19:39:52 azeem joins (~azeem@62.19.37.175)
19:44:33 × sclv quits (sid39734@haskell/developer/sclv) (Ping timeout: 276 seconds)
19:45:12 × rune quits (sid21167@id-21167.charlton.irccloud.com) (Ping timeout: 276 seconds)
19:45:12 × royo quits (~royo@user/royo) (Ping timeout: 276 seconds)
19:45:12 × zzz quits (~yin@user/yin) (Ping timeout: 276 seconds)
19:45:37 × burnsidesLlama quits (~burnsides@dhcp168-020.wadham.ox.ac.uk) (Remote host closed the connection)
19:45:51 × caasih quits (sid13241@id-13241.charlton.irccloud.com) (Ping timeout: 276 seconds)
19:45:51 × welterde quits (welterde@thinkbase.srv.welterde.de) (Ping timeout: 276 seconds)
19:46:20 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 256 seconds)
19:46:35 caasih joins (sid13241@id-13241.charlton.irccloud.com)
19:46:42 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
19:47:06 rune joins (sid21167@id-21167.charlton.irccloud.com)
19:47:24 azeem joins (~azeem@62.19.37.175)
19:47:30 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:51:24 zzz joins (~yin@user/yin)
19:53:30 lavaman joins (~lavaman@98.38.249.169)
19:56:25 lep- is now known as lep
19:56:58 × Guest8166 quits (~lordgrenv@141.226.11.65) (Ping timeout: 252 seconds)
19:58:00 ec_ joins (~ec@gateway/tor-sasl/ec)
19:58:04 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
19:58:10 welterde joins (welterde@thinkbase.srv.welterde.de)
19:58:15 kenran joins (~kenran@200116b82b07b8005c98d0a77c3f6d41.dip.versatel-1u1.de)
19:58:39 royo joins (~royo@user/royo)
19:59:22 sclv joins (sid39734@haskell/developer/sclv)
20:03:46 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
20:04:54 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 244 seconds)
20:05:46 × hgolden quits (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Ping timeout: 252 seconds)
20:06:47 juhp joins (~juhp@128.106.188.220)
20:06:57 talismanick joins (~user@2601:644:8500:8350::cc04)
20:08:19 × flukiluke quits (~flukiluke@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Ping timeout: 250 seconds)
20:08:42 flukiluke joins (~flukiluke@2603:c023:c000:6c7e:8945:ad24:9113:a962)
20:08:44 × echoone quits (~echoone@2a02:8109:a1c0:5d05:2d85:bc81:1c9c:4feb) (Quit: Client closed)
20:10:43 superbil joins (~superbil@1-34-176-171.HINET-IP.hinet.net)
20:12:08 × dunj3 quits (~dunj3@2001:16b8:30cf:7000:7144:88af:3fb9:7fd1) (Remote host closed the connection)
20:16:26 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
20:17:22 pavonia joins (~user@user/siracusa)
20:19:53 × aman quits (~aman@user/aman) (Ping timeout: 244 seconds)
20:22:16 × superbil quits (~superbil@1-34-176-171.HINET-IP.hinet.net) (Ping timeout: 252 seconds)
20:25:30 burnsidesLlama joins (~burnsides@dhcp168-020.wadham.ox.ac.uk)
20:28:32 <dminuoso> Let's pretend there was a global malware that would delete all binary installations of a Haskeller compiler (GHC, Hugs, all of them). How tedious would the process be of bootstrapping GHC again?
20:29:12 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:29:52 <dminuoso> In principle you'd just have to implement Haskell with all the language extensions used in GHC, and reimplement the RTS behavior in all details right?
20:30:23 <Lycurgus> why couldn't it be recompiled?
20:30:35 <dminuoso> GHC is written in Haskell.
20:31:00 <dminuoso> With all binary installations (and archives!) of a Haskell compiler removed, you couldn't bootstrap it.
20:31:28 <Lycurgus> so you meant not just the final binary but anything between sources and the binary
20:31:32 <dminuoso> Right.
20:31:42 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
20:31:46 × burnsidesLlama quits (~burnsides@dhcp168-020.wadham.ox.ac.uk) (Ping timeout: 244 seconds)
20:32:13 hgolden joins (~hgolden2@cpe-172-114-84-61.socal.res.rr.com)
20:33:18 <Lycurgus> you could still prolly do somekina translation on the sources with a bootstrapping rube goldberg kinda thing
20:33:52 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
20:35:25 <Lycurgus> that autopoetic thing began with smalltalk sfaict
20:35:46 <Lycurgus> but prolly goes back further
20:36:21 <Lycurgus> to lisp i imagine
20:36:21 <dsal> You can experience a lot of that pain by just trying to port it to a new architecture.
20:36:52 <dminuoso> dsal: I dont have to implement a whole compiler for that, though.
20:37:10 <sclv> yeah i was going to say that if you have unregisterized sources you can _in theory_ compile them directly with gcc https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/codegens.html?highlight=unregisterised#c-code-generator-fvia-c
20:37:12 <Lycurgus> really they claim it's facilitated
20:37:15 <dminuoso> For porting to a new architecture might start with Core
20:37:19 <Lycurgus> which means eased
20:37:26 <dsal> dminuoso: Yeah, I guess the low-level stuff is relatively smaller.
20:38:16 <dminuoso> I'm guessing adding a new architecture faces three primary problems: RTS, code generation and linkage.
20:38:24 Lycurgus was pleased to see a few minutes ago that a stack built binary ran ok copied to another machine
20:39:01 <dminuoso> sclv: That's just for code generation though. The moment we're generating code already, most of the hard work is done.
20:39:14 <sclv> i don't know what you mean
20:39:32 <sclv> i mean that you can get a "working" ghc by building from unregisterized c
20:39:33 <sclv> directly
20:39:40 <sclv> and that in turn can compile into unregiserized c
20:39:55 <sclv> or any supported arch
20:40:02 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds)
20:40:07 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds)
20:40:33 <dminuoso> Ah. Im just saying, this wouldn't help in case of the global Haskell Removal Incident
20:40:49 <sclv> assuming you already had unregisterized sources it would
20:41:12 <sclv> you could just throw those sources at gcc
20:41:16 Lycurgus .oO( somebody's got too much time on their hands)
20:41:47 lavaman joins (~lavaman@98.38.249.169)
20:41:56 ec_ joins (~ec@gateway/tor-sasl/ec)
20:42:35 <dminuoso> I guess it just fascinates me, how much technology requires itself for bootstrapping. Let's say we didn't have unregistered sources for GHC.
20:42:35 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
20:43:01 <kaol> Hugs is implemented in C, I suppose it could bootstrap an old enough GHC.
20:43:12 <dminuoso> kaol: I explicitly even named Hugs!
20:43:21 <janus> haskell is gods own programming langauge, god will make sure haskell emerges from nature again
20:43:26 <dminuoso> The tapeworm will destroy Hugs as well.
20:43:48 <dminuoso> (It's quite a destructive and evil tapeworm)
20:44:36 <dminuoso> The thought that sparked all of this was wondering how could I ever actually trust my compiler.
20:45:00 <dminuoso> So kaol might actually have supplied a sufficient answer for that.
20:45:50 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
20:45:53 <dminuoso> I can only reasonably trust a GHC binary to be free of evil modifications if I built it myself - but I can't build GHC without GHC -
20:46:09 <dsal> ...from spec
20:46:32 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
20:48:07 × ubert quits (~Thunderbi@91.141.71.52.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
20:49:55 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
20:51:17 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
20:51:17 Lord_of_Life_ is now known as Lord_of_Life
20:52:43 <monochrom> May I exploit a loop hole in your question? (Haha the irony.)
20:53:25 <monochrom> It may be viable to take surviving gopher and miranda compilers to restart GHC.
20:53:43 <monochrom> Your tapeworm passed over them, no? :)
20:54:00 <monochrom> err s/gopher/gofer/
20:54:41 <monochrom> (Let's leave gopher for some other day when you propose "if a tapeworm destroys all web browsers and web servers"... >:) )
20:55:23 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
20:56:34 <monochrom> And if gofer and miranda were wiped out too, there would still be SML.
20:56:59 <monochrom> And if SML were wiped out too, there would still be Lisp. (Early *ML compilers were written in Lisp.)
20:57:21 × SystemFFan quits (~SystemFFa@188.70.6.7) (Remote host closed the connection)
20:57:26 <dminuoso> monochrom: Nice pun.
20:57:51 <dminuoso> If a tapeworm destroys all web browsers the world will be a better place.
20:58:01 <dminuoso> I wouldn't want anything to be restored after that.
20:58:10 SystemFFan joins (~SystemFFa@188.70.6.7)
20:58:28 <dminuoso> But it's interesting, I really hadn't considered gofer and miranda.
20:58:31 <monochrom> :(
20:59:19 <dminuoso> Can we even be sure that all GHCs arent infested with evil modifications already?
20:59:25 <monochrom> The web has a good part, I enjoy the good part very much. Hyperlinking was a great invention. Much better than "[1]" and requiring the reader to scroll to the bottom for [1].
20:59:37 <kaol> NPM sure tries it best to destroy itself periodically.
20:59:44 <dminuoso> I mean if say Ben Gamaris machine was compromised, and he produced evil binaries that were then used to bootstrap other GHCs..
21:00:00 <dminuoso> That seems like a type of supply chain attack to be almost impossbile to get out of
21:00:13 <Lycurgus> how do you distinguish evil modifications from the next new breaking change?
21:00:43 <davean> dminuoso: you mean the trusting trust attack?
21:00:49 <dminuoso> monochrom: hyperlinking was a terrible invention since most webserver hosters break the principle idea of persistent links.
21:00:52 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds)
21:00:59 <davean> dminuoso: you build GHC via-c, boot that from a minimal compiler, and walk forward recompiling
21:01:07 <monochrom> Yeah Dennis Ritchie's Turing Award lecture paints a basically bleak picture about this. (Except s/Haskell/C/.) It's very hard to fix.
21:01:17 <dminuoso> davean: via-c using what software?
21:01:40 <davean> dminuoso: old GHC, you save one - there are saved ones I believe
21:01:47 <davean> but you can also audit the C (if you're insane)
21:01:52 acidjnk_new joins (~acidjnk@p200300d0c720300659598fb61e40d514.dip0.t-ipconnect.de)
21:02:02 <dminuoso> Ill have to read Dennis Ritcies lecture on that.
21:02:14 <dminuoso> And yeah, it seems trusting trust is what Im chasing.
21:02:33 <dminuoso> davean: Of course that's assuming that that old GHC wasnt evil already.
21:02:39 <davean> dminuoso: doesn't matter
21:02:43 <davean> if you audit the C
21:02:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
21:03:03 <davean> we can step forward to a C compile from a few machine code bytes
21:03:17 <davean> Its something like 200 bytes you have to trust
21:03:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
21:03:27 <davean> Again, its a fuckton of work
21:03:48 <davean> but you can boot the world from a few bytes of machine code, if you trust the machine
21:03:48 johnw joins (~johnw@2600:1700:cf00:db0:ddb1:e5fb:471:495e)
21:04:32 <dminuoso> I've already silently accepted that I have to trust my machine of hardware I cant possibly inspect, with firmware I cant possibly inspect, running microcode I cant possibly inspect on a CPU I cant possibly inspect..
21:05:10 superbil joins (~superbil@1-34-176-171.HINET-IP.hinet.net)
21:05:50 <monochrom> The PDP-11 is pretty reasonable to trust, without all those bells and whistles about CPU having its own OS etc.
21:06:42 <davean> dminuoso: https://github.com/oriansj/stage0
21:08:08 <davean> dminuoso: anyway, you CAN do this walk
21:10:28 <dminuoso> davean: That's an interesting bootstrap project
21:10:52 deejaytee joins (~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net)
21:11:07 × kenran quits (~kenran@200116b82b07b8005c98d0a77c3f6d41.dip.versatel-1u1.de) (Quit: WeeChat info:version)
21:11:56 <davean> dminuoso: on power you can do a little better and inspect the firmware?
21:12:14 <davean> Its a hard problem, but not an unsolvable one
21:13:22 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds)
21:13:39 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
21:13:48 <dminuoso> davean: bootstrapping hardware is much more difficult, though.
21:13:52 × michalz quits (~michalz@185.246.204.55) (Remote host closed the connection)
21:15:02 <dminuoso> But I guess FPGAs would be a good starter
21:15:41 <dminuoso> Not entirely fool proof, but an evil modification inside an FPGA to affect unknown FPGA code that simulates say power
21:15:47 <dminuoso> Seems much more unrealistic
21:16:32 <dminuoso> All of this dampens my mood :(
21:17:12 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
21:18:10 <davean> dminuoso: I mean you can buy a machine which you can compile your own firmware for in POWER form today
21:18:18 <davean> That doesn't check the circutes mind you
21:21:42 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 245 seconds)
21:22:15 ec_ joins (~ec@gateway/tor-sasl/ec)
21:22:56 fendor joins (~fendor@91.141.68.147.wireless.dyn.drei.com)
21:24:31 wroathe joins (~wroathe@96-88-30-181-static.hfc.comcastbusiness.net)
21:24:31 × wroathe quits (~wroathe@96-88-30-181-static.hfc.comcastbusiness.net) (Changing host)
21:24:31 wroathe joins (~wroathe@user/wroathe)
21:24:47 lavaman joins (~lavaman@98.38.249.169)
21:29:07 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 244 seconds)
21:30:27 × azeem quits (~azeem@62.19.37.175) (Ping timeout: 245 seconds)
21:30:33 × max22- quits (~maxime@2a01cb0883359800f554d7694bd7e6d3.ipv6.abo.wanadoo.fr) (Quit: Leaving)
21:30:48 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:37:28 × BestSteve quits (~beststeve@220-135-3-239.HINET-IP.hinet.net) (Quit: WeeChat 3.1)
21:40:56 <tdammers> realistically, the only proper solution is a cabin in Siberia with a flock of goats
21:42:10 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:43:08 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
21:45:57 <maerwald> hmm, goat cheese
21:47:31 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
21:50:16 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
21:50:34 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
21:50:46 <hpc> a flock of goats?
21:55:42 × Everything quits (~Everythin@37.115.210.35) (Quit: leaving)
22:00:43 <meejah> _should_ be "annoyance" but that's for ravens
22:02:42 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
22:03:36 × qwedfg quits (~qwedfg@user/qwedfg) (Quit: ZNC - https://znc.in)
22:04:27 qwedfg joins (~qwedfg@user/qwedfg)
22:07:46 ec_ joins (~ec@gateway/tor-sasl/ec)
22:08:18 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3) (Remote host closed the connection)
22:09:12 desantra joins (~skykanin@user/skykanin)
22:09:37 BestSteve joins (~beststeve@220-135-3-239.HINET-IP.hinet.net)
22:14:34 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:76:2b00:7f15:65d3)
22:27:55 son0p joins (~ff@181.136.122.143)
22:31:16 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
22:32:55 thyriaen joins (~thyriaen@x4db75db3.dyn.telefonica.de)
22:33:15 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
22:34:55 <tdammers> herd?
22:34:57 <tdammers> pack?
22:35:01 <tdammers> school?
22:35:03 <tdammers> idk
22:36:38 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
22:37:54 <SrPx> LPT: when implementing a linear λ-calculus, go for name-based substitutions instead of bruijn indices or levels. That's the most efficient solution, because, as long as all variable names are unique, there can't be variable capture, and you avoid having expensive shifting passes.
22:38:22 <hpc> a gaggle of goats
22:40:29 <hpc> SrPx: added bonus, you can use the names from the code itself and it's easier to inspect the output
22:40:37 × qwedfg quits (~qwedfg@user/qwedfg) (Read error: Connection reset by peer)
22:40:49 <SrPx> yep
22:41:34 <hpc> iirc there's an esolang that's just lambda calculus with de bruijn indices
22:41:46 <hpc> not even anything special on top of that
22:42:37 qwedfg joins (~qwedfg@user/qwedfg)
22:48:16 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
22:50:14 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 244 seconds)
22:50:31 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
22:55:30 bradyt joins (~bradyt@user/bradyt)
22:55:53 <bradyt> can i generate C code from Haskell, to access via another language's FFI?
22:56:36 <bradyt> like this structure? https://github.com/dart-lang/samples/tree/master/ffi/structs/structs_library
22:57:57 <pavonia> C code or object code?
22:58:11 <hpc> i assume the goal is to call dart code from haskell code?
22:58:16 <monochrom> Not sure what that URL is trying to exemplify.
22:58:33 <bradyt> i think eventually the Dart code calls .so or .dylib
22:58:56 <bradyt> the code in ../structs.dart calls the C library files
22:59:16 <Lycurgus> did you see my response in #taskwarrior?
22:59:35 <monochrom> There are programs like hsc2hs and c2hs that help bridge between C structs and Haskell types.
22:59:55 <bradyt> Lycurgus: oh, i wasn't sure if that implies it can /output/ C code
23:00:07 × acidjnk_new quits (~acidjnk@p200300d0c720300659598fb61e40d514.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
23:00:35 <Lycurgus> yeah those (the ones monochrom just mentioned) where the pkgs whose names escaped me when i referred to ffi
23:00:38 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
23:00:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:00:44 <bradyt> like, can i write Haskell libraries, and generate C libraries
23:00:58 <Lycurgus> libs is libs
23:01:00 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
23:01:10 <Lycurgus> it's all binary when i comes down it
23:01:36 <monochrom> Not sure why you don't accept "asm code *.so files callable from C"
23:01:39 <Lycurgus> the source language becomes irrelevant
23:01:53 Erutuon joins (~Erutuon@user/erutuon)
23:02:03 <bradyt> i haven't checked them out, but "c2hs" i was just assuming it was unidirectional
23:02:31 <monochrom> Although, in practice, for now, making a *.so from GHC or cabal-install isn't entirely seamless either.
23:03:27 <Lycurgus> it looks like stack builds a monolithic exe static binding the libs
23:04:38 <monochrom> Oh yeah this is where you learn the lesson that meaningful names are misleading names.
23:04:46 × fendor quits (~fendor@91.141.68.147.wireless.dyn.drei.com) (Read error: Connection reset by peer)
23:04:56 jpds joins (~jpds@gateway/tor-sasl/jpds)
23:09:40 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
23:11:27 <bradyt> okay, i will keep working at some sort of minimal example. someone said chicken scheme could do it, but that hasn't been sufficient motivation yet.
23:11:39 <bradyt> multitasking, in and out, sorry
23:12:27 × NinjaTrappeur quits (~ninja@user/ninjatrappeur) (Ping timeout: 240 seconds)
23:13:22 × deejaytee quits (~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net) (Ping timeout: 245 seconds)
23:16:04 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
23:17:03 <sm> messing around with haskell foundation finance reports: https://github.com/simonmichael/haskell-finance
23:23:27 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 245 seconds)
23:23:59 renzhi joins (~xp@2607:fa49:6500:3d00::d986)
23:27:35 hyiltiz joins (~quassel@31.220.5.250)
23:33:04 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:33:04 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
23:33:04 wroathe joins (~wroathe@user/wroathe)
23:34:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
23:34:27 × wroathe quits (~wroathe@user/wroathe) (Client Quit)
23:36:19 fryguybob joins (~fryguybob@cpe-74-65-31-113.rochester.res.rr.com)
23:36:43 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:36:43 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
23:36:43 wroathe joins (~wroathe@user/wroathe)
23:42:25 × Gurkenglas quits (~Gurkengla@dslb-088-075-022-191.088.075.pools.vodafone-ip.de) (Ping timeout: 244 seconds)
23:45:51 hannessteffenhag joins (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de)
23:45:55 lavaman joins (~lavaman@98.38.249.169)
23:48:39 alx741 joins (~alx741@186.178.109.154)
23:49:46 <glguy> sm: Interesting. I've already learned about ==*; I didn't know about the subaccount inclusive assertions
23:49:54 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Remote host closed the connection)
23:50:08 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
23:50:10 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
23:50:34 × hannessteffenhag quits (~hannesste@ip4d14ffee.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
23:50:42 <sm> glguy: yup, that's the *
23:50:49 <glguy> The first initial fundraising transaction incorporates everything into one and loses the connection that the last two postings are grouped and expected to balance to 0 in particular. That usually results in me wanting to split the transaction up
23:51:38 <glguy> This seems to mix assets being earmarked with how assests are held. assets:general and assets:ghc
23:51:59 <glguy> I run into this with my use where I have money *in* checking but *for* a particular person
23:52:39 <glguy> (but I grant that that's out of scope for this document)
23:52:39 <sm> I agree with both points, to make this a little more realistic it could be assets:checking:ghc, say
23:53:43 Hydrazer joins (~Hydrazer@S010684c9b26eee6d.cg.shawcable.net)
23:54:34 × oxide quits (~lambda@user/oxide) (Ping timeout: 252 seconds)
23:55:07 <sm> could also use [ ] to enforce those two postings balancing
23:55:20 oxide joins (~lambda@user/oxide)
23:55:28 <glguy> oh?, what would that look like?
23:56:23 <Hydrazer> does anyone know of a shorter program that doesn't throw any errors https://paste.tomsmeding.com/4eDOmAZQ
23:56:46 <sm> glguy, like this:
23:56:49 sm sent a code block: https://libera.ems.host/_matrix/media/r0/download/libera.chat/23a867063035b7f7b1eb8bc687eab59f5d04565b
23:57:13 <glguy> Does that make the bottom two postings less "real"?
23:57:14 <sm> ("bracketed virtual postings", bit of a gimmick)
23:57:41 <sm> it makes them filterable out by the -R/--real flag yes, otherwise they're just as good as a regular posting
23:57:56 <glguy> Are they checked as balancing because they are [] and not ()?
23:58:03 <sm> exactly
23:59:11 <sm> probably just a separate transaction is better

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