2021/07/27

2021-07-27 00:00:28 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
2021-07-27 00:04:13 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:b012:8971:aef9:153c)
2021-07-27 00:05:20 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 00:05:57 +0200mnrmnaugh(~mnrmnaugh@pool-96-252-87-182.bstnma.fios.verizon.net) (Quit: Leaving)
2021-07-27 00:06:36 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
2021-07-27 00:06:38 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 00:06:47 +0200mnrmnaugh(~mnrmnaugh@pool-96-252-87-182.bstnma.fios.verizon.net)
2021-07-27 00:07:51 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Remote host closed the connection)
2021-07-27 00:09:26 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:b012:8971:aef9:153c) ()
2021-07-27 00:09:39 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 00:09:55 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 258 seconds)
2021-07-27 00:15:04 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 00:16:41 +0200fawful(~guy@c-76-104-217-93.hsd1.wa.comcast.net) (Quit: WeeChat 3.2)
2021-07-27 00:17:38 +0200Guest57(~Guest57@node-1w7jr9umlq4q4axiuyck8v83b.ipv6.telus.net)
2021-07-27 00:18:15 +0200Guest57(~Guest57@node-1w7jr9umlq4q4axiuyck8v83b.ipv6.telus.net) (Client Quit)
2021-07-27 00:19:08 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 250 seconds)
2021-07-27 00:21:32 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 00:22:46 +0200 <juri_> i used to read all of lkml. it really does make haskell seem friendly.
2021-07-27 00:25:42 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 00:29:06 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-07-27 00:29:49 +0200arthurxavierx(~arthurxav@201.17.157.69) (Remote host closed the connection)
2021-07-27 00:33:06 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net)
2021-07-27 00:34:50 +0200dhil(~dhil@195.213.192.47) (Ping timeout: 258 seconds)
2021-07-27 00:35:13 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-07-27 00:39:38 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-07-27 00:40:02 +0200mc47(~mc47@xmonad/TheMC47)
2021-07-27 00:40:04 +0200Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 265 seconds)
2021-07-27 00:40:28 +0200Maxdamantus(~Maxdamant@user/maxdamantus)
2021-07-27 00:42:28 +0200pera(~pera@user/pera) (Quit: leaving)
2021-07-27 00:43:57 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 00:44:42 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 00:48:35 +0200acidjnk_new3(~acidjnk@p200300d0c72b953020abcb826e8e1ebf.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-07-27 00:49:27 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 00:49:42 +0200mc47(~mc47@xmonad/TheMC47) (Quit: Leaving)
2021-07-27 00:50:01 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 00:54:34 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-07-27 00:57:06 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 276 seconds)
2021-07-27 00:58:23 +0200dagit(~dagit@2601:1c2:1b7f:9fa0:ad74:311a:d89a:e0b1)
2021-07-27 00:59:23 +0200cjb(~cjb@user/cjb)
2021-07-27 00:59:44 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 01:00:00 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 01:01:46 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net) (Ping timeout: 240 seconds)
2021-07-27 01:05:41 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 01:06:06 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
2021-07-27 01:06:19 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 01:08:24 +0200mr-red(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 01:10:06 +0200peterhil(~peterhil@mobile-access-5d6af6-209.dhcp.inet.fi) (Ping timeout: 258 seconds)
2021-07-27 01:10:57 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 268 seconds)
2021-07-27 01:12:33 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 01:12:47 +0200sciencentistguy(~sciencent@hacksoc/ordinary-member) (Ping timeout: 258 seconds)
2021-07-27 01:13:23 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 01:16:08 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com)
2021-07-27 01:17:39 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 01:18:07 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net)
2021-07-27 01:23:06 +0200tomku(~tomku@user/tomku) (Ping timeout: 240 seconds)
2021-07-27 01:23:15 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-07-27 01:23:49 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi)
2021-07-27 01:23:50 +0200tomku(~tomku@user/tomku)
2021-07-27 01:25:35 +0200tcard(~tcard@p2307053-ipngn17101hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving)
2021-07-27 01:25:58 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:1c28:4bf5:c94e:40b1)
2021-07-27 01:29:18 +0200 <phaazon> hey; anyone here with write access to the time package to approve a PR of mine (and eventually release on crates.io? :D) https://github.com/haskell/unix/pull/194
2021-07-27 01:29:23 +0200 <phaazon> this is blocking me from using the latest warp
2021-07-27 01:30:37 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 01:30:52 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 01:32:31 +0200turlando(~turlando@user/turlando) (Remote host closed the connection)
2021-07-27 01:32:43 +0200 <Axman6> I assume you mean the unix package :)
2021-07-27 01:33:02 +0200 <Axman6> phaazon: can you use --allow-newer temporarily?
2021-07-27 01:33:20 +0200 <phaazon> Axman6: I mean warp
2021-07-27 01:33:37 +0200 <phaazon> because it depends on that, which prevents me from using the time I want :(
2021-07-27 01:33:43 +0200turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2021-07-27 01:33:43 +0200turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2021-07-27 01:33:43 +0200turlando(~turlando@user/turlando)
2021-07-27 01:33:45 +0200 <phaazon> (so I had to downgrade warp :( )
2021-07-27 01:33:54 +0200 <phaazon> Axman6: --allow-newer, hm
2021-07-27 01:34:43 +0200 <phaazon> not sure it’s a good idea though
2021-07-27 01:34:52 +0200 <phaazon> I’ve never really used that flag :P
2021-07-27 01:35:02 +0200tcard(~tcard@p2307053-ipngn17101hodogaya.kanagawa.ocn.ne.jp)
2021-07-27 01:36:01 +0200 <Axman6> if it works, it works.
2021-07-27 01:37:16 +0200bitmapper(uid464869@id-464869.tooting.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 01:38:28 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 01:38:34 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 01:38:59 +0200 <phaazon> well, I don’t really know what it does
2021-07-27 01:39:09 +0200 <phaazon> so I’d rather stick around simple concepts such as upgrading PVP ranges :D
2021-07-27 01:39:50 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-07-27 01:40:07 +0200 <Axman6> I'm confused, your PR is against the unix package, not the time package, so why do you need someone with access to the time package?
2021-07-27 01:40:46 +0200 <monochrom> Use concurrency. Find out what --allow-newer does while the upgrade path is waiting.
2021-07-27 01:40:53 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-27 01:40:57 +0200 <myShoggoth> I'm looking for a project lead volunteer for our open source volunteering platform (so meta): https://discourse.haskell.org/t/seeking-a-project-lead-for-matchmaker/2799
2021-07-27 01:41:46 +0200 <monochrom> But I can see a variant of https://xkcd.com/303/
2021-07-27 01:42:11 +0200 <monochrom> "Hey get back to work!" "Waiting on PR approval!" "OK carry on!"
2021-07-27 01:43:04 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 258 seconds)
2021-07-27 01:44:05 +0200 <phaazon> Axman6: oh yeah the “write access” I meant haskell/unix, sorry
2021-07-27 01:46:10 +0200mr-red(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-27 01:46:57 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 01:48:32 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-07-27 01:51:28 +0200fendor_(~fendor@77.119.218.44.wireless.dyn.drei.com)
2021-07-27 01:53:06 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2021-07-27 01:54:01 +0200fendor(~fendor@178.165.161.47.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-07-27 01:54:38 +0200roboguy__(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200)
2021-07-27 01:56:25 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net)
2021-07-27 01:56:58 +0200dajoer(~david@user/gvx)
2021-07-27 01:58:26 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:1c28:4bf5:c94e:40b1) (Ping timeout: 252 seconds)
2021-07-27 01:59:25 +0200qrpnxz(~qrpnxz@user/qrpnxz) (Quit: Gateway shutdown)
2021-07-27 01:59:44 +0200qrpnxz(~qrpnxz@user/qrpnxz)
2021-07-27 02:01:03 +0200roboguy__(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200) ()
2021-07-27 02:01:05 +0200deejaytee(~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net) (Ping timeout: 258 seconds)
2021-07-27 02:04:21 +0200oldleather(~Old@172.58.168.61)
2021-07-27 02:04:42 +0200oldleather(~Old@172.58.168.61) (Leaving)
2021-07-27 02:06:42 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Read error: Connection reset by peer)
2021-07-27 02:07:28 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 02:11:33 +0200Atum_(~IRC@user/atum/x-2392232) (Quit: Atum_)
2021-07-27 02:12:18 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-07-27 02:12:21 +0200Deide(~Deide@user/deide) (Quit: Seeee yaaaa)
2021-07-27 02:14:03 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 02:14:49 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 02:16:51 +0200slack1256(~slack1256@191.125.99.204)
2021-07-27 02:18:58 +0200slac61603(~slack1256@191.125.21.222) (Ping timeout: 240 seconds)
2021-07-27 02:20:51 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-27 02:22:23 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Quit: Leaving)
2021-07-27 02:23:42 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 02:24:27 +0200jeetelongname(~jeet@host-89-241-98-229.as13285.net)
2021-07-27 02:30:19 +0200mr-red(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 02:30:45 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 265 seconds)
2021-07-27 02:32:38 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-07-27 02:33:44 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-07-27 02:39:35 +0200mr-red(~drd@93-39-151-19.ip76.fastwebnet.it) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-27 02:40:44 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 02:43:27 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 02:43:42 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 02:46:16 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net)
2021-07-27 02:47:22 +0200zebrag(~chris@user/zebrag) (Ping timeout: 240 seconds)
2021-07-27 02:56:35 +0200raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds)
2021-07-27 02:56:40 +0200slack1256(~slack1256@191.125.99.204) (Ping timeout: 258 seconds)
2021-07-27 02:57:17 +0200jeetelongname(~jeet@host-89-241-98-229.as13285.net) (Remote host closed the connection)
2021-07-27 02:58:52 +0200renzhi(~xp@142.184.90.63) (Ping timeout: 256 seconds)
2021-07-27 02:59:38 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2021-07-27 03:00:22 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 03:03:35 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-07-27 03:03:54 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net) (Remote host closed the connection)
2021-07-27 03:11:13 +0200notzmv(~zmv@user/notzmv)
2021-07-27 03:11:42 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net)
2021-07-27 03:14:35 +0200xff0x(~xff0x@2001:1a81:523c:b300:ba7e:c7d5:b4b7:3493) (Ping timeout: 255 seconds)
2021-07-27 03:14:41 +0200ham(~ham4@user/ham)
2021-07-27 03:16:13 +0200xff0x(~xff0x@2001:1a81:527c:b500:49fa:e8ed:ea99:60ec)
2021-07-27 03:23:30 +0200 <arkho> As a Haskell newb, should I read the Haskell Report?
2021-07-27 03:24:11 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 03:24:16 +0200 <sclv> arkho: depends how comfortable you are with bnf grammer, specs, etc in general
2021-07-27 03:24:33 +0200 <sclv> if you are, then the report can be helpful -- if not, it might be a bit dense and you could be better off reading other things
2021-07-27 03:24:48 +0200 <sclv> I _do_ suggest reading the report's version of the haskell prelude, because it is simple and idiomatic
2021-07-27 03:24:51 +0200 <geekosaur> I would say no, formal language reports are rarely a good way to get to know a language unless you are fairly experienced with those kinds of reports
2021-07-27 03:25:20 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 252 seconds)
2021-07-27 03:25:28 +0200 <sclv> there are lots of intro books (some free) linked from the haskell homepage
2021-07-27 03:25:30 +0200 <sclv> ?where documentation
2021-07-27 03:25:31 +0200 <lambdabot> I know nothing about documentation.
2021-07-27 03:25:48 +0200 <sclv> oh her
2021-07-27 03:25:50 +0200 <sclv> er
2021-07-27 03:25:52 +0200 <sclv> ?where docs
2021-07-27 03:25:52 +0200 <lambdabot> https://www.haskell.org/documentation/
2021-07-27 03:25:57 +0200 <sclv> ?botsnack
2021-07-27 03:25:57 +0200 <lambdabot> :)
2021-07-27 03:28:57 +0200alx741(~alx741@186.178.108.3) (Quit: alx741)
2021-07-27 03:32:37 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 265 seconds)
2021-07-27 03:33:24 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Read error: Connection reset by peer)
2021-07-27 03:35:03 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 03:37:05 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Client Quit)
2021-07-27 03:37:21 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 03:41:11 +0200Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2021-07-27 03:42:12 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 245 seconds)
2021-07-27 03:42:37 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-07-27 03:44:12 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 258 seconds)
2021-07-27 03:54:22 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 265 seconds)
2021-07-27 03:55:07 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 03:55:57 +0200Erutuon(~Erutuon@user/erutuon)
2021-07-27 03:57:26 +0200 <smtnet3> cute
2021-07-27 03:59:27 +0200derelict(~derelict@user/derelict)
2021-07-27 04:00:10 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 265 seconds)
2021-07-27 04:09:05 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 04:10:20 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-07-27 04:10:21 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 04:13:29 +0200AkechiShiro(~licht@user/akechishiro) (Ping timeout: 268 seconds)
2021-07-27 04:13:32 +0200Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 255 seconds)
2021-07-27 04:15:09 +0200Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius)
2021-07-27 04:15:35 +0200AkechiShiro(~licht@user/akechishiro)
2021-07-27 04:15:36 +0200aegon(~mike@174.127.249.180)
2021-07-27 04:15:47 +0200derelict_(~derelict@user/derelict)
2021-07-27 04:16:00 +0200 <aegon> holy balls guys, i just got hasktorch working with rocm and it is blazing fast, going to make a post about perf next weekend or the one after
2021-07-27 04:19:15 +0200derelict(~derelict@user/derelict) (Ping timeout: 276 seconds)
2021-07-27 04:19:17 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 04:23:30 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-07-27 04:23:37 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 04:30:14 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-07-27 04:30:14 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (copper.libera.chat (Nickname regained by services)))
2021-07-27 04:30:14 +0200finn_elijaFinnElija
2021-07-27 04:31:05 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 255 seconds)
2021-07-27 04:31:13 +0200Morrow-(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-07-27 04:31:14 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-07-27 04:31:22 +0200MorrowM(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 245 seconds)
2021-07-27 04:32:15 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 276 seconds)
2021-07-27 04:34:58 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net) (Ping timeout: 265 seconds)
2021-07-27 04:43:11 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-07-27 04:51:41 +0200favonia(~favonia@user/favonia) (Ping timeout: 252 seconds)
2021-07-27 04:57:06 +0200derelict(~derelict@user/derelict)
2021-07-27 04:59:56 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 250 seconds)
2021-07-27 05:00:06 +0200derelict_(~derelict@user/derelict) (Ping timeout: 258 seconds)
2021-07-27 05:00:14 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 05:00:34 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 05:01:10 +0200favonia(~favonia@user/favonia)
2021-07-27 05:01:16 +0200td_(~td@94.134.91.47) (Ping timeout: 256 seconds)
2021-07-27 05:02:48 +0200td_(~td@muedsl-82-207-238-215.citykom.de)
2021-07-27 05:05:17 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
2021-07-27 05:05:37 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-07-27 05:09:43 +0200pottsy(~pottsy@2400:4050:b560:3700:3495:fb9e:8fab:95bf)
2021-07-27 05:10:28 +0200MidAutumnMoon90(~MidAutumn@user/midautumnmoon) (Quit: Leaving for a break - theLounge)
2021-07-27 05:10:42 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 05:11:03 +0200MidAutumnMoon90(~MidAutumn@user/midautumnmoon)
2021-07-27 05:11:13 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 265 seconds)
2021-07-27 05:11:25 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 05:15:07 +0200dermato_(~dermatobr@154.21.114.128)
2021-07-27 05:16:38 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 05:16:53 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 05:17:26 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 255 seconds)
2021-07-27 05:21:56 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-07-27 05:23:20 +0200zaquest(~notzaques@5.128.210.178)
2021-07-27 05:31:28 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 05:32:17 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 05:33:21 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Read error: Connection reset by peer)
2021-07-27 05:33:35 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 05:34:48 +0200tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 255 seconds)
2021-07-27 05:37:29 +0200wei2912(~wei2912@112.199.250.21)
2021-07-27 05:39:16 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 05:39:24 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 05:40:30 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 05:40:43 +0200 <Cajun> rocm = Radeon Open Compute and hasktorch is the pytorch equivalent?
2021-07-27 05:41:01 +0200 <Cajun> hasktorch does look interesting, havent heard of that before
2021-07-27 05:44:04 +0200pesada(~agua@2804:18:4c:684a:1:0:5b66:52cd)
2021-07-27 05:46:10 +0200agua(~agua@2804:14c:8793:8e2f:39e9:c5a8:c532:7498) (Ping timeout: 240 seconds)
2021-07-27 05:46:12 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 05:46:26 +0200derelict_(~derelict@user/derelict)
2021-07-27 05:46:52 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 05:48:15 +0200Topsi(~Tobias@dyndsl-037-138-065-137.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2021-07-27 05:48:23 +0200nate3(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-07-27 05:49:23 +0200derelict(~derelict@user/derelict) (Ping timeout: 255 seconds)
2021-07-27 05:51:34 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-07-27 05:51:49 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200)
2021-07-27 05:54:25 +0200flounders_(~flounders@173.246.200.33)
2021-07-27 05:55:06 +0200flounders(~flounders@173.246.200.33) (Ping timeout: 272 seconds)
2021-07-27 05:59:08 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 258 seconds)
2021-07-27 06:01:38 +0200tomboy64(~tomboy64@user/tomboy64)
2021-07-27 06:02:59 +0200pe200012_(~pe200012@113.105.10.33)
2021-07-27 06:03:31 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200) (Remote host closed the connection)
2021-07-27 06:03:40 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 06:03:55 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 06:04:05 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200)
2021-07-27 06:09:16 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200) (Ping timeout: 256 seconds)
2021-07-27 06:09:56 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net)
2021-07-27 06:10:46 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 06:11:41 +0200paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Remote host closed the connection)
2021-07-27 06:14:05 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 06:14:42 +0200 <eltonpinto> yea, hasktorch uses pytorch's tensor library
2021-07-27 06:14:51 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 06:15:29 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 255 seconds)
2021-07-27 06:17:43 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-27 06:18:17 +0200Vajb(~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01)
2021-07-27 06:19:35 +0200Melantha(~pyon@user/pyon) (Quit: WeeChat 3.2)
2021-07-27 06:19:53 +0200Melantha(~pyon@user/pyon)
2021-07-27 06:19:53 +0200Vajb(~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Read error: Connection reset by peer)
2021-07-27 06:21:32 +0200 <Cajun> i read that it uses the underlying C++ library that pytorch also uses, i assume thats what you mean lol
2021-07-27 06:21:41 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 06:22:38 +0200 <eltonpinto> yes, that is correct. it has bindings to the underlying c++ library
2021-07-27 06:27:38 +0200nate3(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
2021-07-27 06:28:07 +0200Cajun(~Cajun@ip98-163-211-112.no.no.cox.net) (Ping timeout: 246 seconds)
2021-07-27 06:28:21 +0200Cajun(~Cajun@ip98-163-211-112.no.no.cox.net)
2021-07-27 06:36:27 +0200 <Arahael> Is it possible, with proto-lens, to have the `Message msg` types converted to JSON in a generic fashion? (They do not use GHC.Generics)
2021-07-27 06:36:37 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200)
2021-07-27 06:37:38 +0200 <Arahael> If so, what should I be looking at to achieve it?
2021-07-27 06:38:39 +0200fef(~thedawn@user/thedawn)
2021-07-27 06:39:44 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 06:41:17 +0200 <dsal> The descriptor is available, so it should be relatively straightforward to generate a JSON representation.
2021-07-27 06:46:58 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200) (Ping timeout: 240 seconds)
2021-07-27 06:52:58 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-07-27 06:56:24 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-27 06:59:48 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 07:00:15 +0200Feuermagier(~Feuermagi@user/feuermagier) (Quit: Leaving)
2021-07-27 07:00:20 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-07-27 07:02:44 +0200derelict_(~derelict@user/derelict) (Ping timeout: 255 seconds)
2021-07-27 07:06:47 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-07-27 07:06:57 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-27 07:08:04 +0200 <Arahael> dsal: Could you elaborate?
2021-07-27 07:08:53 +0200 <dsal> Not very much unfortunately. I've only used the proto stuff for proto directly. I only know about the descriptor stuff because I stuffed them into the library: https://github.com/google/proto-lens/commits?author=dustin
2021-07-27 07:09:12 +0200 <dsal> But theoretically, for a given message type, you can look up the descriptor which will tell you the fields and then you can generate a ToJSON from that.
2021-07-27 07:09:33 +0200 <Arahael> dsal: What I can't figure out is how to get the values given a FieldDescriptor.
2021-07-27 07:09:51 +0200 <Arahael> The field names themselves are the easy bit.
2021-07-27 07:12:51 +0200yaroot(~yaroot@6.3.30.125.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat)
2021-07-27 07:13:38 +0200yaroot(~yaroot@6.3.30.125.dy.iij4u.or.jp)
2021-07-27 07:13:53 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-07-27 07:17:16 +0200 <dsal> I see. I've not used this lib in a year or so. It looks like the answer is in Message, but I don't have any protos to poke around with. It's possible the answer isn't there since you're expected to use lens to access all the field data, but it's been a while. It looks like digging around in the Message module should have the answer, though.
2021-07-27 07:17:47 +0200codelegend(~codelegen@27.5.195.204)
2021-07-27 07:17:48 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Remote host closed the connection)
2021-07-27 07:17:59 +0200michalz(~michalz@185.246.204.58)
2021-07-27 07:18:11 +0200 <codelegend> ```
2021-07-27 07:18:47 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi)
2021-07-27 07:18:49 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 265 seconds)
2021-07-27 07:19:44 +0200 <codelegend> https://paste.tomsmeding.com/wf5VMlDI
2021-07-27 07:20:20 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 250 seconds)
2021-07-27 07:21:02 +0200 <codelegend> I was writing something using ST, and this failed to typecheck. Can someone explain why? The error says `No instance for (MArray (STUArray s) Int (ST s1))`, I don't understand why it assumes the states are different (s and s1)
2021-07-27 07:21:12 +0200anandprabhu(~anandprab@94.202.243.198)
2021-07-27 07:22:20 +0200anandprabhu(~anandprab@94.202.243.198) (Client Quit)
2021-07-27 07:22:28 +0200 <codelegend> updated paste with the error: https://paste.tomsmeding.com/govHGUlu
2021-07-27 07:23:06 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection)
2021-07-27 07:24:12 +0200nate3(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-07-27 07:28:53 +0200nate3(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-07-27 07:34:28 +0200pe200012(~pe200012@218.107.49.28)
2021-07-27 07:34:40 +0200 <c_wraith> short answer: you need ScopedTypeVariables
2021-07-27 07:34:46 +0200pe200012_(~pe200012@113.105.10.33) (Ping timeout: 265 seconds)
2021-07-27 07:35:07 +0200 <c_wraith> slightly longer answer - without that extension, type variables in different type ascriptions are assumed to always be different
2021-07-27 07:36:23 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-27 07:36:50 +0200 <c_wraith> So the two different s variables on line 7? They're in the same type, so they're the same s. But they're different from the s on line 5 or the s on line 8
2021-07-27 07:38:31 +0200 <Arahael> dsal: Yeah, sadly for me, poking in it seems a bit of a rabbit hole for me. I consider myself good at Haskell, but I'm still frankly still a novice.
2021-07-27 07:40:33 +0200 <dsal> Arahael: Yeah, it'll take some digging. It's a bit late for me. I understand the rabbit hole, though. Those two changes I made were for a similar excursion. I was surprised the functionality was missing. I would be less surprised if more functionality were missing.
2021-07-27 07:40:36 +0200vish(~igloo@24.130.32.174)
2021-07-27 07:40:42 +0200vish(~igloo@24.130.32.174) (Client Quit)
2021-07-27 07:41:32 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200)
2021-07-27 07:41:38 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2021-07-27 07:41:40 +0200 <Arahael> dsal: Not supporting Generics was a deliberate design decision from what I can tell from the issue tracker.
2021-07-27 07:41:56 +0200 <Arahael> dsal: Though perhaps you should get some sleep. :) I'm at work, myself, and work is Swift, not Haskell. :(
2021-07-27 07:42:06 +0200 <codelegend> c_wraith Ah okay. So I was reading the wiki on ScopedTypeVariables (https://wiki.haskell.org/Scoped_type_variables), and I don't really understand the example. It seems to claim that `b` is a free variable in the third case. But if that is the case here, how does it ensure all the `s` are the same?
2021-07-27 07:42:40 +0200 <dsal> Arahael: yeah, that's a good idea. I have no excuse to still be sitting here. Didn't work on any of my own problems. heh 'night
2021-07-27 07:43:02 +0200 <c_wraith> codelegend: that example is really confusing. It doesn't explain *why* each case works the way it does.
2021-07-27 07:43:07 +0200 <Arahael> Ha. :) Lovely thing about side personal projects: There's no deadline! It'll still be here next week!
2021-07-27 07:43:12 +0200 <Arahael> dsal: G'night!
2021-07-27 07:43:35 +0200 <c_wraith> codelegend: the important thing is that to actually scope a type variable, you need to use an explicit forall to introduce it
2021-07-27 07:43:43 +0200 <c_wraith> codelegend: the third example on that page doesn't do that
2021-07-27 07:43:59 +0200 <c_wraith> The other two examples do
2021-07-27 07:44:24 +0200 <codelegend> Ah okay, I think I get it now (sort of). I'll play around with some more examples and see. Thanks a lot!
2021-07-27 07:48:37 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 07:48:52 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99)
2021-07-27 07:48:56 +0200Null_A(~null_a@2601:645:8700:2290:98e5:42b9:7e41:db99) (Remote host closed the connection)
2021-07-27 07:51:32 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 252 seconds)
2021-07-27 07:53:29 +0200jneira(~jneira@212.8.115.226)
2021-07-27 07:54:56 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it) (Ping timeout: 255 seconds)
2021-07-27 07:55:42 +0200azeem(~azeem@176.200.228.157)
2021-07-27 07:56:39 +0200jneira39(~jneira@212.8.115.226)
2021-07-27 07:58:53 +0200codelegend(~codelegen@27.5.195.204) (Quit: Client closed)
2021-07-27 08:00:10 +0200jneira(~jneira@212.8.115.226) (Ping timeout: 246 seconds)
2021-07-27 08:01:20 +0200jneira39jneira
2021-07-27 08:02:18 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-07-27 08:04:56 +0200zmt01(~zmt00@user/zmt00) (Ping timeout: 272 seconds)
2021-07-27 08:08:02 +0200xff0x(~xff0x@2001:1a81:527c:b500:49fa:e8ed:ea99:60ec) (Ping timeout: 245 seconds)
2021-07-27 08:08:55 +0200pe200012_(~pe200012@113.105.10.33)
2021-07-27 08:09:05 +0200pe200012(~pe200012@218.107.49.28) (Ping timeout: 265 seconds)
2021-07-27 08:09:06 +0200xff0x(~xff0x@2001:1a81:527c:b500:a365:4553:d50c:f6f5)
2021-07-27 08:10:31 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:10:45 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-27 08:10:57 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:11:37 +0200burnside_(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:11:38 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-27 08:12:40 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net)
2021-07-27 08:12:48 +0200ham(~ham4@user/ham) (Ping timeout: 256 seconds)
2021-07-27 08:13:34 +0200ham2(~ham4@d8D8627D5.access.telenet.be)
2021-07-27 08:15:49 +0200zaquest(~notzaques@5.128.210.178) (Read error: Connection reset by peer)
2021-07-27 08:16:16 +0200zaquest(~notzaques@5.128.210.178)
2021-07-27 08:17:48 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-07-27 08:17:54 +0200aegon(~mike@174.127.249.180) (Remote host closed the connection)
2021-07-27 08:18:40 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 258 seconds)
2021-07-27 08:19:01 +0200Lord_of_Life_Lord_of_Life
2021-07-27 08:20:51 +0200burnside_(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 08:21:15 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:119d:d383:500:6200) ()
2021-07-27 08:21:18 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:21:40 +0200andreabedini(~andreabed@202.94.72.249)
2021-07-27 08:22:52 +0200dhil(~dhil@195.213.192.47)
2021-07-27 08:23:41 +0200burnside_(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:25:18 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-27 08:26:29 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net) (Ping timeout: 265 seconds)
2021-07-27 08:26:53 +0200azeem(~azeem@176.200.228.157) (Ping timeout: 255 seconds)
2021-07-27 08:27:15 +0200azeem(~azeem@176.200.241.36)
2021-07-27 08:32:13 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 08:34:30 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-07-27 08:34:42 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 272 seconds)
2021-07-27 08:34:55 +0200azeem(~azeem@176.200.241.36)
2021-07-27 08:36:09 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-07-27 08:37:32 +0200zeenk(~zeenk@2a02:2f04:a008:d600:18f2:3421:bac6:8f38)
2021-07-27 08:39:01 +0200burnside_(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 08:39:27 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:41:59 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-07-27 08:42:29 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 08:43:06 +0200chomwitt(~chomwitt@2a02:587:dc0c:8100:12c3:7bff:fe6d:d374)
2021-07-27 08:43:59 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 255 seconds)
2021-07-27 08:44:02 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net)
2021-07-27 08:46:44 +0200pe200012_pe200012
2021-07-27 08:47:16 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-07-27 08:47:47 +0200oxide(~lambda@user/oxide)
2021-07-27 08:48:30 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 08:49:38 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:7d8e:40bb:852a:65d0)
2021-07-27 08:50:48 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-27 08:52:10 +0200chele(~chele@user/chele)
2021-07-27 08:52:25 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-27 08:52:33 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 08:53:04 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 265 seconds)
2021-07-27 08:53:56 +0200ham2(~ham4@d8D8627D5.access.telenet.be) (Ping timeout: 258 seconds)
2021-07-27 08:54:19 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 258 seconds)
2021-07-27 08:55:50 +0200andreabedini(~andreabed@202.94.72.249) (Quit: WeeChat 2.8)
2021-07-27 08:56:57 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 08:57:16 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
2021-07-27 08:58:56 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 09:00:12 +0200taktoa[c](sid282096@id-282096.tinside.irccloud.com) (Read error: Connection reset by peer)
2021-07-27 09:00:23 +0200taktoa[c](sid282096@id-282096.tinside.irccloud.com)
2021-07-27 09:00:32 +0200martin02(silas@hund.fs.lmu.de) (Ping timeout: 245 seconds)
2021-07-27 09:01:08 +0200ikex(~ash@user/ikex) (Quit: ZNC - https://znc.in)
2021-07-27 09:01:27 +0200ikex(~ash@user/ikex)
2021-07-27 09:03:12 +0200jneira_(~jneira_@28.red-80-28-169.staticip.rima-tde.net) (Quit: Connection closed)
2021-07-27 09:03:27 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-07-27 09:03:42 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 265 seconds)
2021-07-27 09:06:30 +0200Pent(sid313808@id-313808.tooting.irccloud.com) (Ping timeout: 250 seconds)
2021-07-27 09:06:32 +0200pe200012_(~pe200012@113.105.10.33)
2021-07-27 09:06:35 +0200pe200012(~pe200012@113.105.10.33) (Ping timeout: 258 seconds)
2021-07-27 09:08:27 +0200Pent(sid313808@id-313808.tooting.irccloud.com)
2021-07-27 09:09:03 +0200fendor_fendor
2021-07-27 09:10:22 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-07-27 09:10:23 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 09:10:24 +0200Pent(sid313808@id-313808.tooting.irccloud.com) (Max SendQ exceeded)
2021-07-27 09:10:38 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com) (Ping timeout: 252 seconds)
2021-07-27 09:10:38 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com)
2021-07-27 09:11:10 +0200martin02(silas@hund.fs.lmu.de)
2021-07-27 09:11:40 +0200Pent(sid313808@id-313808.tooting.irccloud.com)
2021-07-27 09:12:15 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com)
2021-07-27 09:13:58 +0200nrr(sid20938@id-20938.tooting.irccloud.com) (Ping timeout: 272 seconds)
2021-07-27 09:14:08 +0200sa(sid1055@2a03:5180:f::41f) (Ping timeout: 255 seconds)
2021-07-27 09:15:00 +0200hongminhee(sid295@id-295.tinside.irccloud.com) (Ping timeout: 276 seconds)
2021-07-27 09:15:32 +0200jakesyl(sid56879@id-56879.stonehaven.irccloud.com) (Ping timeout: 245 seconds)
2021-07-27 09:15:34 +0200sa(sid1055@id-1055.tinside.irccloud.com)
2021-07-27 09:16:12 +0200hongminhee(sid295@id-295.tinside.irccloud.com)
2021-07-27 09:17:37 +0200nrr(sid20938@id-20938.tooting.irccloud.com)
2021-07-27 09:17:58 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com) (Ping timeout: 256 seconds)
2021-07-27 09:18:18 +0200jakesyl(sid56879@id-56879.stonehaven.irccloud.com)
2021-07-27 09:19:46 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com)
2021-07-27 09:20:00 +0200jakesyl(sid56879@id-56879.stonehaven.irccloud.com) (Max SendQ exceeded)
2021-07-27 09:20:00 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 09:20:34 +0200jakesyl(sid56879@id-56879.stonehaven.irccloud.com)
2021-07-27 09:22:11 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 252 seconds)
2021-07-27 09:24:16 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 09:24:17 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 245 seconds)
2021-07-27 09:26:27 +0200acidjnk_new3(~acidjnk@p200300d0c72b953020abcb826e8e1ebf.dip0.t-ipconnect.de)
2021-07-27 09:27:40 +0200jolly(~jolly@208.180.97.158) (Ping timeout: 258 seconds)
2021-07-27 09:28:10 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Ping timeout: 256 seconds)
2021-07-27 09:30:29 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 09:30:30 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-07-27 09:31:55 +0200jakalx(~jakalx@base.jakalx.net)
2021-07-27 09:32:04 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 250 seconds)
2021-07-27 09:32:06 +0200mikoto-chan(~mikoto-ch@ip-193-121-10-50.dsl.scarlet.be)
2021-07-27 09:38:24 +0200dpratt_(sid193493@id-193493.brockwell.irccloud.com) (Ping timeout: 276 seconds)
2021-07-27 09:38:41 +0200dpratt_(sid193493@id-193493.brockwell.irccloud.com)
2021-07-27 09:44:09 +0200kenran(~kenran@b2b-37-24-119-190.unitymedia.biz)
2021-07-27 09:44:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-07-27 09:44:44 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 255 seconds)
2021-07-27 09:45:01 +0200kenran(~kenran@b2b-37-24-119-190.unitymedia.biz) (Client Quit)
2021-07-27 09:45:09 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 09:45:32 +0200azeem(~azeem@176.200.241.36)
2021-07-27 09:46:49 +0200cfricke(~cfricke@user/cfricke)
2021-07-27 09:52:31 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 265 seconds)
2021-07-27 09:53:04 +0200azeem(~azeem@176.200.241.36)
2021-07-27 09:54:05 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-07-27 09:59:45 +0200deejaytee(~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net)
2021-07-27 10:00:12 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 272 seconds)
2021-07-27 10:00:21 +0200azeem(~azeem@176.200.241.36)
2021-07-27 10:06:03 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-07-27 10:06:21 +0200chele(~chele@user/chele)
2021-07-27 10:08:13 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 244 seconds)
2021-07-27 10:08:25 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 10:13:00 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 268 seconds)
2021-07-27 10:15:12 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 10:15:28 +0200aerona(~aerona@2600:6c54:4600:f300:5d:533e:d781:9302) (Read error: Connection reset by peer)
2021-07-27 10:17:08 +0200chomwitt(~chomwitt@2a02:587:dc0c:8100:12c3:7bff:fe6d:d374) (Ping timeout: 255 seconds)
2021-07-27 10:17:48 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-07-27 10:17:48 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-07-27 10:17:51 +0200allbery_bgeekosaur
2021-07-27 10:18:31 +0200chomwitt(~chomwitt@2a02:587:dc0c:8100:12c3:7bff:fe6d:d374)
2021-07-27 10:20:29 +0200cjb(~cjb@user/cjb) (Quit: rcirc on GNU Emacs 28.0.50)
2021-07-27 10:20:44 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 255 seconds)
2021-07-27 10:22:41 +0200deejaytee(~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net) (Killed (iridium.libera.chat (Nickname regained by services)))
2021-07-27 10:22:45 +0200deejaytee(~deejaytee@193.46-255-62.static.virginmediabusiness.co.uk)
2021-07-27 10:25:57 +0200acidjnk_new3(~acidjnk@p200300d0c72b953020abcb826e8e1ebf.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-07-27 10:26:29 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-07-27 10:27:48 +0200acidjnk_new3(~acidjnk@p200300d0c72b953020abcb826e8e1ebf.dip0.t-ipconnect.de)
2021-07-27 10:28:28 +0200jumper149(~jumper149@80.240.31.34)
2021-07-27 10:33:17 +0200burnside_(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 10:33:37 +0200cfricke(~cfricke@user/cfricke) (Read error: Connection reset by peer)
2021-07-27 10:33:59 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-27 10:35:31 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 258 seconds)
2021-07-27 10:35:59 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 252 seconds)
2021-07-27 10:36:09 +0200azeem(~azeem@176.200.241.36)
2021-07-27 10:36:40 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 10:40:04 +0200yauhsien(~yauhsien@61-231-38-146.dynamic-ip.hinet.net) (Quit: Leaving...)
2021-07-27 10:40:45 +0200chomwitt(~chomwitt@2a02:587:dc0c:8100:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
2021-07-27 10:44:31 +0200mastarija(~mastarija@31.217.8.174)
2021-07-27 10:44:34 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
2021-07-27 10:44:34 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 10:45:28 +0200 <mastarija> Say that I have a type `MyType i m v`, and that type can be a functor on either i or v, how would I write an instance for functor over i?
2021-07-27 10:45:42 +0200 <mastarija> V is easy, instance Functor (MyType i m v)
2021-07-27 10:46:02 +0200 <mastarija> * instance Functor (MyType i m)
2021-07-27 10:46:24 +0200 <mastarija> But what about i? Can I use some type family to "swap" the arguments?
2021-07-27 10:48:42 +0200 <thomasjm[m]> mastarija: probably just write out the `fmap` instance explicitly? you might want https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-Bifunctor.html
2021-07-27 10:49:04 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-07-27 10:49:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds)
2021-07-27 10:49:22 +0200 <mastarija> thomasjm[m], a... but my type is not a Bifunctor
2021-07-27 10:49:37 +0200 <mastarija> It's either a functor on i, or a functor on v
2021-07-27 10:49:42 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 10:50:03 +0200 <lortabac> mastarija: since you can't have 2 Functor instances for the same type, you need to define a newtype with a different variable order
2021-07-27 10:50:40 +0200 <mastarija> lortabac, hm.. yes, I was hoping there could be some trick
2021-07-27 10:50:59 +0200 <lortabac> mastarija: how would you select which instance you want?
2021-07-27 10:51:16 +0200 <mastarija> Didn't think about that :D
2021-07-27 10:52:16 +0200 <deejaytee> mastarija: could you explain a bit more about the underlying structure, and why that means that it's either one functor or the other?
2021-07-27 10:52:55 +0200 <deejaytee> I don't doubt such a thing is possible, I'm just having trouble thinking of an example
2021-07-27 10:53:08 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 10:53:08 +0200_bin(~bin@user/bin/x-1583188) (Quit: ZNC - https://znc.in)
2021-07-27 10:53:15 +0200 <mastarija> deejaytee, it's a bit complex, but basically I have a type like either (a bit more complex)
2021-07-27 10:53:21 +0200_bin(~bin@user/bin/x-1583188)
2021-07-27 10:53:46 +0200 <mastarija> So I might want to fmap over left or right
2021-07-27 10:54:00 +0200 <lortabac> isn't it the definition of a Bifunctor?
2021-07-27 10:54:06 +0200 <mastarija> No
2021-07-27 10:54:12 +0200 <mastarija> It can be
2021-07-27 10:54:14 +0200ham(~ham4@user/ham)
2021-07-27 10:54:17 +0200 <mastarija> But I don't want a bifunctor
2021-07-27 10:54:29 +0200 <lortabac> ok, you want it to be a Functor in both cases
2021-07-27 10:54:46 +0200 <mastarija> I want just a functor over a, and just a functor over b in `Either a b`
2021-07-27 10:55:12 +0200 <deejaytee> well Either is a Bifunctor - it's just that lmap and rmap don't do anything
2021-07-27 10:55:24 +0200 <deejaytee> But if your heart is set on fmap, yeah a newtype wrapper is what you'll need
2021-07-27 10:55:56 +0200 <mastarija> Although, now that I think about selecting the right instance, I guess that function type could be the "clue" to select the right instance
2021-07-27 10:56:04 +0200 <deejaytee> (*it's just that first and second don't do anything unless you're on the correct constructor)
2021-07-27 10:56:21 +0200burnside_(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 10:56:23 +0200 <mastarija> Problem is, I want to have different Monad instances as well :D
2021-07-27 10:56:29 +0200 <mastarija> And applicatives
2021-07-27 10:56:42 +0200 <mastarija> So bifunctor doesn't help
2021-07-27 10:57:45 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
2021-07-27 10:57:45 +0200 <tomsmeding> % map (Data.Bifunctor.first (+1)) [Left 2, Right 2]
2021-07-27 10:57:46 +0200 <yahb> tomsmeding: [Left 3,Right 2]
2021-07-27 10:58:04 +0200 <deejaytee> Yeah for your monad instance you're definitely going to want a newtype, otherwise I wager it'll be difficult to tell `do` which instance to pick, even if you find a trick to get the functor & applicative instances working
2021-07-27 10:58:47 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 10:59:02 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 11:00:19 +0200 <mastarija> I guess, but one can dream :D
2021-07-27 11:01:18 +0200 <deejaytee> unless you're too cool for do notation, in which case: https://hackage.haskell.org/package/bifunctors-5.5.11/docs/Data-Bifunctor-Functor.html#t:Bifunctor…
2021-07-27 11:02:01 +0200bingruns(~bingruns@bxk158.neoplus.adsl.tpnet.pl)
2021-07-27 11:03:24 +0200agua(~agua@2804:14c:8793:8e2f:39e9:c5a8:c532:7498)
2021-07-27 11:03:53 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 258 seconds)
2021-07-27 11:06:43 +0200bingruns(~bingruns@bxk158.neoplus.adsl.tpnet.pl) (Client Quit)
2021-07-27 11:06:57 +0200bingruns(~bingruns@bxk158.neoplus.adsl.tpnet.pl)
2021-07-27 11:07:20 +0200pesada(~agua@2804:18:4c:684a:1:0:5b66:52cd) (Ping timeout: 256 seconds)
2021-07-27 11:08:11 +0200bingruns(~bingruns@bxk158.neoplus.adsl.tpnet.pl) (Client Quit)
2021-07-27 11:08:21 +0200bingruns(~bingruns@bxk158.neoplus.adsl.tpnet.pl)
2021-07-27 11:09:47 +0200mei(~mei@user/mei) (Read error: Connection reset by peer)
2021-07-27 11:10:03 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 276 seconds)
2021-07-27 11:10:14 +0200mei(~mei@user/mei)
2021-07-27 11:15:07 +0200bingruns(~bingruns@bxk158.neoplus.adsl.tpnet.pl) (Quit: Client closed)
2021-07-27 11:26:22 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 245 seconds)
2021-07-27 11:26:49 +0200azeem(~azeem@176.200.241.36)
2021-07-27 11:29:04 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 250 seconds)
2021-07-27 11:29:25 +0200 <tomsmeding> why does that type class use 't' as the monad type, instead of 'm'
2021-07-27 11:29:52 +0200 <ixlun> What's the best way to implement a fast circular buffer of fixed sized?
2021-07-27 11:29:54 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:7d8e:40bb:852a:65d0) (Ping timeout: 240 seconds)
2021-07-27 11:30:12 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 11:30:25 +0200 <ixlun> So as you add one element at the head, an element gets dropped at the tail
2021-07-27 11:30:44 +0200 <tomsmeding> ixlun: should it be functional, or can it be in ST?
2021-07-27 11:30:48 +0200 <deejaytee> tomsmeding: I assume because it "transforms" the underlying bifunctor
2021-07-27 11:31:00 +0200 <ixlun> Can be in ST
2021-07-27 11:31:09 +0200 <tomsmeding> deejaytee: then I'd expect 't' to be a monad transformer :p
2021-07-27 11:31:18 +0200 <tomsmeding> but it doesn't matter anyway
2021-07-27 11:31:27 +0200 <ixlun> or IO
2021-07-27 11:31:29 +0200 <tomsmeding> ixlun: then just an STArray, right? or the vector equivalent
2021-07-27 11:31:36 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 265 seconds)
2021-07-27 11:31:37 +0200 <tomsmeding> not going to get a faster one
2021-07-27 11:31:47 +0200chomwitt(~chomwitt@athedsl-32041.home.otenet.gr)
2021-07-27 11:31:54 +0200 <deejaytee> agree that I'd expect a transformer, agree that it doesn't matter :P
2021-07-27 11:32:18 +0200azeem(~azeem@176.200.241.36)
2021-07-27 11:32:28 +0200 <ixlun> Right, so I'm looking at Data.Vector.Unboxed.Mutable
2021-07-27 11:32:41 +0200 <ixlun> That sound about right?
2021-07-27 11:32:50 +0200 <tomsmeding> yeah
2021-07-27 11:32:58 +0200 <tomsmeding> if your data type can be unboxed, that is
2021-07-27 11:33:08 +0200 <tomsmeding> I wrote this at some point for a different #haskell'er: https://gist.github.com/tomsmeding/1a9f9f6d64ab60699751c9bdeb99bc81
2021-07-27 11:33:21 +0200 <tomsmeding> uses array, not vector, but it should be similar
2021-07-27 11:34:11 +0200tomsmedingisn't sure why that declares DataKinds, it doesn't use it
2021-07-27 11:35:18 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 11:35:29 +0200Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2021-07-27 11:35:42 +0200 <ixlun> Right, that's perfect, I'll try and convert that to Vector code and see how I get on. Thanks for the help tomsmeding !
2021-07-27 11:36:26 +0200 <tomsmeding> ixlun: FYI the name is because the person I wrote it for used 'fog' as a nick :p
2021-07-27 11:36:52 +0200 <ixlun> Haha, I was wondering if there was some subtle joke with the name
2021-07-27 11:40:20 +0200cfricke(~cfricke@user/cfricke)
2021-07-27 11:40:27 +0200cfricke(~cfricke@user/cfricke) (Client Quit)
2021-07-27 11:51:25 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 265 seconds)
2021-07-27 11:51:34 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 11:52:45 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:5a6e:2d28:b93b:2c96)
2021-07-27 11:52:45 +0200azeem(~azeem@176.200.241.36)
2021-07-27 11:54:43 +0200mikoto-chan(~mikoto-ch@ip-193-121-10-50.dsl.scarlet.be) (Quit: mikoto-chan)
2021-07-27 11:55:20 +0200troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
2021-07-27 11:59:07 +0200troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2021-07-27 11:59:28 +0200SoF(~skius@user/skius) (Quit: Ping timeout (120 seconds))
2021-07-27 11:59:49 +0200SoF(~skius@user/skius)
2021-07-27 12:00:32 +0200jippiedoe(~david@2a02-a44c-e14e-1-19ba-6ff5-814d-2f81.fixed6.kpn.net)
2021-07-27 12:00:42 +0200haritz(~hrtz@user/haritz) (Remote host closed the connection)
2021-07-27 12:00:50 +0200haritz(~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
2021-07-27 12:00:51 +0200haritz(~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
2021-07-27 12:00:51 +0200haritz(~hrtz@user/haritz)
2021-07-27 12:01:47 +0200mastarija(~mastarija@31.217.8.174) (Ping timeout: 245 seconds)
2021-07-27 12:01:52 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-07-27 12:02:17 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-07-27 12:02:59 +0200texasmynsted_(~texasmyns@99.96.221.112)
2021-07-27 12:03:27 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 245 seconds)
2021-07-27 12:04:42 +0200texasmynsted(~texasmyns@99.96.221.112) (Ping timeout: 240 seconds)
2021-07-27 12:05:18 +0200tomsmeding(~tomsmedin@2a03:b0c0:0:1010::767:3001) (Remote host closed the connection)
2021-07-27 12:05:34 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 12:05:36 +0200chomwitt(~chomwitt@athedsl-32041.home.otenet.gr) (Ping timeout: 258 seconds)
2021-07-27 12:05:37 +0200tomsmeding(~tomsmedin@tomsmeding.com)
2021-07-27 12:09:03 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 12:14:19 +0200 <pmk> I have a function f :: t -> Either a String and I would like to do something like "<" ++ f x ++ ">". I am not sure how to map (++) through Either. I've tried (++) <$> Right "<" <*> f x <*> Right ">" but the second (<*>) rightly complains since its first argument is not a function. I probably could write a function to do it with do notation but is there an idiomatic way to accomplish this using Applicative?
2021-07-27 12:14:53 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 252 seconds)
2021-07-27 12:15:30 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 12:16:57 +0200jippiedoe(~david@2a02-a44c-e14e-1-19ba-6ff5-814d-2f81.fixed6.kpn.net) (Ping timeout: 268 seconds)
2021-07-27 12:17:56 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 12:18:01 +0200__monty__(~toonn@user/toonn)
2021-07-27 12:18:21 +0200 <sshine_> > let f x = pure (show x) :: Either a String; between l r m = l <> m <> r in between "<" ">" <$> f 42
2021-07-27 12:18:23 +0200 <lambdabot> Right "<42>"
2021-07-27 12:19:36 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:5a6e:2d28:b93b:2c96) (Ping timeout: 276 seconds)
2021-07-27 12:20:13 +0200 <pmk> Thanks sshine_!
2021-07-27 12:20:26 +0200 <deejaytee> Using <&> from Data.Functor, you can preserve infix placement if you *really* want to :P
2021-07-27 12:20:31 +0200 <deejaytee> e.g. ("<" ++) <$> Right "a" <&> (++ ">")
2021-07-27 12:20:38 +0200 <sshine_> > concat <$> sequence [Right "<", Right "42", Right ">"]
2021-07-27 12:20:40 +0200 <lambdabot> Right "<42>"
2021-07-27 12:22:10 +0200 <sshine_> :t sequence
2021-07-27 12:22:12 +0200 <lambdabot> (Traversable t, Monad m) => t (m a) -> m (t a)
2021-07-27 12:22:31 +0200 <sshine_> > sequence [Just "hello", Nothing, Just "world"]
2021-07-27 12:22:33 +0200 <lambdabot> Nothing
2021-07-27 12:22:41 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 252 seconds)
2021-07-27 12:22:45 +0200 <sshine_> > sequence [Just "hello", Just " ", Just "world"]
2021-07-27 12:22:46 +0200 <lambdabot> Just ["hello"," ","world"]
2021-07-27 12:22:47 +0200Kaipi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
2021-07-27 12:23:12 +0200 <sshine_> > concat ["hello", " ", "world"]
2021-07-27 12:23:15 +0200 <lambdabot> "hello world"
2021-07-27 12:23:23 +0200 <sshine_> > fmap concat (Just ["hello", " ", "world"])
2021-07-27 12:23:25 +0200 <lambdabot> Just "hello world"
2021-07-27 12:23:37 +0200 <sshine_> :t fmap concat . sequence
2021-07-27 12:23:39 +0200 <lambdabot> (Traversable t, Monad f) => t (f [a]) -> f [a]
2021-07-27 12:23:48 +0200 <dexterfoo> Is there something like memcpy for Data.Vector.Unboxed.Mutable?
2021-07-27 12:24:03 +0200 <sshine_> :t fmap concat . sequence :: [Either a String] -> Either a [String]
2021-07-27 12:24:04 +0200 <lambdabot> error:
2021-07-27 12:24:04 +0200 <lambdabot> • Couldn't match type ‘Char’ with ‘[Char]’
2021-07-27 12:24:05 +0200 <lambdabot> Expected type: [Either a1 String] -> Either a1 [String]
2021-07-27 12:24:11 +0200 <sshine_> er :)
2021-07-27 12:24:21 +0200 <pmk> hehe :)
2021-07-27 12:24:46 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 265 seconds)
2021-07-27 12:24:47 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-27 12:24:49 +0200 <pmk> I think fmap concat . sequence is what I was looking for (or pretty close to it). Thanks!
2021-07-27 12:25:03 +0200 <sshine_> :t fmap concat . sequence :: [Either a String] -> Either a String -- there
2021-07-27 12:25:04 +0200 <lambdabot> [Either a String] -> Either a String
2021-07-27 12:25:37 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Read error: Connection reset by peer)
2021-07-27 12:25:56 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-27 12:26:09 +0200sshine_sshine
2021-07-27 12:26:17 +0200royo(~royo@user/royo) (Remote host closed the connection)
2021-07-27 12:26:33 +0200pesada(~agua@177.79.68.96)
2021-07-27 12:28:11 +0200euouae(~euouae@user/euouae)
2021-07-27 12:28:15 +0200 <euouae> Hello
2021-07-27 12:28:22 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 12:28:54 +0200 <euouae> How do I use haddock to comment individual arguments? I am not sure how to format it. For example, now I use this style: https://paste.tomsmeding.com/jDqAB5mL
2021-07-27 12:29:15 +0200 <euouae> Notice that I have to place :: on a newline so that -> always matches up. If I don't do this, my editor does not enter the right amount of spaces (I have to tab it myself)
2021-07-27 12:29:17 +0200agua(~agua@2804:14c:8793:8e2f:39e9:c5a8:c532:7498) (Ping timeout: 268 seconds)
2021-07-27 12:31:47 +0200royo(~royo@user/royo)
2021-07-27 12:31:47 +0200 <tomsmeding> euouae: looks like the "standard style", for as far as there's one https://hackage.haskell.org/package/base-4.14.0.0/docs/src/System.IO.html#line-458
2021-07-27 12:32:10 +0200 <euouae> do you know which formatter follows that style?
2021-07-27 12:32:12 +0200azeem(~azeem@176.200.241.36) (Ping timeout: 245 seconds)
2021-07-27 12:32:19 +0200tomsmedingdoesn't use a formatter
2021-07-27 12:32:20 +0200 <euouae> The one formatter I just tried replaces my -- ^ with newlines and --
2021-07-27 12:32:21 +0200 <euouae> -- |
2021-07-27 12:32:35 +0200 <euouae> You don't? Oh I love them!
2021-07-27 12:32:37 +0200 <tomsmeding> can you post what its output is?
2021-07-27 12:32:46 +0200 <tomsmeding> does it put the -- | before the argument instead of after it?
2021-07-27 12:32:53 +0200 <euouae> https://paste.tomsmeding.com/U2AKRT6Q
2021-07-27 12:33:03 +0200 <tomsmeding> that looks horrible to me :p
2021-07-27 12:33:31 +0200azeem(~azeem@62.18.161.85)
2021-07-27 12:33:48 +0200 <euouae> I agree
2021-07-27 12:33:52 +0200 <euouae> It's not too great
2021-07-27 12:33:57 +0200 <tomsmeding> so I guess your question is: which formatter preserves "-> Int -- ^ documentation" formatting for function arguments
2021-07-27 12:34:15 +0200 <euouae> What I can say is that I prefer a formatter over custom stylistic stuff
2021-07-27 12:36:36 +0200 <tomsmeding> but it's all opinion anyway
2021-07-27 12:36:41 +0200 <tomsmeding> which formatting is "nicest"
2021-07-27 12:37:23 +0200jippiedoe(~david@2a02-a44c-e14e-1-46af-5566-11c4-28b2.fixed6.kpn.net)
2021-07-27 12:37:26 +0200acidjnk_new3(~acidjnk@p200300d0c72b953020abcb826e8e1ebf.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-07-27 12:37:29 +0200terrorjack(~terrorjac@ec2-54-95-39-30.ap-northeast-1.compute.amazonaws.com) (Remote host closed the connection)
2021-07-27 12:37:33 +0200 <tomsmeding> euouae: a regular here in this channel expresses this sentiment https://twitter.com/comerijn/status/1257804634833420292
2021-07-27 12:38:26 +0200terrorjack(~terrorjac@ec2-54-95-39-30.ap-northeast-1.compute.amazonaws.com)
2021-07-27 12:38:39 +0200 <euouae> Doesn't matter what they think
2021-07-27 12:39:09 +0200 <euouae> I know I waste time and energy overthinking it and it's better spent elsewhere
2021-07-27 12:41:28 +0200neurocyte0(~neurocyte@46.243.81.131)
2021-07-27 12:41:28 +0200neurocyte0(~neurocyte@46.243.81.131) (Changing host)
2021-07-27 12:41:28 +0200neurocyte0(~neurocyte@user/neurocyte)
2021-07-27 12:41:54 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-07-27 12:43:03 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 12:43:39 +0200neurocyte0(~neurocyte@user/neurocyte) (Client Quit)
2021-07-27 12:43:51 +0200neurocyte0(~neurocyte@46.243.81.131)
2021-07-27 12:43:51 +0200neurocyte0(~neurocyte@46.243.81.131) (Changing host)
2021-07-27 12:43:51 +0200neurocyte0(~neurocyte@user/neurocyte)
2021-07-27 12:44:02 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 252 seconds)
2021-07-27 12:44:17 +0200neurocyte0neurocyte
2021-07-27 12:44:35 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 265 seconds)
2021-07-27 12:44:59 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 12:45:52 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 12:45:52 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-07-27 12:46:25 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-27 12:46:30 +0200jippiedoe(~david@2a02-a44c-e14e-1-46af-5566-11c4-28b2.fixed6.kpn.net) (Ping timeout: 256 seconds)
2021-07-27 12:48:20 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
2021-07-27 12:48:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 12:49:22 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 12:49:52 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 12:51:36 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 256 seconds)
2021-07-27 12:53:54 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-07-27 12:54:17 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 258 seconds)
2021-07-27 12:54:30 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:63c6:890b:fddc:7714)
2021-07-27 12:54:39 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 12:54:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 12:57:23 +0200 <Arahael> It's remarkable how quickly one gets used to using lenses.
2021-07-27 12:59:05 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2021-07-27 12:59:18 +0200 <Rembane> And then gets unused to them again after not using them for a while.
2021-07-27 13:00:02 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
2021-07-27 13:00:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 13:01:58 +0200 <Arahael> Indeed.
2021-07-27 13:02:24 +0200 <Arahael> I should re-learn the whole` Lens s t a b` thing again.
2021-07-27 13:02:41 +0200 <Arahael> (But not today)
2021-07-27 13:03:21 +0200euouae(~euouae@user/euouae) (Quit: euouae)
2021-07-27 13:04:08 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 13:04:48 +0200neurocyte(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2021-07-27 13:06:22 +0200neurocyte(~neurocyte@46.243.81.131)
2021-07-27 13:06:22 +0200neurocyte(~neurocyte@46.243.81.131) (Changing host)
2021-07-27 13:06:22 +0200neurocyte(~neurocyte@user/neurocyte)
2021-07-27 13:07:41 +0200chele(~chele@user/chele) (Ping timeout: 255 seconds)
2021-07-27 13:07:51 +0200chele(~chele@user/chele)
2021-07-27 13:09:45 +0200jippiedoe(~david@2a02-a44c-e14e-1-b572-7a56-aa26-eb3.fixed6.kpn.net)
2021-07-27 13:10:46 +0200 <arkanoid> would you suggesto to learn error handling via Control.Exception or prefer Data.Either where left is custom Error type
2021-07-27 13:11:46 +0200 <Rembane> arkanoid: I would go for Data.Either as long as possible
2021-07-27 13:12:37 +0200 <Arahael> arkanoid: I'd use Control.Exception for seriously exceptional cases.
2021-07-27 13:13:53 +0200 <arkanoid> Arahael: like when the program should really crash but it may be a library so it's up to the caller to decide what to do?
2021-07-27 13:13:54 +0200jippiedoe(~david@2a02-a44c-e14e-1-b572-7a56-aa26-eb3.fixed6.kpn.net) (Ping timeout: 240 seconds)
2021-07-27 13:14:08 +0200 <arkanoid> Rembane: thanks!
2021-07-27 13:14:15 +0200 <Arahael> arkanoid: I think so.
2021-07-27 13:15:04 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 13:15:38 +0200 <Rembane> arkanoid: np!
2021-07-27 13:16:08 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 13:16:44 +0200 <arkanoid> is there anything else I should consider for this topic apart from Control.Exception, Data.Either and Data.Maybe and obviously Monad pattern?
2021-07-27 13:19:47 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-07-27 13:24:06 +0200jippiedoe(~david@2a02-a44c-e14e-1-bf41-1b3a-cc17-853c.fixed6.kpn.net)
2021-07-27 13:25:36 +0200azeem(~azeem@62.18.161.85) (Ping timeout: 256 seconds)
2021-07-27 13:26:01 +0200azeem(~azeem@62.18.161.85)
2021-07-27 13:26:08 +0200acidjnk_new3(~acidjnk@p200300d0c72b950729faca9193881d78.dip0.t-ipconnect.de)
2021-07-27 13:29:08 +0200tazca[m](~tazcamatr@2001:470:69fc:105::c809)
2021-07-27 13:29:40 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-27 13:30:17 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 13:30:59 +0200 <merijn> Simple heuristic: Either for library interfaces, exceptions for within my own program
2021-07-27 13:31:11 +0200 <merijn> i.e. exceptions across package boundaries should be opt-in
2021-07-27 13:31:50 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-07-27 13:34:40 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2021-07-27 13:36:10 +0200tazca[m](~tazcamatr@2001:470:69fc:105::c809) ()
2021-07-27 13:36:16 +0200Guest67(~Guest67@bxk158.neoplus.adsl.tpnet.pl)
2021-07-27 13:36:50 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 258 seconds)
2021-07-27 13:38:14 +0200arjun(~Srain@user/arjun)
2021-07-27 13:42:57 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-27 13:45:00 +0200azeem(~azeem@62.18.161.85) (Ping timeout: 265 seconds)
2021-07-27 13:45:17 +0200azeem(~azeem@62.18.161.85)
2021-07-27 13:47:33 +0200 <Arahael> Hmm. With lenses, I want to do `aVar & aField .~ aValue`, except I *don't* want the field set if aValue is Nothing. What should I do?
2021-07-27 13:47:55 +0200 <Arahael> (ie, aValue is a `Maybe a`, and I want it to set the 'a' value if it exists)
2021-07-27 13:48:36 +0200raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-07-27 13:48:52 +0200 <Arahael> merijn: That's fair - I remember getting surprised that wreq, as an example, didn't seem to work weirdly - turned out it was raising an exception. :) Using Either would have made that very explicit. (Though I think it was using Either, so I was quite confused)
2021-07-27 13:50:44 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 13:51:21 +0200 <Arahael> I'm thinking of defining a new operator: .~? This sets the specified field to a if the RHS is "Just a", otherwise does nothing.
2021-07-27 13:53:14 +0200Guest67(~Guest67@bxk158.neoplus.adsl.tpnet.pl) (Quit: Client closed)
2021-07-27 13:55:38 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2021-07-27 13:57:10 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 13:57:13 +0200 <Arahael> Hmm, that was too easy.
2021-07-27 13:57:24 +0200guest6474(~guest6474@79.184.16.172.ipv4.supernova.orange.pl)
2021-07-27 13:57:29 +0200mastarija(~mastarija@31.217.8.174)
2021-07-27 13:57:51 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 13:59:20 +0200guest6474(~guest6474@79.184.16.172.ipv4.supernova.orange.pl) (Remote host closed the connection)
2021-07-27 14:02:23 +0200 <jippiedoe> Arahael: if it's not a common enough pattern to want a `.~?`, you could use `aVar & aField %~ (`fromMaybe` aValue)` instead
2021-07-27 14:05:06 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
2021-07-27 14:05:23 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 14:05:25 +0200 <Arahael> jippiedoe: It's common enough, but that looks even easier! Except that replaces the value in either case.
2021-07-27 14:06:14 +0200 <Arahael> jippiedoe: I went with `a .~? (Just b) = a .~ b` and `a .~? Nothing = id`
2021-07-27 14:06:40 +0200 <Arahael> (Right? That `fromMaybe` isn't preserving the input, isn't it?)
2021-07-27 14:06:41 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 14:06:47 +0200 <jippiedoe> What do you mean with 'it replaces the value in either case'?
2021-07-27 14:06:58 +0200 <Arahael> jippiedoe: What does it do if aValue is Nothing?
2021-07-27 14:07:23 +0200 <jippiedoe> fromMaybe d x = case x of {Nothing -> d;Just v -> v}
2021-07-27 14:07:47 +0200 <jippiedoe> fromMaybe a Nothing = a
2021-07-27 14:08:07 +0200anandprabhu(~anandprab@94.202.243.198)
2021-07-27 14:09:19 +0200 <Arahael> Oh, yeah. I was confused.
2021-07-27 14:09:30 +0200 <Arahael> Thanks - the user-provided function provides the original value.
2021-07-27 14:10:02 +0200 <Arahael> Hmm, which means it becomes explicitly set?
2021-07-27 14:10:36 +0200Arahaelthinks it doesn't make a difference - the lens don't distinguish, he thinks.
2021-07-27 14:10:59 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 14:12:00 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 250 seconds)
2021-07-27 14:13:05 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 14:13:27 +0200anandprabhu(~anandprab@94.202.243.198) (Ping timeout: 245 seconds)
2021-07-27 14:15:33 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
2021-07-27 14:19:47 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 14:23:46 +0200raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-07-27 14:25:01 +0200raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-07-27 14:26:32 +0200raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Client Quit)
2021-07-27 14:29:35 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-07-27 14:32:33 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 14:32:50 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 14:32:58 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 14:33:35 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 14:33:43 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 14:34:39 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 14:39:42 +0200arjun(~Srain@user/arjun) (Ping timeout: 258 seconds)
2021-07-27 14:41:11 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-07-27 14:41:43 +0200 <tomsmeding> Arahael: what about `aVar & aField %~ (aValue <|>)`
2021-07-27 14:42:03 +0200 <tomsmeding> disclaimer: I have no idea about lenses, but with regards to Maybe, that should have the semantics that you describe I think?
2021-07-27 14:42:24 +0200 <tomsmeding> ( (<|>) from Alternative in Control.Applicative)
2021-07-27 14:42:35 +0200 <Arahael> tomsmeding: That's a variant of what jippiedoe suggested, I think. That works also, I think.
2021-07-27 14:42:47 +0200 <Arahael> So I have three options now. :D And I've now learnt about %~
2021-07-27 14:43:06 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 268 seconds)
2021-07-27 14:43:45 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 14:43:54 +0200texasmynsted_(~texasmyns@99.96.221.112) (Ping timeout: 240 seconds)
2021-07-27 14:45:08 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com)
2021-07-27 14:45:11 +0200 <tomsmeding> oh wait 'aField' is not a Maybe but just the value itself? Then yes, fromMaybe :p
2021-07-27 14:45:28 +0200hendursaga(~weechat@user/hendursaga)
2021-07-27 14:45:47 +0200 <jippiedoe> Ah, I interpreted the field to be of type `a` that you want to replace if the replacement exists, whereas tomsmeding's suggestion works if the field is of type `Maybe a`
2021-07-27 14:45:54 +0200 <tomsmeding> ^
2021-07-27 14:46:10 +0200 <jippiedoe> and while I was typing I didn't see you saw it too already :)
2021-07-27 14:46:23 +0200tomsmedinghigh-5's jippiedoe
2021-07-27 14:48:16 +0200 <Arahael> Ah, interesting.
2021-07-27 14:53:18 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 14:55:05 +0200azeem(~azeem@62.18.161.85) (Ping timeout: 265 seconds)
2021-07-27 14:55:17 +0200jolly(~jolly@208.180.97.158)
2021-07-27 14:57:59 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2021-07-27 14:58:19 +0200azeem(~azeem@62.18.161.85)
2021-07-27 14:58:34 +0200jneira(~jneira@212.8.115.226) (Quit: Client closed)
2021-07-27 15:00:24 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 265 seconds)
2021-07-27 15:00:25 +0200argento(~argent0@168-227-96-51.ptr.westnet.com.ar)
2021-07-27 15:01:06 +0200alx741(~alx741@186.178.108.3)
2021-07-27 15:02:14 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 15:02:39 +0200 <xerox> :t fmap . const
2021-07-27 15:02:41 +0200 <lambdabot> Functor f => b -> f a -> f b
2021-07-27 15:02:49 +0200 <xerox> I'd do it like that
2021-07-27 15:03:14 +0200chris_(~chris@81.96.113.213)
2021-07-27 15:03:28 +0200 <Taneb> :t (<$)
2021-07-27 15:03:30 +0200 <lambdabot> Functor f => a -> f b -> f a
2021-07-27 15:04:30 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 15:04:37 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 15:06:14 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com) (Remote host closed the connection)
2021-07-27 15:06:32 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com)
2021-07-27 15:07:12 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com) (Remote host closed the connection)
2021-07-27 15:07:32 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com)
2021-07-27 15:08:12 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com) (Read error: Connection reset by peer)
2021-07-27 15:08:30 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com)
2021-07-27 15:09:11 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com) (Remote host closed the connection)
2021-07-27 15:09:31 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com)
2021-07-27 15:11:13 +0200gzj(~GZJ0X@199.193.127.138.16clouds.com) (Remote host closed the connection)
2021-07-27 15:12:22 +0200Morgan(~Morgan@host81-152-76-173.range81-152.btcentralplus.com)
2021-07-27 15:13:15 +0200Morgan(~Morgan@host81-152-76-173.range81-152.btcentralplus.com) (Client Quit)
2021-07-27 15:13:49 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 15:13:49 +0200wei2912(~wei2912@112.199.250.21) (Quit: Lost terminal)
2021-07-27 15:16:48 +0200adanwan_(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2021-07-27 15:17:02 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2021-07-27 15:17:54 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2021-07-27 15:18:21 +0200jippiedoe(~david@2a02-a44c-e14e-1-bf41-1b3a-cc17-853c.fixed6.kpn.net) (Ping timeout: 276 seconds)
2021-07-27 15:18:46 +0200 <arkanoid> where I can find good examples of simple haskell programs that can show me a picture of IO, error handling and Monads in general? I keep finding snippets of different topics, but not real programs
2021-07-27 15:19:27 +0200Morgan(~Morgan@host81-152-76-173.range81-152.btcentralplus.com)
2021-07-27 15:20:50 +0200 <merijn> shellcheck? pandoc?
2021-07-27 15:20:58 +0200 <merijn> xmonad, I suppose?
2021-07-27 15:22:20 +0200 <tomsmeding> not sure those count as "simple" :p
2021-07-27 15:23:12 +0200Morgan(~Morgan@host81-152-76-173.range81-152.btcentralplus.com) (Client Quit)
2021-07-27 15:25:30 +0200 <[exa]> arkanoid: we can write some for you, if you have a topic
2021-07-27 15:26:19 +0200 <[exa]> arkanoid: a deceiving problem in haskell is that "simple" usually means "oneliner" which people sometimes refuse to accept as a valid example program :D
2021-07-27 15:29:05 +0200 <arkanoid> shellcheck and xmonad "simple" :D for simple I mean classic example of small game like tic tac toe (with input and output). Just random guessing. I prefer a good example of haskell code (yet doing IO) than a specific task
2021-07-27 15:29:48 +0200 <merijn> tic-tac-toe sounds much harder than shellcheck, tbh
2021-07-27 15:30:43 +0200 <[exa]> arkanoid: for tic-tac-toe, check out Brick library (or maybe Gloss)
2021-07-27 15:30:57 +0200jippiedoe(~david@77-171-152-62.fixed.kpn.net)
2021-07-27 15:31:03 +0200 <__monty__> Error handling isn't very common in Haskell fwiw. So you're not likely to find it in short examples. IME
2021-07-27 15:31:03 +0200 <[exa]> iirc Brick even has some simple game in demos, it might have been snake or something
2021-07-27 15:31:21 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 15:35:45 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 15:37:37 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-07-27 15:37:56 +0200azeem(~azeem@62.18.161.85) (Ping timeout: 252 seconds)
2021-07-27 15:38:19 +0200azeem(~azeem@62.18.161.85)
2021-07-27 15:39:12 +0200yahb(xsbot@user/mniip/bot/yahb) (Ping timeout: 252 seconds)
2021-07-27 15:39:42 +0200mastarija(~mastarija@31.217.8.174) (Ping timeout: 245 seconds)
2021-07-27 15:40:28 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-07-27 15:41:40 +0200motherfsck(~motherfsc@user/motherfsck)
2021-07-27 15:44:17 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 255 seconds)
2021-07-27 15:44:29 +0200yahb(xsbot@user/mniip/bot/yahb)
2021-07-27 15:46:17 +0200arthurxavierx(~arthurxav@201.17.157.69)
2021-07-27 15:46:58 +0200kayprish(~kayprish@cable-188-2-229-172.dynamic.sbb.rs)
2021-07-27 15:49:23 +0200lambdap(~lambdap@static.167.190.119.168.clients.your-server.de) (Quit: lambdap)
2021-07-27 15:53:23 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-07-27 15:53:29 +0200kayprish(~kayprish@cable-188-2-229-172.dynamic.sbb.rs) (Read error: Connection reset by peer)
2021-07-27 15:54:06 +0200Guest67(~Guest67@bxk158.neoplus.adsl.tpnet.pl)
2021-07-27 15:55:11 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 15:55:21 +0200Guest67(~Guest67@bxk158.neoplus.adsl.tpnet.pl) (Client Quit)
2021-07-27 15:58:25 +0200lambdap(~lambdap@static.167.190.119.168.clients.your-server.de)
2021-07-27 15:58:40 +0200jmorris(uid433911@id-433911.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 15:58:41 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Read error: Connection reset by peer)
2021-07-27 15:59:08 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-27 16:03:06 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 272 seconds)
2021-07-27 16:03:39 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-07-27 16:05:46 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 16:10:37 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 16:12:05 +0200amahl(~amahl@84.251.202.64)
2021-07-27 16:12:47 +0200jolly95(~jolly@208.180.97.158)
2021-07-27 16:14:53 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 255 seconds)
2021-07-27 16:16:17 +0200jolly(~jolly@208.180.97.158) (Ping timeout: 265 seconds)
2021-07-27 16:17:35 +0200jolly95jolly
2021-07-27 16:17:53 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-07-27 16:18:18 +0200mastarija(~mastarija@31.217.8.174)
2021-07-27 16:19:22 +0200andreabedini[m](~andreabed@2001:470:69fc:105::c821)
2021-07-27 16:20:37 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 16:20:45 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-27 16:21:20 +0200jneira_(~jneira_@28.red-80-28-169.staticip.rima-tde.net)
2021-07-27 16:22:04 +0200arjun(~Srain@user/arjun)
2021-07-27 16:26:33 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-27 16:28:21 +0200jakalx(~jakalx@base.jakalx.net)
2021-07-27 16:30:28 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 16:31:42 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Read error: Connection reset by peer)
2021-07-27 16:31:55 +0200enoq(~enoq@194-208-179-35.lampert.tv)
2021-07-27 16:31:58 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 16:32:24 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-27 16:33:18 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-07-27 16:35:06 +0200 <dsal> > [Nothing, Just 3] & each . _Just .~ 1 -- Arahael
2021-07-27 16:35:08 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2021-07-27 16:35:08 +0200 <lambdabot> [Nothing,Just 1]
2021-07-27 16:35:26 +0200chris_(~chris@81.96.113.213)
2021-07-27 16:36:12 +0200 <dsal> Oh wait, you're doing it the other way around?
2021-07-27 16:38:21 +0200abarbu(~user@c-66-31-23-28.hsd1.ma.comcast.net)
2021-07-27 16:38:53 +0200acidjnk_new3(~acidjnk@p200300d0c72b950729faca9193881d78.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-07-27 16:39:58 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2021-07-27 16:40:19 +0200abarbu(~user@c-66-31-23-28.hsd1.ma.comcast.net) ()
2021-07-27 16:41:17 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-07-27 16:41:19 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Remote host closed the connection)
2021-07-27 16:41:35 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-07-27 16:42:25 +0200Guest1981(~user@c-66-31-23-28.hsd1.ma.comcast.net)
2021-07-27 16:43:24 +0200 <Guest1981> I have a ghci question. when I run "x :: Int; x = 1" then ":t x" I get "error: Variable not in scope: x"
2021-07-27 16:44:05 +0200 <Guest1981> Shouldn't x be in scope?
2021-07-27 16:44:59 +0200 <Orbstheorem> Works in my shell 🤔
2021-07-27 16:45:27 +0200 <geekosaur> works here too
2021-07-27 16:45:58 +0200 <Guest1981> Everything I can see online says it should work, but it doesn't
2021-07-27 16:46:40 +0200 <Orbstheorem> If you try to print the variable, does it not work either?
2021-07-27 16:48:48 +0200 <Guest1981> <interactive>:105:7: error: Variable not in scope: x
2021-07-27 16:49:56 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 16:50:02 +0200 <Orbstheorem> That 105 is curious, how are you using ghci?
2021-07-27 16:50:25 +0200 <Guest1981> Oh, that's just because I had run quite a few other commands before.
2021-07-27 16:50:49 +0200 <Orbstheorem> have you tried in a fresh repl?
2021-07-27 16:50:57 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 16:51:09 +0200 <Orbstheorem> Maybe you were in some scope when you originally bound it.
2021-07-27 16:51:20 +0200 <Guest1981> Hah, so.. without -fobject-code this works. With -fobject-code it's never in scope
2021-07-27 16:51:24 +0200Sgeo(~Sgeo@user/sgeo)
2021-07-27 16:51:29 +0200 <Guest1981> In a fresh ghci
2021-07-27 16:52:02 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 16:52:28 +0200 <geekosaur> I can reproduce that locally
2021-07-27 16:52:38 +0200 <geekosaur> interesting
2021-07-27 16:52:54 +0200 <Guest1981> Prelude> x :: Int; x = 1
2021-07-27 16:52:54 +0200 <Guest1981> Prelude> x
2021-07-27 16:52:54 +0200 <Guest1981> 1
2021-07-27 16:52:54 +0200 <Guest1981> Prelude> :set -fobject-code
2021-07-27 16:52:57 +0200 <Guest1981> Prelude> y :: Int; y = 1
2021-07-27 16:53:00 +0200 <Guest1981> Prelude> y
2021-07-27 16:53:04 +0200 <Guest1981> <interactive>:5:1: error: Variable not in scope: y
2021-07-27 16:53:10 +0200 <Guest1981> Is this intended behavior?
2021-07-27 16:55:29 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-07-27 16:56:29 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-07-27 16:56:33 +0200jippiedoe(~david@77-171-152-62.fixed.kpn.net) (Ping timeout: 258 seconds)
2021-07-27 16:58:20 +0200arjun(~Srain@user/arjun) (Ping timeout: 265 seconds)
2021-07-27 17:02:10 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:63c6:890b:fddc:7714) (Quit: WeeChat 2.8)
2021-07-27 17:03:04 +0200azeem(~azeem@62.18.161.85) (Ping timeout: 258 seconds)
2021-07-27 17:03:09 +0200 <merijn> Yes, no, maybe
2021-07-27 17:03:09 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2021-07-27 17:03:36 +0200azeem(~azeem@62.18.161.85)
2021-07-27 17:03:45 +0200 <merijn> ghci never really behaved like a normal source file, but has been incrementally hacked up over the years to act more like a source file
2021-07-27 17:03:52 +0200 <geekosaur> I can see how it might be happening, and suspect it wouldn't be readily fixable
2021-07-27 17:04:27 +0200 <geekosaur> -fobject-code is really meant to work with something preloaded and probably doesn'[t interact very well with, er, interaction
2021-07-27 17:05:00 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2021-07-27 17:05:55 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-27 17:05:56 +0200 <geekosaur> and yes, ghci is a hyuge mess
2021-07-27 17:06:41 +0200 <merijn> ghci is great for toying with stuff
2021-07-27 17:07:11 +0200 <merijn> But don't expect reasonable behaviour on all inputs that happen to be syntactically valid at the file level
2021-07-27 17:07:45 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 17:08:02 +0200 <merijn> tbh, I'd mostly recommend only using it for evaluating expressions, not really anything resembling "interactive programming" like some people do in python's repl/notebooks
2021-07-27 17:08:38 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-07-27 17:09:09 +0200 <Guest1981> Is this behavior documented anywhere?
2021-07-27 17:09:16 +0200 <geekosaur> doubt it
2021-07-27 17:10:49 +0200 <merijn> I still consider the change to ghci to make it behave more like a top level file a mistake >.>
2021-07-27 17:11:07 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 17:11:14 +0200spruit11_(~quassel@2a02:a467:ccd6:1:c892:977a:b4bf:318c)
2021-07-27 17:11:52 +0200spruit11_(~quassel@2a02:a467:ccd6:1:c892:977a:b4bf:318c) (Client Quit)
2021-07-27 17:12:10 +0200spruit11_(~quassel@2a02:a467:ccd6:1:c892:977a:b4bf:318c)
2021-07-27 17:12:21 +0200mastarija(~mastarija@31.217.8.174) (Ping timeout: 265 seconds)
2021-07-27 17:12:50 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 265 seconds)
2021-07-27 17:13:01 +0200 <Guest1981> Thanks. I'll file a bug.
2021-07-27 17:13:09 +0200enoq(~enoq@194-208-179-35.lampert.tv) (Quit: enoq)
2021-07-27 17:14:40 +0200spruit11(~quassel@2a02:a467:ccd6:1:3536:e6ac:e02d:6c68) (Ping timeout: 272 seconds)
2021-07-27 17:15:22 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2021-07-27 17:15:30 +0200Null_A(~null_a@2601:645:8700:2290:74e6:d8ab:910e:9608)
2021-07-27 17:17:02 +0200pe200012_(~pe200012@113.105.10.33) (Ping timeout: 250 seconds)
2021-07-27 17:17:40 +0200azeem(~azeem@62.18.161.85) (Ping timeout: 265 seconds)
2021-07-27 17:18:14 +0200azeem(~azeem@5.168.230.43)
2021-07-27 17:18:29 +0200 <dexterfoo> is there a list of all of the Haskell operators, so that I can choose one that isn't in use yet?
2021-07-27 17:19:45 +0200 <Hecate> dexterfoo: hoogle
2021-07-27 17:20:11 +0200 <geekosaur> I suspect that'd get you an argument. like, some people would count lens operators
2021-07-27 17:20:17 +0200 <Hecate> dexterfoo: just realise that operators are just functions, they're usually overloadable
2021-07-27 17:20:22 +0200 <[exa]> dexterfoo: good luck, really. :D
2021-07-27 17:22:23 +0200 <dexterfoo> According to Hoogle (>>>>) is not used, so I will take it
2021-07-27 17:23:17 +0200argento(~argent0@168-227-96-51.ptr.westnet.com.ar) (Ping timeout: 255 seconds)
2021-07-27 17:26:10 +0200 <dsal> It only has to not be taken in your project.
2021-07-27 17:27:11 +0200geekosaurused >.> — feel free
2021-07-27 17:31:15 +0200jumper149(~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
2021-07-27 17:31:28 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 17:33:21 +0200 <merijn> Asking for "what operators aren't used yet" is like asking for "a number nobody has thought of yet" :p
2021-07-27 17:35:21 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 17:35:32 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-07-27 17:36:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2021-07-27 17:36:31 +0200 <davean> merijn: no one has thought of most numbers yet
2021-07-27 17:36:51 +0200 <DigitalKiwi> ur moms
2021-07-27 17:38:22 +0200arjun(~Srain@user/arjun)
2021-07-27 17:38:29 +0200argento(~argent0@168-227-96-51.ptr.westnet.com.ar)
2021-07-27 17:38:48 +0200 <Taneb> davean: and most possible operators are still available for use
2021-07-27 17:41:39 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 17:43:59 +0200truckasaurus(sid457088@2001:67c:2f08:5::6:f980) (Ping timeout: 255 seconds)
2021-07-27 17:44:16 +0200 <zzz> is something like `(take n &&& drop n) ls` optimized to avoid 2n operations?
2021-07-27 17:44:57 +0200 <xerox> :t splitAt
2021-07-27 17:44:58 +0200 <lambdabot> Int -> [a] -> ([a], [a])
2021-07-27 17:45:08 +0200 <glguy> zzz: I would expect not
2021-07-27 17:45:39 +0200dajoer(~david@user/gvx) (Quit: leaving)
2021-07-27 17:45:49 +0200 <zzz> ok thanks
2021-07-27 17:46:41 +0200truckasaurus(sid457088@id-457088.brockwell.irccloud.com)
2021-07-27 17:47:52 +0200zmt01(~zmt00@user/zmt00)
2021-07-27 17:48:04 +0200jumper149(~jumper149@80.240.31.34)
2021-07-27 17:48:14 +0200mcfilib(sid302703@user/mcfilib) (Ping timeout: 250 seconds)
2021-07-27 17:48:52 +0200 <merijn> davean: Sure
2021-07-27 17:49:09 +0200 <merijn> davean: But the second you think of one, nothing stops anyone else :p
2021-07-27 17:49:09 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 17:49:30 +0200mcfilib(sid302703@user/mcfilib)
2021-07-27 17:49:57 +0200 <monochrom> "what functions names aren't used yet" is the perfect equivalent.
2021-07-27 17:53:14 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-07-27 17:53:36 +0200Guest966(~Guest9@43.242.116.41)
2021-07-27 17:53:50 +0200Morrow(~Morrow@37.142.145.18)
2021-07-27 17:54:29 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 17:54:52 +0200lbseale(~lbseale@user/ep1ctetus)
2021-07-27 17:55:03 +0200Null_A(~null_a@2601:645:8700:2290:74e6:d8ab:910e:9608) (Remote host closed the connection)
2021-07-27 17:55:38 +0200Null_A(~null_a@2601:645:8700:2290:74e6:d8ab:910e:9608)
2021-07-27 17:57:51 +0200comerijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 17:58:42 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-07-27 17:59:00 +0200Morrow(~Morrow@37.142.145.18) (Ping timeout: 272 seconds)
2021-07-27 17:59:22 +0200chris_(~chris@81.96.113.213)
2021-07-27 17:59:46 +0200Null_A(~null_a@2601:645:8700:2290:74e6:d8ab:910e:9608) (Ping timeout: 240 seconds)
2021-07-27 17:59:56 +0200Morrow(~Morrow@31.154.96.164)
2021-07-27 18:00:12 +0200haskl(~haskl@98.37.78.63) (Ping timeout: 265 seconds)
2021-07-27 18:02:11 +0200chris__(~chris@81.96.113.213)
2021-07-27 18:02:34 +0200chris_(~chris@81.96.113.213) (Read error: Connection reset by peer)
2021-07-27 18:04:12 +0200haskl(~haskl@98.37.78.63)
2021-07-27 18:07:53 +0200Atum_(~IRC@user/atum/x-2392232)
2021-07-27 18:08:15 +0200lbseale(~lbseale@user/ep1ctetus) (Quit: Leaving)
2021-07-27 18:09:38 +0200chris__(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 18:10:04 +0200lbseale(~lbseale@user/ep1ctetus)
2021-07-27 18:13:08 +0200chris_(~chris@81.96.113.213)
2021-07-27 18:13:13 +0200arjun(~Srain@user/arjun) (Remote host closed the connection)
2021-07-27 18:13:37 +0200gehmehgeh_(~user@user/gehmehgeh)
2021-07-27 18:15:26 +0200gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 244 seconds)
2021-07-27 18:15:59 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-27 18:18:12 +0200spruit11_(~quassel@2a02:a467:ccd6:1:c892:977a:b4bf:318c) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-07-27 18:18:28 +0200spruit11(~quassel@2a02:a467:ccd6:1:c892:977a:b4bf:318c)
2021-07-27 18:19:53 +0200Null_A(~null_a@2601:645:8700:2290:5520:ed9a:24da:3d0c)
2021-07-27 18:24:20 +0200comerijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2021-07-27 18:24:56 +0200azeem(~azeem@5.168.230.43) (Ping timeout: 255 seconds)
2021-07-27 18:28:32 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 18:28:46 +0200soft-warm(~soft-warm@2600:8801:db01:8f0:4884:3488:98a1:1fd9) (Ping timeout: 246 seconds)
2021-07-27 18:29:46 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-27 18:32:02 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-07-27 18:32:28 +0200gehmehgeh_(~user@user/gehmehgeh) (Quit: Leaving)
2021-07-27 18:35:40 +0200azeem(~azeem@5.168.230.43)
2021-07-27 18:36:46 +0200pavonia(~user@user/siracusa)
2021-07-27 18:36:59 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 258 seconds)
2021-07-27 18:37:54 +0200Morrow(~Morrow@31.154.96.164) (Ping timeout: 276 seconds)
2021-07-27 18:42:10 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 18:43:38 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-27 18:43:41 +0200econo(uid147250@user/econo)
2021-07-27 18:44:39 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi)
2021-07-27 18:45:10 +0200deejaytee(~deejaytee@193.46-255-62.static.virginmediabusiness.co.uk) (Killed (zirconium.libera.chat (Nickname regained by services)))
2021-07-27 18:45:14 +0200deejaytee(~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net)
2021-07-27 18:46:05 +0200azeem(~azeem@5.168.230.43) (Ping timeout: 255 seconds)
2021-07-27 18:46:06 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-07-27 18:46:06 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-07-27 18:46:09 +0200allbery_bgeekosaur
2021-07-27 18:47:46 +0200azeem(~azeem@176.200.192.84)
2021-07-27 18:50:32 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 18:51:26 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 265 seconds)
2021-07-27 18:52:01 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 18:52:05 +0200azeem(~azeem@176.200.192.84) (Ping timeout: 252 seconds)
2021-07-27 18:52:33 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-07-27 18:52:40 +0200azeem(~azeem@176.200.192.84)
2021-07-27 18:54:03 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 18:54:40 +0200aerona(~aerona@2600:6c54:4600:f300:85b8:3678:dd3f:eeda)
2021-07-27 18:54:42 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 268 seconds)
2021-07-27 18:55:56 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-07-27 18:55:59 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-07-27 18:57:19 +0200zebrag(~chris@user/zebrag)
2021-07-27 18:59:04 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 18:59:06 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-07-27 18:59:15 +0200pottsy(~pottsy@2400:4050:b560:3700:3495:fb9e:8fab:95bf) (Ping timeout: 245 seconds)
2021-07-27 18:59:25 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-27 19:01:50 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 255 seconds)
2021-07-27 19:02:52 +0200Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com)
2021-07-27 19:04:16 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 19:08:59 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2021-07-27 19:12:15 +0200anandprabhu(~anandprab@94.202.243.198)
2021-07-27 19:12:59 +0200azeem(~azeem@176.200.192.84) (Ping timeout: 252 seconds)
2021-07-27 19:13:27 +0200anandprabhu(~anandprab@94.202.243.198) (Client Quit)
2021-07-27 19:13:44 +0200azeem(~azeem@176.200.252.165)
2021-07-27 19:15:33 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 19:16:17 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-07-27 19:18:59 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi)
2021-07-27 19:21:16 +0200rmoe(~rmoe@c-71-236-207-44.hsd1.wa.comcast.net)
2021-07-27 19:22:24 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 19:24:31 +0200argento(~argent0@168-227-96-51.ptr.westnet.com.ar) (Ping timeout: 258 seconds)
2021-07-27 19:26:11 +0200michalz(~michalz@185.246.204.58) (Remote host closed the connection)
2021-07-27 19:26:36 +0200jiribenes(~jiribenes@rosa.jiribenes.com) (Ping timeout: 250 seconds)
2021-07-27 19:27:03 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 19:28:09 +0200 <lechner> Hi, is there an elegant way to deal with several Maybe values in a row without increasing the indentation in the source code but while reporting errors properly (i.e no fromJust)? Thanks!
2021-07-27 19:28:47 +0200 <geekosaur> use the Monad instance?
2021-07-27 19:28:55 +0200 <monochrom> >>=
2021-07-27 19:29:21 +0200 <lechner> i am so new. is there an example on the web?
2021-07-27 19:31:25 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 258 seconds)
2021-07-27 19:32:45 +0200agua(~agua@2804:14c:8793:8e2f:39e9:c5a8:c532:7498)
2021-07-27 19:34:25 +0200dunkeln_(~dunkeln@94.129.69.87)
2021-07-27 19:35:55 +0200Core8816(~agua@2804:18:4a:f76c:1:0:5e60:e39)
2021-07-27 19:36:12 +0200azeem(~azeem@176.200.252.165) (Ping timeout: 256 seconds)
2021-07-27 19:36:12 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2021-07-27 19:36:22 +0200pesada(~agua@177.79.68.96) (Ping timeout: 245 seconds)
2021-07-27 19:36:28 +0200azeem(~azeem@176.201.0.90)
2021-07-27 19:36:56 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-27 19:39:02 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 19:39:20 +0200 <sm> lechner: write a do block, where each line extracts the next Just value with <-. If any of those fail, the whole block evaluates to Nothing
2021-07-27 19:39:22 +0200agua(~agua@2804:14c:8793:8e2f:39e9:c5a8:c532:7498) (Ping timeout: 240 seconds)
2021-07-27 19:39:44 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-07-27 19:39:57 +0200dunkeln_(~dunkeln@94.129.69.87) (Quit: leaving)
2021-07-27 19:40:17 +0200 <lechner> That's longhand for this, right? "By definition, when the first argument to >>= is Nothing, it just returns Nothing while ignoring whatever function it is given." https://en.m.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe
2021-07-27 19:42:59 +0200 <Cale> do-notation is a shorthand syntax for a chain of uses of (>>=)
2021-07-27 19:43:21 +0200 <Cale> @undo do { u <- x; v <- y; return (f u v) }
2021-07-27 19:43:22 +0200 <lambdabot> x >>= \ u -> y >>= \ v -> return (f u v)
2021-07-27 19:43:29 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 19:43:32 +0200argento(~argent0@168-227-96-51.ptr.westnet.com.ar)
2021-07-27 19:43:56 +0200 <lechner> thanks! i am making baby steps
2021-07-27 19:44:02 +0200 <Cale> and so in the case of Maybe, you're allowed to have x and y be Maybe values there
2021-07-27 19:44:16 +0200 <Cale> and then u and v will be the contents of the Just constructor in the case that they're both Just
2021-07-27 19:44:51 +0200 <Cale> So it's a good way to unpack a bunch of Maybes and produce Nothing if any of them happens to be Nothing
2021-07-27 19:45:46 +0200 <Cale> (the do-block as a whole will be a Maybe value in the case that x and y are)
2021-07-27 19:46:48 +0200chris_(~chris@81.96.113.213)
2021-07-27 19:47:14 +0200 <Cale> There are also a bunch of functions which work with any instance of Monad, that specialise to possibly-useful functions on Maybe
2021-07-27 19:47:17 +0200 <Cale> :t sequence
2021-07-27 19:47:18 +0200 <lambdabot> (Traversable t, Monad m) => t (m a) -> m (t a)
2021-07-27 19:47:36 +0200 <Cale> (That one is even more general now...)
2021-07-27 19:47:51 +0200 <Cale> Well, if you just think of it as (Monad m) => [m a] -> m [a]
2021-07-27 19:47:55 +0200 <Cale> for Maybe, that becomes
2021-07-27 19:48:01 +0200 <Cale> [Maybe a] -> Maybe [a]
2021-07-27 19:48:20 +0200 <lechner> thanks! my code is slowly gaining style. haskell is amazing. i already found several potential bugs in my Perl code, which i am translating
2021-07-27 19:48:40 +0200peterhil(~peterhil@mobile-access-b04815-181.dhcp.inet.fi) (Ping timeout: 256 seconds)
2021-07-27 19:48:46 +0200 <Cale> i.e. take a list of Maybe things, and see if they're all Just, if so, then you get Just of a list of the contents, if any was Nothing, you get Nothing
2021-07-27 19:49:05 +0200 <DigitalKiwi> monochrom: https://twitter.com/krisajenkins/status/1420022268177027090?s=20
2021-07-27 19:50:02 +0200 <lechner> Cale: thanks!
2021-07-27 19:51:36 +0200Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving)
2021-07-27 19:51:59 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-27 19:52:45 +0200 <Cale> DigitalKiwi: I don't know how deterministic twitter's "More Tweets" section is, so https://twitter.com/d6/status/1419885183793344512 was pretty funny
2021-07-27 19:52:53 +0200DigitalKiwitakes them to clout court
2021-07-27 19:54:40 +0200azeem(~azeem@176.201.0.90) (Read error: Connection reset by peer)
2021-07-27 19:54:47 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 252 seconds)
2021-07-27 19:55:21 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-07-27 19:55:40 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 19:55:42 +0200 <DigitalKiwi> Cale: i follow d6 and this is the first time i've seen it lol
2021-07-27 19:56:42 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-07-27 19:56:48 +0200mr-red(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 19:57:11 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it)
2021-07-27 19:57:21 +0200 <lechner> Hi, how can a function that returns a "Maybe (IO ()) perform an IO task, please?
2021-07-27 19:57:32 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2021-07-27 19:57:42 +0200jiribenes(~jiribenes@rosa.jiribenes.com)
2021-07-27 19:57:54 +0200 <Cale> So, it might give you an action you could run to perform some IO, and it might not
2021-07-27 19:58:30 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 276 seconds)
2021-07-27 19:58:32 +0200 <Cale> The most straightforward thing you should understand first is just to pattern match on it with case
2021-07-27 19:58:48 +0200 <Cale> case theMaybeIO of
2021-07-27 19:58:55 +0200 <Cale> Nothing -> ... do something else ...
2021-07-27 19:59:05 +0200 <Cale> Just x -> x
2021-07-27 19:59:22 +0200 <Cale> If you want to do nothing in the Nothing case, then you could write return ()
2021-07-27 19:59:33 +0200 <kmein> :t maybe (return ()) id
2021-07-27 19:59:34 +0200 <lambdabot> Monad m => Maybe (m ()) -> m ()
2021-07-27 19:59:35 +0200 <Cale> (which is an action that does nothing)
2021-07-27 19:59:44 +0200 <kmein> (for a one-liner)
2021-07-27 19:59:53 +0200sedeki(~textual@user/sedeki)
2021-07-27 20:00:49 +0200 <Cale> Yeah, or in fact, that sequence function I mentioned earlier would also work because Maybe is Traversable
2021-07-27 20:00:59 +0200 <lechner> that's exactly what i tried to avoid with the Maybe monad. i kind of came from there: https://dpaste.org/SL7E
2021-07-27 20:01:01 +0200 <Cale> sequence :: Maybe (IO a) -> IO (Maybe a)
2021-07-27 20:01:22 +0200dunkeln(~dunkeln@94.129.69.87) (Ping timeout: 240 seconds)
2021-07-27 20:01:34 +0200 <Cale> There's also a version called sequence_ which drops the result
2021-07-27 20:01:36 +0200 <Cale> :t sequence_
2021-07-27 20:01:37 +0200 <lambdabot> (Foldable t, Monad m) => t (m a) -> m ()
2021-07-27 20:02:06 +0200 <lechner> it's probably hard to see in the diff, but i replaced the "case of"s with <-
2021-07-27 20:02:14 +0200 <Cale> So, t = Maybe and m = IO will get you a thing that does nothing if the Maybe is Nothing, and executes the action if it's Just of some action
2021-07-27 20:02:40 +0200 <lechner> that's what i need
2021-07-27 20:03:56 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Ping timeout: 265 seconds)
2021-07-27 20:04:17 +0200 <Cale> I honestly don't mind your original case expressions though (but I would usually avoid defining the scrutinee with let immediately prior)
2021-07-27 20:04:34 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-27 20:04:43 +0200 <Cale> However, it depends on how we expect the program to change over time
2021-07-27 20:05:14 +0200 <lechner> it will change because i am learning
2021-07-27 20:05:18 +0200 <Cale> If you end up wanting to handle the failure cases more nicely, you'll probably end up replacing the return () in the failure case with something else, and then there won't necessarily be a shorthand.
2021-07-27 20:05:41 +0200 <Cale> (at least, not one which is more readable than a case expression would be)
2021-07-27 20:06:19 +0200 <lechner> i don't actually need to handle them, I don't think, but I will hold onto the case expressions for now
2021-07-27 20:06:32 +0200mastarija(~mastarija@31.217.8.174)
2021-07-27 20:06:39 +0200 <lechner> what did you mean with scrutinee plesae?
2021-07-27 20:06:49 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 20:07:09 +0200 <lechner> the "let"s that is
2021-07-27 20:07:18 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 20:07:28 +0200 <monochrom> In "case foo x of ...", the scrutinee is "foo x".
2021-07-27 20:07:54 +0200 <monochrom> The victim of pattern matching.
2021-07-27 20:08:46 +0200 <monochrom> DigitalKiwi: Haha congrats
2021-07-27 20:08:50 +0200 <lechner> yes, that was kind of pointless. i see it now
2021-07-27 20:10:13 +0200 <lechner> monochrom Cale: so elegant. thank you!
2021-07-27 20:10:21 +0200 <DigitalKiwi> <butterfly meme> is this a thunk?
2021-07-27 20:10:37 +0200dunkeln(~dunkeln@94.129.69.87)
2021-07-27 20:10:53 +0200dunkeln(~dunkeln@94.129.69.87) (Client Quit)
2021-07-27 20:11:00 +0200 <DigitalKiwi> the previously unevalutaed lazy joke has been evaluated
2021-07-27 20:11:29 +0200 <monochrom> :)
2021-07-27 20:11:48 +0200 <DigitalKiwi> https://ircbrowse.tomsmeding.com/day/lchaskell/2021/07/26?id=112114#trid112114 for anyone lost about wtf we're talking about lol
2021-07-27 20:12:11 +0200chris_(~chris@81.96.113.213)
2021-07-27 20:16:26 +0200chris_(~chris@81.96.113.213) (Ping timeout: 250 seconds)
2021-07-27 20:17:12 +0200zmt01(~zmt00@user/zmt00) (Quit: Gone.)
2021-07-27 20:18:52 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-07-27 20:20:17 +0200zmt00(~zmt00@user/zmt00)
2021-07-27 20:22:10 +0200stefan-_(~cri@42dots.de) (Ping timeout: 240 seconds)
2021-07-27 20:23:30 +0200xff0x(~xff0x@2001:1a81:527c:b500:a365:4553:d50c:f6f5) (Ping timeout: 268 seconds)
2021-07-27 20:23:47 +0200xff0x(~xff0x@2001:1a81:527c:b500:2b8c:4e21:9ff9:e65e)
2021-07-27 20:24:46 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
2021-07-27 20:25:42 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-07-27 20:26:10 +0200stefan-_(~cri@42dots.de)
2021-07-27 20:26:52 +0200sedeki(~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
2021-07-27 20:27:03 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2021-07-27 20:27:47 +0200mr-red(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-27 20:28:16 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-27 20:29:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 20:29:55 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 20:31:50 +0200mastarija(~mastarija@31.217.8.174) (Quit: Leaving)
2021-07-27 20:33:37 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 20:36:55 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 20:39:27 +0200 <lechner> Hi, what's is the z0 in my function's "ZMQ z0 ()" return type, please? This is inside the ZMQ monad. https://hackage.haskell.org/package/zeromq4-haskell
2021-07-27 20:40:30 +0200 <Rembane> lechner: Probably the rest of the monad transformer stack.
2021-07-27 20:40:38 +0200 <Rembane> lechner: Do you have some example code?
2021-07-27 20:41:07 +0200 <geekosaur> that said, when ghc appends a number to a type it usually means you forgot to connect something up, so it's inventing a new type
2021-07-27 20:41:23 +0200 <Rembane> Yes, and also typed holes are great.
2021-07-27 20:41:32 +0200 <Cale> The maintainer should really build and upload the documentation for that package separately
2021-07-27 20:41:52 +0200 <lechner> why did it FTB?
2021-07-27 20:42:07 +0200 <Cale> Probably the external library dependencies
2021-07-27 20:42:28 +0200 <lechner> Rembane: https://dpaste.org/STjO#L87
2021-07-27 20:42:46 +0200 <lechner> geekosaur: I think i invented it!
2021-07-27 20:42:51 +0200 <Cale> Apparently, ZMQ is like ST, and so the "z" parameter is actually meaningless, it's just there to prevent you from using ZMQ sockets created by one session with another.
2021-07-27 20:43:17 +0200 <lechner> is see
2021-07-27 20:43:24 +0200 <Cale> runZMQ :: MonadIO m => (forall z. ZMQ z a) -> m a -- in order to use this, any occurrence of the "z" parameter can't occur in "a"
2021-07-27 20:44:30 +0200 <Cale> And so data structures which have a "z" in them can't be smuggled out in the result, (and even if you did somehow, e.g. by using an existential type, you still couldn't use them with another runZMQ, since there's effectively a new "z" each time.
2021-07-27 20:46:53 +0200 <lechner> i tried _ instead of z0 but GHC did not like it, and referred me to PartialTypeSignatures which i did not adopt
2021-07-27 20:47:17 +0200 <Cale> Yeah, if you want to use _'s in types, you have to turn on PartialTypeSignatures
2021-07-27 20:47:22 +0200 <DigitalKiwi> lechner is ghc
2021-07-27 20:47:46 +0200 <Cale> Any variable letter will do there, but I'd stick with the z that the library uses.
2021-07-27 20:47:57 +0200 <DigitalKiwi> that's why ghc is so slow sometimes; it has to ask lechner to type infer!
2021-07-27 20:48:04 +0200 <lechner> in the well-defined world of Haskell, how can i legally refer to a z0 that was never defined?
2021-07-27 20:48:13 +0200 <Cale> Well, what are you trying to do?
2021-07-27 20:48:37 +0200 <lechner> Just compile (TM)
2021-07-27 20:48:54 +0200 <Cale> Usually you will want to leave the z polymorphic, so writing just z there will do
2021-07-27 20:49:20 +0200 <lechner> okay
2021-07-27 20:49:29 +0200 <Cale> (in fact, if it became not-polymorphic, that would mean that you could never use the action)
2021-07-27 20:50:24 +0200 <lechner> i don't know what that means, but it sounds like something that could make me sleep poorly
2021-07-27 20:50:34 +0200 <Cale> When you have a ZMQ action which returns something like a socket, you'll have to ensure the z's match, like ZMQ z (Socket z)
2021-07-27 20:51:00 +0200 <lechner> i see
2021-07-27 20:51:23 +0200 <Cale> It's as though each time you use runZMQ, it gets to invent its own z type
2021-07-27 20:51:26 +0200 <lechner> what does the zero do then, please?
2021-07-27 20:51:44 +0200 <lechner> it means nothing?
2021-07-27 20:51:46 +0200 <Cale> and that prevents sockets and such from being created in one runZMQ and being used in another
2021-07-27 20:51:52 +0200 <lechner> yeah
2021-07-27 20:51:54 +0200 <c_wraith> z0 is just a name
2021-07-27 20:51:58 +0200 <lechner> that makes sense
2021-07-27 20:52:02 +0200 <c_wraith> It has no inherent meaning
2021-07-27 20:52:13 +0200 <monochrom> Every name has no meaning, actually.
2021-07-27 20:52:24 +0200 <Cale> Yeah, it's just an arbitrary variable, it doesn't really mean anything, but you can think of it as referring to the runZMQ session.
2021-07-27 20:53:18 +0200 <Cale> There's some context that runZMQ sets up, and we don't want sockets and such that are created with one context being used by another
2021-07-27 20:53:35 +0200 <Cale> and we're using a type system trick to prevent this
2021-07-27 20:54:04 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-07-27 20:54:10 +0200 <lechner> does haskell know any other
2021-07-27 20:54:55 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 20:54:59 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 258 seconds)
2021-07-27 20:55:11 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-27 20:56:24 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-07-27 20:58:11 +0200fef(~thedawn@user/thedawn) (Ping timeout: 244 seconds)
2021-07-27 20:59:47 +0200potato_dev(~potato_to@elara.whatbox.ca)
2021-07-27 21:00:22 +0200 <monochrom> Haskell doesn't want to be anthropomophized.
2021-07-27 21:01:06 +0200 <lechner> you are right; it is our trick
2021-07-27 21:02:56 +0200 <c_wraith> I don't think the joke works quite right with that wording.
2021-07-27 21:04:22 +0200 <lechner> sorry, bad joke. trying to cope with a learning curve
2021-07-27 21:04:22 +0200 <c_wraith> I meant monochrom's joke
2021-07-27 21:04:48 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-07-27 21:05:01 +0200 <c_wraith> It can be vacuously true, as opposed to wording like "Haskell hates being anthropomorphized"
2021-07-27 21:05:44 +0200 <monochrom> Oh, that.
2021-07-27 21:06:26 +0200 <c_wraith> English and logic have a very weird intersection :)
2021-07-27 21:06:46 +0200 <lechner> they have one?
2021-07-27 21:07:38 +0200jolly(~jolly@208.180.97.158) (Ping timeout: 258 seconds)
2021-07-27 21:07:57 +0200 <monochrom> That would be a Church vs Curry thing. "X doesn't want Y" can be "type error, not even wrong".
2021-07-27 21:08:34 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 256 seconds)
2021-07-27 21:08:48 +0200 <c_wraith> that is an option too.
2021-07-27 21:09:46 +0200 <DigitalKiwi> I heard that parallel lines actually do meet, but they are very discrete.
2021-07-27 21:10:00 +0200 <monochrom> :)
2021-07-27 21:10:30 +0200Erutuon(~Erutuon@user/erutuon)
2021-07-27 21:20:59 +0200pgib(~textual@173.38.117.81)
2021-07-27 21:22:06 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 21:22:27 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-07-27 21:27:07 +0200 <lechner> Hi, a question about $ vs () please. Why does this work liftIO $ putStrLn $ "Response from collector: " <> Lazy.unpack (Lazy.fromStrict acknowledgement) but this doesn't liftIO $ putStrLn $ "Response from collector: " <> Lazy.unpack $ Lazy.fromStrict acknowledgement
2021-07-27 21:27:58 +0200 <monochrom> Do you know the precedence level and associativity of $ ? Can you compare that with the precendence level of <> ?
2021-07-27 21:28:10 +0200 <monochrom> I think it's high time you find out.
2021-07-27 21:29:00 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-07-27 21:29:13 +0200 <monochrom> It doesn't scale if every time you have $ and the nth operator you cannot be independent for the nth time.
2021-07-27 21:29:49 +0200jolly(~jolly@208.180.97.158)
2021-07-27 21:29:56 +0200 <Cale> lechner: $ is just a function defined as f $ x = f x, but it's defined to bind as weakly as possible to its arguments, while normal function application binds more tightly than any infix operator could
2021-07-27 21:30:33 +0200 <Cale> (and also, it's specified to be right-associating, which I think is kind of a mistake, but it allows for that particular style of chaining)
2021-07-27 21:30:44 +0200 <lechner> okay i thought about it the wrong way. it seemed like "the buck stops here from the right"
2021-07-27 21:31:29 +0200 <lechner> actually, maybe that is still true
2021-07-27 21:31:52 +0200 <lechner> it's really right vs left like monochrom said
2021-07-27 21:31:53 +0200 <Cale> So, your second expression brackets like liftIO $ (putStrLn $ (("Response from collector: " <> Lazy.unpack) $ Lazy.fromStrict acknowledgement))
2021-07-27 21:32:05 +0200 <Cale> and you can see the problem there with the Lazy.unpack not getting an argument
2021-07-27 21:32:57 +0200mr-red(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 21:33:27 +0200 <Cale> Plain function application (whitespace) binds more tightly to its arguments than any infix operator possibly can. If you remember nothing else about how infix operators get parsed, that's probably the most important thing.
2021-07-27 21:34:19 +0200 <lechner> that's the exact opposite of $ then
2021-07-27 21:34:24 +0200 <Cale> right
2021-07-27 21:34:35 +0200 <lechner> no pun intended
2021-07-27 21:34:39 +0200 <Cale> Also, it's left-associating, so f x y z means ((f x) y) z
2021-07-27 21:34:57 +0200 <lechner> yeah i get that. wow. TIL thanks!
2021-07-27 21:35:07 +0200 <Cale> I do kind of wish that ($) associated to the left as well, since whenever you have f $ g $ h $ x you could always rewrite that as f . g . h $ x
2021-07-27 21:35:17 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 255 seconds)
2021-07-27 21:35:35 +0200 <lechner> i wondered about that
2021-07-27 21:36:02 +0200 <lechner> i think i use too too mank $$'s and not enough point free
2021-07-27 21:36:06 +0200 <Cale> But if it associated to the left instead, we could remove some more parens sometimes
2021-07-27 21:36:16 +0200 <monochrom> I wouldn't say whitespace. map(+)[ 1 , 2 , 3 ] these whitespaces and these function applications are mutually exclusive.
2021-07-27 21:36:35 +0200 <Cale> Yeah, that's fair, it doesn't have to be whitespace proper :)
2021-07-27 21:36:41 +0200 <Cale> juxtaposition :)
2021-07-27 21:36:44 +0200 <lechner> i got the point though
2021-07-27 21:36:45 +0200 <monochrom> The correct model is juxtaposition of two expressions.
2021-07-27 21:36:54 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-07-27 21:37:10 +0200 <lechner> that's where logic and plain english drift apart
2021-07-27 21:37:31 +0200 <lechner> why juxtaposition?
2021-07-27 21:37:45 +0200 <monochrom> Because it is juxtaposition?
2021-07-27 21:37:46 +0200 <Cale> If you start out by replacing all but the last $ with . where you can, it's a good syntactic trick for starting to think about composing functions instead
2021-07-27 21:38:05 +0200berberman(~berberman@user/berberman) (Ping timeout: 252 seconds)
2021-07-27 21:38:15 +0200Guest4(~Guest4@210.18.130.156)
2021-07-27 21:38:34 +0200 <lechner> for some reason that never works, at least not with lazy and strict ByteStrings
2021-07-27 21:38:42 +0200 <Cale> hmm
2021-07-27 21:38:49 +0200 <lechner> maybe with lazy alone
2021-07-27 21:38:56 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-27 21:39:01 +0200 <Cale> The types shouldn't affect anything
2021-07-27 21:39:06 +0200Guest4(~Guest4@210.18.130.156) (Client Quit)
2021-07-27 21:39:24 +0200 <Cale> You do need to leave spaces around the composition dots though, and not put spaces around the ones which are module qualifiers
2021-07-27 21:39:46 +0200 <Cale> I'm still a little bit salty that we went with "." for module qualification, given how important composition is.
2021-07-27 21:40:05 +0200 <Cale> I get that it matches all the other languages in the world but still :)
2021-07-27 21:40:08 +0200 <lechner> you would have preferred?
2021-07-27 21:40:30 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 250 seconds)
2021-07-27 21:40:35 +0200 <Cale> I'm not sure, maybe | would have worked out.
2021-07-27 21:40:41 +0200alx741(~alx741@186.178.108.3) (Ping timeout: 255 seconds)
2021-07-27 21:40:44 +0200 <lechner> isn't the dot usally for records, like in PureScript?
2021-07-27 21:40:55 +0200 <Cale> Well, that too
2021-07-27 21:41:06 +0200 <geekosaur> ' might have worked if not for the stuff that took it later
2021-07-27 21:41:13 +0200 <Cale> Yeah
2021-07-27 21:41:15 +0200 <lechner> i would have liked | it's like a pipe
2021-07-27 21:41:17 +0200 <monochrom> Would you prefer Control∘Monad∘State haha
2021-07-27 21:41:17 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 21:41:32 +0200 <Cale> I prefer things that I can easily type, to be sure
2021-07-27 21:41:49 +0200 <yushyin> Control-Monad-State
2021-07-27 21:41:57 +0200 <Cale> Otherwise, I probably would prefer using ∘ for composition
2021-07-27 21:43:07 +0200 <lechner> Can I do anything about the $'s here? send catcher [] $ Lazy.toStrict $ Lzma.compress $ JSON.encode task
2021-07-27 21:43:27 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-27 21:43:27 +0200 <lechner> does that operator have a name?
2021-07-27 21:43:27 +0200 <Cale> You could rewrite that as send catcher [] . Lazy.toStrict . Lzma.compress $ JSON.encode task
2021-07-27 21:43:42 +0200 <Cale> Which one?
2021-07-27 21:43:46 +0200 <lechner> $
2021-07-27 21:44:16 +0200 <Cale> I think most people just say "dollar sign", but you could say "function application"
2021-07-27 21:44:20 +0200 <monochrom> You know what, in Chinese, or at least Chinese writings in the early 20th century, we write Western people names by: (after transliterating to Chinese characters of similar sounds) FirstName·LastName
2021-07-27 21:44:41 +0200 <monochrom> Perhaps that would also be the perfect scheme for hierarchical module names.
2021-07-27 21:45:11 +0200 <Clint> transliterating them to hanzi?
2021-07-27 21:45:18 +0200 <monochrom> Yes.
2021-07-27 21:45:24 +0200Clintnods.
2021-07-27 21:45:45 +0200 <Cale> FirstName・LastName
2021-07-27 21:45:53 +0200 <lechner> doesn't the last name come first?
2021-07-27 21:46:05 +0200 <monochrom> No.
2021-07-27 21:46:23 +0200 <Cale> I guess that's why the dot
2021-07-27 21:46:42 +0200 <lechner> sorry, i got confused with my chinese name. yours is for transliteration
2021-07-27 21:46:46 +0200 <Cale> Well, apart from the fact that it would be awkward to figure out where one name ends and the other begins
2021-07-27 21:47:09 +0200 <lechner> it does not matter
2021-07-27 21:47:24 +0200 <lechner> for one person
2021-07-27 21:48:44 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 250 seconds)
2021-07-27 21:48:51 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 21:48:53 +0200 <lechner> is using too many $ must be a beginner's mistake
2021-07-27 21:49:14 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 21:49:44 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 252 seconds)
2021-07-27 21:50:01 +0200 <geekosaur> it's often recommended not to use $ at all until you get used to haskell
2021-07-27 21:50:42 +0200 <lechner> too many brackets. i wear glasses
2021-07-27 21:51:55 +0200 <lechner> but i am not using a single . ! i was so excited about them. also, the pure parts of my programs are tiny. monad in. monad out.
2021-07-27 21:52:19 +0200 <yushyin> the general opinion here seems to be that $ is overused and that it is better to use parentheses more often
2021-07-27 21:52:52 +0200 <Cale> I dunno, there are places where you definitely want to use $ -- particularly if the argument is long enough that it's annoying to find the matching closing parens
2021-07-27 21:52:53 +0200 <monochrom> The correct way to get rid of parenthesis is to defeat the point of Fortran and go back to 3-address instructions: let tmp1 = f x; tmp2 = g tmp1; tmp3 = h tmp2 in k tmp3
2021-07-27 21:53:24 +0200 <Cale> But I'll tend not to chain $'s myself, unless I'm trying to blend in with an existing code style
2021-07-27 21:53:40 +0200 <Cale> I'll always use composition and then a single $ when I use it
2021-07-27 21:53:57 +0200 <monochrom> and roll back 60 years of progress in languages and compilers.
2021-07-27 21:54:28 +0200 <Cale> monochrom: Or RPN
2021-07-27 21:54:44 +0200alx741(~alx741@181.196.69.4)
2021-07-27 21:54:53 +0200 <DigitalKiwi> don't be silly everyone knows there's no $ in haskell! /s
2021-07-27 21:55:07 +0200 <Cale> I wish I hadn't lost all my silly dc snippets
2021-07-27 21:55:37 +0200 <Cale> I remember at one point working out how to do maps and folds over the stack in dc :)
2021-07-27 21:55:44 +0200 <yushyin> pure $ whatever comes next -- is a common pattern for me
2021-07-27 21:56:12 +0200 <Cale> I also never use pure unless it's important that my definition is Applicative polymorphic
2021-07-27 21:56:29 +0200 <lechner> i actually understood that
2021-07-27 21:56:32 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 250 seconds)
2021-07-27 21:56:35 +0200 <lechner> vs return
2021-07-27 21:56:39 +0200 <monochrom> Backus and Knuth worked so hard to find algorithms that can parse (a+b)*c+d so that if you see that formula in math books you can just copy that and it's valid code. Now entitled millenials trash that and want to go back to 3-address instructions.
2021-07-27 21:56:43 +0200 <geekosaur> showing your age :þ
2021-07-27 21:56:43 +0200 <Cale> When I see "pure" in code, I take it as a sign that Applicative is being used in some nontrivial way, and if it's not, I'm mildly annoyed :)
2021-07-27 21:57:15 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 21:58:05 +0200 <geekosaur> bet you hate "monad of no return"
2021-07-27 21:58:25 +0200 <Cale> I'm less concerned about that
2021-07-27 21:58:33 +0200 <lechner> others have told me prefer "pure"
2021-07-27 21:58:38 +0200 <lechner> to
2021-07-27 21:59:00 +0200 <Cale> I *would* be opposed to return :: Applicative f => a -> f a though
2021-07-27 22:00:01 +0200 <Cale> It just helps make typechecking in your head that much easier to have that little cue
2021-07-27 22:00:16 +0200 <monochrom> I use pure when the context uses liftA2 or >>= etc so they are on the same page.
2021-07-27 22:00:23 +0200 <Cale> Yeah, that's fair
2021-07-27 22:00:36 +0200 <Cale> I might use pure in cases where I'm also using (<*>) immediately adjacent to it
2021-07-27 22:00:36 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 22:00:53 +0200 <Rembane> I always use pure, I blame Purescript.
2021-07-27 22:01:17 +0200 <Cale> Like, maybe I know the thing is a monad, but I'm still using Applicative syntax to combine a bunch of stuff, in that case, pure seems okay.
2021-07-27 22:01:18 +0200 <DigitalKiwi> Cale: lol so that tweet you sent earlier from d6 (who i follow on twitter) finally showed up in my feed...only after someone else had quoted tweeted it and d6 retweeted *that*...
2021-07-27 22:01:25 +0200 <Cale> hah
2021-07-27 22:01:28 +0200 <geekosaur> quite a few people say "just use pure" these days
2021-07-27 22:01:45 +0200 <yushyin> i roll a dice before every use. even is pure, odd is return
2021-07-27 22:01:46 +0200 <Cale> geekosaur: I'm aware, but I think it does lose something
2021-07-27 22:01:55 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2021-07-27 22:02:02 +0200pschorf(~user@208.127.190.222)
2021-07-27 22:02:28 +0200 <Cale> Also, I'm of the mindset that "return" is also a pretty good name for what it is most of the time
2021-07-27 22:02:30 +0200 <maerwald> I use `pure`
2021-07-27 22:02:38 +0200Deide(~Deide@217.155.19.23)
2021-07-27 22:02:38 +0200Deide(~Deide@217.155.19.23) (Changing host)
2021-07-27 22:02:38 +0200Deide(~Deide@user/deide)
2021-07-27 22:02:50 +0200mr-red(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 258 seconds)
2021-07-27 22:02:58 +0200 <Cale> i.e. it makes an action which does nothing except to return the given value as its result
2021-07-27 22:03:01 +0200 <monochrom> I prefer "impurify" >:)
2021-07-27 22:03:14 +0200 <Cale> haha
2021-07-27 22:04:08 +0200 <monochrom> class Monad m => Animate m where anthropomorphize :: a -> m a
2021-07-27 22:04:21 +0200 <Cale> Of course, people who just came from imperative programming sometimes find "return" a bit jarring, because it doesn't have the control effects that they're used to.
2021-07-27 22:05:07 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 245 seconds)
2021-07-27 22:05:26 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-27 22:05:28 +0200 <Cale> Imagine being used to having all your stuff implicitly wrapped in callCC
2021-07-27 22:06:49 +0200juhp(~juhp@128.106.188.220)
2021-07-27 22:06:53 +0200chris_(~chris@81.96.113.213)
2021-07-27 22:08:32 +0200 <lechner> return actually makes monads less scary. would it be fair to somehow compare monads to imperative function prototypes?
2021-07-27 22:09:33 +0200 <jiribenes> it makes monads _look_ less scary, but its semantics confuse the heck out of imperative programmers
2021-07-27 22:10:18 +0200 <monochrom> The difference between "I understand, meaning I feel so good" and "I understand, meaning I write correct code".
2021-07-27 22:10:37 +0200 <lechner> does it have semantics
2021-07-27 22:10:52 +0200 <lechner> it does nothing
2021-07-27 22:10:57 +0200 <monochrom> A little bit of semantics from the monad laws.
2021-07-27 22:11:06 +0200 <geekosaur> but tey expect semantics
2021-07-27 22:11:13 +0200 <monochrom> Beyond that, it's up to actual instances.
2021-07-27 22:11:20 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-27 22:11:37 +0200P1RATEZ(piratez@user/p1ratez)
2021-07-27 22:12:00 +0200 <monochrom> But do look at "return x >>= k = k x". This tells you a lot. For example, this tells you "not an exit".
2021-07-27 22:12:34 +0200 <jiribenes> ^ this
2021-07-27 22:13:04 +0200 <monochrom> I know of a monad tutorial (that even makes it to Haskell Weekly News) that gets this wrong.
2021-07-27 22:13:18 +0200 <monochrom> Subsequently I shamed them in an exam question.
2021-07-27 22:13:53 +0200 <Cale> haha, nice
2021-07-27 22:15:07 +0200 <Cale> You also have (x >>= \v -> return v) = x, which is another way to say that return isn't doing a whole lot
2021-07-27 22:15:38 +0200 <Cale> But yeah, the actual meaning of return (and (>>=)) varies based on which monad we're talking about
2021-07-27 22:15:55 +0200lavaman(~lavaman@98.38.249.169)
2021-07-27 22:16:27 +0200 <Cale> So while there's a sort of "imperative-ish" feel to things, sometimes it'll subvert your expectations a bit. Monads can have backtracking, state can flow in the opposite direction from the rest of the computation, etc.
2021-07-27 22:17:03 +0200 <maerwald> is that a good thing?
2021-07-27 22:17:18 +0200 <Cale> Can be.
2021-07-27 22:17:20 +0200 <maerwald> I'd argue it basically makes reasoning harder
2021-07-27 22:17:38 +0200 <maerwald> about monadic combinators at least
2021-07-27 22:17:51 +0200 <Cale> It's good because we get to define a bunch of functions generically that'll work in any monad, and then use them in every monad we define.
2021-07-27 22:18:00 +0200 <maerwald> "work" how?
2021-07-27 22:18:11 +0200 <maerwald> rather "somehow"
2021-07-27 22:18:11 +0200 <Cale> and that saves us a bunch of trouble defining e.g. "forM" in every library we write
2021-07-27 22:18:23 +0200 <maerwald> never understood this argument
2021-07-27 22:18:24 +0200 <dsal> `return` is a bad name and often makes people think something is happening when something else is happening.
2021-07-27 22:18:29 +0200 <maerwald> rust is doing fine without this
2021-07-27 22:18:44 +0200 <dsal> I've had issues reading code that looked pretty weird and used return in a way where I had to make sure the author actually understood what was happening.
2021-07-27 22:18:50 +0200 <Cale> The reason for the monad abstraction to exist is the same as the reason for any abstraction to exist
2021-07-27 22:19:11 +0200 <maerwald> that's too vague for me :)
2021-07-27 22:19:12 +0200 <Cale> We define a lot of things which happen to be monads, it's nice to avoid repeating ourselves when the pattern exists.
2021-07-27 22:19:45 +0200 <maerwald> I'm just questioning that the whole expressivity monads give is actually a good idea to utilize
2021-07-27 22:19:47 +0200chomwitt(~chomwitt@athedsl-32041.home.otenet.gr)
2021-07-27 22:19:57 +0200 <maerwald> at least on a general basis
2021-07-27 22:20:10 +0200 <maerwald> especially when it breaks your intuition about combinators
2021-07-27 22:20:16 +0200pschorf(~user@208.127.190.222) (Remote host closed the connection)
2021-07-27 22:20:17 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 255 seconds)
2021-07-27 22:20:25 +0200 <Cale> Well, combinator libraries in general are a good idea. If your combinator library happens to define a monad, it's nice to recognise that.
2021-07-27 22:20:30 +0200 <maerwald> that expands more generally to type classes
2021-07-27 22:20:45 +0200 <monochrom> If you can bring your same argument against rings, fields, monoids, vector spaces, topologies... then perhaps it applies to monads too.
2021-07-27 22:20:49 +0200Guest966(~Guest9@43.242.116.41) (Quit: Connection closed)
2021-07-27 22:20:55 +0200 <maerwald> you refactor your stuff, luckily it still compiles... but the underlying instance does something entirely different
2021-07-27 22:20:59 +0200 <maerwald> that's a lens moment
2021-07-27 22:21:17 +0200 <Cale> Well, that's what the monad laws are for
2021-07-27 22:21:24 +0200 <monochrom> It is both nice and useful to know that, for example, the binomial theorem works for all commutative rings, even though I will end up just using the real number ring anyway.
2021-07-27 22:21:26 +0200 <maerwald> oh, it's not a law problem
2021-07-27 22:21:29 +0200 <Cale> They tell you some refactorings it's okay to make
2021-07-27 22:21:35 +0200 <maerwald> lenses broke my code in a lawful way
2021-07-27 22:21:38 +0200Null_A(~null_a@2601:645:8700:2290:5520:ed9a:24da:3d0c) (Remote host closed the connection)
2021-07-27 22:21:40 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Quit: WeeChat 2.8)
2021-07-27 22:21:43 +0200 <maerwald> that didn't help
2021-07-27 22:21:57 +0200 <maerwald> typeclasses can do that
2021-07-27 22:22:14 +0200 <Cale> Well, it is important to know what you're doing, and I think using things which are overpowered relative to your needs is often a bad idea
2021-07-27 22:22:46 +0200 <dsal> I look at it like applicative functors are a newer thing that monads also are, and since `return = pure` in (hopefully) all the cases, using the less confusing name is better.
2021-07-27 22:22:48 +0200 <maerwald> they can cloud control flow and make behavior reasoning impossible... now you're just reasoning about abstractions and what you roughly think they do, instead of having the actual control flow in your head... most of the time this may work out
2021-07-27 22:22:51 +0200 <maerwald> but sometimes not
2021-07-27 22:22:58 +0200 <Cale> Lens has its places for good use, but I wouldn't recommend using it everywhere all the time.
2021-07-27 22:22:59 +0200 <dsal> > let f x = do { a <- if odd x then return 3 else return 6; return 4 } in f 1 :: Maybe Int -- because people write code like this and end up confused.
2021-07-27 22:23:01 +0200 <lambdabot> Just 4
2021-07-27 22:23:03 +0200jmtd(jon@dow.land)
2021-07-27 22:23:11 +0200robertm(robertm@rojoma.com) (Ping timeout: 252 seconds)
2021-07-27 22:23:44 +0200Jon(jon@dow.land) (Ping timeout: 272 seconds)
2021-07-27 22:23:44 +0200 <Cale> dsal: Well, I think that's just getting used to what the monad laws say about return
2021-07-27 22:23:50 +0200mrmonday(~robert@what.i.hope.is.not.a.tabernaevagant.es) (Ping timeout: 250 seconds)
2021-07-27 22:24:05 +0200jmtdJon
2021-07-27 22:24:07 +0200 <maerwald> generics take this a step further... idk how to understand my own generics code without writing it again from scratch
2021-07-27 22:24:12 +0200mrmonday(~robert@what.i.hope.is.not.a.tabernaevagant.es)
2021-07-27 22:24:29 +0200 <dsal> It's generally people who are somewhat new to the language and who have a lot of things to get used to. Telling them `return` does something entirely different than anything they've ever experienced just makes the curve steeper.
2021-07-27 22:24:37 +0200 <Cale> But also, it makes sense from the perspective that e.g. when you apply f to an odd number, return 3 is going to be the action which does nothing except to return 3
2021-07-27 22:24:41 +0200 <maerwald> so yeah... haskell has some nice properties wrt "reasoning", but it can break that easily
2021-07-27 22:24:49 +0200 <Cale> and a is the result of executing that, so a will be 3
2021-07-27 22:25:13 +0200 <Cale> dsal: It's only confusing if you're used to having all your shit wrapped in callCC implicitly :D
2021-07-27 22:25:27 +0200chomwitt(~chomwitt@athedsl-32041.home.otenet.gr) (Remote host closed the connection)
2021-07-27 22:25:32 +0200 <maerwald> whether you need to keep global variables in your head or odd class instance behavior, does it really matter?
2021-07-27 22:25:44 +0200Null_A(~null_a@2601:645:8700:2290:5520:ed9a:24da:3d0c)
2021-07-27 22:26:05 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
2021-07-27 22:26:13 +0200ukari(~ukari@user/ukari) (Ping timeout: 268 seconds)
2021-07-27 22:26:52 +0200 <dsal> Sure, but it confuses a lot of folks. `return` in a function doesn't cause the function to return and that surprises people.
2021-07-27 22:26:56 +0200 <dsal> I can't remember the exact case I saw like this, but I had to confirm that they actually understood that the code would continue processing effects after the `return` because it was weird looking code and it wasn't clear whether they understood it.
2021-07-27 22:26:58 +0200 <maerwald> we're almost there (talking about effects systems)
2021-07-27 22:27:06 +0200 <maerwald> (and how they will save us all)
2021-07-27 22:27:25 +0200 <dsal> It's kind of like using the word "peruse" in English. Its definition includes its antonym so you have to ask what people mean all the time and you might as well avoid using the word altogether so nobody's confused.
2021-07-27 22:27:27 +0200 <maerwald> but Cale prefers transformers anyway :p
2021-07-27 22:27:34 +0200gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 244 seconds)
2021-07-27 22:27:48 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-27 22:28:09 +0200 <Cale> dsal: I totally get that, but people who are trying to read Haskell as though it were e.g. Python, are going to be confused by much more than that anyway, and I think the name "return v" is a fine name for what action it denotes.
2021-07-27 22:28:39 +0200 <Cale> Once you understand that nothing possibly could have the effect that they expected, then it's not confusing at all that return doesn't have that effect
2021-07-27 22:29:13 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:bc41:cf44:b56:1727)
2021-07-27 22:29:35 +0200 <Cale> The reason it's forbidden is that one of the monad laws effectively says you can chop a segment out of any do-block and move it into a new definition without changing the meaning
2021-07-27 22:29:56 +0200 <Cale> (that's what the associativity law basically means)
2021-07-27 22:30:15 +0200 <Cale> and so, that includes stuff with returns in it
2021-07-27 22:30:20 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 22:30:44 +0200 <dsal> The idea of what `return` does is similar to the idea of what `fail` does, though. `fail` gets to return early, so I can just evaluate stuff until I `return` or `fail`.
2021-07-27 22:30:44 +0200bwe_bwe
2021-07-27 22:30:52 +0200gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2021-07-27 22:30:58 +0200 <dsal> Anyway, I find it confusing, but don't know why I'd actually *want* to use `return`. It's never made any code clearer for me.
2021-07-27 22:31:03 +0200 <Cale> It's not though...
2021-07-27 22:31:12 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 250 seconds)
2021-07-27 22:31:17 +0200 <Cale> fail will cause the entire computation to fail, sure.
2021-07-27 22:31:29 +0200 <Cale> But that's not the same as ending the present definition
2021-07-27 22:31:32 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-27 22:31:43 +0200 <Cale> It extends arbitrarily far beyond that
2021-07-27 22:31:48 +0200 <dsal> Why not, though? What's the difference between Left and Right here?
2021-07-27 22:32:12 +0200 <Cale> Like, what you probably expect of your f from before is that 3 gets returned *from f*
2021-07-27 22:32:33 +0200 <Cale> Not that 3 gets returned from the entire final action of which f 1 was only possibly a small part
2021-07-27 22:32:33 +0200amk(~amk@176.61.106.150) (Remote host closed the connection)
2021-07-27 22:32:46 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 22:32:46 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-07-27 22:32:48 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-07-27 22:32:48 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-07-27 22:32:51 +0200allbery_bgeekosaur
2021-07-27 22:33:29 +0200 <Cale> i.e. you expect something like f x = callCC $ \ret -> if odd x then ret 3 else ret 6; return 4
2021-07-27 22:33:45 +0200 <dsal> Yeah, I think that's what people often expect.
2021-07-27 22:34:00 +0200amk(~amk@176.61.106.150)
2021-07-27 22:34:04 +0200 <Cale> But if return behaved like Left, that's not what would happen
2021-07-27 22:34:12 +0200 <dsal> Nobody ever expects that with `pure` though.
2021-07-27 22:34:25 +0200 <Cale> Because if we had something like do f 1; f 2
2021-07-27 22:34:38 +0200 <Cale> then we might not expect 3 to be returned
2021-07-27 22:35:11 +0200 <Cale> The monad laws tell us that we're always allowed to inline the definition of f 1
2021-07-27 22:35:28 +0200 <dsal> Sure, I agree with that model. It's simply the word that's confusing.
2021-07-27 22:35:33 +0200 <dsal> I don't even have a good mental model for what `return` should mean (other than just aliasing it to `pure` in my head). I have a mechanical rewrite so that I don't think of anything being returned because the concept doesn't make sense.
2021-07-27 22:35:52 +0200 <lechner> dsal: in the two meanings of "peruse" I see a range of reading activities. it's the logical way to combine them
2021-07-27 22:35:54 +0200 <Cale> It might be confusing for all of a few minutes until someone tells you what return means
2021-07-27 22:36:06 +0200jushur(~human@user/jushur) (Quit: ¯\_(ツ)_/¯)
2021-07-27 22:36:27 +0200 <Cale> But like, that's also true of the entire rest of the programming language, so I don't see it as a really big deal
2021-07-27 22:36:38 +0200 <dsal> lechner: peruse means you've seen something, but the original definition implies you studied it very carefully and the other meaning suggests you've only taken a cursory glance.
2021-07-27 22:36:44 +0200 <Cale> You're going to be introduced to return at some point, and you might've thought it meant something a bit different before then
2021-07-27 22:36:48 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-27 22:36:50 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba)
2021-07-27 22:36:50 +0200robertm(robertm@rojoma.com)
2021-07-27 22:37:01 +0200 <Cale> But I've never seen anyone get *really* stuck on it
2021-07-27 22:37:16 +0200 <Cale> once they're aware that "return v" is the no-op action that does nothing except return v
2021-07-27 22:37:23 +0200 <dsal> Cale: I don't think I fundamentally disagree with you. `return` doesn't confuse me that much, but only because I don't think of it as a word and instead immediately alias it to `pure` and move on.
2021-07-27 22:37:33 +0200 <dsal> But you suggest that it's important to *use* `return` and that part I don't understand.
2021-07-27 22:37:50 +0200ukari(~ukari@user/ukari)
2021-07-27 22:38:31 +0200 <Cale> Well, the part about using return when appropriate is just that its type is a little more specific, and so the distinction of return vs. pure helps us know when we're really making use of a broader abstraction.
2021-07-27 22:38:37 +0200 <alexfmpe[m]> I could have sworn I had seen an util for folding two lists at once but am unable to find it, anyone know what I'm talking about?
2021-07-27 22:38:44 +0200 <dsal> But `return v` doesn't `return v` it just places a pure value inside the current Monad. i.e. `return = Just` or `return = Right` or whatever. It's an abstraction of a constructor, not any kind of flow control thing like the verb suggests.
2021-07-27 22:38:44 +0200amk(~amk@176.61.106.150) (Ping timeout: 255 seconds)
2021-07-27 22:38:57 +0200 <lechner> dsal: it's a super old rhetorical device: one morning, one night---a day. it describes the range between the edge cases
2021-07-27 22:38:59 +0200 <Cale> alexfmpe[m]: hmm... you mean like, folding through their zip?
2021-07-27 22:39:12 +0200 <Cale> alexfmpe[m]: Or it's supposed to do something different if one of them ends early?
2021-07-27 22:39:25 +0200amk(~amk@176.61.106.150)
2021-07-27 22:39:35 +0200 <Cale> dsal: Well, it does
2021-07-27 22:39:50 +0200 <Cale> In the same way that when we have something like v <- x
2021-07-27 22:39:55 +0200 <alexfmpe[m]> cale: more of the later, as in the merge step of mergesort
2021-07-27 22:39:56 +0200 <Cale> The v is the value that x returned
2021-07-27 22:40:02 +0200 <Cale> So when you write v <- return 3
2021-07-27 22:40:05 +0200 <Cale> then v is 3
2021-07-27 22:40:11 +0200 <dsal> :t zipWith bimap
2021-07-27 22:40:13 +0200 <lambdabot> Bifunctor p => [a -> b] -> [c -> d] -> [p a c -> p b d]
2021-07-27 22:40:30 +0200 <alexfmpe[m]> dsal: "abstraction of a constructor" isn't at all how I would put it, take ZipList or Cont for instance
2021-07-27 22:40:55 +0200 <maerwald> dsal: I think `success` and `fail` would be reasonble shortcut names. `return` is more from the ASM days
2021-07-27 22:41:18 +0200 <Cale> I think of "return v" as meaning "the action which, when executed, produces v as its result"
2021-07-27 22:41:37 +0200 <dsal> Cale: I think I can at least parse that.
2021-07-27 22:41:55 +0200 <Cale> So return v is the action which... returns v
2021-07-27 22:42:10 +0200 <Cale> It doesn't mean "return from the caller immediately with v"
2021-07-27 22:42:12 +0200 <maerwald> `return` means `return to the address on the top of the stack`
2021-07-27 22:42:13 +0200 <dsal> I feel like it's a stretch, but I can at least accept it. :)
2021-07-27 22:42:23 +0200 <maerwald> for anything else, the word doesn't make any sense
2021-07-27 22:42:26 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 252 seconds)
2021-07-27 22:42:32 +0200 <Cale> I think it's *less* of a stretch than the traditional sense of return in programming
2021-07-27 22:42:52 +0200 <dsal> ...but why do you consider using `pure` for the same thing less desirable?
2021-07-27 22:42:52 +0200 <alexfmpe[m]> I dunno, every intuition besides `pure` being identity-ish (which exactly what the laws require), seems more of a trap to me
2021-07-27 22:43:17 +0200 <maerwald> Cale: "returning v" may make sense in rust, where you return ownership
2021-07-27 22:43:30 +0200 <dsal> alexfmpe[m]: Sure, sure. I don't mind traps as long as I can get back out of them.
2021-07-27 22:43:43 +0200 <maerwald> but in most languages you don't even have such a concept
2021-07-27 22:43:47 +0200 <alexfmpe[m]> I meant traps as in actually getting in the way
2021-07-27 22:43:48 +0200 <maerwald> no one owns anything
2021-07-27 22:43:56 +0200 <dsal> alexfmpe[m]: Yeah, I get the meaning.
2021-07-27 22:44:06 +0200 <deejaytee> I tend to use pure instead of return everywhere, since it prevents people unfamiliar with haskell for mistaking it for the return they know
2021-07-27 22:44:25 +0200 <alexfmpe[m]> I've hated the normal formulation of applicative/monad ever since I saw the monoidal and join/fmap based laws
2021-07-27 22:44:39 +0200 <dsal> My understanding of haskell is good enough that it's my go-to language for just about everything including just thinking of stuff. But if I ever have a completely intuitive understanding of all of it, I'll have to find something else.
2021-07-27 22:44:40 +0200 <deejaytee> admittedly a pretty weird use - nobody ever really reads my code anyways
2021-07-27 22:44:49 +0200chris_(~chris@81.96.113.213)
2021-07-27 22:44:51 +0200 <maerwald> deejaytee: I know that feeling
2021-07-27 22:44:54 +0200 <alexfmpe[m]> it's just...collapsing and mapping
2021-07-27 22:45:04 +0200 <alexfmpe[m]> trying to treat it as anything else is just going to confuse me
2021-07-27 22:46:16 +0200acidjnk_new3(~acidjnk@p200300d0c72b950729faca9193881d78.dip0.t-ipconnect.de)
2021-07-27 22:46:45 +0200 <Cale> alexfmpe[m]: foldr2 b l r z (x:xs) [] = foldr l z (x:xs); foldr2 b l r z [] (y:ys) = foldr r z (y:ys); foldr2 b l r z (x:xs) (y:ys) = b l r (foldr2 b l r z xs ys)
2021-07-27 22:46:48 +0200 <Cale> maybe?
2021-07-27 22:47:12 +0200 <Cale> There's probably something more general still...
2021-07-27 22:47:39 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 22:47:48 +0200 <Cale> Actually, maybe it's saner to factor out the uses of foldr at the ends
2021-07-27 22:47:56 +0200 <alexfmpe[m]> oh hmm
2021-07-27 22:47:58 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 22:48:00 +0200 <alexfmpe[m]> not quite like that
2021-07-27 22:48:32 +0200 <Cale> (and I didn't handle the doubly empty case, I was going to generalise the (x:xs) pattern match...)
2021-07-27 22:48:33 +0200 <alexfmpe[m]> I'm basically gate-ing one of the lists against the other
2021-07-27 22:48:36 +0200 <alexfmpe[m]> like, whitelisting
2021-07-27 22:48:48 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 276 seconds)
2021-07-27 22:49:05 +0200 <Cale> Ohh... like, say to compute the intersection of sorted lists?
2021-07-27 22:49:12 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 22:49:30 +0200 <alexfmpe[m]> welll, almost whitelisting, I'm checking that a subsequence of one list matches is included in the other
2021-07-27 22:50:18 +0200 <alexfmpe[m]> I've done it manually, with normal pattern matching and recursion
2021-07-27 22:50:53 +0200 <Cale> Is the order important?
2021-07-27 22:51:14 +0200 <Cale> (Or could we pass to using e.g. Data.Set, which would be more efficient a lot of the time)
2021-07-27 22:51:29 +0200 <alexfmpe[m]> I'm not 100%, as it's been a while but I think so
2021-07-27 22:51:37 +0200 <alexfmpe[m]> otherwise, yeah, intersection
2021-07-27 22:52:03 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 22:52:43 +0200 <alexfmpe[m]> oh, this might work https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-List.html#v:intersect
2021-07-27 22:53:22 +0200 <alexfmpe[m]> take the intersection and check it matches the original list I'm whitelisting against
2021-07-27 22:53:44 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net)
2021-07-27 22:54:04 +0200 <dsal> :t fold . zipWith
2021-07-27 22:54:05 +0200 <lambdabot> Foldable ((->) [a]) => (a -> b -> c) -> [b] -> [c]
2021-07-27 22:54:09 +0200 <Cale> It could, but note that this thing only requires Eq, so there's no way it's anything cheaper than quadratic
2021-07-27 22:54:30 +0200 <alexfmpe[m]> bah
2021-07-27 22:54:45 +0200 <alexfmpe[m]> in my case I actually needed `intersectBy :: (a -> b -> Bool) -> [a] -> [b] -> [a]` or something
2021-07-27 22:54:59 +0200 <alexfmpe[m]> but `intersectBy` is `a -> a -> Bool` for some reaosn
2021-07-27 22:55:06 +0200 <alexfmpe[m]> and, yeah, quadratic
2021-07-27 22:55:25 +0200 <Cale> I'm sure I've written this higher order function before...
2021-07-27 22:55:28 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-07-27 22:55:42 +0200 <Cale> that applies a function to know whether to walk down one list or the other
2021-07-27 22:55:51 +0200 <Cale> and produces results as it goes
2021-07-27 22:55:53 +0200 <dsal> :t \f l1 -> fold . zipWith (\a b -> f a b) l1
2021-07-27 22:55:55 +0200 <lambdabot> Monoid c => (t1 -> t2 -> c) -> [t1] -> [t2] -> c
2021-07-27 22:55:59 +0200 <dsal> Well that's kind of gross.
2021-07-27 22:56:06 +0200 <Cale> It's different from folding over the zip
2021-07-27 22:56:14 +0200 <alexfmpe[m]> well, this is assymetric, I always go down the whitelist one, and may or may not go down the whitelisted one depending on whether it matches
2021-07-27 22:56:26 +0200 <dsal> Yeah, sorry, I'm not actually aware of the topic here. Just was wondering about that.
2021-07-27 22:56:43 +0200 <alexfmpe[m]> I dunno, maybe I should fold the whitelist one, and have a pair as the accumulator
2021-07-27 22:57:17 +0200 <alexfmpe[m]> `(already-whitelisted, check-whether-whitelisted) :: ([a], [a])`
2021-07-27 22:58:01 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-27 23:00:50 +0200mr-red(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-27 23:01:06 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 240 seconds)
2021-07-27 23:03:22 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection)
2021-07-27 23:04:20 +0200amahl(~amahl@84.251.202.64) (Remote host closed the connection)
2021-07-27 23:06:06 +0200 <dsal> alexfmpe[m]: Is that just something like `[ a | a <- l1, b <- l2, f a b]` ?
2021-07-27 23:06:57 +0200 <dsal> Oh, intersectBy is in Data.OldList with a definition similar to that.
2021-07-27 23:07:18 +0200 <alexfmpe[m]> I don't think I can get away with intersection, since multiplicity matters here
2021-07-27 23:07:49 +0200 <alexfmpe[m]> well, and order, otherwise some multiset intersection thing would work
2021-07-27 23:10:00 +0200chomwitt(~chomwitt@2a02:587:dc01:5c00:12c3:7bff:fe6d:d374)
2021-07-27 23:10:10 +0200guest76(~guest76@2604:3d08:6f7e:cf00::2e50)
2021-07-27 23:10:43 +0200roboguy__(~roboguy_@2605:a601:ac0e:ae00:3db6:b926:dbf2:890a)
2021-07-27 23:11:02 +0200amk(~amk@176.61.106.150) (Ping timeout: 252 seconds)
2021-07-27 23:11:07 +0200guest76(~guest76@2604:3d08:6f7e:cf00::2e50) (Client Quit)
2021-07-27 23:13:30 +0200roboguy_(~roboguy_@2605:a601:ac0e:ae00:bc41:cf44:b56:1727) (Ping timeout: 240 seconds)
2021-07-27 23:13:38 +0200 <Cale> alexfmpe[m]: Here's a fun one: https://gist.github.com/cgibbard/b129fe412b74cca676ac2a2c941362ea
2021-07-27 23:14:06 +0200nineonine(~nineonine@50.216.62.2)
2021-07-27 23:14:46 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
2021-07-27 23:14:55 +0200roboguy__(~roboguy_@2605:a601:ac0e:ae00:3db6:b926:dbf2:890a) (Client Quit)
2021-07-27 23:14:57 +0200 <Cale> Pretty close to the most general thing you can do with a pair of lists, lol
2021-07-27 23:15:09 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-27 23:16:09 +0200 <alexfmpe[m]> huh that looks like it works for my case
2021-07-27 23:16:19 +0200 <alexfmpe[m]> though, Pick seems suspiciously like `These`
2021-07-27 23:17:29 +0200 <Cale> yeah
2021-07-27 23:17:42 +0200 <alexfmpe[m]> `these :: (a -> c) -> (b -> c) -> (a -> b -> c) -> These a b -> c`
2021-07-27 23:18:12 +0200 <Cale> I probably should have just used These
2021-07-27 23:18:20 +0200 <Cale> For some reason it slipped my mind
2021-07-27 23:18:44 +0200bruceleewees(~bruceleew@83.24.236.64.ipv4.supernova.orange.pl)
2021-07-27 23:18:45 +0200 <Cale> Though this is kinda sorta dual to it
2021-07-27 23:18:47 +0200jolly23(~jolly@208.180.97.158)
2021-07-27 23:18:56 +0200 <alexfmpe[m]> it's backwards though?
2021-07-27 23:18:57 +0200 <alexfmpe[m]> yeah
2021-07-27 23:19:05 +0200 <alexfmpe[m]> more like `These a b -> (c -> c)`
2021-07-27 23:19:32 +0200 <Cale> Yeah, you'd have something like (a -> b -> These a b) and (These a b -> c -> c)
2021-07-27 23:20:35 +0200fendor(~fendor@77.119.218.44.wireless.dyn.drei.com) (Remote host closed the connection)
2021-07-27 23:20:35 +0200bruceleewees(~bruceleew@83.24.236.64.ipv4.supernova.orange.pl) (Read error: Connection reset by peer)
2021-07-27 23:21:17 +0200bruceleewees(~bruceleew@83.24.236.64.ipv4.supernova.orange.pl)
2021-07-27 23:22:11 +0200jolly(~jolly@208.180.97.158) (Ping timeout: 258 seconds)
2021-07-27 23:22:24 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-27 23:23:26 +0200xff0x(~xff0x@2001:1a81:527c:b500:2b8c:4e21:9ff9:e65e) (Ping timeout: 256 seconds)
2021-07-27 23:23:26 +0200gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2021-07-27 23:23:43 +0200Null_A(~null_a@2601:645:8700:2290:5520:ed9a:24da:3d0c) (Remote host closed the connection)
2021-07-27 23:23:48 +0200gentauro(~gentauro@user/gentauro)
2021-07-27 23:23:58 +0200xff0x(~xff0x@2001:1a81:527c:b500:2843:4b18:8f2c:3a0f)
2021-07-27 23:24:00 +0200mr-red(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 256 seconds)
2021-07-27 23:24:20 +0200jolly(~jolly@208.180.97.158)
2021-07-27 23:25:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-27 23:26:47 +0200jolly23(~jolly@208.180.97.158) (Ping timeout: 258 seconds)
2021-07-27 23:28:59 +0200Null_A(~null_a@2601:645:8700:2290:5520:ed9a:24da:3d0c)
2021-07-27 23:30:56 +0200pbrisbin(~patrick@174-083-170-200.res.spectrum.com)
2021-07-27 23:32:12 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 245 seconds)
2021-07-27 23:32:14 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-07-27 23:32:28 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-07-27 23:32:43 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 23:36:07 +0200 <peutri> what's the standard these days to parse a relaxng-constrained xml?
2021-07-27 23:36:38 +0200 <peutri> i looked around for some sort of validate-parser combo, but it always return some form of generic xml structure
2021-07-27 23:37:07 +0200amk(~amk@176.61.106.150)
2021-07-27 23:37:12 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 272 seconds)
2021-07-27 23:37:14 +0200jumper149(~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
2021-07-27 23:37:58 +0200 <peutri> i was hoping for actual sum types, to (help) get a feeling I'm not forgetting branches in my cases
2021-07-27 23:38:47 +0200Null_A(~null_a@2601:645:8700:2290:5520:ed9a:24da:3d0c) (Remote host closed the connection)
2021-07-27 23:39:30 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 276 seconds)
2021-07-27 23:40:31 +0200 <dsal> Huh, I've never really looked at these, but it's been brought up twice in the last couple of days. It's pretty neat.
2021-07-27 23:40:38 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 23:44:07 +0200sheepduck(~sheepduck@user/sheepduck)
2021-07-27 23:48:04 +0200agua(~agua@2804:14c:8793:8e2f:24cc:893e:e794:aea7)
2021-07-27 23:48:45 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-27 23:50:38 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 256 seconds)
2021-07-27 23:51:25 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 23:51:31 +0200pesada(~agua@2804:18:4a:f76c:1:0:5e60:e39)
2021-07-27 23:52:05 +0200Core8816(~agua@2804:18:4a:f76c:1:0:5e60:e39) (Ping timeout: 255 seconds)
2021-07-27 23:54:36 +0200agua(~agua@2804:14c:8793:8e2f:24cc:893e:e794:aea7) (Ping timeout: 256 seconds)
2021-07-27 23:56:39 +0200sheepduck(~sheepduck@user/sheepduck) (Quit: Konversation terminated!)
2021-07-27 23:57:16 +0200deejaytee(~deejaytee@cpc91196-cmbg18-2-0-cust215.5-4.cable.virginm.net) (Quit: Leaving)
2021-07-27 23:57:22 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2021-07-27 23:58:21 +0200fossdd(~fossdd@sourcehut/user/fossdd) (Ping timeout: 265 seconds)
2021-07-27 23:59:02 +0200fossdd(~fossdd@sourcehut/user/fossdd)
2021-07-27 23:59:22 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-07-27 23:59:44 +0200Erutuon(~Erutuon@user/erutuon)