Home liberachat/#haskell: Logs Calendar

Logs on 2021-10-20 (liberachat/#haskell)

00:01:26 <shapr> dsal: sounds like ghc 9 is not ready on M1 mac?
00:01:41 <dsal> Yeah, didn't go well in my attempt.
00:02:14 <shapr> so, ghc 8.10.7 on M1 mac, as long as you're using a newer version of networking if stack is involved
00:02:36 <shapr> but not yet ghc 9 on M1 mac
00:05:40 <dsal> Yeah, I've not had any problem with 8.10.7
00:06:12 <dsal> Other than https://github.com/haskell/network/pull/510
00:07:14 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 258 seconds)
00:08:25 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
00:10:13 <geekosaur> my u7nderstanding is 9.0.1 if it has any support at all is badly broken, and you need a newer 9.2 than the existing prerelease to get a working one
00:10:38 <geekosaur> 8.10.7 aside from libs that need updates works, but goes via llvm instead of native code
00:11:02 <shapr> geekosaur: thanks for the info
00:11:36 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:11:36 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
00:11:36 wroathe joins (~wroathe@user/wroathe)
00:11:41 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
00:12:06 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
00:12:35 <geekosaur> they had a lot of trouble getting the new sized stuff working, since apple's aarch64 abi requires things be passed as their actual sizes and not "rounded up" to a word like standard aarch64 or indeed most other abis
00:12:42 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:12:59 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 264 seconds)
00:13:35 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds)
00:13:41 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
00:14:17 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
00:14:59 Lord_of_Life_ is now known as Lord_of_Life
00:15:38 × emf quits (~emf@2620:10d:c090:400::5:c0de) (Quit: emf)
00:16:14 <dsal> Oh weird.
00:23:20 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 258 seconds)
00:23:31 × alx741 quits (~alx741@186.178.109.50) (Quit: alx741)
00:24:00 MQ-17J joins (~MQ-17J@8.21.10.23)
00:24:11 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
00:25:13 alx741 joins (~alx741@186.178.109.50)
00:25:43 lavaman joins (~lavaman@98.38.249.169)
00:28:49 × sprout quits (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae) (Ping timeout: 252 seconds)
00:30:10 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
00:30:59 × MQ-17J quits (~MQ-17J@8.21.10.23) (Ping timeout: 264 seconds)
00:33:54 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
00:33:59 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 264 seconds)
00:40:39 fluffyballoon joins (~user@131.93.208.196)
00:44:09 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:47:55 theproffesor joins (~theproffe@2601:282:847f:8010::be7d)
00:47:55 × theproffesor quits (~theproffe@2601:282:847f:8010::be7d) (Changing host)
00:47:55 theproffesor joins (~theproffe@user/theproffesor)
00:49:25 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
00:53:47 × ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 265 seconds)
01:06:16 × acidjnk_new quits (~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
01:06:50 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 265 seconds)
01:06:55 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
01:08:44 alzgh joins (~alzgh@user/alzgh)
01:09:51 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
01:10:06 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 258 seconds)
01:10:53 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:11:54 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:59 Guest372 joins (~xxx@47.245.54.240)
01:12:57 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
01:13:01 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:13:06 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
01:14:11 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 264 seconds)
01:14:28 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
01:14:57 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
01:17:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
01:21:30 × segfaultfizzbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 260 seconds)
01:22:26 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 260 seconds)
01:22:43 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
01:23:04 k60 joins (~k60@broadband-95-84-168-218.ip.moscow.rt.ru)
01:26:32 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:26:32 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:26:32 wroathe joins (~wroathe@user/wroathe)
01:27:12 × mmhat quits (~mmh@55d45bcb.access.ecotel.net) (Quit: WeeChat 3.3)
01:28:13 peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi)
01:28:14 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
01:28:33 gentauro joins (~gentauro@user/gentauro)
01:30:50 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
01:30:56 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 245 seconds)
01:31:13 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
01:35:09 × Cajun quits (~Cajun@user/cajun) (Quit: Client closed)
01:37:37 × jespada quits (~jespada@2803:9800:9842:7a62:5d33:6404:2aef:9813) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:38:34 slack1256 joins (~slack1256@45.4.2.52)
01:45:53 Hima joins (~Hima_Bind@49.204.226.177)
01:50:34 × _xor quits (~xor@72.49.199.147) (Read error: Connection reset by peer)
01:52:23 _xor joins (~xor@72.49.199.147)
01:52:37 <Hima> hi there! I am quiet new here, please let me know if do something against code of conduct, I just want to know if anyone know how can i join #haskell-gsoc channel which is on freenode? I think it's no more on freenode.
01:53:21 <Axman6> if it's anywhere, it should be here on libera - have you tried joining #freenode-gsoc?
01:53:30 <Axman6> uh, #haskell-gsoc
01:53:37 <Hima> no i will join rn
01:53:46 <Hima> oh yes i did
01:53:57 <Axman6> looks like it's not a thing
01:54:05 <Hima> there's no one, and i am the op so i think it's no more the official room
01:54:21 <Axman6> yeah it was created by you joining it (I did the same thing)
01:54:41 × xff0x quits (~xff0x@2001:1a81:5338:8400:382c:44d1:e85b:95f9) (Ping timeout: 245 seconds)
01:55:19 <Hima> haha, but they mentioned to join "There is also a relatively active IRC channel called #haskell-gsoc on freenode where you can ask for help."
01:55:37 <Axman6> that was in the before times
01:55:52 <Hima> by the way is this Haskell's official server?
01:56:09 <Hima> yes, axman6 got it.
01:56:20 <Axman6> well, it's where the freenode channel moved, so I guess so...
01:56:37 xff0x joins (~xff0x@2001:1a81:5213:b200:9d6e:5b31:ca1b:5892)
01:56:48 <Axman6> I don't know who deems something official
01:57:02 <Hima> okay
01:57:23 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 264 seconds)
02:03:25 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
02:05:03 Hima parts (~Hima_Bind@49.204.226.177) ()
02:11:41 burnsidesLlama joins (~burnsides@dhcp168-039.wadham.ox.ac.uk)
02:12:12 × fluffyballoon quits (~user@131.93.208.196) (Ping timeout: 258 seconds)
02:12:37 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
02:17:02 × burnsidesLlama quits (~burnsides@dhcp168-039.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
02:17:30 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 260 seconds)
02:20:30 × k60 quits (~k60@broadband-95-84-168-218.ip.moscow.rt.ru) (Quit: k60)
02:20:38 × slack1256 quits (~slack1256@45.4.2.52) (Ping timeout: 258 seconds)
02:20:46 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
02:27:33 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 265 seconds)
02:35:21 <sm> yes, it's the official IRC channel. there's also a matrix channel, slack channels, etc.
02:36:03 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
02:37:33 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:43:01 × td_ quits (~td@muedsl-82-207-238-089.citykom.de) (Ping timeout: 265 seconds)
02:43:05 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
02:43:58 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:44:24 td_ joins (~td@94.134.91.144)
02:45:58 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds)
02:47:54 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
02:50:03 <DigitalKiwi> in my (github sponsors (1/10x dev gimmick)) contract it says i get 10k/mo for being in the channel but they haven't paid :( been here >10 years so back pay should be substantial if they do!
02:50:29 <DigitalKiwi> https://github.com/sponsors/Kiwi/
02:51:51 <DigitalKiwi> in haskell foundation slack too should be living large any day now!
02:52:10 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
02:58:03 trillp joins (~trillp@69.233.98.238)
02:58:58 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 258 seconds)
03:02:31 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
03:03:40 × lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
03:05:25 ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
03:07:24 × sprout quits (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae) (Ping timeout: 258 seconds)
03:07:50 × alx741 quits (~alx741@186.178.109.50) (Quit: alx741)
03:10:50 pragma- parts (~chaos@user/pragmatic-chaos) (Bye!)
03:13:32 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
03:13:46 lavaman joins (~lavaman@98.38.249.169)
03:14:14 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:18:21 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
03:18:23 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
03:19:10 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
03:23:43 × sprout quits (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae) (Ping timeout: 252 seconds)
03:27:32 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
03:33:07 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
03:35:30 falafel joins (~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com)
03:36:42 stengah joins (~stengah@user/stengah)
03:39:13 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
03:48:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
03:54:23 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
04:03:22 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
04:08:01 × sprout quits (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae) (Ping timeout: 245 seconds)
04:14:33 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
04:14:43 × monochrom quits (trebla@216.138.220.146) (Quit: NO CARRIER)
04:15:05 <conjunctive> Hi, does anyone have an example on how to parse a 32-bit float in BE from a ByteString with Attoparsec?
04:17:11 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:17:11 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
04:17:11 wroathe joins (~wroathe@user/wroathe)
04:17:52 <pavonia> Workaround: Parse 4 bytes and feed the result to the appropriate Data.Binary.Get function
04:18:56 × fawful quits (~guy@c-76-104-217-93.hsd1.wa.comcast.net) (Quit: WeeChat 3.2)
04:19:11 <pavonia> conjunctive: Or even better, use https://hackage.haskell.org/package/attoparsec-binary-0.2/docs/Data-Attoparsec-Binary.html
04:23:58 × boxscape_ quits (~boxscape_@p54a3581e.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
04:24:58 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
04:26:43 <conjunctive> Hmm I don't see any float-specific functions in attoparsec-binary. I know there's a way to use scientific and convert to a float afterwards, but was hoping to find something more direct.
04:26:56 × [Kalisto] quits (~nico@user/kalisto/x-8968079) (Ping timeout: 265 seconds)
04:27:19 mbuf joins (~Shakthi@122.178.207.237)
04:29:32 monochrom joins (trebla@216.138.220.146)
04:30:59 × falafel quits (~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) (Ping timeout: 264 seconds)
04:33:14 [Kalisto] joins (~nico@user/kalisto/x-8968079)
04:33:25 coot joins (~coot@37.30.48.91.nat.umts.dynamic.t-mobile.pl)
04:38:19 falafel joins (~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com)
04:38:54 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
04:39:58 trillp parts (~trillp@69.233.98.238) ()
04:44:01 × sprout quits (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae) (Ping timeout: 252 seconds)
04:45:45 <pavonia> Oh floats, sorry
04:46:39 <conjunctive> no worries! appreciate the suggestion :)
04:47:37 <pavonia> Looks like Data.Binary just does a casting from Int to Float internally with the read bytes: https://hackage.haskell.org/package/binary-0.10.0.0/docs/src/Data.Binary.FloatCast.html#wordToFloat
04:47:56 <pavonia> So it should be easy to adapt this for attoparsec
04:54:23 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
05:00:33 <dsal> Man. Amazonka changed a lot.
05:00:43 <dsal> The changelog doesn't do it justice.
05:03:16 NataSa23F joins (~KELEBEK@188.119.58.106)
05:05:05 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 258 seconds)
05:08:38 aa joins (~douglasco@200.146.85.128.static.gvt.net.br)
05:08:53 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
05:09:25 × NataSa23F quits (~KELEBEK@188.119.58.106) (K-Lined)
05:10:40 ChaiTRex joins (~ChaiTRex@user/chaitrex)
05:11:08 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:11:08 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
05:11:08 wroathe joins (~wroathe@user/wroathe)
05:11:34 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
05:12:23 × douglascorrea_io quits (~douglasco@200.146.85.128.static.gvt.net.br) (Ping timeout: 264 seconds)
05:14:17 × jlamothe quits (~jlamothe@198.251.61.229) (Ping timeout: 258 seconds)
05:15:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
05:15:49 × sprout quits (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae) (Ping timeout: 258 seconds)
05:17:35 [Kalisto]_ joins (~nico@user/kalisto/x-8968079)
05:17:38 × [Kalisto] quits (~nico@user/kalisto/x-8968079) (Ping timeout: 260 seconds)
05:17:55 Hecate is the proud parent of a newborn library https://github.com/Kleidukos/display/
05:22:19 Moyst_ joins (~moyst@user/moyst)
05:24:10 × peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Ping timeout: 260 seconds)
05:24:43 × Moyst quits (~moyst@user/moyst) (Ping timeout: 252 seconds)
05:24:43 <awpr> nice, that sounds like the perfect complement to `portray`
05:25:10 <awpr> user-facing, pretty, and not Haskell syntax, vs. developer-facing, pretty, and Haskell syntax
05:32:12 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:32:12 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
05:32:12 wroathe joins (~wroathe@user/wroathe)
05:36:54 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 258 seconds)
05:37:50 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:38:10 × remexre quits (~nathan@user/remexre) (Quit: WeeChat 3.1)
05:38:19 remexre joins (~nathan@207-153-38-50.fttp.usinternet.com)
05:39:06 × remexre quits (~nathan@207-153-38-50.fttp.usinternet.com) (Client Quit)
05:39:23 remexre joins (~remexre@user/remexre)
05:40:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:43:02 Cajun joins (~Cajun@user/cajun)
05:45:10 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
05:49:17 lavaman joins (~lavaman@98.38.249.169)
05:54:02 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
05:55:48 mei joins (~mei@user/mei)
06:00:52 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
06:01:20 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
06:02:40 azimut joins (~azimut@gateway/tor-sasl/azimut)
06:09:58 fendor joins (~fendor@91.141.32.154.wireless.dyn.drei.com)
06:13:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:13:37 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:18:06 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
06:21:46 × falafel quits (~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) (Ping timeout: 245 seconds)
06:22:40 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:25:13 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
06:26:28 stiell joins (~stiell@gateway/tor-sasl/stiell)
06:28:58 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
06:29:13 azimut joins (~azimut@gateway/tor-sasl/azimut)
06:32:19 michalz joins (~michalz@185.246.204.93)
06:36:27 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
06:43:54 lortabac joins (~lortabac@2a01:e0a:541:b8f0:8daf:444e:9c84:5148)
06:47:22 rkrishnan joins (~user@2402:e280:215c:2cd:d6b1:e062:567:7a9c)
06:49:39 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
06:51:46 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 245 seconds)
06:52:45 gehmehgeh joins (~user@user/gehmehgeh)
06:57:20 × ircbrowse_tom quits (~ircbrowse@2a01:4f8:1c1c:9319::1) (ZNC 1.7.5+deb4 - https://znc.in)
06:57:34 ircbrowse_tom_ joins (~ircbrowse@static.162.49.55.162.clients.your-server.de)
06:57:36 Server sets mode +Cnt
06:57:56 amir_ joins (sid22336@user/amir)
06:58:02 ikex1 joins (ash@user/ikex)
06:58:06 davl joins (~davl@207.154.228.18)
06:58:20 amir_ is now known as Guest6318
06:58:22 × mei quits (~mei@user/mei) (Read error: Connection reset by peer)
06:58:30 codolio joins (~dolio@130.44.130.54)
06:59:02 mei joins (~mei@user/mei)
06:59:15 jonathanx joins (~jonathan@178.174.176.109)
06:59:34 piele_ joins (~piele@tbonesteak.creativeserver.net)
07:00:10 platz_ joins (~platz@40.122.118.113)
07:00:12 Tordek_ joins (tordek@triton.blinkenshell.org)
07:00:17 opqdonut_ joins (opqdonut@pseudo.fixme.fi)
07:00:22 some02_ joins (~cat@h-98-128-128-173.A351.priv.bahnhof.se)
07:00:34 ski_ joins (~ski@remote12.chalmers.se)
07:00:39 Rembane_ joins (~Rembane@li346-36.members.linode.com)
07:00:42 nckx_ joins (~nckx@tobias.gr)
07:01:07 urdh_ joins (~urdh@user/urdh)
07:03:05 sm[i]_ joins (~user@li229-222.members.linode.com)
07:05:19 acowley_ joins (~acowley@c-68-83-22-43.hsd1.nj.comcast.net)
07:07:59 × brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving)
07:09:03 × coot quits (~coot@37.30.48.91.nat.umts.dynamic.t-mobile.pl) (Read error: Connection reset by peer)
07:09:50 × ikex quits (~ash@user/ikex) (Ping timeout: 260 seconds)
07:09:50 × Franciman quits (~Franciman@mx1.fracta.dev) (Ping timeout: 260 seconds)
07:09:50 × davl_ quits (~davl@207.154.228.18) (Ping timeout: 260 seconds)
07:09:50 × ircbrowse_tom quits (~ircbrowse@2a01:4f8:1c1c:9319::1) (Ping timeout: 260 seconds)
07:09:50 × kosmikus[m] quits (~andresloe@2001:470:69fc:105::95d) (Ping timeout: 260 seconds)
07:09:50 × monadfritz[m] quits (~ahdytmatr@2001:470:69fc:105::e1f1) (Ping timeout: 260 seconds)
07:09:50 × stoicswe[m] quits (~deadlette@2001:470:69fc:105::d277) (Ping timeout: 260 seconds)
07:09:50 ikex1 is now known as ikex
07:09:50 × Orbstheorem quits (~orbstheor@2001:470:69fc:105::a56) (Ping timeout: 260 seconds)
07:09:50 × kevin[m]1 quits (~pnotequal@2001:470:69fc:105::a54) (Ping timeout: 260 seconds)
07:09:50 × schuelermine[m] quits (~schuelerm@user/schuelermine) (Ping timeout: 260 seconds)
07:09:50 × carmysilna quits (~brightly-@2001:470:69fc:105::2190) (Ping timeout: 260 seconds)
07:09:50 × dolio quits (~dolio@130.44.130.54) (Ping timeout: 260 seconds)
07:09:50 × amir quits (sid22336@user/amir) (Ping timeout: 260 seconds)
07:09:50 × jonrh quits (sid5185@ilkley.irccloud.com) (Ping timeout: 260 seconds)
07:09:51 × opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 260 seconds)
07:09:51 × Tordek quits (tordek@triton.blinkenshell.org) (Ping timeout: 260 seconds)
07:09:51 × some02 quits (~cat@h-98-128-128-173.A351.priv.bahnhof.se) (Ping timeout: 260 seconds)
07:09:51 × deni quits (~deni@mail.denibertovic.com) (Ping timeout: 260 seconds)
07:09:51 × Unhammer quits (~Unhammer@user/unhammer) (Ping timeout: 260 seconds)
07:09:51 × platz quits (~platz@user/platz) (Ping timeout: 260 seconds)
07:09:51 × nckx quits (~nckx@tobias.gr) (Ping timeout: 260 seconds)
07:09:51 × ski quits (~ski@remote12.chalmers.se) (Ping timeout: 260 seconds)
07:09:51 × acowley quits (~acowley@c-68-83-22-43.hsd1.nj.comcast.net) (Ping timeout: 260 seconds)
07:09:51 × oak- quits (~oakuniver@2001:470:69fc:105::fcd) (Ping timeout: 260 seconds)
07:09:51 × ixlun quits (~ixlun@2001:470:69fc:105::41b3) (Ping timeout: 260 seconds)
07:09:51 × moats quits (~oats@user/oats) (Ping timeout: 260 seconds)
07:09:51 × dextaa quits (~DV@user/dextaa) (Ping timeout: 260 seconds)
07:09:51 × piele quits (~piele@tbonesteak.creativeserver.net) (Ping timeout: 260 seconds)
07:09:51 × superbil quits (~superbil@1-34-176-171.hinet-ip.hinet.net) (Ping timeout: 260 seconds)
07:09:51 × urdh quits (~urdh@user/urdh) (Ping timeout: 260 seconds)
07:09:51 × sm[i] quits (~user@plaintextaccounting/sm) (Ping timeout: 260 seconds)
07:09:51 × Rembane quits (~Rembane@li346-36.members.linode.com) (Ping timeout: 260 seconds)
07:09:51 × niko quits (~niko@libera/staff/niko) (Ping timeout: 615 seconds)
07:09:51 Guest6318 is now known as amir
07:09:51 jonrh_ is now known as jonrh
07:09:51 dextaa3 is now known as dextaa
07:09:51 nckx_ is now known as nckx
07:09:51 urdh_ is now known as urdh
07:10:17 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
07:10:21 Franciman joins (~Franciman@mx1.fracta.dev)
07:10:42 ArctVaulMarsHMPJ joins (~pjetcetal@2.95.44.252)
07:10:50 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
07:10:52 × ArctVaulMarsHMPJ quits (~pjetcetal@2.95.44.252) (Read error: Connection reset by peer)
07:11:38 deni joins (~deni@mail.denibertovic.com)
07:11:45 niko joins (~niko@libera/staff/niko)
07:11:48 stoicswe[m] joins (~deadlette@2001:470:69fc:105::d277)
07:11:59 Unhammer joins (~Unhammer@user/unhammer)
07:12:02 deni is now known as Guest9608
07:12:03 ubert joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
07:12:21 × stengah quits (~stengah@user/stengah) (Ping timeout: 258 seconds)
07:12:43 superbil joins (~superbil@1-34-176-171.hinet-ip.hinet.net)
07:13:28 schuelermine[m] joins (~schuelerm@user/schuelermine)
07:13:32 Orbstheorem joins (~orbstheor@2001:470:69fc:105::a56)
07:13:52 kevin[m]1 joins (~pnotequal@2001:470:69fc:105::a54)
07:14:20 coot joins (~coot@37.30.48.91.nat.umts.dynamic.t-mobile.pl)
07:14:21 monadfritz[m] joins (~ahdytmatr@2001:470:69fc:105::e1f1)
07:15:02 ubert1 joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
07:15:50 kosmikus[m] joins (~andresloe@2001:470:69fc:105::95d)
07:15:54 carmysilna joins (~brightly-@2001:470:69fc:105::2190)
07:16:42 moats joins (~oats@user/oats)
07:17:03 oak- joins (~oakuniver@2001:470:69fc:105::fcd)
07:18:03 burnsidesLlama joins (~burnsides@dhcp168-039.wadham.ox.ac.uk)
07:18:11 ixlun joins (~ixlun@2001:470:69fc:105::41b3)
07:22:58 ArctVaulMarsHMPJ joins (~pjetcetal@2.95.44.252)
07:23:28 × ArctVaulMarsHMPJ quits (~pjetcetal@2.95.44.252) (Remote host closed the connection)
07:24:19 chele joins (~chele@user/chele)
07:26:49 sprout joins (~quassel@2a02:a467:ccd6:1:75c6:cb1e:9970:92ae)
07:30:29 <DigitalKiwi> Hecate: can you write kommissar with it
07:32:40 × o1lo01ol1o quits (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3) (Ping timeout: 258 seconds)
07:33:31 × natechan quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
07:36:22 o1lo01ol1o joins (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3)
07:37:55 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
07:39:03 cfricke joins (~cfricke@user/cfricke)
07:41:29 × o1lo01ol1o quits (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3) (Ping timeout: 258 seconds)
07:42:59 × renzhi quits (~xp@2607:fa49:6500:b100::6e7f) (Ping timeout: 264 seconds)
07:43:40 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 260 seconds)
07:46:09 <dminuoso> Axman6: So what do you want to know about our SDN compiler?
07:47:36 <dminuoso> It's nothing fancy. Very broadly you configure some edge port to be in some L3 or L2 domain in our DCIM/IPAM tool (netbox), and our haskell program takes the entire description, turns it into intermediate representations, does some graph things, validates certain properties, turns into vendor agnostic specification, which are turned into vendor specific configurations.
07:47:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:47:59 <dminuoso> All under the assumption that we have a semantic underlay
07:48:30 <dminuoso> And then we throw that into the entirety of our core network, run `ifreload -a`, and then go on with our coffee.
07:55:05 phma_ joins (~phma@host-67-44-209-75.hnremote.net)
07:56:30 o1lo01ol1o joins (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3)
07:57:15 × absence quits (torgeihe@hildring.pvv.ntnu.no) (Quit: Changing server)
07:57:35 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc) (Remote host closed the connection)
07:57:46 cfricke joins (~cfricke@user/cfricke)
07:58:10 absence joins (torgeihe@hildring.pvv.ntnu.no)
07:58:21 × absence quits (torgeihe@hildring.pvv.ntnu.no) (Client Quit)
07:58:44 × phma quits (~phma@host-67-44-209-75.hnremote.net) (Ping timeout: 258 seconds)
08:06:00 jlamothe joins (~jlamothe@198.251.61.229)
08:06:50 fef joins (~thedawn@user/thedawn)
08:09:17 hendursa1 joins (~weechat@user/hendursaga)
08:12:45 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
08:17:29 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
08:17:30 × burnsidesLlama quits (~burnsides@dhcp168-039.wadham.ox.ac.uk) (Remote host closed the connection)
08:17:54 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:23:21 <Franciman> do you know of any wiki written in haskell?
08:24:30 kayprish joins (~kayprish@46.240.130.158)
08:26:16 acidjnk_new joins (~acidjnk@p200300d0c703cb955960125781424a48.dip0.t-ipconnect.de)
08:26:56 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
08:28:52 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
08:34:03 × mei quits (~mei@user/mei) (Read error: Connection reset by peer)
08:35:10 × hnOsmium0001 quits (uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
08:38:17 × Teacup quits (~teacup@user/teacup) (Ping timeout: 265 seconds)
08:38:46 × coot quits (~coot@37.30.48.91.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
08:40:17 <dhouthoo> Franciman: gitit
08:40:38 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
08:41:02 <Franciman> dhouthoo: https://en.wikipedia.org/wiki/Gitit_(software) <- ?
08:41:43 <dhouthoo> yes
08:41:51 <Franciman> thanks
08:42:01 <Franciman> I freaking love the image of the dog with the freesbie
08:42:04 <Franciman> T.T
08:42:21 kuribas joins (~user@ptr-25vy0i7zawtky0bq46n.18120a2.ip6.access.telenet.be)
08:43:02 <kuribas> isn't there a point where you abolish the combinatory cleverness, and just write something slightly verbose, but easy to write?
08:43:25 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:44:06 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
08:44:33 Teacup joins (~teacup@user/teacup)
08:45:51 __monty__ joins (~toonn@user/toonn)
08:49:02 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
08:58:01 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc)
09:00:32 burnsidesLlama joins (~burnsides@dhcp168-039.wadham.ox.ac.uk)
09:00:34 × zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection)
09:02:31 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc) (Ping timeout: 252 seconds)
09:02:39 zaquest joins (~notzaques@5.128.210.178)
09:05:11 <kuribas> concise code can be elegant, but for production I sometimes just want it to work.
09:05:21 <kuribas> Even if there is a potentially much more clever solution.
09:06:50 phma joins (~phma@host-67-44-209-75.hnremote.net)
09:10:02 × acidjnk_new quits (~acidjnk@p200300d0c703cb955960125781424a48.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
09:10:02 × phma_ quits (~phma@host-67-44-209-75.hnremote.net) (Ping timeout: 260 seconds)
09:16:00 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:16:24 acidjnk_new joins (~acidjnk@p200300d0c703cb955960125781424a48.dip0.t-ipconnect.de)
09:20:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
09:20:48 × o1lo01ol1o quits (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3) (Remote host closed the connection)
09:21:24 o1lo01ol1o joins (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3)
09:21:36 stengah joins (~stengah@user/stengah)
09:25:56 × o1lo01ol1o quits (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3) (Ping timeout: 245 seconds)
09:26:28 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
09:26:52 azimut joins (~azimut@gateway/tor-sasl/azimut)
09:28:32 o1lo01ol1o joins (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3)
09:31:55 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:32:12 × o1lo01ol1o quits (~o1lo01ol1@2001:8a0:6d7a:df01:d1f9:60a1:52fb:92f3) (Remote host closed the connection)
09:35:04 some02_ parts (~cat@h-98-128-128-173.A351.priv.bahnhof.se) ()
09:36:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
09:39:43 <Inst> Can I ask a question about Haskell?
09:39:52 <Inst> How good is the Haskell library support?
09:44:28 sudden joins (~cat@user/sudden)
09:44:40 <kuribas> Do you mean if there are many libraries?
09:51:09 <Inst> I want to use Haskell as a general purpose language, i.e, do most of my programming in Haskell
09:51:33 <yushyin> https://github.com/Gabriel439/post-rfc/blob/main/sotu.md maybe this helps
09:51:34 <Inst> it'd have to beat C++ and Python / Javascript for general purpose programming, i.e, C++ gets picked up
09:51:52 <Inst> for performance, Javascript for web development
09:52:00 <Inst> Thanks
09:52:05 <kuribas> Inst: why would it?
09:52:39 <Inst> I just want to have a use case for Haskell
09:52:40 <maerwald> beating C++ and python ecosystem isn't what Haskell can offer
09:52:55 <kuribas> Inst: you use haskell because you want good performance and robustness.
09:53:38 <kuribas> Inst: neither C++ or Python give you robustness, and Python is only performant if you use C library bindings.
09:54:00 <maerwald> python can satisfy high-performance applications
09:54:21 <maerwald> kuribas: well, same goes for haskell
09:54:45 <Inst> I want to reasonably do most of my code in Haskell
09:54:52 <maerwald> e.g. I just switched from yaml (where the core is C) to HsYAML (pure haskell) and the performance got 10 times worse
09:55:00 <Inst> erm, be justified if I opt to be primarily a Haskell programmer
09:55:15 <troydm> trying to write a stack.yml file for an existing haskell project and I'm having trouble compiling it with issues like
09:55:26 <troydm> Cabal-simple_mPHDZzAJ_3.2.1.0_ghc-8.10.7: The program 'c2hs' version >=0.15 is
09:55:40 <kuribas> Inst: if it's for hobby, then haskell could be all you need.
09:55:45 <troydm> isn't c2hs part of ghc distribution in Haskell and should be added to PATH?
09:56:00 <Inst> kuribas: that's sort of the argument I'm making and getting lots of pushback on
09:56:14 <Inst> that Haskell is an ideal hobbyist / non-professional language
09:56:37 <kuribas> Inst: it's not ideal IMO. Python is better for hobbyists.
09:56:59 <Inst> except Python doesn't produce robust code except with extensive testing?
09:57:16 <kuribas> Which is usually not a priority for hobbyists.
09:57:40 <maerwald> troydm: no it isn't
09:57:49 <Inst> should it be a priority?
09:58:08 <maerwald> troydm: hsc2hs is
09:58:20 <lortabac> if it's a hobby, you can do whatever you want
09:58:21 <troydm> ./snapshots/x86_64-linux-tinfo6/a9e764900658a3a32616042d51034aed40b88e23187d2aa53933d7c0f2be2a09/8.10.7/bin/c2hs
09:58:29 <troydm> it's from .stack dir
09:58:31 <kuribas> Inst: by definition of "hobbyist", there isn't. You do what you want as long as you enjoy it.
09:58:33 <lortabac> just use whatever language you feel like using
09:58:37 <troydm> so program itself is installed
09:58:45 <maerwald> troydm: so?
09:58:55 <lortabac> I do all my hobby projects in Prolog, just because I can
09:59:01 <maerwald> c2hs is not part of ghc distribution
09:59:16 <maerwald> what stack does is something orthogonal
09:59:20 <Inst> also, a question
09:59:29 <Inst> how much faster is Haskell to develop in
09:59:33 <Inst> compared to other languages?
09:59:42 <maerwald> Inst: usually slower in the beginning
09:59:56 <kuribas> Inst: I'd say faster when you experienced, slower when you start out.
09:59:57 <troydm> maerwald: okey so how do I make it so it would be dependency and added to PATH during compilation?
10:00:10 <maerwald> troydm: add it to build-depends in your cabal file
10:00:32 <maerwald> https://cabal.readthedocs.io/en/latest/cabal-package.html?highlight=build-tool#pkg-field-build-tool-depends
10:00:34 <kuribas> Inst: also, it's only faster if you count testing and quality assurance. Often people get out programs quickly, which then are full of bugs.
10:00:58 <Inst> put another way, say a manager has the brainpower needed to get good at haskell
10:01:14 <maerwald> when all I do is *prototype*, then I don't have a difference of number in bugs, no matter wheter I use Haskell, python or rust
10:01:33 <maerwald> when I maintain a project for a longer period of time, then that number becomes different across languages
10:01:34 <Inst> does haskell have a use-case, i.e, if s/he wants the IT department to recycle his or her code
10:01:46 <Inst> it's less likely to be garbage that has to be completely reimplemented?
10:01:52 <troydm> what's the difference between hsc2hs and c2hs?
10:02:22 <troydm> I see that hsc2hs is listed as build-tools
10:02:35 <troydm> so it seems like it should actually work, but it's not
10:02:37 <maerwald> Inst: I don't understand the question
10:02:49 <kuribas> Inst: it forces you to think about program structure and state, so yes :)
10:02:55 <yushyin> troydm: http://blog.ezyang.com/2010/06/the-haskell-preprocessor-hierarchy/
10:03:19 <kuribas> Inst: as in, you either produce something that is well structured, or you give up in tears.
10:03:22 <Inst> maerwald: let's say someone is a hobbyist programmer, but they're working for a small organization that doesn't have development resources out the wazoo
10:03:28 <maerwald> Haskell doesn't solve your engineering problems if you have poor engineers
10:03:31 <troydm> yushyin: okey, this suddenly gotten weirdly complicated
10:03:51 <kuribas> maerwald: haskell doesn't solve any engineering problem.
10:04:04 <kuribas> It just provide tools and means to abstract your engineering problem.
10:04:16 <kuribas> It assumes you have solved the problem already.
10:04:30 <maerwald> invest in good engineers, then let them worry about language choice
10:04:45 <kuribas> With the abstractions you can structure it in a nice way that makes the business logic more clear.
10:05:07 <Inst> they end up producing the initial code for a project before IT takes over
10:05:36 <maerwald> Inst: write the code in the simplest possible language if non-programmers or devops have to take it over
10:05:37 <yushyin> troydm: It is not complicated, but gives a good overview. It is not a long read.
10:05:43 <Inst> i see
10:06:07 Guest2920 joins (~Guest29@net-93-151-133-175.cust.dsl.teletu.it)
10:06:07 <Inst> yeah, the problem with this use case is assuming the It department knows Haskell and can evaluate whether the code can be reused or if it has to be junked
10:06:20 <Inst> more likely it'll be junked because the IT department doesn't know Haskell and can't properly evaluate it
10:07:02 <maerwald> then it's a bad choice
10:10:13 <troydm> yushyin: thx, I think i've got it without reading entire article, but I'll read it later anyway when I'll have time
10:10:42 <kuribas> Inst: haskell is a hard sell unless several people are in on it.
10:11:34 <maerwald> if you introduce Haskell to a company you better stay there for a year at least... everything else is irresponsible, imo
10:12:06 <maerwald> not something you experiment and let others pick up
10:12:52 <maerwald> I did that with coconut once (a python dialect) and I'm confident they still hate me
10:13:51 <maerwald> well, that was because someone before me did that with me... rewrote something in Scala and then let the new joiner pick up the pieces
10:14:03 <maerwald> so I kept the tradition
10:14:11 <kuribas> maerwald: I am allowed to write haskell now "because it makes me happy".
10:14:25 <kuribas> maerwal: I'll probably need to rewrite it once it's done.
10:14:38 <kuribas> But fine be me :)
10:15:07 <Inst> well, thanks for entertaining the troll (me)
10:15:08 Inst sighs
10:15:16 <kuribas> I am just wondering how I can rewrite my nice batching effect in clojure.
10:15:19 <maerwald> when I'm working for someone, I don't write code for myself, so my first thought when doing anything is: "who comes after me?"
10:15:25 <kuribas> Inst: that didn't sound like trolling.
10:15:30 <Inst> the only good thing i can say is that the haskell materials i've been exposed to right now
10:15:42 <Inst> seem better written than the equivalent C++ material
10:16:13 <maerwald> and even in open source, I'm starting to shift away from writing code for myself, because that usually means I'm the only one maintaining anything
10:16:13 <kuribas> it's not such a great idea to introduce haskell in a company, unless the majority is enthousiastic.
10:16:50 <kuribas> Much better would be to teach them how to write clean java/JS/whatever.
10:17:00 <kuribas> Using the principles learned from haskell.
10:17:04 <yushyin> golang
10:18:29 <maerwald> Yeah, you can do great functional code in TypeScript
10:19:05 dut joins (~dut@user/dut)
10:19:18 <Inst> my shtick, kuribas, is trying to convince people that
10:19:22 <Inst> we should replace Python with Haskell
10:19:27 <Inst> for hobbyists
10:19:39 <maerwald> why convince anyone?
10:19:45 <Inst> to grow the Haskell community
10:20:18 <maerwald> Inst: does your employer pay you for that?
10:20:52 <LiaoTao> Inst, I don't think it's that easy to make Haskell appealing to the lowest common denominator of programmers
10:21:02 <LiaoTao> Purely because of terminology, category theory and historical reasons
10:21:19 × dut quits (~dut@user/dut) (Read error: Connection reset by peer)
10:21:42 dut joins (~dut@user/dut)
10:21:52 × burnsidesLlama quits (~burnsides@dhcp168-039.wadham.ox.ac.uk) (Remote host closed the connection)
10:22:13 × dut quits (~dut@user/dut) (Client Quit)
10:23:19 <kuribas> Inst: we don't need to grow the Haskell community.
10:26:07 ArctVaulMarsHMPJ joins (~pjetcetal@2.95.44.252)
10:26:16 × ArctVaulMarsHMPJ quits (~pjetcetal@2.95.44.252) (Remote host closed the connection)
10:27:07 k60 joins (~k60@broadband-95-84-168-218.ip.moscow.rt.ru)
10:29:08 <Inst> That's to say, the language is academic, its target audience is to provide a unified language for computer science researchers, and that people like me are unnecessary?
10:29:46 <Inst> That it's nice that Target and Goldmach Sachs (iirc) have Haskell-based applications running on their business platforms, but they're strictly unnecessary?
10:34:51 Guest13 joins (~Guest13@cust190-dsl55.idnet.net)
10:35:59 acidjnk_new3 joins (~acidjnk@p200300d0c703cb959894c42690fc4f0f.dip0.t-ipconnect.de)
10:36:08 <kuribas> Inst: no language is necessary, you can just use assembly for everything if you want.
10:36:09 <Inst> LiaoTao: well, I meet LCD requirements because I'm currently a non-programmer and I don't know cat theory nor do I have the intellectual apparatus needed to know category theory at this time
10:36:20 <dminuoso> Say I have some `f :: IO (Maybe T)`, and inside of that I hold some `Maybe S` in my hand. How can I elegantly lift/apply some `S -> IO T` to that?
10:36:38 CiaoSen joins (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
10:36:43 <dminuoso> Is there some kind of lift1 for MaybeT?
10:39:21 × acidjnk_new quits (~acidjnk@p200300d0c703cb955960125781424a48.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
10:42:07 <Inst> LiaoTao: not necessarily LCD, but perhaps non-programmers. I am telling people I know to go learn Haskell, even people with no prior programming background, on the belief that it has a valid hobbyist use case.
10:42:19 <dminuoso> I mean I can do something like `runMaybeT $ do { r <- MaybeT foo; lift (g r) }`
10:42:29 <dminuoso> Perhaps that's really what I want mmm
10:44:52 peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi)
10:47:34 × stengah quits (~stengah@user/stengah) (Ping timeout: 260 seconds)
10:47:53 <maerwald> starting to learn and use a language for ego reasons (growing, reinformecent that you can take challenges etc) is great... but having that influence decisions in industry is a controversial thing
10:48:28 rond_ joins (~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438)
10:48:33 × kayprish quits (~kayprish@46.240.130.158) (Read error: Connection reset by peer)
10:49:13 mmhat joins (~mmh@55d4469f.access.ecotel.net)
10:49:32 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
10:50:46 <maerwald> and learning is absolutely about ego
10:50:55 <maerwald> no negative connotation there
10:52:15 <kuribas> Inst: you cannot do everything, you need to pick your own hobbies.
10:52:41 <kuribas> Inst: would you like someone telling you that you absolutely need to learn gardening?
10:52:56 <maerwald> only if you live in the UK
10:53:12 <Inst> w/e, i'm effectively trolling right now, back to my textbooks. I'm a bit disappointed, but if this is how the Haskell community thinks, it's noted.
10:53:42 <kuribas> Inst: I am not "the haskell community" :)
10:54:05 <maerwald> Inst: the Haskell Foundation wants to broaden Haskell adoption in industry
10:54:11 <maerwald> it sounds like that aligns with your goals
10:54:26 <Inst> I'm more interested in broadening Haskell adoption overall, not necessarily in industry
10:54:31 <maerwald> I'm still alienated by that goal, but it's a fair game
10:54:31 <kuribas> But to think that you need to convert everyone to use something, in order to enjoy it yourself, is not very productive.
10:54:32 burnsidesLlama joins (~burnsides@dhcp168-039.wadham.ox.ac.uk)
10:54:34 <Franciman> my goal is to have a programming language strongly focused on wikis
10:54:42 <Franciman> that's what my language is going to do
10:54:47 <Franciman> be in symbiosis with the wiki
10:54:49 <Inst> kuribas: how familiar are you with the concept of ecosystem?
10:55:07 <Franciman> Inst: imho no language today has a good wiki
10:55:10 <kuribas> Inst: as in biological?
10:55:14 <Franciman> and it is not integrated in the language
10:55:18 <Franciman> my language is doing it
10:55:22 <Inst> more like social and economic
10:55:33 <Franciman> is it broadening?
10:55:41 <Inst> i guess you guys are more oriented toward the quality of the ecosystem, i.e, the people who hang around are like-minded, civil, and highly educated
10:55:52 <Inst> trying to broaden the ecosystem perhaps sounds like "Success at All Costs"
10:56:18 <Franciman> no the HF is going in that road you like
10:56:20 <Franciman> don't worry
10:56:29 <Franciman> have you read their mission and vision?
10:56:34 <Franciman> I find many common words
10:56:45 <Franciman> w-wait i find the suitable links for you to read
10:56:46 <kuribas> I am only interested in "broadening the ecosystem" as far as that improve the quality of the tooling.
10:57:23 <Inst> An independent, non-profit organization dedicated to broadening the adoption of Haskell, by supporting its ecosystem of tools, libraries, education, and research.
10:57:29 <Franciman> Inst: https://haskell.foundation/vision/
10:57:33 <Inst> i'm already on their site
10:57:37 <Franciman> oh nice
10:57:45 <maerwald> Franciman: well, better than no Haskell Foundation
10:57:57 <Franciman> ?
10:58:25 <maerwald> I mean... although I don't completely agree with that vision, I think it's fair that they follow that.
10:58:34 stengah joins (~stengah@user/stengah)
10:58:34 <Franciman> ah not judging that no
10:58:37 <maerwald> there will be positive side effects
10:58:42 <Franciman> I just said that Inst could be satisfied
10:58:45 <Franciman> by the HF
10:59:05 × burnsidesLlama quits (~burnsides@dhcp168-039.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
10:59:08 <Inst> there will also be negative ones, i.e, kiddies running around with bad manners, more bad code entering the ecosystem, etc
10:59:49 <maerwald> not sure... current industry that uses Haskell isn't that bad
11:00:09 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc)
11:00:14 <maerwald> but I'm not holding my breath for them to fix our problems
11:00:42 alx741 joins (~alx741@186.178.109.50)
11:00:43 <Franciman> what haskell is not fixing is that it is not becoming a wiki based language. But we can't blame anyone for that
11:00:52 <Franciman> I just write my wiki based language and see how it goes
11:01:27 <kuribas> Inst: scala is an example of what happens if you try to make a language that is both popular and cutting edge: a big mess.
11:01:31 <Franciman> it can't make everyone happy
11:01:37 <kuribas> Not that haskell isn't a big mess :)
11:01:50 <Inst> kuribas: I just don't see why being popular has to be against being cutting edge.
11:02:09 <kuribas> Inst: just look at scala
11:02:09 <Inst> If someone wants to compromise "Avoid Success at All Costs", they can just fork the language.
11:02:17 <maerwald> kuribas: with DH and linear types... it'll become a big mess soon. But there will always be a subset of maintainers that keep being sane and use it sparingly.
11:02:18 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
11:02:28 <Inst> The language and its philosophy is fine as is; the language designers do not need to design the language to appeal to the masses.
11:02:31 <Franciman> one difficult matter is that being cutting edge could mean less stability
11:02:40 <Franciman> while mainstream means you want realiability as a company
11:02:53 <Inst> I'm just saying expanding the ecosystem can be done without having to cut corners; the effort being made is in evangelization and education, as opposed to dumbing down Haskell.
11:03:06 <Inst> Or making it ugly, for that matter.
11:03:15 <kuribas> But haskell is messy because it is getting old, and accumulating features it wasn't designed for (dependent types).
11:03:20 azimut joins (~azimut@gateway/tor-sasl/azimut)
11:03:39 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
11:03:44 <kuribas> Inst: trying to make haskell by telling people they have to use it is not very productive.
11:03:57 <Inst> I don't think it's "forcing" people to use it.
11:04:11 <Inst> Just telling them Haskell is interesting, it's cool, and I tihnk you're smart enough to learn it, is what I have more in mind.
11:04:15 <Franciman> Inst: sorry I didn't quite understand what you mean
11:04:33 <Franciman> you mean broadening haskell usage, right?
11:04:34 <maerwald> using haskell in industry isn't that much better than any other language, because it's widely known amongst managers that you can "iterate quickly" on Haskell codebases
11:04:35 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc) (Ping timeout: 264 seconds)
11:04:37 <maerwald> so the pressure is real
11:04:59 <Franciman> also haskell can be very solid on some things, and super brittle on others
11:05:02 <Franciman> if you are not experienced
11:05:04 <Inst> I see.
11:05:05 <Franciman> you can fall so easily
11:05:08 <Franciman> lol
11:05:15 <Inst> I just got confused a bit by the hype etc surrounding Haskell
11:05:17 <Franciman> but that is getting very much better now
11:05:17 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
11:05:24 <Franciman> it is getting better
11:05:29 <Franciman> the ecosystem is getting much better
11:05:29 jespada joins (~jespada@2803:9800:9842:7a62:5d33:6404:2aef:9813)
11:05:42 <Franciman> we even have a language server implementation
11:05:52 <Franciman> there are plenty of great libraries
11:05:56 <Franciman> for doing webserver etc
11:06:23 <Inst> If, say, a firm decides to mandate haskell development (and haskell isn't optimal for all use cases), that's up to them, based on their use-case, Haskell's propensities, and the capabilities of their existing staff.
11:06:49 <Inst> I'm not saying force everyone to use haskell, unless there's an existing business case for having multi-language programmers work in haskell as opposed to other languages
11:06:59 × dsrt^ quits (~dsrt@68.101.53.15) (Ping timeout: 264 seconds)
11:08:20 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
11:08:21 <maerwald> Good Haskellers are rather expensive. There are a couple interesting startups that do Haskell, but the real space lies in fintech, where they have enough bucks for the star engineers and let them do their thing.
11:08:48 <maerwald> And some companies absolutely pick haskell for both a) marketing and b) access to smart engineers.
11:09:58 <maerwald> If you're a green startup in sweden with european wages... you'll maybe get a few students before they leave for the big bucks.
11:10:23 <maerwald> something to consider when you wanna introduce haskell to your company :p
11:11:30 <Inst> I have an idea for a start-up based around wearables, i.e, intersection of technology and fashion.
11:11:40 <Inst> It's probably at least a few years before I can implement
11:11:59 <maerwald> I want to write a dating app in Haskell. It's gonna be great.
11:12:06 AlexNoo_ joins (~AlexNoo@178.34.160.45)
11:12:19 <Inst> You're mocking me?
11:12:42 <Inst> I don't see a particular use case for Haskell in such an environment, though, since it'd more likely be based around an Android ecosystem.
11:12:49 <maerwald> I mean... I had the idea when I was drunk, but with some funding I might actually do it :p
11:12:55 Guest|41 joins (~Guest|41@31-187-0-247.dynamic.upc.ie)
11:13:07 <Inst> On the other hand, knowing Haskell might be good as a way to attract good developers.
11:13:08 <maerwald> until I burned through the cash
11:13:09 <Franciman> maerwald: a dating app for haskellers?
11:13:31 <Franciman> a wiki can do it better
11:13:38 <Franciman> collaborating to a wiki gets the best dates out
11:13:47 <maerwald> Franciman: nah, an FRP based frontend that's snappy and reliable
11:14:31 × Alex_test quits (~al_test@94.233.240.148) (Ping timeout: 252 seconds)
11:14:34 <Inst> maerwald: I'd be orienting the firm in China
11:14:35 <maerwald> I've also been thinking for a long time about the "misclick" problem... how can a UI minimize misclicks
11:14:49 <maerwald> reducing animations sure, but there's more
11:14:52 <Inst> whatever happened to radial menus?
11:15:00 × stengah quits (~stengah@user/stengah) (Ping timeout: 258 seconds)
11:15:03 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
11:15:04 × AlexZenon quits (~alzenon@94.233.240.148) (Ping timeout: 252 seconds)
11:15:27 <Inst> maerwald: you can probably remove misclicks via a click + mouse gesture combo
11:15:34 × AlexNoo quits (~AlexNoo@94.233.240.148) (Ping timeout: 252 seconds)
11:16:02 alzgh joins (~alzgh@user/alzgh)
11:16:07 <LiaoTao> That sounds like a surefire way to make everyone hate your UI
11:16:52 <Inst> I mean a lot of apps require swipes already.
11:17:28 <maerwald> you still want animations, but you could e.g. detect that your finger (pre-touch detection) switched context during an animation and have thresholds that block an action under certain circumstances
11:18:28 <maerwald> I mean, you still need to support mass-swipes etc, so it's not an easy problem
11:19:12 mzan joins (~quassel@mail.asterisell.com)
11:19:21 <maerwald> and that technology could be somewhat extended to websites... I hate it when I click and due to an element that just finished loading, the layout changed and I hit some random button
11:19:54 Alex_test joins (~al_test@178.34.160.45)
11:19:58 AlexZenon joins (~alzenon@178.34.160.45)
11:20:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:20:37 <Inst> Only matters if you're on a slow system; I have a decent connection and a decent workstation computer
11:20:46 <Inst> sometimes I wish loading might be actually slower
11:21:45 <maerwald> one idea on the desktop would be to block layout changes as long as the mouse is moving
11:22:03 <maerwald> but that'll need more refinement
11:23:17 <Franciman> Inst: are you on reddit too?
11:24:22 <Inst> that post is mine
11:25:09 <Franciman> which post?
11:25:51 <Franciman> ah found
11:26:04 <Franciman> Instrume, I-I had seen Inst somewhere else
11:26:37 <Inst> I'm dropping the issue, I wrote an e-mail to HF about whether or not it'd be viable to try to espouse Haskell among non-programmers.
11:26:57 <Franciman> it sure is a great idea
11:27:09 <Inst> the average person is both smarter and dumber than you think, i.e, with the right education, they can do incredible things, but at the same time they often have really dumb ideas
11:28:10 <Franciman> yeah people are interesting
11:28:29 <Franciman> being dumb can just be a lack of something
11:28:52 <Franciman> I wish we didn't have mass teaching as the only method
11:28:55 <Franciman> it is good
11:29:11 <Franciman> but treating anybody as a individual can get a lot of benefits
11:29:53 <LiaoTao> On the other hand some people are just plain dumb and can't be taught skills like extrapolation from known data.
11:29:54 <Franciman> Inst: i recall projects teaching functional languages as first language
11:30:27 <Inst> LiaoTao: was it Xun Zi or Mencius?
11:30:45 <LiaoTao> Inst, LiaoTao
11:30:46 <Inst> I forget, via Feng Youlan, some people are born sages, some are utterly incorrigible, most people are somewhere in between
11:31:00 <Inst> and thus educable
11:31:21 <Franciman> that's always the swingers being the most important
11:31:38 jgeerds joins (~jgeerds@55d4da80.access.ecotel.net)
11:32:10 <lortabac> I'm pretty sure dumb people don't exist, find something they are really interested in and they'll surprise you
11:32:25 <Inst> umm, people with real physiological disabilities
11:32:35 <Inst> someone with a chromosomal abnormality, for instance
11:32:42 <lortabac> ok that's a different problem
11:33:03 <Franciman> even in that case, let them be happy, and they'll find a way to be accomplished
11:33:09 <LiaoTao> lortabac, That's a very generous view and not something I've been able to corroborate with reality
11:33:13 <LiaoTao> Which is sad, but nevertheless
11:33:38 <lortabac> think of how much intelligence it takes to do things like driving, yet most people can do it
11:34:22 <LiaoTao> Someone more glib would ask you to take a look at your average roundabout during peak traffic hours
11:34:56 <lortabac> anyway it's offtopic
11:35:20 <LiaoTao> Right
11:35:43 <Franciman> let's get back about how wiki as documentation is cool
11:36:22 <lortabac> Franciman: welcome to 1990 :P
11:36:30 <Franciman> *.*
11:36:41 Franciman puts eiffel65 on
11:36:53 hpc puts portlandia on :D
11:36:59 <Franciman> *.*
11:37:05 LiaoTao puts macarena on
11:37:14 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 258 seconds)
11:37:21 <hpc> they didn't call it a wiki until 2005
11:42:35 <Inst> @franciman: apparently there's a school in India that does Haskell first, Oxford does Haskell first, Haskell is included in first languages at Imperial College, Cambridge (at least sometimes) does Haskell first
11:42:35 <lambdabot> Unknown command, try @list
11:43:52 off^ joins (~off@68.101.53.15)
11:44:30 <Inst> https://wiki.haskell.org/Haskell_in_education
11:44:58 <Franciman> uh a wiki
11:45:06 <Franciman> ty
11:45:59 × Guest|41 quits (~Guest|41@31-187-0-247.dynamic.upc.ie) (Ping timeout: 264 seconds)
11:47:04 <LiaoTao> Some adventurous CS lecturer at Chalmers uses Haskell too
11:48:26 <LiaoTao> We suddenly had lots of applications with Haskell on the resume, and I thought "Darn, maybe finally the year of FP is upon us", but as it turns out they had all just used it for a university course
11:48:41 <sshine> they use Haskell on the 1st MSc course at University of Copenhagen. they used to use SML for the 1st BSc course, but I think they switched to F# now.
11:51:27 lavaman joins (~lavaman@98.38.249.169)
11:53:41 acidjnk_new joins (~acidjnk@pd9e0b933.dip0.t-ipconnect.de)
11:54:21 <kuribas> Why don't they teach dependent types?
11:54:43 <sshine> kuribas, imagine what that would make people feel when they get their first job.
11:55:08 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 265 seconds)
11:55:24 <dminuoso> kuribas: You have plenty cassava experience right?
11:55:39 <dminuoso> Is there a way to have cassava mention the column name a particular field couldn't be parsed in?
11:56:10 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
11:56:33 <dminuoso> It's quite frustrating to just get some: Failed reading: conversion error: expected Int, got "" (not enough input)
11:56:47 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb959894c42690fc4f0f.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
11:56:55 <kuribas> dminuoso: https://github.com/haskell-hvr/cassava/pull/197
11:57:11 <dminuoso> I knew I was asking the right person. :-)
11:57:12 <dminuoso> Cheers
11:57:35 <kuribas> I didn't get any update on this PR sadly...
11:57:46 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
11:57:56 jakalx joins (~jakalx@base.jakalx.net)
11:58:46 <dminuoso> kuribas: It's also frustrating that none of these FromField instances do a BS.null check
11:59:01 <kuribas> dminuoso: yeah
11:59:49 <kuribas> I am considering reimplementing most of the functionality, and just using cassava as "ByteString -> [Map Text Text]"
12:00:07 <dminuoso> Well it should be ByteString for general use
12:00:09 <dminuoso> But yeah
12:00:28 <dminuoso> I mean there's an alternate way
12:00:35 <dminuoso> You can also parse into tuples of bytestrings
12:01:04 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
12:01:37 <kuribas> Isn't csv utf8?
12:02:00 <dminuoso> kuribas: But really it seems the best way is to have cassava parse into `data RecordRaw = RecordRaw { rawSalary :: ByteString, rawName :: ByteString }`, with some matching `data Record = Record { salary :: Int, name :: Text }`, and then write some generic code turning RecordRaw into Record, producing legigble errors..
12:02:06 <dminuoso> csv isnt even well defined really
12:02:36 <dminuoso> There's a lot of programs that rapidly produce latin encoded csvs instead
12:02:48 <dminuoso> SqlDeveloper is very liberal
12:02:53 <dminuoso> Pretty sure Excel is as well
12:03:38 burnsidesLlama joins (~burnsides@dhcp168-039.wadham.ox.ac.uk)
12:07:44 <kuribas> dminuoso: but then I have to make a Raw* record for each of my records?
12:08:44 <dminuoso> Bah you know what, I think what Ill do
12:08:47 <dminuoso> got a better idea
12:11:36 <kuribas> make a new csv library?
12:12:45 <kuribas> you could copy the low level parsing stuff from cassava.
12:14:09 <dminuoso> Im going to quickly ruin its performance (not relevant to my case), and simply bolt on variants of (.:)
12:14:14 <dminuoso> So I have .:: and .:!
12:14:34 <dminuoso> Which would both include field names in errors, and .:! would assert the field be non empty
12:16:39 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
12:17:41 × Guest13 quits (~Guest13@cust190-dsl55.idnet.net) (Quit: Client closed)
12:23:11 × off^ quits (~off@68.101.53.15) (Ping timeout: 264 seconds)
12:24:28 <zincy> Opinions on testing validity of generators in property based testing?
12:25:56 × k60 quits (~k60@broadband-95-84-168-218.ip.moscow.rt.ru) (Ping timeout: 265 seconds)
12:27:42 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
12:28:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
12:30:25 <kuribas> zincy: add properties which validate your generators.
12:30:47 <kuribas> you can get statistics that not all properties are trivial for example.
12:31:36 <zincy> cover?
12:32:10 <zincy> Yeah so testing your tests is ok in moderation
12:34:13 <kuribas> Or I write a property that should fail, then remove it when I see the generator is catching those.
12:34:39 <kuribas> Getting the generators right is also important.
12:37:10 <zincy> So the coverage combinators for hedgehog are designed to help you get generators right
12:37:14 <zincy> very cool
12:37:35 <zincy> kuribas: Have you tried the state machine feature?
12:37:41 <zincy> Wondering if it is worth a go
12:37:49 <kuribas> zincy: no, I just recently learned that it exists.
12:37:55 × Guest2920 quits (~Guest29@net-93-151-133-175.cust.dsl.teletu.it) (Quit: Client closed)
12:38:07 <kuribas> I didn't need it yet, but I might in the future.
12:40:33 xiongxin joins (~quassel@119.123.103.160)
12:41:01 <dminuoso> kuribas: https://gist.github.com/dminuoso/08e7b1aca8bb92fe84345adf3e0f1a10
12:41:16 <dminuoso> Here, a dirty drop in solution for all my problems.
12:41:47 <kuribas> why is that slow?
12:42:21 Guest55 joins (~Guest55@78.198.4.122)
12:42:36 <dminuoso> That (potentially doubly nested) runParser will defeat the deforestration technique
12:42:41 <dminuoso> Parser uses continuations internally
12:42:45 <dminuoso> I turn that back into case-of
12:43:01 <dminuoso> Bah, I can probably simply break Parser open and use those continuations manually
12:43:03 <dminuoso> Maybe I shoulld
12:43:38 <dminuoso> Ah wait, its not exported
12:44:02 <dminuoso> So yeah, aside of `unsafeCoerce'ing` my way through, this is not going to play nice with large csvs
12:44:06 <dminuoso> but the ones I deal with are small anyway
12:44:56 AlexNoo_ is now known as AlexNoo
12:45:50 <Guest55> Hey, Could someone help me understand the error that i'm having on this simple program: https://paste.tomsmeding.com/LL1aSDyt
12:46:25 stengah joins (~stengah@user/stengah)
12:46:57 <dminuoso> Guest55: Hey yes.
12:47:00 × xiongxin quits (~quassel@119.123.103.160) (Read error: Connection reset by peer)
12:47:00 <lortabac> Guest55: you apply (.) on things that are not functions
12:47:03 <dminuoso> % :t lines
12:47:04 <yahb> dminuoso: String -> [String]
12:47:25 <dminuoso> Or well, what lortabac said.
12:47:58 <lortabac> :t (.)
12:47:59 <lambdabot> (b -> c) -> (a -> b) -> a -> c
12:48:04 xiongxin joins (~quassel@119.123.100.49)
12:48:30 <Guest55> Could you elaborate? (... . lines str) isn't valid?
12:49:07 <dminuoso> Guest55: You already applied lines to str.
12:49:16 <dminuoso> So the expression `lines str` is of type [String]`
12:49:50 <dminuoso> So if we take `f . lines str`, you're trying to compose `f` with .. uh well a list of strings. But if you look at the type of (.) above, you can see that (.) demands its second argument to be a function.
12:50:37 <Guest55> Oh I see. So maybe `... . lines $ str` should do it?! And it seems to!
12:51:10 lbseale joins (~lbseale@user/ep1ctetus)
12:51:24 <Guest55> Thanks dminuoso !
12:51:34 <lortabac> alternatively, you can remove 'str' both before and after the =
12:51:37 × mbuf quits (~Shakthi@122.178.207.237) (Quit: Leaving)
12:51:50 <dminuoso> ^- and that would be the idiomatic thing to do, even. :)
12:52:08 <Guest55> Ah yes point free style :)
12:52:51 <dminuoso> Yeah. Though point free is not the ultimate goal, for simple function composition this is very idiomatic.
12:53:28 <Guest55> I see, thanks!
12:54:04 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:54:49 <lortabac> mixing (.) and ($) works too, but I find it a little confusing
12:55:44 <Guest55> Now for the most difficult part (imho), how does one go from the error message to this conclusion? Supposing the error wasn't obvious at first sight, and you had to understand the error message, how would you link it to '.' ? Is it "In the second argument of ‘(.)’, namely ‘lines str’" that gives it away?
12:56:18 <Guest55> Personally I was focused on the first part "Possible cause: ‘lines’ is applied to too many arguments"
12:57:31 <lortabac> yes, the hint is correct
12:57:47 <lortabac> lines is applied to too many arguments (1 instead of zero)
12:59:05 <lortabac> unfortunately I don't think there is a simple universal method to understand the error messages
12:59:17 <Guest55> Oh I see. GHC knows we're in a '.' composition context and hence knows that lines should have 0 (1 less than normal) argument ?
12:59:55 <Guest55> lortabac: Yeah I find most of them quite cryptic, but i'm trying to train myself to understand them better!
13:01:23 <lortabac> yes, (.) expects a function as a second argument, but you gave it a function applied to an argument, which resulted in a String
13:01:51 <lortabac> so it deduced that you probably shouldn't have applied it
13:01:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc)
13:02:24 <lortabac> but remember that these "possible causes" are just hints, they are not right 100% of the times
13:03:52 <Guest55> Oh right, there's often more than one solution so the compiler certainly just tries to enumerate them.
13:04:03 <Guest55> Thank you very much lortabac !
13:04:18 × AlexZenon quits (~alzenon@178.34.160.45) (Quit: ;-)
13:04:22 × Alex_test quits (~al_test@178.34.160.45) (Quit: ;-)
13:04:26 × AlexNoo quits (~AlexNoo@178.34.160.45) (Quit: Leaving)
13:05:47 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 258 seconds)
13:06:21 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc) (Ping timeout: 245 seconds)
13:06:45 mei joins (~mei@user/mei)
13:08:05 × CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
13:08:45 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
13:10:02 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
13:11:09 × jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 258 seconds)
13:11:37 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
13:11:54 azimut joins (~azimut@gateway/tor-sasl/azimut)
13:16:05 off^ joins (~off@68.101.53.15)
13:17:06 _bo joins (~bo@217.18.216.247)
13:19:18 slack1256 joins (~slack1256@45.4.2.52)
13:19:37 Farzad joins (~FarzadBek@178.131.24.144)
13:20:32 <dminuoso> kuribas: But yeah, cassava is not very good in a lot of ways
13:21:07 <_bo> Can someone please help me understand how to think about task of splitting string into substrings? I understand concept of maps and reduces, but how do I apply it here?
13:21:20 renzhi joins (~xp@2607:fa49:6500:b100::6e7f)
13:21:38 <dminuoso> _bo: What's the specific problem you are trying to solve?
13:21:48 <_bo> "aaabbba" -> ["aaa", a], this is an example
13:22:23 <_bo> dminuoso: If I'm completely transparent: https://www.codewars.com/kata/59c633e7dcc4053512000073
13:22:30 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 260 seconds)
13:22:45 AlexZenon joins (~alzenon@178.34.160.45)
13:22:47 MQ-17J joins (~MQ-17J@2607:fb90:1d89:67a9:1cd1:a18:a57f:e102)
13:23:00 AlexNoo joins (~AlexNoo@178.34.160.45)
13:23:23 <dminuoso> _bo: Okay, Im really not sure how you come from that kata to the example you provided.
13:23:31 <_bo> I thought that I can approach this task by mapping string to sub-arrays of continuous consonants, then just replacing chars with numbers, then just summing sub-arrays and selecting the biggest
13:23:39 <dminuoso> But oh well I think I get it.
13:23:55 <dminuoso> _bo: Sounds about right.
13:24:35 <dminuoso> _bo: You can use `groupBy` from Data.List
13:24:45 <dminuoso> Incidentally its non-sorting behavior will fit your usage pattern nicely
13:25:09 <_bo> Grouping by "being consonant"? Clever
13:25:24 <dminuoso> yeah, it will require additional processing. it's just one of many solutions.
13:25:45 <dminuoso> _bo: Am I right in presuming you're just using these katas as ways to learn Haskell?
13:25:51 <_bo> But then how do I implement this group myself? I like solving katas without any libraries
13:26:01 <dminuoso> groupBy is part of base
13:26:07 <dminuoso> % :t groupBy
13:26:07 <yahb> dminuoso: (a -> a -> Bool) -> [a] -> [[a]]
13:26:11 <dminuoso> % :t Data.List.groupBy
13:26:11 <yahb> dminuoso: (a -> a -> Bool) -> [a] -> [[a]]
13:26:16 Alex_test joins (~al_test@178.34.160.45)
13:26:23 <dminuoso> But if you like, you can just write it yourself
13:26:30 <dminuoso> It's a neat little challenge if you dont know how
13:26:36 <_bo> Yes, you are 100% correct. I can't write any apps yet, so I'm starting with katas
13:26:42 <dminuoso> _bo: at any rate.
13:26:49 <dminuoso> _bo: The key primitives you are looking for is this:
13:26:51 <dminuoso> % :t span
13:26:51 <yahb> dminuoso: (a -> Bool) -> [a] -> ([a], [a])
13:26:54 <dminuoso> % :t break
13:26:54 <yahb> dminuoso: (a -> Bool) -> [a] -> ([a], [a])
13:27:02 <dminuoso> A lot of string processing revolves around these two
13:27:06 <dminuoso> Or list processing, rather.
13:27:23 <dminuoso> % span (>5) [1,2,3,4,5,6,7]
13:27:23 <yahb> dminuoso: ([],[1,2,3,4,5,6,7])
13:27:28 <dminuoso> % span (<5) [1,2,3,4,5,6,7]
13:27:28 <yahb> dminuoso: ([1,2,3,4],[5,6,7])
13:27:46 <_bo> Seems like a takeWhile
13:28:09 <dminuoso> Yeah, except `span` will also return the other list
13:28:34 × stengah quits (~stengah@user/stengah) (Ping timeout: 260 seconds)
13:28:40 <dminuoso> So you can simply use `span` in some recursive manner, where you repeatedly work on the second remainder of the tuple
13:29:38 Profpatsch joins (~Profpatsc@static.88-198-193-255.clients.your-server.de)
13:30:00 <Profpatsch> chaining Wai.Middlewares means the last one receives the request first, right?
13:30:14 <dminuoso> Profpatsch: what does "last" mean?
13:30:14 <_bo> I see the idea, thanks! Will also try to write span myself
13:30:24 <dminuoso> Profpatsch: or "chaining"
13:30:25 <Profpatsch> middleware1 . middleware2 should pass the request to 1 first and 2 last
13:30:29 <dminuoso> Profpatsch: Yes.
13:30:32 <Profpatsch> Ah, okay
13:30:35 <dminuoso> Profpatsch: Consider this:
13:30:38 <dminuoso> type Middleware = Application -> Application
13:30:40 <Profpatsch> I used middleware2 >>> middleware1
13:30:45 <dminuoso> And:
13:30:46 <Profpatsch> So the order is reversed
13:30:48 <dminuoso> type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
13:30:53 <xsperry> _bo going by the question on codewars link, you don't need group*, just filter, maximum and isConsonant :: Char -> Bool. you can write filter/maximum yourself if you want
13:31:18 <dminuoso> xsperry: no, you need either some form of group or span
13:31:29 <dminuoso> Or something similar in spirit
13:31:39 <Profpatsch> dminuoso: I remember stumbling over this a while ago, thanks for confirming
13:31:40 <dminuoso> The task is just poorly phrased
13:31:56 <Profpatsch> So i’d use . instead of >>> and the order should be top-to-bottom or left-to-rigth
13:32:00 <xsperry> dminuoso, how so? solve("zodiacs") = 26. value of z is 26. filter, maximum, and function that maps consonant to Int is all you need
13:32:18 × acidjnk_new quits (~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
13:32:29 <dminuoso> xsperry: you take the largest consecutive sequence of consonants, and then add their ascii values together
13:32:49 <dminuoso> and the chunk of consequtive consonants with the highest such sum is what this kata is after
13:32:59 × rkrishnan quits (~user@2402:e280:215c:2cd:d6b1:e062:567:7a9c) (Remote host closed the connection)
13:33:04 <xsperry> dminuoso, ah, my mistake. group will be useful then
13:33:38 <dminuoso> Profpatsch: Mmm I think you have that the wrong way
13:34:57 <dminuoso> Profpatsch: Consider for a second a simple response time logging middleware.
13:35:08 <dminuoso> So you might have `profile :: Application -> Application`, or `profile :: Middleware`
13:35:28 zer0bitz joins (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi)
13:35:31 <dminuoso> You use this by simply applying this to your app `yourApp :: Application`, with `profile yourApp :: Application`
13:36:17 <dminuoso> Since this is just a function, composing `profile` with `logging` in `profile . logging` will first apply the logging middleware, and then the profiling middleware.
13:36:51 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
13:36:51 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
13:36:51 wroathe joins (~wroathe@user/wroathe)
13:36:57 <dminuoso> Note that the order of middlewares is not necessarily reflecting on the relative order in which effects actually occur.
13:37:14 <Profpatsch> logging (profile app)
13:37:28 <Profpatsch> Won’t the request be passed to `logging` firts?
13:37:44 <dminuoso> Profpatsch: Perhaps its best to simply write a middleware yourself.
13:37:48 × mei quits (~mei@user/mei) (Read error: Connection reset by peer)
13:39:10 <Profpatsch> dminuoso: I have a bunch of self-written middlewares heer
13:39:19 <Profpatsch> doesn’t mean I can understand the order in which things run :)
13:39:36 <Profpatsch> I mean that would be a prime example of what good Wai documentation should have as an example
13:39:41 <dminuoso> Profpatsch: Ah I think there's a mismatch between what you wrote and I understood.
13:39:44 <dminuoso> Yes.
13:40:23 <dminuoso> The "outer" middleware gets to hook *before* the inner middleware gets a request, and *after* the inner middleware sends a response.
13:40:42 <dminuoso> Perhaps "middleware" is a very misleading name, since it's rather like an onion layer
13:40:51 <dminuoso> it sits *around* an application, rather than in the middle..
13:41:01 <Profpatsch> Yeah.
13:41:13 <Profpatsch> Pretty close to just forking wai and improving the docs :)
13:41:19 <Profpatsch> I mean I guess why not
13:41:23 max22- joins (~maxime@2a01cb0883359800cd1fff3f97961f02.ipv6.abo.wanadoo.fr)
13:41:32 <Profpatsch> I did the same to Servant.Foreign https://hackage.haskell.org/package/servant-foreign-0.15.4/docs/Servant-Foreign.html
13:41:47 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
13:42:04 <dminuoso> Or you can just improve the official documentation?
13:42:11 <dminuoso> Im sure if you made a PR, it would be welcomed.
13:42:57 <Profpatsch> yep
13:44:26 × tomku quits (~tomku@user/tomku) (Quit: Lost terminal)
13:46:18 <Profpatsch> Okay, I tried it out with badMid a req resp = error "oh no" and logMid a req resp = putStrLn "hi" >> a req resp
13:46:20 jollygood2 joins (~bc8165b6@217.29.117.252)
13:46:25 × xiongxin quits (~quassel@119.123.100.49) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
13:46:34 <Profpatsch> And logMid . badMid prints hi\noh no
13:46:43 <Profpatsch> And badMid . logMid only "oh no"
13:46:50 <Profpatsch> So the outer one runs “first”
13:47:06 stengah joins (~stengah@user/stengah)
13:47:20 <Profpatsch> Since all of this is in IO, you can actually determine what is first and what is later :
13:48:38 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
13:49:11 <dminuoso> In the absence of forkIO :>
13:49:44 <Profpatsch> na na na I can’t hear you
13:49:57 <dminuoso> forkIO really ruins a lot of naive interpretations of IO too :(
13:51:00 <Profpatsch> I bet terrorjack can tell a story or two about IO and implementing a runtime :P
13:51:54 × stengah quits (~stengah@user/stengah) (Ping timeout: 260 seconds)
13:52:54 × MQ-17J quits (~MQ-17J@2607:fb90:1d89:67a9:1cd1:a18:a57f:e102) (Read error: Connection reset by peer)
13:53:13 MQ-17J joins (~MQ-17J@35.50.77.148)
13:54:24 mei joins (~mei@user/mei)
13:55:40 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:56:24 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
13:56:24 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
13:56:24 wroathe joins (~wroathe@user/wroathe)
14:00:52 mc47 joins (~mc47@xmonad/TheMC47)
14:01:13 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
14:02:53 <Profpatsch> lol nobody has touched this documentation since Greg Weber in 2015
14:03:26 geekosaur thanks you in advance
14:03:38 <Profpatsch> Though I don’t understand the existing docstring, at all
14:03:48 <Profpatsch> -- string map \[(String, String)\]. A logical type signature for this middleware
14:03:48 <geekosaur> every time I hit the documentation for wai I bounce hard :(
14:03:50 <Profpatsch> -- might be:
14:03:53 <Profpatsch> --
14:03:54 <Profpatsch> -- @ loadSession :: ([(String, String)] -> Application) -> Application @
14:04:08 <Profpatsch> Why is it left-bracketed
14:04:37 <Profpatsch> cause of ([…] -> Req -> Respond -> IO …) -> (Req -> Respond -> IO …)
14:05:42 lbseale_ joins (~lbseale@user/ep1ctetus)
14:05:47 <dminuoso> Profpatsch: Because that's how things are associated?
14:05:58 <dminuoso> They are a bit redundant, perhaps some personal style?
14:06:15 <dminuoso> That is [(String, String)] -> Application -> Application means the same thing. :)
14:06:27 <dminuoso> And yeah, perhaps this is just some refactoring artifact
14:06:37 <dminuoso> Perhaps originally this was
14:06:58 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:8daf:444e:9c84:5148) (Quit: WeeChat 2.8)
14:07:03 <Profpatsch> Is it though? a -> b -> b is a -> (b -> b) no?
14:07:10 <Profpatsch> Wheras this is (a -> b) -> b
14:07:14 <dminuoso> uh hold on
14:07:24 <dminuoso> This is embarrassing.
14:07:26 <dminuoso> :)
14:07:35 <Profpatsch> But yeah, we def need good examples in the docs
14:07:36 <dminuoso> Yeah you're right
14:07:41 <Profpatsch> That is targeted at haskell newbs
14:07:47 <Profpatsch> because that’s who would like to write webservers
14:07:49 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
14:08:03 <Profpatsch> So Wai is in a sense one of the most important Haskell modules
14:08:07 <dminuoso> kuribas: Gosh I really hate cassava now. :(
14:08:15 <dminuoso> I wish errors worked like this:
14:08:51 <dminuoso> a) Id like the option to include the entire row in an error, or b) include some primary key (from the row) in an error
14:08:54 tomku joins (~tomku@user/tomku)
14:08:56 <dminuoso> Such that you could write:
14:09:10 × lbseale quits (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds)
14:09:39 <Profpatsch> Can I modify a response with a Middleware? I don’t think so right?
14:09:45 <dminuoso> parseRow = do key <- rec .: "key"; context (show key) $ Record key <$> rec .: "foo" <*> rec .: "bar" <*> rec .: "quux"
14:09:54 <dminuoso> Profpatsch: Yes you can.
14:10:13 <Profpatsch> Oh you can, you just have to create a new (Response -> IO ResponseReceived) and pass it into the next middleware
14:10:18 <dminuoso> Indeed.,
14:10:23 <dminuoso> It's just very disgusting to do
14:10:46 <Profpatsch> So I guess there should be two examples, one how to adjust the Request and one the response
14:10:54 <Profpatsch> dminuoso: why is that? e.g. you need it for gzipping
14:11:06 <dminuoso> Profpatsch: for that I'd simply put nginx in front
14:11:09 <Profpatsch> Iterate over the responseBody chunker and gzip the chunks
14:11:11 <dminuoso> Which I'd have in any case for tls termination
14:11:14 <dminuoso> and other things
14:11:15 <Profpatsch> dminuoso: ah, that’s true
14:12:10 Sgeo joins (~Sgeo@user/sgeo)
14:12:40 razor[m] parts (~razormone@2001:470:69fc:105::f048) ()
14:12:53 absence joins (torgeihe@hildring.pvv.ntnu.no)
14:13:58 <absence> in a project where "-F -pgmF=record-dot-preprocessor" is added to ghc options in the .cabal file, how can i disable this preprocessor in a specific file using a pragma?
14:16:27 <dminuoso> Profpatsch: And regarding modifying the response, the problem is that Response is a very internal type
14:16:41 <dminuoso> Profpatsch: So in order to *modify* it, you have to do a lot of highly annoying work
14:17:54 <dminuoso> You'd likely use responseToStream, and then some real annoying work starts.
14:18:20 <dminuoso> Profpatsch: And btw, wai provides some modifyResponse helper
14:18:25 <dminuoso> modifyResponse :: (Response -> Response) -> Middleware
14:18:34 <dminuoso> Modifying status and headers is easy
14:18:38 <dminuoso> Modifying the body is annoying.
14:18:51 <dminuoso> You'd have to create a custom type StreamingBody = (Builder -> IO ()) -> IO () -> IO ()
14:19:26 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
14:20:22 × ubert quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Remote host closed the connection)
14:20:40 <dminuoso> And then using that custom StreamingBody, that would write these chunks into some buffer of your choosing, process it, and then create a separate StreamingBody, and feed those processed chunks into that.
14:20:56 × grfn quits (sid449115@id-449115.helmsley.irccloud.com) (Ping timeout: 245 seconds)
14:20:56 × ehamberg quits (sid18208@id-18208.hampstead.irccloud.com) (Ping timeout: 245 seconds)
14:21:23 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Ping timeout: 264 seconds)
14:21:23 × astra` quits (sid289983@user/amish) (Ping timeout: 264 seconds)
14:21:41 × sclv quits (sid39734@haskell/developer/sclv) (Ping timeout: 258 seconds)
14:21:42 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
14:21:46 × tritlo quits (sid58727@user/tritlo) (Ping timeout: 245 seconds)
14:22:04 × amir quits (sid22336@user/amir) (Ping timeout: 258 seconds)
14:22:04 × jonrh quits (sid5185@id-5185.ilkley.irccloud.com) (Ping timeout: 258 seconds)
14:22:12 × ubert1 quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Quit: ubert1)
14:22:27 × elvishjerricco quits (sid237756@id-237756.helmsley.irccloud.com) (Ping timeout: 258 seconds)
14:22:35 × dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (Ping timeout: 264 seconds)
14:22:35 × SrPx quits (sid108780@id-108780.uxbridge.irccloud.com) (Ping timeout: 264 seconds)
14:22:35 ubert joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
14:22:50 <dminuoso> That separate streaming body/lazy bytestring/builder can then be used to reconstruct a Response via responseLBS/responseStream/responseBuilder
14:23:11 × Boarders quits (sid425905@id-425905.lymington.irccloud.com) (Ping timeout: 264 seconds)
14:23:11 × etrepum quits (sid763@id-763.uxbridge.irccloud.com) (Ping timeout: 264 seconds)
14:23:29 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
14:23:32 SrPx joins (sid108780@uxbridge.irccloud.com)
14:23:40 grfn joins (sid449115@helmsley.irccloud.com)
14:23:41 etrepum joins (sid763@uxbridge.irccloud.com)
14:23:47 elvishjerricco joins (sid237756@helmsley.irccloud.com)
14:23:47 jonrh joins (sid5185@ilkley.irccloud.com)
14:23:47 amir joins (sid22336@user/amir)
14:23:56 tritlo joins (sid58727@user/tritlo)
14:23:56 astra` joins (sid289983@user/amish)
14:23:57 dmj` joins (sid72307@hampstead.irccloud.com)
14:23:58 kupi joins (uid212005@hampstead.irccloud.com)
14:24:00 ehamberg joins (sid18208@hampstead.irccloud.com)
14:24:39 × kupi quits (uid212005@hampstead.irccloud.com) (Client Quit)
14:25:09 sclv joins (sid39734@haskell/developer/sclv)
14:25:26 Boarders joins (sid425905@id-425905.lymington.irccloud.com)
14:26:04 stengah joins (~stengah@user/stengah)
14:26:11 ub joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
14:26:28 <geekosaur> absence, by the time it reads the pragma it's already been through the preprocessor
14:26:39 coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
14:26:54 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
14:26:57 shriekingnoise joins (~shrieking@186.137.144.80)
14:28:05 <Profpatsch> dminuoso: yeah, I remember. I think the thing is that it was expected only a server would ever consume the Response type
14:28:14 <Profpatsch> So no helpers exist to make consuming it very nice
14:28:38 <Profpatsch> I wrote a “pure” Application caller here, I should open source it actually, which is nice in tests
14:28:44 <dminuoso> Profpatsch: No, the problem is that the output is streamed.
14:28:46 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
14:29:02 <dminuoso> If processing that output was desirable, you'd need an appropriate streaming library
14:29:06 <Profpatsch> It just reads the response body chunks into a binary builder and/or an ioref
14:30:49 × pbrisbin quits (~patrick@pool-173-49-152-45.phlapa.fios.verizon.net) (Ping timeout: 252 seconds)
14:32:33 pbrisbin joins (~patrick@199.66.179.206)
14:33:31 × slack1256 quits (~slack1256@45.4.2.52) (Remote host closed the connection)
14:34:52 jgeerds joins (~jgeerds@55d4da80.access.ecotel.net)
14:35:31 <absence> geekosaur: ah, that's unfortunate, but makes sense. thanks!
14:36:02 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:36:02 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:36:02 wroathe joins (~wroathe@user/wroathe)
14:37:19 × Inst quits (~Inst@2601:6c4:4080:3f80:6134:7ceb:5f94:e843) (Remote host closed the connection)
14:37:36 Inst joins (~Inst@2601:6c4:4080:3f80:887d:efb8:1cec:d51f)
14:40:26 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
14:41:41 × max22- quits (~maxime@2a01cb0883359800cd1fff3f97961f02.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
14:42:15 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Remote host closed the connection)
14:42:40 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
14:42:59 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
14:46:04 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
14:48:08 geekosaur joins (~geekosaur@xmonad/geekosaur)
14:48:12 × timCF quits (~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
14:49:33 × hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1)
14:50:05 × ub quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
14:50:06 iteratee joins (~kyle@162.218.222.107)
14:50:12 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
14:50:45 hendursaga joins (~weechat@user/hendursaga)
14:52:29 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
14:52:52 × MQ-17J quits (~MQ-17J@35.50.77.148) (Ping timeout: 252 seconds)
14:53:34 Nosrep joins (~archbox@user/nosrep)
14:54:17 hnOsmium0001 joins (uid453710@id-453710.hampstead.irccloud.com)
14:54:48 MQ-17J joins (~MQ-17J@2607:fb90:1d89:67a9:1cd1:a18:a57f:e102)
14:56:01 <timCF> Hello! I have a question about Async. When I'm doing high-level `withAsync task inner`, do I need to call `link pid` inside the inner to allow expection from `task` thread propagete immediately to parent thread?
14:56:42 <timCF> Of course there is source, but I'm not sure I do fully understand it https://hackage.haskell.org/package/async-2.2.4/docs/src/Control.Concurrent.Async.html#withAsyncUsing
14:57:59 × tinhatcat quits (~manjaro-g@2620:103:a000:2201:8e4c:af6a:e11c:11a1) (Quit: Leaving)
15:00:11 lortabac joins (~lortabac@2a01:e0a:541:b8f0:e2c3:1bcc:edee:e9f1)
15:00:46 <_bo> Guys, I'm trying to write my own `span` and the following code gives me ` Occurs check: cannot construct the infinite type: a ~ [a]
15:00:46 <_bo> * In the expression: left`: https://gist.github.com/MidasBetankor/84c8951af333a382ed386c7de3529831 can someone see why?
15:01:40 <_bo> Tried to think of span as: "it's an array of two sub-arrays, where left one has all values that satisfy predicate and right one has rest of elements after first time predicate misses"
15:01:45 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
15:02:03 <_bo> But still can't see what's so infinite about `left` sub-array in the snippet above
15:03:23 <Inst> hi, could I have some help?
15:03:31 <Franciman> hi Inst ofc
15:03:31 <Inst> what does 50 :: Num a => a mean?
15:03:47 <Inst> "if a is one of the types of number, then 50 can have type a"
15:03:51 <Inst> that's what the textbook says
15:04:12 <Inst> the reason it's confusing is because it can be read as "but a might not be a type of number"
15:04:21 <Franciman> Num a => a
15:04:36 <Inst> on :type 50, which really should just be :t 50
15:04:36 <Franciman> did you do typeclasses?
15:04:36 <geekosaur> basically you can pretend that the compiler sees fromInteger (50 :: Integer)
15:04:54 <Inst> I'm just wondering what it means mathematically
15:05:09 <Inst> if a is within the Set "number"
15:05:15 <Inst> but then it's cat theory not set theory
15:05:46 <geekosaur> it doesn't mean anything strictly mathematically, it's just a convenience so you don';t have to annotate every numeric literal with its intended type
15:05:54 <iteratee> It's programmatic, not mathematic. If there is an active instance of "Num" for a, then 50 can be of type a.
15:06:28 <Inst> what is meant by active instance of "num", i.e, by saying active you're implying it can also be inactive
15:06:44 <iteratee> It has to be imported somehow.
15:07:37 <Inst> so the type has to be declared into the program, but num is a fundamental type of Haskell
15:07:58 <Inst> say, let's assume there is some type that's not implemented
15:08:06 <Inst> for whatever reason :t gives that type
15:08:24 <Inst> but it's stating that the expression will fail if that type isn't active?
15:09:36 <iteratee> No. (Num a => a) means that for any type the compiler knows is a Num, the expression can be evaluated as that type.
15:11:02 <_bo> > can't see what's so infinite about `left` < Please disregard, figured it out
15:11:04 <lambdabot> <hint>:1:43: error: parse error on input ‘<’
15:11:07 <Inst> bleh, i'll reread the section, i skimmed it first after i couldn't understand what the "if a is one of the types of number, then 50 can have type a"
15:12:02 <iteratee> It's probably easier to understand "IsString" with the OverloadedStrings extension.
15:12:12 <iteratee> Num is doing something similar.
15:12:34 <monochrom> Inst: I think my http://www.cs.utoronto.ca/~trebla/CSCC24-2021-Summer/04-haskell-types-2.html helps. I am not going to commit to wordings like "set of types" or "set of methods" though (you see the problem?).
15:13:25 <iteratee> > 50 :: Rational
15:13:27 <lambdabot> 50 % 1
15:13:33 <iteratee> > 50 :: Double
15:13:34 <lambdabot> 50.0
15:13:38 <iteratee> > 50 :: String
15:13:40 <lambdabot> error:
15:13:40 <lambdabot> • No instance for (Num String) arising from the literal ‘50’
15:13:40 <lambdabot> • In the expression: 50 :: String
15:14:59 <jollygood2> you could write a (completely silly) Num instance for String, and then 50 :: String would compile. you could also write it for your own, say, bignum type, and you could use numerical literals and all the math operators with it
15:15:21 <iteratee> @jollygood2 exactly
15:15:22 <lambdabot> Unknown command, try @list
15:15:53 <geekosaur> there is such an instance in one of the "acme" packages
15:16:16 <geekosaur> there's also an instance for Applicatives that is occasionally loaded into the bot
15:17:04 × MQ-17J quits (~MQ-17J@2607:fb90:1d89:67a9:1cd1:a18:a57f:e102) (Read error: Connection reset by peer)
15:17:28 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
15:18:34 stengah parts (~stengah@user/stengah) ()
15:25:33 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:e2c3:1bcc:edee:e9f1) (Quit: WeeChat 2.8)
15:25:42 Guest87 joins (~Guest87@211.165.185.81.rev.sfr.net)
15:26:42 × Farzad quits (~FarzadBek@178.131.24.144) (Ping timeout: 265 seconds)
15:28:31 <Guest87> hello, I'm trying to choose a pretty printing library, my requirements are basically a nice way to handle indentation (think JSON). custom formatting for data types would be nice
15:29:09 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
15:29:38 <Guest87> prettyprinter seems to be the "default" choice?
15:31:11 <lyxia> yes
15:37:10 <ph88> when i set the max memory option on the runtime system is the garbage collector doing extra effort to clear up memory once the limit is hit ?
15:39:40 × Guest55 quits (~Guest55@78.198.4.122) (Quit: Client closed)
15:40:29 Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
15:41:33 × emliunix quits (~emliunix@101.88.126.148) (Remote host closed the connection)
15:43:12 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds)
15:43:46 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
15:43:47 × Guest87 quits (~Guest87@211.165.185.81.rev.sfr.net) (Quit: Client closed)
15:44:26 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
15:45:01 gehmehgeh joins (~user@user/gehmehgeh)
15:45:03 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc)
15:45:13 slowButPresent joins (~slowButPr@user/slowbutpresent)
15:45:43 lavaman joins (~lavaman@98.38.249.169)
15:46:15 emliunix joins (~emliunix@101.88.126.148)
15:48:27 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
15:51:23 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
15:52:26 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
15:54:06 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
15:56:34 <janus> i would argue 'pretty' is more default since it is in the haskell org?
15:56:49 × rond_ quits (~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) (Quit: Client closed)
15:57:17 <janus> tree-diff uses pretty and i like tree-diff
15:57:32 <Franciman> @hackage tree-diff
15:57:33 × pbrisbin quits (~patrick@199.66.179.206) (Read error: Connection reset by peer)
15:57:33 <lambdabot> https://hackage.haskell.org/package/tree-diff
15:57:43 <Franciman> so neado
15:57:46 <Franciman> tusen takk
15:57:48 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
15:58:11 emf joins (~emf@2620:10d:c090:400::5:7558)
15:58:28 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
15:58:33 ec joins (~ec@gateway/tor-sasl/ec)
15:59:27 <monochrom> pretty has the convenience factor that it comes with GHC.
15:59:45 <Franciman> but if you use cabal, that is not so important
16:00:06 × hjulle[m] quits (~hjullemat@2001:470:69fc:105::1dd) (Quit: You have been kicked for being idle)
16:00:06 × dualinverter[m] quits (~dualinver@2001:470:69fc:105::16a7) (Quit: You have been kicked for being idle)
16:00:14 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
16:01:32 × _bo quits (~bo@217.18.216.247) (Read error: Connection reset by peer)
16:03:50 pbrisbin joins (~patrick@pool-173-49-152-45.phlapa.fios.verizon.net)
16:04:35 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 264 seconds)
16:05:17 segfaultfizzbuzz joins (~segfaultf@135-180-0-138.static.sonic.net)
16:06:28 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
16:12:20 Farzad joins (~FarzadBek@37.49.149.40)
16:13:42 × jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Remote host closed the connection)
16:15:15 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
16:15:42 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
16:16:15 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:16:54 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
16:17:11 × pooryorick quits (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 246 seconds)
16:17:12 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
16:17:23 hendursaga joins (~weechat@user/hendursaga)
16:17:36 × awth13 quits (~awth13@user/awth13) (Quit: ZNC 1.8.2 - https://znc.in)
16:17:47 <dminuoso> To be fair, prettyprinter has a fair lightweight dependency footprint. It's very likely it wont introduce additional transitive dependencies for most projects.
16:17:51 tommd joins (~tommd@75-164-130-101.ptld.qwest.net)
16:18:00 FarzadBekran_ joins (~FarzadBek@37.49.149.40)
16:18:30 × FarzadBekran_ quits (~FarzadBek@37.49.149.40) (Remote host closed the connection)
16:19:19 pooryorick joins (~pooryoric@87-119-174-173.tll.elisa.ee)
16:19:22 hyiltiz joins (~quassel@31.220.5.250)
16:19:43 <dminuoso> And it addresses certain issues that pretty has
16:20:54 × Farzad quits (~FarzadBek@37.49.149.40) (Ping timeout: 258 seconds)
16:21:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
16:22:01 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:23:59 ub joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
16:24:41 awth13 joins (~awth13@user/awth13)
16:25:56 × ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 245 seconds)
16:27:05 × ubert quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Quit: ubert)
16:27:06 ub is now known as ubert
16:27:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
16:27:29 ubert1 joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
16:28:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:28:35 × ubert quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Remote host closed the connection)
16:28:35 ubert1 is now known as ubert
16:30:01 <Profpatsch> dminuoso: geekosaur https://github.com/yesodweb/wai/pull/858
16:31:57 <Profpatsch> Oh how I wish for haddock to have comments haha
16:32:11 <Profpatsch> Maybe there is a way to add them via a third-party server and a browser plugin
16:32:31 <Profpatsch> The PHP doc comments are such a chaotic good feature
16:33:22 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
16:33:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:34:02 × coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
16:35:57 timCF_ joins (~timCF@m91-129-111-87.cust.tele2.ee)
16:36:46 × emliunix quits (~emliunix@101.88.126.148) (Remote host closed the connection)
16:39:37 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
16:40:12 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
16:42:29 seer joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
16:42:38 seer is now known as InstX1
16:42:40 <InstX1> hi guys
16:42:51 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
16:42:54 <InstX1> i got a message back from the Haskell Foundation, some nice resources for non-professional programmers
16:42:55 <InstX1> https://github.com/haskellfoundation/HaskellSchool
16:43:27 <InstX1> there's also Professor Graham Hutton's lectures on Haskell
16:43:41 <InstX1> https://www.youtube.com/watch?v=TdpBqhlgqGI
16:43:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
16:44:31 <InstX1> They seem to be more concerned about supporting and retaining existing Haskell programmers, though
16:44:40 <InstX1> and I can understand why they can make it an emphasis
16:45:08 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:45:56 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
16:46:17 alzgh joins (~alzgh@user/alzgh)
16:48:29 <InstX1> they feel like the ecosystem etc and ide isn't sufficient to keep new haskellers, though
16:48:30 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds)
16:49:21 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
16:50:01 × xff0x quits (~xff0x@2001:1a81:5213:b200:9d6e:5b31:ca1b:5892) (Ping timeout: 252 seconds)
16:50:07 <unit73e> InstX1, meaning the ecosystem and IDEs are kind of lacking?
16:50:33 <InstX1> i can't even get a proper install of the IDE on windows
16:50:35 <unit73e> vscode does a good job for beginners imo
16:50:41 <InstX1> there used to be a nice setup thing
16:50:46 xff0x joins (~xff0x@2001:1a81:5213:b200:3795:60dd:993c:5506)
16:50:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
16:50:54 <unit73e> hum I don't use windows so I wouldn't know
16:50:54 <InstX1> yeah ut beginners need ghci or another interpreter
16:51:02 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
16:51:06 <unit73e> there's also IntelliJ
16:51:16 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:51:22 <unit73e> but I feel like vscode does a better job
16:51:34 <unit73e> regardless, imo that's the least of a beginners worries
16:52:09 <InstX1> textbooks seem fine, i'm really enjoying the basics book written by a guy teaching at cambridge, though
16:52:20 ec_ joins (~ec@gateway/tor-sasl/ec)
16:52:33 × Cajun quits (~Cajun@user/cajun) (Quit: Client closed)
16:52:55 <InstX1> the problem is, though, is that it seems equivalent to the first third or first half of a proper textbook, monads don't show up in the index
16:53:03 <unit73e> doing things different is perhaps the biggest stop gap of all, like having to do IO in an IO monad, or learning that you can't just have state out of nowhere, and so on
16:53:39 <unit73e> I think state is the next big problem for new users
16:54:03 <unit73e> because you have to carry it around and for imperative programmers that's not a thing
16:54:09 <InstX1> the target audience i'm talking about
16:54:17 <InstX1> doesn't even know what state is
16:54:41 <InstX1> i'm coming from effectively a non-programmer paradigm, so i annoyed people by arguing that haskell should target non-coders etc
16:55:19 <unit73e> you do have to start somewhere
16:55:57 <yushyin> every time i look into this channel it's the same discussion on and on :D
16:56:18 <unit73e> for a non-programmer it doesn't really matter which you choose first I think but haskell is obviously structured differently, by "joining functions"
16:56:29 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
16:56:46 <unit73e> yushyin, lol yeah. I use it mostly for questions and to show my SDL examples
16:59:33 <zincy> Is it normal for Haskell packages to rely on types of other packages? Someone is asking me to "unify" the types with their library and I just don't feel I have the experience to know if it is a good idea or not.
16:59:48 <zincy> https://github.com/therewillbecode/poker-maison/issues/20
17:01:05 <geekosaur> if you use other packages you generally have to use their types
17:01:36 <zincy> Yeah so the question is really should I use this other package then
17:02:17 <geekosaur> depends. they're trying to build a poker ecosystem; up to you whether you want to contribute to that ecosystem
17:02:30 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:02:38 <maerwald> that's where weak types have an advantage... they're more compatible
17:02:43 <geekosaur> in general not duplicating effort is a good thing, it's just annoying for existing packages
17:02:48 <maerwald> compare lazy bytestring with streaming types
17:03:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:04:41 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:05:25 × xff0x quits (~xff0x@2001:1a81:5213:b200:3795:60dd:993c:5506) (Ping timeout: 260 seconds)
17:05:57 zebrag joins (~chris@user/zebrag)
17:05:59 xff0x joins (~xff0x@port-92-195-26-90.dynamic.as20676.net)
17:08:44 ub joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
17:09:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:10:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:11:44 <zincy> Cheers!
17:11:59 wonko joins (~wjc@62.115.229.50)
17:12:02 benin joins (~benin@183.82.179.164)
17:12:15 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:12:45 ec_ joins (~ec@gateway/tor-sasl/ec)
17:15:14 econo joins (uid147250@user/econo)
17:15:20 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:16:25 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:17:08 × ubert quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Remote host closed the connection)
17:19:24 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:19:57 cads joins (~asdf@ip-64-72-99-234.lasvegas.net)
17:20:19 × ub quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Ping timeout: 258 seconds)
17:20:41 suryasiva joins (~suryasiva@49.206.117.198)
17:21:45 × suryasiva quits (~suryasiva@49.206.117.198) (Client Quit)
17:21:54 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:21:58 <cads> hey all, a strong monad M has a strength transform S_A,B : A x SB -> S(AxB) which makes M compatible with the underlying product operation "In one way"
17:22:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:23:40 suryasiva joins (~suryasiva@49.206.117.198)
17:23:55 <cads> the strength transform is usually expressed via its components S_(A, B). But what are the two functors that S transforms between?
17:27:58 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
17:28:10 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:28:26 aegon joins (~mike@174.127.249.180)
17:28:37 <ManofLetters[m]> are you offending us?
17:28:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:28:57 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
17:29:18 alzgh joins (~alzgh@user/alzgh)
17:29:54 <cads> ManofLetters[m], no offense is meant, I am trying to understand strong monads because as far as I can tell, they are the "mathy" version of applicative functors
17:30:38 × suryasiva quits (~suryasiva@49.206.117.198) (Quit: suryasiva)
17:32:34 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
17:33:11 <awpr> a) looks to me like it's `_1 x M _2` ~> `M (_1 x _2)` (both of those being functors from HaskxHask to Hask); b) applicative <=> lax monoidal functor; and c) all Haskell `Functor`s are "strong" in this way, because `\x fy -> fmap (x,) fx`
17:33:22 <ManofLetters[m]> is S_A is a natural transformation with signature S_A : A x SB -> S(AxB), then it's a natural transformation from functor \K . K x S(B_ to functor \K . S(K x B), where is S is, probably, an arbitrary functor
17:33:41 <ManofLetters[m]> * \K . K x S(B)
17:34:07 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
17:34:07 <ManofLetters[m]> and I didn't say what B is and where it's quantified; hmm
17:34:30 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 258 seconds)
17:34:40 <ManofLetters[m]> so probably awpr has a fuller picture
17:34:42 <awpr> if we're talking about functor strength, the `M` (which I renamed from `S` should be fixed to the particular functor we have a strength for)
17:34:56 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:35:01 <awpr> parens in the wrong place, but close enough
17:35:23 hyiltiz joins (~quassel@31.220.5.250)
17:36:29 ec_ joins (~ec@gateway/tor-sasl/ec)
17:37:31 <cads> I think I have conflated the notion of Strong Monad, with the notion of a Lax Functor With Strength. The Strong Lax Functor is already an applicative, even if it has no monadic multiplication and unit transforms.
17:38:04 <ph88> anyone know if it's possible to get the remainder of the unparsed text with megaparsec ?
17:39:13 <ManofLetters[m]> cads: so, for any functor S, the 2-category has S-strength (the functor S is a strong lax functor?), if for any 1-object B, there is a natural transformation from functor \K . K x S(B) to \K . S(K x B) ???
17:39:21 meltedbrain_y2k joins (~tekserf@94.73.36.197)
17:40:06 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:40:06 <ManofLetters[m]> (putting aside Hask)
17:40:55 <cads> ManofLetters[m], I can't understand 2-categorical or delooped definitions of strength yet - I am trying to work with the naive "concrete" definition here, which defines the strength transform within the monoidal category itself https://ncatlab.org/nlab/show/strong+monad#concrete_definition
17:41:07 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:41:08 <ManofLetters[m]> and I guess, in case of Hask, it means that the real Haskell functors can handle free variables quantified somewhere outside
17:41:23 <ManofLetters[m]> ok, have fun :)
17:42:04 <ManofLetters[m]> (where S(B) would be the free variables)
17:42:20 <ManofLetters[m]> (or, rather, B would be the free variables)
17:44:46 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
17:45:06 alzgh joins (~alzgh@user/alzgh)
17:45:58 <cads> One thing we know about the transform: its components are indexed by two objects A, B of the underlying category.
17:46:41 <cads> The components of the transform of an ordinary functor have one one index. This suggests that the strength could be a transform on a bifunctor
17:46:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
17:46:54 × _xor quits (~xor@72.49.199.147) (Read error: Connection reset by peer)
17:47:07 × Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Remote host closed the connection)
17:47:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:48:07 <ManofLetters[m]> if B (or A) is fixed, it's an ordinary functor
17:48:33 <awpr> yeah, I wrote that bifunctor earlier
17:48:56 <awpr> (a bifunctor is an ordinary functor, just that its source is a product category)
17:50:00 <ManofLetters[m]> isn't it usually contravariant on the second argument, though?
17:50:12 <awpr> no, that's profunctor, and the first argument
17:50:19 <cads> awpr, did you you didn't write the bifunctor's signature? I missed that / could not parse your speech
17:50:39 <cads> err s/you didn't//
17:50:57 <awpr> I used the admittedly confusing "type expression with holes" notation that pops up in ncatlab a lot
17:51:05 _xor joins (~xor@72.49.199.147)
17:51:08 <ManofLetters[m]> apparently naming differs between people: https://en.wikipedia.org/wiki/Functor#Bifunctors_and_multifunctors
17:51:34 <ManofLetters[m]> afk
17:52:13 <cads> I guess the domain of the transform is the bifunctor Prod_H . (1_h x T)
17:52:59 <cads> this takes an object A and an TB into the product A x TB
17:53:13 <awpr> sorry, got distracted
17:53:29 zer0bitz_ joins (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi)
17:53:33 <cads> and the codomain of the transform is the bifunctor T . Prod_H
17:53:54 <cads> taking products A x B into T(A x B)
17:53:56 <awpr> `\A B -> A x T B` which is HaskxHask -> Hask
17:54:15 <awpr> it's a composition of two functors
17:54:21 <cads> correct
17:54:44 <cads> can you confirm I have the codomain right?
17:55:34 <awpr> looks right, when looking at it as taking product objects to Hask objects
17:56:11 × zer0bitz quits (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) (Ping timeout: 264 seconds)
17:58:27 <cads> to sum up, we have that a T strength on an H-endofunctor T is a natural transform of type M : (1_H x T);Prod_h -> Prod_h;T, where Prod_H : H^2 -> H is the H product.
17:58:52 Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
17:59:33 <cads> that is way less painful than I thought!
18:00:51 Cajun joins (~Cajun@user/cajun)
18:01:51 <cads> thanks for the help, awpr ManofLetters[m]. Sorry for the impedance mismatch between category speech and hask speech, and sorry for my difficulty understanding hask-speech. I think awpr as good as gave me this exact answer, but I couldn't really parse it. In that case, sorry for 'catsplaning' this topic, lol
18:02:38 cads 's goal is to improve the nlab and wikipedia entries on strengths, applicatives, and strong monads
18:06:02 × Skyfire quits (~pyon@user/pyon) (Quit: WeeChat 3.3)
18:06:39 coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
18:06:39 <ManofLetters[m]> a lofty goal
18:07:38 <maerwald> strong monads, super monads, ...
18:07:44 <maerwald> we have them all
18:09:22 <cads> more of a nitpick - those articles all define monadic strength via its components rather than pointing out which functors we are transforming between
18:09:45 <cads> A skilled reader like awpr can immediately see that we are transforming between two T-modified versions of the underlying category's product bifunctor
18:10:06 <cads> I am going to paint that picture explicitly, for the benefit of readers that can't do that functorial gymnastics just yet
18:10:54 <cads> probably gonna piss off the article maintainters because they probably think the translation is trivial.. but it's tripped me up for quite a while, lol
18:11:35 <monochrom> That is the same tension between speaking like "x + c*y where the variables are x and y" and speaking like "define f(x,y) = x + c*y".
18:12:32 <cads> monochrom, right, in your example we're backgrounding the lambda operator, while in my example we're backgrounding the product bifunctor
18:13:33 <monochrom> And between "f :: (Int,a) -> Either a Bool, natural in a and b" and "define F(a) = (Int,a), define G(a) = Either a Bool, so f is natural from F to G"
18:14:02 ubert joins (~Thunderbi@91.141.37.135.wireless.dyn.drei.com)
18:14:04 <monochrom> s/ and b/
18:16:35 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds)
18:17:45 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
18:20:56 <cads> I guess there are two ways about it. First we could depend on readers to immediately recognize components of transform between a modified bifunctor, to immediately recognize which bifunctor was modified, and how. Since the choice of bifunctor is 'obvious', and the way that functor is modified is 'apparent', that is the choice the authors have made.
18:22:21 <monochrom> On the bright side, it is mechanical.
18:22:27 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
18:22:41 <cads> monochrom, mechanical as in "there are these components and they only fit one way"?
18:23:32 <monochrom> Also recall that people don't have problem with "∂(x + y*c)/∂y = c" without being told, without even caring about, \x y -> x + y*c.
18:24:50 <monochrom> I don't know about only one way. But I know about mechanical.
18:28:55 <monochrom> In contrast, there is only one function from programs to "does it halt?", and it is not mechanical.
18:29:09 <cads> In the second approach, we mention the M: Prod.(Id, T) -> T.Prod signature. Then we write its action on the component variables, as before.
18:30:24 <cads> and I don't think this is so obvious or mechanical, since when I asked about the signature it led to a bunch of hask-handwaving, rather than a clear and simple answer
18:31:22 <monochrom> But I don't write like Prod.(Id, T) or T.Prod.
18:31:44 <monochrom> I just define, if necessary, F(A,B) = AxTB, G(A,B) = T(AxB).
18:34:43 × haritz quits (~hrtz@user/haritz) (Ping timeout: 265 seconds)
18:35:16 Midjak joins (~Midjak@82-65-111-221.subs.proxad.net)
18:35:21 tremon joins (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl)
18:36:06 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
18:36:37 <monochrom> "s :: ∀a,b. a x T b -> T (axb)" is no less readable than "unzip :: ∀a,b. [(a,b)] -> ([a],[b])"
18:38:22 <cads> lol, if we applied readability metrics to those senstences, we would find that both sentences are about equally hellish
18:38:27 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
18:38:49 <mrianbloom> Is there an easy way to convert between Massiv and Accelerate host arrays?
18:39:05 <monochrom> Um, talk to programmers? Who here finds "unzip :: ∀a,b. [(a,b)] -> ([a],[b])" hellish?
18:39:45 <monochrom> In fact, even stronger: Who here finds "unzip :: [].Prob => Prob.([], [])" better?
18:39:48 <cads> monochrom, can we agree that programmers are very poor judges of readability, or else they would be making a living writing prose?
18:40:06 <monochrom> But prose is not formula.
18:40:54 <monochrom> Or how about you? Do you prefer "unzip :: [].Prob => Prob.([], [])"? Seriously?
18:41:35 <monochrom> Below this the undertone is "how far do you go in writing functors in pointfree form?"
18:42:02 haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
18:42:02 × haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
18:42:02 haritz joins (~hrtz@user/haritz)
18:42:23 cads is thinking of a readability metric that can judge between a good prose explanation of a function, and a bad formulaic explanation
18:42:47 <cads> but the reader is more important than the text and drives the metric
18:43:59 <monochrom> The major readers of ncatlab are mathematicians and programmers, neither group appreciating T.Prod.
18:44:22 × zer0bitz_ quits (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) (Read error: Connection reset by peer)
18:44:45 <monochrom> Instead, the mathematician group appreciates leaving "A x T B" as is, and the programmer group appreciates introducing an intermediate "F(A,B) = A x T B".
18:44:48 max22- joins (~maxime@2a01cb0883359800fe2c7b136063d78c.ipv6.abo.wanadoo.fr)
18:44:56 <cads> monochrom, I appreciate it, though I'll grant that the reason I appreciate it is that before understanding it, I couldn't understand the article
18:45:44 <cads> but the reason I couldn't understand the article didn't have to do with that specific definition, but rather inexperience with manipulating bifunctor and their natural transforms
18:45:51 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
18:47:19 <cads> Now, if I modify the article to be more explicit about the bifunctor, it would definitely help my former self. But without knowing how representative of other readers my own confusion was, the value I add is dubious.
18:47:24 × kuribas quits (~user@ptr-25vy0i7zawtky0bq46n.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
18:47:32 <cads> I will likely do it, to see if the other editors hate it.
18:49:35 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
18:49:43 <cads> monochrom, remember when you said that refactoring should not remove important context, just because my inexperience makes the extra context hard to keep track of?
18:49:48 oats parts (~thomas@user/oats) (Leaving)
18:50:27 <cads> Here I am likely doing the opposite - refactoring to add context or dubious value, again because of inexperience. My inexperience makes me think other readers need that context.
18:53:20 <unit73e> I find haskell to be very mathematical
18:53:20 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 260 seconds)
18:54:04 <geekosaur> discrete math helps a bit. CT not necessary, really
18:54:44 <monochrom> school algebra skills. or even respect.
18:55:49 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:00:55 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
19:01:42 hyiltiz joins (~quassel@31.220.5.250)
19:03:05 Farzad joins (~FarzadBek@37.49.149.40)
19:04:28 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
19:04:42 <maerwald> @hoogle respect
19:04:43 <lambdabot> Network.AWS.AutoScaling.SetInstanceHealth sihShouldRespectGracePeriod :: Lens' SetInstanceHealth (Maybe Bool)
19:04:43 <lambdabot> Ormolu.Printer.Meat.Declaration p_hsDeclsRespectGrouping :: FamilyStyle -> [LHsDecl GhcPs] -> R ()
19:05:02 <[exa]> F
19:05:56 <cads> monochrom, The other reason I appreciate P(1xT) -> TP is because it better shows the symmetry between the domain and codomain of the transform. It's like the strength lets us "semicommute" an instance of (1xT) left through P to obtain TP, but it only works in this one direction.
19:06:20 <cads> I don't see this algebraic "motion" based description as clearly looking (A x TB) -> T(A x B).
19:07:25 <[exa]> cads: you can help the readers a bit by avoiding the symmetrical `x` symbol
19:08:45 × Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Remote host closed the connection)
19:08:56 <cads> [exa], how would you do that?
19:09:53 <[exa]> (A -x TB) -> T(A -x B) -- looks almost like functions
19:10:34 <[exa]> ( btw this might be off, I didn't read much of the scrollback :] )
19:10:46 Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
19:11:29 <cads> I was thinking of using the (A x -) functor, but doing it wasn't going to make things easier to understand
19:14:44 <cads> [exa], I don't think you should waste much time on the scroll back, I was picking nits which live on the back of a flea which lives on the back of a verminous plague rat
19:15:51 ec_ joins (~ec@gateway/tor-sasl/ec)
19:19:08 <[exa]> ok good. :D
19:20:41 × Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Remote host closed the connection)
19:21:48 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
19:22:33 guydb89 joins (~guy@98.198.128.24)
19:23:51 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
19:25:07 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit)
19:28:45 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:29:24 lortabac joins (~lortabac@2a01:e0a:541:b8f0:5edd:2a99:160f:84d2)
19:30:13 ec_ joins (~ec@gateway/tor-sasl/ec)
19:33:59 <InstX1> i'm so giddy
19:34:03 <InstX1> for christ's sake
19:34:37 <cads> InstX1, por why?
19:34:40 <InstX1> i've tried learning programming with a metric ton of languages, this is the first time i've gotten through so much in so little time
19:34:52 <monochrom> Oh congrats.
19:35:14 <cads> v. nice!
19:35:37 <InstX1> haskell is going significantly faster than the C++ for dummies book I had, and I spent like 2-3 weeks on Stroustrup's intro programming with C++ book
19:35:41 <monochrom> Yes one of Haskell's strength (and FP's, and Logo's) is that if imperative programming fails you, Haskell can help.
19:36:04 <InstX1> iirc that was why Lisp was big as a teaching language, no?
19:36:15 <[exa]> yep
19:36:16 <monochrom> Although, I am not sure that Stroustrup's is really all that intro level.
19:36:38 <monochrom> Or K&R
19:36:40 <InstX1> he has an intro-level book
19:37:28 <[exa]> InstX1: the best way to learn c++ is by need, you first learn assembly and then try to save code volume by expressing stuff in the code generators (C, C with RAII, objects, templates, and suddenly you know a pretty practical subset of C++)
19:37:51 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:37:59 <[exa]> I wouldn't recommend anyone to take serious C++ before knowing a functional language
19:38:01 <InstX1> like, for C++, "The C++ Programming Language" (advanced / intermediate), "Programming: Principles and Practice Using C++" (beginner), "A Tour of C++" (iirc, he has a tour book that covers C++17
19:38:13 <InstX1> it's more a problem with his style
19:38:20 <InstX1> i have an easier C++ for beginners book
19:38:31 <InstX1> i could breeze through it, but i'm told that one gives you bad habit
19:38:32 <InstX1> s
19:39:00 <InstX1> Stroustrup basically treats his intro textbook as if he were giving a lecture
19:39:11 <InstX1> unless you were talking about Programming: Principles and Practice @Monochrom
19:39:14 <monochrom> But I love lectures.
19:39:29 <monochrom> I had "The C++ Programming Language" in mind.
19:39:47 <InstX1> i mean more, I know Carnegie Mellon uses his intro book
19:40:09 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
19:40:32 <InstX1> it's more, with a textbook, you want to be able to read stuff out of order, skim for key information, and so on
19:41:07 <monochrom> There are two sides of "out of order".
19:41:08 <InstX1> he just combines ideas and digresses (fruitfully, in an actual lecture setting) so it's hard to parse his stuff
19:41:41 <InstX1> i like to read textbooks like a windows file transfer time estimator
19:41:50 <InstX1> read ahead, read back, review, etc
19:42:08 <[exa]> stop at 99% and try to find the last piece
19:42:12 <monochrom> I mean, sometimes it is unrealistic to. Dependencies exist. Intrinsic one.
19:42:13 <[exa]> yes, good. :D
19:42:36 <monochrom> For example, good luck with "read Functor before type classes", obviously.
19:43:16 <monochrom> Foldable and Functor could be in whatever order you like, sure.
19:43:28 <InstX1> i'll put in an example, i'm trying to learn classes, etc, but he gives you an introduction to classes in a chapter completely unrelated to classes
19:43:39 <monochrom> But good luck with "Foldable before Monoid", too.
19:43:41 <[exa]> monochrom: that can be done, with a bit of heresy you can get the idea to e.g. C# people with IFunctor, IFoldable
19:43:43 <InstX1> it's well-woven together, arguably a piece of art if treated purely sequentially
19:43:49 × mei quits (~mei@user/mei) (Ping timeout: 252 seconds)
19:43:55 Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
19:44:09 <InstX1> and when you get to the actual classes chapter
19:44:19 <InstX1> you have to know about the introduction, which you can only find via index
19:44:53 <monochrom> But the IFunctor interface cannot be expressed in Haskell. (Nor the Functor class in C#.)
19:45:13 <monochrom> In a category theory book for mainstream programmers, I would use IFunctor, yes.
19:45:35 slack1256 joins (~slack1256@45.4.2.52)
19:45:38 <monochrom> But in a Haskell book? I'd better talk about things that can be written in Haskell.
19:46:22 <monochrom> Fortunately, there is no market for a category theory book for mainstream programmers, so trying to use IFunctor remains hypothetical!
19:46:28 <slack1256> Is there a type level `elem` function defined somewhere on base? Just for type level lists.
19:47:26 <[exa]> monochrom: well at worst it allows you to motivate the people with something like "see how much this sucks?"
19:48:45 <[exa]> the main target is to reduce the gap before the moment when it clicks for as many people as possible
19:50:03 <monochrom> OK, the difference is between "functor" and "Functor".
19:53:09 <InstX1> by the way, just curious
19:53:21 <InstX1> has there been any attempts to teach haskell starting from main / do?
19:54:02 <InstX1> i'm also wondering if imperative languages might be more interesting if they were taught starting from abstractions, tbh
19:54:13 random-jellyfish joins (~random-je@user/random-jellyfish)
19:54:34 <lortabac> slack1256: not in base, AFAIK, but there are several on Hackage
19:54:38 <[exa]> (implying imperative languages have reasonable abstractions)
19:54:42 <[exa]> InstX1: ^
19:54:52 × Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Remote host closed the connection)
19:55:32 <monochrom> Modula-3 and Ada do.
19:55:54 <InstX1> i'd have taken far easier to C++ if they started by teaching classes asap
19:56:22 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
19:57:07 <monochrom> I have seen 1st-year 1st-language courses teaching classes very early. It's a failure. Students get all the wrong ideas.
19:57:58 <monochrom> Then again, that may be in total agreement with "asap", i.e., 1st-year 1st-language early is earlier than "p".
19:58:10 <[exa]> ah good point about modula.
19:58:14 <InstX1> i guess it depends on the person, #1, #2, then why do we keep on starting haskell with abstractions?
19:58:32 <monochrom> But we don't start Haskell with abstractions.
19:58:38 <InstX1> or perhaps at an earlier stage, people were trying the Haskell Hello World route
19:58:44 <monochrom> Functions? Yes. Abstractions? No.
19:58:45 <InstX1> Haskell starts with expressions
19:58:55 <monochrom> That is not an abstraction.
19:59:13 <monochrom> Not in the "functor is a abstraction" sense.
19:59:28 <monochrom> C also starts with expressions.
19:59:37 <monochrom> In fact, C has nothing except expressions.
19:59:51 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
20:00:14 <monochrom> printf("hello world\n") is an expression.
20:00:48 <monochrom> and also a function call, etc etc. Not so different from Haskell's "double 1.5"
20:00:48 Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
20:01:29 <[exa]> InstX1: I was starting the course with quick practical demystifiers so that people don't consider `do` to be magicks and the typeclass overloading seems natural. Interleaved with samples from gloss.
20:01:47 <InstX1> which course?
20:01:57 <[exa]> the one I was teaching. :D
20:01:57 × slack1256 quits (~slack1256@45.4.2.52) (Remote host closed the connection)
20:02:20 <InstX1> how did that work?
20:02:41 <[exa]> anyway, I'm really not sure how to structure the stuff right either. This IMO worked (student feedback was very good)
20:02:49 <InstX1> also, i'm curious
20:03:06 <InstX1> i wrote some ignorant gobbledegook about how it might be interesting to start with main/do
20:03:19 <InstX1> then move into concepts etc and return to make do etc like an imperative language course
20:03:27 <InstX1> but one big advantage might be, you go over IO early
20:03:37 <InstX1> is haskell very good for image processing?
20:03:48 <[exa]> there's an inconvenient balance between doing it right and not boring the usual late-teenagers and early-20ers to death
20:04:19 <InstX1> like, one of the annoyances i had with imperative languages is how long it takes for you to get to IO
20:04:32 <InstX1> IO-ing a file and then transforming it somehow might be a cool party trick
20:04:36 <[exa]> re image processing, I'd say the ecosystem around repa is cool but afaik there's no big community
20:04:59 <InstX1> but it'd have to be something haskell is good at and can impress the kiddies
20:05:01 <[exa]> anyway you can literally write a function that does something like `interact`, just for an image, and give it to the students
20:05:07 <InstX1> when you're dealing with kids, they want to make games
20:05:09 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 258 seconds)
20:05:16 <[exa]> +1, Gloss helps
20:05:21 <InstX1> when you're dealing with people who are somewhat older
20:05:36 <InstX1> what they really want is file manipulation
20:06:04 <InstX1> fastest way to show it's practical might be to have a template for a resume etc or something you want to add to a bunch of MS Word files
20:06:14 <[exa]> they sometimes get sold on the fact that `interact $ show . length . lines` won't run out of memory
20:06:30 <InstX1> i don't get what it means ::sheepish::
20:07:07 <[exa]> for elders it's actually nice to show the monads as overloaded semicolons, they appreciate how much if()s and other repeated nonsense can be saved
20:08:06 <[exa]> finally, hardcore compsci people are sold by standard library, namely definitions like this: https://hackage.haskell.org/package/containers-0.6.5.1/docs/src/Data.Graph.html#scc
20:08:22 juhp joins (~juhp@128.106.188.220)
20:10:40 <InstX1> i see
20:11:01 × fendor quits (~fendor@91.141.32.154.wireless.dyn.drei.com) (Remote host closed the connection)
20:11:21 <InstX1> how hard is it, say, to get to the point where you can IO a jpeg/png, then use haskell to do a cool post-process so that your students can post it onto instagram?
20:12:15 <[exa]> comparatively easy
20:12:51 <[exa]> you need to know vectors (which is moreless trivial for whoever already did some programming) and e.g. JuicyPixels
20:13:24 Guest38 joins (~Guest38@pool-100-19-29-41.phlapa.fios.verizon.net)
20:13:27 <[exa]> this is full of effects https://github.com/RaphaelJ/friday
20:13:47 ski_ is now known as ski
20:14:32 <Guest38> @lamb
20:14:32 <lambdabot> Unknown command, try @list
20:14:42 <Guest38> @lambdabot help
20:14:42 <lambdabot> Unknown command, try @list
20:15:21 × jollygood2 quits (~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
20:15:38 <[exa]> Guest38: you can /query lambdabot and try the commands privately
20:17:38 × Guest38 quits (~Guest38@pool-100-19-29-41.phlapa.fios.verizon.net) (Client Quit)
20:18:17 <InstX1> what i had more in mind was to figure out how to custom craft an effect based on the more abstract material you were teaching your students
20:19:03 <[exa]> nah, really just read the docs of `friday` package
20:19:31 <InstX1> no, i mean, have the students custom craft them
20:19:43 <[exa]> do they know some of the pixel graphics practice?
20:20:28 <[exa]> with juicypixels there's a literal `pixelMap` function they can use to change the colors as they want
20:20:47 <[exa]> (ok maybe the name is different)
20:21:04 <[exa]> ah nope. https://hackage.haskell.org/package/JuicyPixels-3.3.6/docs/Codec-Picture.html#v:pixelMap
20:21:26 <[exa]> the example there is a brightness filter
20:21:30 acidjnk_new joins (~acidjnk@p200300d0c703cb959894c42690fc4f0f.dip0.t-ipconnect.de)
20:23:07 Pdroman_ joins (~Android@93.red-79-156-174.staticip.rima-tde.net)
20:23:58 × wonko quits (~wjc@62.115.229.50) (Ping timeout: 252 seconds)
20:25:44 <InstX1> also, if you might consider my idea, just don't have them do transforms in real time or in demonstrations because if the algorithms produce something unexpected, it might be embarrassing or dangerous on a professional level
20:26:40 ArctVaulMarsHMPJ joins (~pjetcetal@128-71-225-36.broadband.corbina.ru)
20:27:28 × ArctVaulMarsHMPJ quits (~pjetcetal@128-71-225-36.broadband.corbina.ru) (Read error: Connection reset by peer)
20:27:54 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
20:28:21 hololeap joins (~hololeap@user/hololeap)
20:28:36 floridmarshmallo joins (~nate@pool-100-19-29-41.phlapa.fios.verizon.net)
20:28:49 <[exa]> ah like I'd have the students code some dope instagram filters :]
20:28:54 <[exa]> could work.
20:29:09 <[exa]> might make a good homework
20:30:15 <[exa]> why embarassing though? (it's pretty normal that several first versions of what you code may be broken AF)
20:32:29 <iteratee> is there a canonical LTR equivalent of $ and $! ?
20:33:51 <[exa]> there's `&` but I've got no idea if there's `&!`
20:34:03 <aegon> whats a 'cononical' use of lambdaCase? I keep going through a loop of using case, thinking i can clean up the syntax with lambda case, then either realizing i should be using MaybeT instead or that lambda case doesn't save much and makes things harder to read
20:34:26 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: Lost terminal)
20:34:35 <aegon> iteratee: i also got suggested <&> by hlint a little while ago and never considered that it might exist, but its a neat control structure sometimes
20:34:42 <geekosaur> usually when you have a single parameter function that would do a case anyway
20:34:49 × floridmarshmallo quits (~nate@pool-100-19-29-41.phlapa.fios.verizon.net) (Quit: WeeChat 3.0)
20:35:11 <geekosaur> so instead of \x -> case x of ... do \case ...
20:35:31 <ski> iteratee : one could possibly argue that `$!' at least, and perhaps also `$', ought to be `infixl' ..
20:35:32 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
20:35:49 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:35:52 <iteratee> [exa], what library defines `&`?
20:35:53 <aegon> geekosaur: ah, that makes a ton of sense, thanks!
20:36:20 <InstX1> exa: accidentally deepfaking yourself
20:36:23 <InstX1> or looking like it is
20:36:29 <InstX1> accidentally screwing up and getting swastikas
20:36:29 <InstX1> etc
20:37:07 <ski> (.. i don't care much for `foo x $ bar y z $ blah'. but being able to write e.g. foldl' f z (x:xs) = foldl' f $! f z x $ xs could be nice)
20:37:40 <ski> @src foldl'
20:37:41 <lambdabot> foldl' f a [] = a
20:37:41 <lambdabot> foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
20:37:45 <[exa]> aegon: wow that's neat
20:37:53 <[exa]> iteratee: Data.Function i hope?
20:38:17 <ski> foldl' f a (x:xs) = (foldl' f $! f a x) xs -- currently, you could write it like this
20:38:22 <[exa]> InstX1: ah I thought you're after normal filters, not neural-network madness
20:38:33 <InstX1> i'm a non-programmer
20:38:38 <InstX1> i just wonder about what could go wrong
20:38:52 <InstX1> what i was thinking about was more mandelbrotting stuff
20:38:55 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit)
20:38:58 <InstX1> or figuring out how to do weird memes via images
20:39:04 <InstX1> it's the stuff the kids would like
20:39:10 <InstX1> erm, weird memes via filters
20:39:22 <InstX1> keeping it "sane" and "professional" is an issue
20:39:38 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:5edd:2a99:160f:84d2) (Quit: WeeChat 2.8)
20:39:44 <[exa]> the best meme filter lately is `convert_to_jpeg -quality 1`
20:40:00 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
20:40:01 <InstX1> lol
20:40:25 <[exa]> anyway yeah mandelbrots do work
20:40:34 <[exa]> people love diggin in that
20:40:36 <InstX1> on instagram a lot of people like to show off their figures, one thing that could go wrong is if the algorithm painted their clothes off, for intsance
20:40:53 <InstX1> not that it'd reproduce anatomy, but it'd be close enough to be embarrassing
20:43:07 <[exa]> you might be confusing programming with deep NN training now. :D
20:45:07 <InstX1> you could have a prompt to specify an area, and accident,s whoops
20:45:08 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:45:29 <InstX1> doesn't take anything special, just a region of the wrong color in the wrong place
20:46:21 <InstX1> i mean the inevitable stuff with instagram filters is that people might want to show off the filters in class
20:46:28 lavaman joins (~lavaman@98.38.249.169)
20:46:32 <InstX1> but to have the images curated beforehand
20:46:36 <InstX1> is just a good idea
20:49:39 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
20:51:00 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
20:51:23 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
20:53:08 × Farzad quits (~FarzadBek@37.49.149.40) (Quit: Leaving)
20:55:00 × coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
20:55:15 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 260 seconds)
21:00:06 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:05:41 <monochrom> Oh BTW I don't oppose starting with main, but I would oppose starting with do-notation. Because my students and TAs oppose that, too.
21:06:38 oats joins (~thomas@user/oats)
21:07:02 xcmw joins (~textual@dyn-72-33-0-245.uwnet.wisc.edu)
21:07:40 hyiltiz joins (~quassel@31.220.5.250)
21:08:30 <[exa]> monochrom: sometimes there's the uncanny question about "can it read a number and print it back", I'm usually showing that there's `do` to do that easily but with a promise that it's not a side effect and I'm going to demystify it asap
21:09:09 <[exa]> IO works kinda nicely there as an eDSL
21:09:22 ski . o O ( `interact' )
21:09:47 <[exa]> ski: oh you!
21:09:58 <[exa]> :]
21:10:16 <monochrom> That's interesting. I would like to take a look at your approach.
21:10:30 × michalz quits (~michalz@185.246.204.93) (Remote host closed the connection)
21:10:45 <ski> what, you don't like having to juggle around fragile irrefutable patterns / forcing with `case' at the right time ?
21:10:46 <[exa]> the slides are in czech, not sure if it helps a lot :D
21:10:57 <aegon> whenever i show someone io without do notation they get scared, when i show them do notation they see return and start making all sorts of bad assumptions about whats going on
21:11:03 <adamCS> A Pipes question, if anyone is familiar: Streamly has a function IsStream t => fromEffect :: m a -> t m a. I'd like a Pipes equivalent: pipesFromEffect :: m a -> Producer a m () (I guess?). I see "yield :: a -> Producer a m ()" but that's not what I want...
21:11:12 <monochrom> At this point though it sounds like you are doing a "1st week: whirlwind tour. 2nd-nth week: properly"
21:11:19 <aegon> its rough when the entry point to a hello world is one of the hardest things to grasp coming from imperative land
21:11:22 <monochrom> which can work, yeah.
21:11:58 <ski> aegon : use applicative combinators, together with `join' ?
21:12:39 <[exa]> monochrom: I'm trying to avoid whirlwinds but well, you need to keep the fun going
21:12:48 <awpr> adamCS: that sounds like `lift`, I think
21:13:14 <awpr> oh, or `yield =<< lift ma`
21:13:52 <monochrom> If you teach do-notation, you will eventually have to answer this question: "s <- x" vs "let t = y", why can't I do the other way, "let s = x", "t <- y".
21:14:11 <adamCS> awpr: Thanks!
21:14:23 <monochrom> And the answer really forces you to go back to >>= and "M Int" vs "Int" anyway.
21:15:38 <[exa]> `<-` "removes the IO from the data you want and joins it with the bigger IO around" is a good temporary explanation
21:15:48 <[exa]> I'm open to a better one honestly
21:16:36 <aegon> ski: i like that, join might side step a lot without being as hand wavy as do notation to a new comer
21:17:19 × Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Read error: Connection reset by peer)
21:18:33 <monochrom> Yikes haha.
21:19:04 <monochrom> https://www.vex.net/~trebla/photo/unorganized/IO-String.png
21:19:45 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
21:19:50 <davean> [exa]: I've said things like "Pipes it throuh to the larger IO" or something - though I've only like twice taught people who found this entire thing confusing
21:20:00 <davean> No the lack of InstanceSigs in the base language?
21:20:04 <davean> That shows up every time
21:20:09 <dsal> aegon: Nobody should write `return` in code anymore. Some people disagree with me, of course, but it's confusing.
21:20:33 <ski> aegon : i dunno how well it would work, but perhaps one could try it. also, sometimes i find `infixl <*>>; (<*>>) :: Monad m => m (a -> m b) -> (m a -> m b); mamb <*>> ma = mamb >>= (=<< ma) {- = join (mamb <*> ma) -}' useful. to be used like `frob <$> foo <*> bar <*> baz <*>> quux'
21:21:02 <ski> monochrom : a pushout ?
21:21:05 <[exa]> davean: "sorry guys you just have to do that to get rid of the IO wrap" is actually a tone the students are used to from pythons, so it kindof works but it's not right for sure. :D
21:21:50 <monochrom> Yeah a pushout.
21:21:59 <davean> [exa]: See that wouldn't fly with the people I end up teaching. They'd be like "But the point is the IO doesn't go away" and I'd get all sorts of shit for that
21:22:00 <ski> `InstanceSigs' is quite nice
21:22:11 <davean> they're also not students - they're people who already create things on their own
21:22:33 <adamCS> awpr: I always forget that underneath it's just a regular monad transformer.
21:22:35 <ski> dsal : there's already overloading of other terms, i suppose
21:22:38 <ski> (e.g. "functor")
21:22:43 <hpc> "you just have to use (.) to get rid of the function"
21:22:59 <dsal> ski: Yeah, I was confused by "functor" from o'caml years ago.
21:23:08 <ski> @where on-functors
21:23:08 <lambdabot> "On Functors" (in C++,Standard ML,Haskell,Prolog) by Peteris Krumins in 2010-05-17 at <http://www.catonmat.net/blog/on-functors/>
21:23:22 <davean> [exa]: now when I explain what a primtive type is as a basis vector in the space of Haskell types, they're really happy with it.
21:23:26 <davean> its all the people you teach?
21:24:10 <ski> davean : or a generator in a group presentation ?
21:24:24 <davean> ski: Yah, think I did that one once too
21:24:50 <davean> ski: though tehy jump to asking me about (thing that turns out to be sum and product types) when I do the vector space one
21:25:06 <davean> They don't start asking me if "data" works the way it does when I say group things
21:25:13 <davean> they just don't run as far with it
21:25:30 <davean> and I'm nothing if not lazy
21:25:42 <davean> I'd prefer they explain how data types work to me than me to them
21:25:48 <[exa]> davean: I said it's temporary :D
21:26:11 <davean> [exa]: Yah, but I like temporary to be longer than "until I finish saying it" :)
21:26:14 <awpr> ski: I knew I'd seen that type signature before, apparently I defined it as `(=*<)`
21:26:31 <[exa]> anyway yeah the ADT "algebra" is a great discovery for many people
21:26:33 <awpr> :t (=<<)
21:26:35 <lambdabot> Monad m => (a -> m b) -> m a -> m b
21:26:41 <[exa]> esp. later with zippers
21:26:54 <awpr> by analogy to that with an extra layer of `m` on the function, like the Applicative operators have
21:27:00 Guest9393 joins (~Guest93@2800:2181:4400:27c:dd94:662c:5a7e:2a36)
21:27:07 × jushur quits (~human@user/jushur) (Quit: ¯\_(ツ)_/¯)
21:27:15 <[exa]> (school motto: if in doubt, differentiate it)
21:27:58 × Guest9393 quits (~Guest93@2800:2181:4400:27c:dd94:662c:5a7e:2a36) (Client Quit)
21:29:11 ski . o O ( "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris. --Larry Wall and Randal L Schwartz" -- "The Swine Before Perl" (talk/presentation) by Shriram Krishnamurthi in 2001-11 at <https://cs.brown.edu/~sk/Publications/Talks/SwineBeforePerl/> )
21:30:56 <ski> awpr : i came up with it years ago. i guess others have also encountered a desire for it (or maybe recalling me mentioning it previously in here) .. imho, it'd be nice to have in `Control.Monad' or something
21:31:12 Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
21:31:38 × Pdroman_ quits (~Android@93.red-79-156-174.staticip.rima-tde.net) (Quit: -a- IRC for Android 2.1.39)
21:31:38 <awpr> +1, I like that it lets monadic computations have an "applicative-style" expression form
21:33:05 <ski> the `<*>>' is intended to look like a regular `<*>', except that the whole shebang is then wrapped in a `join', so that the initial function returns an action that'll be performed in the same go
21:33:30 <Inst> sorry about that, this is one of the reasons i'm attracted to haskell as a future hobbyist; i get panicky and think of all sorts of terrible edge cases and ways things can go wrong, anyways, headed to sleep
21:35:10 <awpr> yeah, I think I see the meaning behind that name. personally I see it being more closely related to `=<<`, but I'm not strongly opinionated about it
21:35:30 × ubert quits (~Thunderbi@91.141.37.135.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
21:35:52 <ski> (for two effectful parameters, it's `frob <$> foo <**> bar'. for just one, it'll have to be `frob =<< foo' .. of course, one could also have the operation be effectfully computed, like `frob <*> foo <*>> bar' or `frob <*>> foo')
21:36:41 <ski> (s/<**>/<*>>/)
21:43:40 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 258 seconds)
21:52:16 hyiltiz joins (~quassel@31.220.5.250)
21:53:04 jgeerds joins (~jgeerds@55d4da80.access.ecotel.net)
21:54:50 × xcmw quits (~textual@dyn-72-33-0-245.uwnet.wisc.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:56:40 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
21:59:41 zebrag joins (~chris@user/zebrag)
22:01:01 ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
22:01:56 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija)
22:05:35 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
22:08:38 rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
22:11:31 sedeki joins (~textual@user/sedeki)
22:20:55 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
22:22:43 × jonatan quits (~nate@h85-8-60-194.cust.a3fiber.se) (Ping timeout: 252 seconds)
22:22:56 jonatan joins (~nate@h85-8-60-194.cust.a3fiber.se)
22:23:24 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
22:23:24 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
22:23:24 wroathe joins (~wroathe@user/wroathe)
22:24:13 urdh joins (~urdh@user/urdh)
22:26:29 × off^ quits (~off@68.101.53.15) (Remote host closed the connection)
22:33:40 × betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Quit: The Lounge - https://thelounge.chat)
22:36:31 jushur joins (~human@user/jushur)
22:43:14 <zzz> %s/ or just s/ ?
22:43:40 <zzz> i mean, /g ?
22:43:53 <awpr> I only see one match
22:44:18 <zzz> my bad
22:45:00 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 258 seconds)
22:45:15 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc) (Remote host closed the connection)
22:45:39 Skyfire joins (~pyon@user/pyon)
22:47:14 meltedbrain_y2k parts (~tekserf@94.73.36.197) ()
22:49:00 <ManofLetters[m]> John Ericson: hi! could you have a look at https://github.com/simonmar/happy/issues/211? Just in case it's not only my CIs that died... :)
22:49:45 <ericson2314> Man of Letters: it's in the readme
22:49:53 <ericson2314> you want -bootstrap propably
22:50:04 <ericson2314> I suspect I am going to get a lot of these questions :/
22:50:16 <ericson2314> I had mixed feelings about cutting this release
22:50:26 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 260 seconds)
22:50:33 <ManofLetters[m]> yeah, because it's not my direct dep; something else depends on it
22:50:39 <ManofLetters[m]> can I still mitigate the issue?
22:50:41 <ericson2314> deps don't specify flags
22:50:45 <ericson2314> cabal projet files do
22:50:48 <ericson2314> so yes you can
22:51:00 <ericson2314> (probably also stack.yaml, but I do not know details)
22:51:23 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
22:51:36 <ManofLetters[m]> `git grep happy` in my project turns out nothing
22:51:50 <ericson2314> are you using cabal or stack?
22:51:53 <ManofLetters[m]> cabal
22:52:05 <ManofLetters[m]> tried with 3.4 and with master branch
22:52:15 hyiltiz joins (~quassel@31.220.5.250)
22:52:16 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
22:52:52 <ericson2314> Man of Letters: see https://github.com/simonmar/happy/issues/211
22:52:56 <ericson2314> you want
22:53:12 acidjnk_new3 joins (~acidjnk@p200300d0c703cb958d78f02b280dc416.dip0.t-ipconnect.de)
22:53:18 <ericson2314> package: happy
22:53:18 <ericson2314> flags: -bootstrap
22:53:24 <ericson2314> I will extend redame
22:53:54 × hiruji` quits (~hiruji@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
22:54:10 <ManofLetters[m]> ok, I will do that, but I'm afraid you will get many of those :) take care!
22:54:24 <ericson2314> Man of Letters: ohhhhh yes I will
22:54:40 <ericson2314> maybe I will make issue "put all your new bootstaapping hate here"
22:55:28 noidedsuper joins (~manjaro-u@2601:280:5a81:520::f8be)
22:55:42 <ericson2314> Man of Letters: can you let me know if adding that to cabal project file worked?
22:55:58 <sm> you probably know it, but FWIW "have alex and happy in PATH" has long been a requirement for building lots of haskell things. including happy I guess
22:56:18 <ericson2314> sm: happy hacked up sdist to contain pregenerated files before
22:56:36 <ericson2314> also did other hacks in sdist
22:56:46 <ericson2314> we got rid of all those and boostrap with parser combinators
22:56:53 × acidjnk_new quits (~acidjnk@p200300d0c703cb959894c42690fc4f0f.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
22:57:03 <ericson2314> ....but you gotta actually do the bootstrap if you want attribute grammars
22:57:09 <sm> I see. a bit unfortunate for used either way isn't it
22:57:15 <sm> users
22:57:26 <ericson2314> sm: I opened a cabal issue
22:57:36 <ericson2314> it should understand bootstrapping enough to be able to do it right
22:57:43 <ericson2314> with `build-tool-depends: happy`
22:58:07 <ericson2314> because tool deps are "qualified goals" that allow new flag assigments
22:58:23 <ericson2314> but it bails out with a error to pessimistically
23:00:39 <sm> I'm happy (!) to know happy is getting some maintenance. If building requires a cabal fix, that problem is going to be with us for a long time (people use older cabals basically forever)
23:01:12 <ManofLetters[m]> I tried this... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/60ffef66b3a76616b488f8b2e2e6c7224cad4030)
23:01:20 <ericson2314> well, we are going to drop support for old GHCs when we do some TH stuff I htink
23:01:33 <ericson2314> Man of Letters: is your thing open source
23:01:42 <ManofLetters[m]> yes
23:02:01 <ericson2314> with the old GHCs maybe old cabals will be less of an issue
23:02:10 kong4ndrew joins (~kong4ndre@199.247.111.247)
23:02:18 <ericson2314> I can bump the cabal version as a close-enough proxy for cabal-install version I guess
23:02:25 <ericson2314> Man of Letters: url?
23:02:30 <ManofLetters[m]> and I waited for this moment of fame all my life: https://github.com/LambdaHack/LambdaHack
23:02:31 <noidedsuper> Hey, would it be appropriate for me to drop a link to a super-alpha library I've been working on in here? Basic idea is to use Applicative/Divisible to write JSON parsers/serializers that can also generate documentation automatically (and avoid intermediate data structures like maps)
23:02:34 <ericson2314> I should just get it working myself to inform readme
23:03:56 <monochrom> Yes it's OK to drop a link here.
23:04:33 <noidedsuper> https://github.com/AnthonySuper/jordan
23:06:14 × sedeki quits (~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
23:07:09 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
23:08:48 × xlei quits (znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Read error: Connection reset by peer)
23:09:46 <janus> noidedsuper: but if you start replacing aeson with something that can also generate documentation, why not make sure the keys in the From and To instance correspond
23:10:01 <janus> the instances could be derived from a Schema type
23:10:12 <dsal> noidedsuper: your README has an incorrect link to `divisible`
23:11:11 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 264 seconds)
23:11:41 xlei joins (znc@pool-68-129-84-118.nycmny.fios.verizon.net)
23:11:52 <dsal> I like this part of the hlint config:
23:11:52 <dsal> # This is up to personal preference, but 80 is the right answer.
23:11:52 <dsal> columns: 120
23:12:15 × max22- quits (~maxime@2a01cb0883359800fe2c7b136063d78c.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
23:12:23 <janus> lol, people post a new library, first thing to check is to see if they have good taste in hlint o_O :P
23:13:13 × tremon quits (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
23:13:23 hyiltiz joins (~quassel@31.220.5.250)
23:13:58 <dsal> Haha. Yeah. If I don't like your line length, your code can't be useful.
23:15:10 <janus> noidedsuper: if `parseField "name"` and writeField "name"` could be derived from a Field type that also contained the documentation, fields could be reused with their docs in different objects
23:15:45 <janus> and when you compile to OpenAPI, the naive compilation would repeat the docs string, but you could ideally compile it to a yaml $ref or something
23:16:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:17:12 <janus> alternatively it could be typeclass based, but people use Ints for so many things. but if you feel strongly about forcing people to make newtypes ... ;)
23:20:09 <ericson2314> Man of Letters: per https://github.com/haskell/cabal/issues/3502 I think the situation is fucked
23:20:21 takuan joins (~takuan@178-116-218-225.access.telenet.be)
23:20:23 <ericson2314> I am going to pull the release
23:20:33 <ManofLetters[m]> :<
23:21:20 <noidedsuper> Janus: the keys for From and To are different because you could theoretically support different ways to serialize and deserialize a type
23:21:38 tafa joins (~tafa@2a04:52c0:101:85c::1)
23:21:39 <noidedsuper> And I actually have such things at work
23:21:52 <janus> noidedsuper: but if you want to support different ways , how can it be typeclass based? shouldn't the encoder/decoder just be values then?
23:22:18 <noidedsuper> dsal: I keep that comment in there as a cheeky joke since it's the default one. I used to be a hardcore 80 character person myself even so
23:22:29 <janus> noidedsuper: but i'd like to point out that the common case it to have only one encoder/decoder! so if that is convenient, it would make sense.
23:22:58 <dsal> noidedsuper: yep, right with you
23:22:59 <janus> noidedsuper: note how quickcheck for purescript allows both the typeclass and the value-based (hedgehog) approach. you can do the same
23:23:49 <noidedsuper> janus: the ToJSON and FromJSON typeclass are supposed to represent "canonical" ways of encoding/decoding, respectively. You can also generate JSONParser/JSONSerializer values and do stuff with them if you want.
23:24:22 <noidedsuper> So it kinda already does the "You can use a typeclass but values are also fine" thing, just without you having to type import Jordan.ToJSON (intToJson, doubleToJson) every time you want to serialize an int and a double
23:24:24 <ericson2314> Man of Letters: tyr again
23:24:27 <ericson2314> do a `cabal update`
23:24:29 <ericson2314> and reconfigure
23:24:32 <ericson2314> it should use cabal 1.20
23:24:39 <ericson2314> and there should be no issue
23:24:54 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
23:25:00 <Axman6> ericson2314: please refrain from using the enter key for punctuation :)
23:25:16 <ManofLetters[m]> John Ericson: what do you mean by "reconfigure"?
23:25:27 <janus> noidedsuper: ok, good, that is nice. i think the point about a single encoder/decoder being the common case still stands. you can still support the odd cases.
23:25:30 <ericson2314> Axman6: sorry
23:25:41 <ericson2314> Man of Letters: `cabal configure`
23:26:00 <ManofLetters[m]> nope, with new cabals you don't need to do that
23:26:06 <janus> similar to how some people will wanna use Generic, but you don't have to
23:26:21 <ManofLetters[m]> and you probably mean happy 1.20, right?
23:26:26 <ericson2314> yeah
23:26:26 <Axman6> pretty sure cabal new-configure exists for a reason...
23:26:40 <ericson2314> well you can do that and then check the plan.json
23:26:47 <ManofLetters[m]> oh, I see
23:26:49 <ericson2314> that is what I did, to make sure the deprecation worked
23:26:56 <ManofLetters[m]> yes, for checking it's useful
23:27:11 <noidedsuper> If you use the generic representations they do currently generate identical formats, so I think the separation is probably fine? Since like 90% of the time you're just gonna write `deriving anyclass (ToJSON, FromJSON)` anyway
23:27:30 × guydb89 quits (~guy@98.198.128.24) (Ping timeout: 260 seconds)
23:27:42 <ManofLetters[m]> Axman6: it's actually a leftover and a miunderstanding; on branch master it mostly writes to `cabal.project.local` and let's you check plan, etc.
23:27:43 <janus> right but you can't derive docs anyway, so the FromJSON/ToJSON should be derived from the schema, which also has the docs
23:27:56 <ManofLetters[m]> but not needed for `cabal build` or anything
23:28:08 <ManofLetters[m]> John Ericson: it works, thank you!
23:28:15 <ManofLetters[m]> and I'm sorry :)
23:28:25 <janus> noidedsuper: just because you have "jsonSerializerFromSchema" doesn't mean you can't enable people to write their own JSONSerializer
23:28:53 <noidedsuper> Actually with this library you can derive docs! Since we only use typeclasses that are "inspectable", every `JSONParser` and `JSONSerializer` can be turned into OpenAPI V3 documentation
23:29:04 guydb89 joins (~guy@98.200.9.228)
23:29:18 <Axman6> I should learn how to use modern cabal...
23:29:20 <noidedsuper> I think some kinda type-level "define a more robust document type and we'll generate a serializer/deserializer for you" thing could be cool but that much type-level programming might hurt me
23:29:39 frosky joins (~froskyarr@59.41.160.207)
23:29:47 <janus> noidedsuper: what makes you think it would be a lot of type-level programming?
23:29:56 × frosky quits (~froskyarr@59.41.160.207) (Client Quit)
23:30:10 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
23:30:11 <noidedsuper> I guess you could also do something where the Schema things are just values, yeah
23:30:13 × ph88 quits (~ph88@2a02:8109:9e00:7e5c::3d56) (Quit: Leaving)
23:30:35 <ManofLetters[m]> Axman6: easy, `cabal build`, `cabal list-bin exe:you_exe`, that's it
23:30:51 <janus> noidedsuper: i know that you can derive docs from the serializer/parser, but that is the problem, why do i have to choose between those? when i write a haskell record with haddocks, the docs covers both construction and deconstruction
23:31:09 <ManofLetters[m]> or `$(cabal list-bin exe:your_exe) --your_params`
23:31:19 <janus> noidedsuper: i am trying to convince you that the serializer/deserializer should be derived from the schema, since i don't see a schema in your library
23:31:30 <noidedsuper> I know you could use an `Iso` to implement mapping over fields in both directions, but I'm not sure how to put `f (a -> b) -> f a -> f b` and `a -> (b, c) -> f b -> f c -> f a` into the same type.
23:31:48 frosky joins (~froskyarr@59.41.160.207)
23:31:52 <noidedsuper> janus: it might help if you provided an example of what "a schema" might look like
23:32:02 <noidedsuper> Because I'm a bit confused I think
23:32:11 frosky is now known as FroskyArr
23:32:23 <ManofLetters[m]> Axman6: and no more cabal hell: all versions and flags coexist like a happy family and are re-used if possible
23:33:05 <ManofLetters[m]> and we totally need volunteers to keep cabal this way and fix lots of technical debt
23:33:17 <ManofLetters[m]> e.g., the one that has just bitten `happy`
23:33:23 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
23:33:59 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb958d78f02b280dc416.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
23:35:05 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
23:35:13 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 258 seconds)
23:37:13 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
23:37:31 <janus> noidedsuper: you know how you can define aeson Parsers using applicative style
23:37:44 <janus> noidedsuper: here is another example with a database library: https://github.com/flipstone/orville/blob/master/orville-postgresql/sample-project/Example/Schema/Student.hs#L31
23:37:54 <janus> (disclaimer i work for flipstone)
23:38:28 <janus> with aeson it is `Person <$> o .: "name" <*> o .: "age"`
23:39:04 MQ-17J joins (~MQ-17J@8.21.10.23)
23:39:07 <noidedsuper> I think where I'm struggling is how to turn that around so you can generate a serializer as well
23:40:46 <noidedsuper> IE, if I run `(,) <$> o .: "name" <*> o .: "age"`, the compiler only sees `f (a -> b) <*> (f b)` for the last step. It doesn't know that `(,) <$> o .: "name"` is part of a constructor with two arguments, it just becomes an opaque function - for all I know it could be `(,) . (* 10)` or whatever
23:41:38 <noidedsuper> which is why the current library separates them - the serialization version of `Applicative` is `Divisible`, where we *do* know that we're "breaking something into parts"
23:41:49 hiruji joins (~hiruji@user/hiruji)
23:43:36 burnside_ joins (~burnsides@client-8-85.eduroam.oxuni.org.uk)
23:43:37 × burnsidesLlama quits (~burnsides@dhcp168-039.wadham.ox.ac.uk) (Remote host closed the connection)
23:45:00 × tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 260 seconds)
23:45:08 <janus> noidedsuper: you can tell each combinator (e.g. like (.:)) the name of the serialized key, and you can tell it how to extract that value from your record (the record field selector)
23:45:43 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
23:45:45 <noidedsuper> Hmmm
23:45:47 <janus> noidedsuper: so that can be transformed into a function that adds a key to an object
23:46:18 <janus> noidedsuper: then, if you compose all these functions, and call it on the empty json object, you have a function that generates a filled json object from a haskell record
23:46:34 <noidedsuper> I'll play around with that idea
23:47:14 <janus> noidedsuper: i think you may need type-level lists if you want to do sum types, but you can just rule that out to start with
23:47:33 <janus> noidedsuper: of course, you can still do sum types if you rely on the user to write some boilerplate...
23:48:09 frosky_ joins (~froskyarr@59.41.160.207)
23:49:25 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving)
23:49:26 <janus> noidedsuper: aeson doesn't have the "optional" key setter, i believe. but argonaut has it: https://github.com/purescript-contrib/purescript-argonaut/blob/main/examples/Examples/Data/Argonaut/Record.purs#L33
23:50:11 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 264 seconds)
23:50:22 <janus> noidedsuper: you can have the same, then it is possible to leave out a json key if the value is a maybe. you can argue that that makes it harder to infer the schema by looking at the value, but some would argue that you should already know the schema when looking at a value :P
23:50:31 <noidedsuper> Yeah
23:50:33 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
23:51:04 <noidedsuper> I dunno, I'm not sure I agree that this would be super useful but I'll see if I can do it I guess
23:51:19 × FroskyArr quits (~froskyarr@59.41.160.207) (Ping timeout: 258 seconds)
23:51:26 <janus> yeah it just saves a few bytes. just wanted to mention it
23:53:25 × Midjak quits (~Midjak@82-65-111-221.subs.proxad.net) (Quit: This computer has gone to sleep)
23:56:33 × Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Remote host closed the connection)
23:59:34 <noidedsuper> So you can do this but I think it would be sorta easy to write "incorrect" stuff with it, since you'd need to remember that you can't use fmap without also applying the inverse of `f` to the key-extractor function thing

All times are in UTC on 2021-10-20.