Logs on 2022-02-22 (liberachat/#haskell)
| 00:00:55 | × | sonny quits (~sonny@bras-base-london1483w-grc-30-74-12-157-79.dsl.bell.ca) (Quit: Going offline, see ya! (www.adiirc.com)) |
| 00:00:59 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 00:01:20 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 00:03:03 | → | chenqisu1 joins (~chenqisu1@183.217.200.249) |
| 00:03:19 | × | spacenautx quits (~spacenaut@user/spacenautx) (Quit: WeeChat 3.4) |
| 00:07:40 | → | yrlnry joins (~mjd@pool-74-109-20-19.phlapa.fios.verizon.net) |
| 00:18:20 | → | alx741 joins (~alx741@181.199.42.143) |
| 00:19:56 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 00:23:05 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 00:23:07 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 00:23:49 | → | alx741 joins (~alx741@181.199.42.143) |
| 00:24:17 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 00:30:42 | × | Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:31:15 | × | jlamothe quits (~jlamothe@198.251.61.229) (Ping timeout: 252 seconds) |
| 00:32:48 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 00:34:20 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 00:34:20 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 00:34:20 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:36:57 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 00:39:43 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 00:42:23 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 00:45:49 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 00:45:57 | → | lavaman joins (~lavaman@98.38.249.169) |
| 00:46:42 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 00:50:11 | → | alx741 joins (~alx741@181.199.42.143) |
| 00:51:15 | → | mason0 joins (~bc8147f2@cerf.good1.com) |
| 00:51:59 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 00:52:15 | → | emf joins (~emf@c-73-97-137-43.hsd1.wa.comcast.net) |
| 00:53:28 | → | mvk joins (~mvk@2607:fea8:5cdc:bf00::99e7) |
| 00:53:50 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 00:54:57 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 00:55:00 | × | emf quits (~emf@c-73-97-137-43.hsd1.wa.comcast.net) (Client Quit) |
| 00:55:00 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 00:55:16 | × | whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 00:56:36 | × | mason0 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Ping timeout)) |
| 00:59:17 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds) |
| 01:01:10 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 01:02:31 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 01:04:29 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 01:06:14 | × | andreas303 quits (andreas303@ip227.orange.bnc4free.com) (Quit: fBNC - https://bnc4free.com) |
| 01:06:46 | → | andreas303 joins (andreas303@ip227.orange.bnc4free.com) |
| 01:07:34 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 01:07:45 | <chronon> | Wow, from a quick glance through the scrollback I can see this is where the clever people hang out. My brain melted. |
| 01:10:43 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:13:17 | × | dvdrw quits (~dvdrw@user/dvdrw) (Ping timeout: 240 seconds) |
| 01:13:56 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 01:16:12 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
| 01:16:38 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 01:16:49 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:21:35 | → | alx741 joins (~alx741@157.100.197.240) |
| 01:21:57 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 01:25:51 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 01:26:18 | × | ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec) |
| 01:29:09 | × | acidsys quits (~LSD@2a03:4000:55:d20::3) (Excess Flood) |
| 01:31:57 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 01:33:17 | → | mason0 joins (~bc8147f2@cerf.good1.com) |
| 01:37:08 | → | acidsys joins (~LSD@2a03:4000:55:d20::3) |
| 01:37:58 | <pavonia> | One of our mottos is: Haskell – the c stands for "clever" |
| 01:40:16 | × | cjb quits (~cjb@user/cjb) (Ping timeout: 260 seconds) |
| 01:41:39 | × | joo-_ quits (~joo-_@fsf/member/joo--) (Ping timeout: 272 seconds) |
| 01:43:17 | → | joo-_ joins (~joo-_@80-62-116-157-mobile.dk.customer.tdc.net) |
| 01:43:18 | × | joo-_ quits (~joo-_@80-62-116-157-mobile.dk.customer.tdc.net) (Changing host) |
| 01:43:18 | → | joo-_ joins (~joo-_@fsf/member/joo--) |
| 01:44:07 | → | alx741 joins (~alx741@157.100.197.240) |
| 01:45:19 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 01:46:40 | → | BrokenClutch joins (~pioneer@2804:d41:c291:0:6129:66a9:49aa:83e7) |
| 01:46:58 | <BrokenClutch> | Yeaay, three months doing haskell \o/ |
| 01:48:40 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 01:54:51 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 01:59:37 | × | romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4) |
| 02:02:36 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 02:04:14 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 02:04:25 | → | vysn joins (~vysn@user/vysn) |
| 02:06:20 | <FernandoChu[m]> | silly question, is there a name for constructors that have been applied to a type variable? like `[a]`, `Maybe b`, etc. Would be nice if that name also included those that have been applied to concrete types as well like `State [a] Int`, `Foo (Maybe b) [String]` etc |
| 02:06:39 | → | alx741 joins (~alx741@157.100.197.240) |
| 02:07:09 | <BrokenClutch> | :FernandoChu Type constructors? |
| 02:07:09 | <ski> | what about `Either Int' ? |
| 02:07:41 | <ski> | (or `Either e', if you prefer) |
| 02:07:49 | <FernandoChu[m]> | ski: isn't that a concrete type? |
| 02:08:12 | <FernandoChu[m]> | yeah Either e would be one of those things I'm looking to name |
| 02:08:16 | <FernandoChu[m]> | oh wait no |
| 02:08:17 | × | ridcully_ quits (~ridcully@p508acc81.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 02:08:31 | <FernandoChu[m]> | it's a partiall applied "thing idk it's name" |
| 02:08:39 | <FernandoChu[m]> | s/partiall/partially/ |
| 02:08:46 | <ski> | i tend to call type expressions, having kind `*' (or `Type', if you prefer), "concrete types" |
| 02:09:16 | <FernandoChu[m]> | me too, my earlier comment was a mistake |
| 02:09:16 | × | lavaman quits (~lavaman@98.38.249.169) (Read error: Connection reset by peer) |
| 02:09:36 | → | lavaman joins (~lavaman@98.38.249.169) |
| 02:09:58 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 02:11:35 | <FernandoChu[m]> | my question arises because this is what FlexibleContent/Instances seems to apply and I was writing my notes |
| 02:12:01 | <FernandoChu[m]> | the wiki calls them "arbitrary types" https://gitlab.haskell.org/haskell/prime/-/wikis/FlexibleContexts |
| 02:12:25 | <FernandoChu[m]> | which I'm not sure I like |
| 02:12:40 | <ski> | i think "arbitrary" there just means "no restriction" |
| 02:13:14 | <ski> | (or, maybe just with some few specific restrictions) |
| 02:13:25 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 02:14:41 | <FernandoChu[m]> | so many technical terms I forgot about the natural language interpretation haha |
| 02:14:46 | <FernandoChu[m]> | yeah that seems to be the case |
| 02:15:02 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:16:07 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 02:17:28 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 02:18:47 | × | DNH quits (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 02:21:14 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 02:22:37 | × | mvk quits (~mvk@2607:fea8:5cdc:bf00::99e7) (Ping timeout: 240 seconds) |
| 02:24:21 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 02:28:02 | → | alx741 joins (~alx741@157.100.197.240) |
| 02:29:27 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 02:31:10 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 02:31:41 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 02:35:37 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 02:36:12 | × | justAstache quits (~justache@user/justache) (Remote host closed the connection) |
| 02:36:48 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 02:37:08 | → | justAstache joins (~justache@user/justache) |
| 02:37:57 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 02:37:58 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 02:37:58 | → | wroathe joins (~wroathe@user/wroathe) |
| 02:47:38 | × | xff0x quits (~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8) (Ping timeout: 260 seconds) |
| 02:49:09 | → | xff0x joins (~xff0x@2001:1a81:5372:9200:5fc7:2f1:341d:525f) |
| 02:51:53 | × | xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
| 02:54:40 | → | alx741 joins (~alx741@157.100.197.240) |
| 02:56:56 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 02:58:37 | × | neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds) |
| 03:02:21 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 03:04:35 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 03:07:56 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 03:08:57 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 03:10:37 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds) |
| 03:12:03 | → | ridcully_ joins (~ridcully@p508ace91.dip0.t-ipconnect.de) |
| 03:15:06 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 03:20:10 | → | alx741 joins (~alx741@181.199.42.143) |
| 03:21:44 | × | waleee quits (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 252 seconds) |
| 03:22:43 | × | td_ quits (~td@muedsl-82-207-238-047.citykom.de) (Ping timeout: 256 seconds) |
| 03:24:41 | → | td_ joins (~td@muedsl-82-207-238-240.citykom.de) |
| 03:24:41 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 03:26:29 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 03:28:59 | → | Nahra joins (~user@static.161.95.99.88.clients.your-server.de) |
| 03:31:51 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 272 seconds) |
| 03:35:23 | ← | BrokenClutch parts (~pioneer@2804:d41:c291:0:6129:66a9:49aa:83e7) () |
| 03:36:08 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
| 03:37:03 | → | Null_A joins (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) |
| 03:39:30 | → | lavaman joins (~lavaman@98.38.249.169) |
| 03:41:32 | → | alx741 joins (~alx741@157.100.197.240) |
| 03:41:42 | × | Null_A quits (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 256 seconds) |
| 03:42:32 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 03:43:14 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
| 03:44:15 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 03:44:27 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 03:45:11 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 03:45:48 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 03:48:42 | × | acidsys quits (~LSD@2a03:4000:55:d20::3) (Excess Flood) |
| 04:00:24 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Remote host closed the connection) |
| 04:00:24 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Read error: Connection reset by peer) |
| 04:01:12 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 04:01:18 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 04:01:34 | → | alx741 joins (~alx741@157.100.197.240) |
| 04:05:50 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 250 seconds) |
| 04:05:50 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 04:09:32 | → | joegard joins (~joegard@179.33.119.167) |
| 04:10:38 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:11:20 | × | joegard quits (~joegard@179.33.119.167) (Quit: Client closed) |
| 04:13:15 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 04:16:09 | → | lavaman joins (~lavaman@98.38.249.169) |
| 04:18:35 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 04:20:12 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
| 04:24:05 | → | alx741 joins (~alx741@181.199.42.143) |
| 04:24:54 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
| 04:25:01 | → | mbuf joins (~Shakthi@223.178.77.186) |
| 04:25:22 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 04:25:23 | → | acidsys joins (~LSD@2a03:4000:55:d20::3) |
| 04:26:12 | × | nehsou^ quits (~nehsou@50.233.120.162) (Ping timeout: 240 seconds) |
| 04:26:49 | → | MochizukisLastTh joins (~Mochizuki@121-83-4-20f1.osk2.eonet.ne.jp) |
| 04:29:25 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 04:31:18 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 04:31:18 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 04:31:18 | → | wroathe joins (~wroathe@user/wroathe) |
| 04:36:27 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 04:36:36 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 04:36:38 | → | deadmarshal joins (~deadmarsh@95.38.117.172) |
| 04:45:42 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 250 seconds) |
| 04:46:23 | → | alx741 joins (~alx741@181.199.42.143) |
| 04:51:09 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 04:51:51 | → | alx741 joins (~alx741@157.100.197.240) |
| 04:54:12 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 04:56:10 | × | benin quits (~benin@59.88.179.150) (Quit: Ping timeout (120 seconds)) |
| 04:56:32 | → | benin joins (~benin@59.88.179.150) |
| 04:57:06 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 05:03:54 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:475:42ee:cbdc:5ced) |
| 05:05:47 | → | Null_A joins (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) |
| 05:10:36 | × | Null_A quits (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 05:15:17 | → | alx741 joins (~alx741@157.100.197.240) |
| 05:15:40 | → | komikat joins (~komikat@183.82.154.44) |
| 05:17:38 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 05:17:38 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 05:17:38 | → | wroathe joins (~wroathe@user/wroathe) |
| 05:19:48 | × | komikat quits (~komikat@183.82.154.44) (Ping timeout: 240 seconds) |
| 05:20:25 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 05:21:52 | → | komikat_ joins (~komikat@183.82.154.44) |
| 05:22:41 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 05:31:49 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 05:32:36 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 05:37:22 | → | alx741 joins (~alx741@157.100.197.240) |
| 05:51:21 | × | Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving) |
| 05:54:38 | × | komikat_ quits (~komikat@183.82.154.44) (Remote host closed the connection) |
| 05:54:50 | → | komikat joins (~komikat@183.82.154.44) |
| 05:59:13 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 05:59:51 | → | alx741 joins (~alx741@157.100.197.240) |
| 06:00:37 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 06:00:40 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
| 06:01:45 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 06:02:33 | × | komikat quits (~komikat@183.82.154.44) (Remote host closed the connection) |
| 06:03:08 | → | komikat_ joins (~komikat@183.82.154.44) |
| 06:07:47 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving) |
| 06:08:17 | × | komikat_ quits (~komikat@183.82.154.44) (Ping timeout: 272 seconds) |
| 06:09:00 | × | benin quits (~benin@59.88.179.150) (Ping timeout: 240 seconds) |
| 06:09:18 | → | komikat joins (~komikat@183.82.154.44) |
| 06:09:36 | → | whound joins (~dust@2409:4071:4e8b:a664:ed93:7b31:fb42:6202) |
| 06:10:12 | whound | is now known as dust__ |
| 06:10:37 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 06:10:41 | → | benin joins (~benin@59.88.179.150) |
| 06:12:42 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 06:13:17 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 06:13:48 | × | komikat quits (~komikat@183.82.154.44) (Ping timeout: 240 seconds) |
| 06:15:31 | → | komikat_ joins (~komikat@183.82.154.44) |
| 06:15:50 | × | komikat_ quits (~komikat@183.82.154.44) (Remote host closed the connection) |
| 06:16:03 | → | komikat joins (~komikat@183.82.154.44) |
| 06:16:07 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 06:20:22 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:20:41 | → | lavaman joins (~lavaman@98.38.249.169) |
| 06:23:04 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 06:23:31 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 06:24:03 | × | benin quits (~benin@59.88.179.150) (Ping timeout: 256 seconds) |
| 06:25:22 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds) |
| 06:26:58 | → | alx741 joins (~alx741@157.100.197.240) |
| 06:29:00 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds) |
| 06:29:07 | → | coot joins (~coot@213.134.190.95) |
| 06:33:16 | × | xff0x quits (~xff0x@2001:1a81:5372:9200:5fc7:2f1:341d:525f) (Ping timeout: 245 seconds) |
| 06:34:20 | → | xff0x joins (~xff0x@2001:1a81:5372:9200:8a1a:331:2fa:81ab) |
| 06:48:02 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 06:50:01 | × | mjrosenb quits (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net) (Ping timeout: 268 seconds) |
| 06:50:39 | × | xff0x quits (~xff0x@2001:1a81:5372:9200:8a1a:331:2fa:81ab) (Quit: xff0x) |
| 06:51:09 | × | dust__ quits (~dust@2409:4071:4e8b:a664:ed93:7b31:fb42:6202) (Quit: Konversation terminated!) |
| 06:51:09 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 06:51:56 | → | dust_ joins (~dust@2409:4071:4e8b:a664:ed93:7b31:fb42:6202) |
| 06:52:45 | dust_ | is now known as dust__ |
| 06:57:09 | × | yauhsienhuangtw quits (~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net) (Quit: Leaving) |
| 06:58:15 | → | xff0x joins (~xff0x@2001:1a81:5372:9200:8a1a:331:2fa:81ab) |
| 06:59:02 | × | sander quits (~sander@user/sander) (Ping timeout: 240 seconds) |
| 06:59:18 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 07:04:02 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds) |
| 07:04:58 | → | alx741 joins (~alx741@157.100.197.240) |
| 07:05:19 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 07:06:12 | → | mjrosenb joins (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net) |
| 07:09:17 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 07:09:43 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 272 seconds) |
| 07:10:17 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 07:11:13 | → | coot joins (~coot@213.134.190.95) |
| 07:12:41 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 07:15:01 | → | vysn joins (~vysn@user/vysn) |
| 07:16:58 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 07:17:10 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 07:18:10 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 07:21:40 | × | komikat quits (~komikat@183.82.154.44) (Remote host closed the connection) |
| 07:23:53 | → | acidjnk joins (~acidjnk@p200300d0c71a321635f6942ae4ff7a88.dip0.t-ipconnect.de) |
| 07:26:11 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds) |
| 07:27:30 | → | alx741 joins (~alx741@157.100.197.240) |
| 07:32:01 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 07:33:08 | → | benin joins (~benin@59.88.179.150) |
| 07:33:51 | × | dust__ quits (~dust@2409:4071:4e8b:a664:ed93:7b31:fb42:6202) (Quit: Konversation terminated!) |
| 07:34:08 | × | benin quits (~benin@59.88.179.150) (Client Quit) |
| 07:35:19 | → | benin joins (~benin@59.88.179.150) |
| 07:35:34 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 260 seconds) |
| 07:37:07 | × | dextaa_ quits (~dextaa@user/dextaa) (Read error: Connection reset by peer) |
| 07:37:36 | → | ss4 joins (~wootehfoo@user/wootehfoot) |
| 07:38:59 | × | mason0 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
| 07:40:25 | → | dextaa_ joins (~dextaa@user/dextaa) |
| 07:40:53 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds) |
| 07:42:56 | → | cosimone joins (~user@93-34-132-33.ip49.fastwebnet.it) |
| 07:45:11 | × | benin quits (~benin@59.88.179.150) (Ping timeout: 272 seconds) |
| 07:46:28 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:1947:6ff5:3916:a376) |
| 07:47:43 | → | Ariakenom joins (~Ariakenom@2001:9b1:efe:9d00:a0f2:d28e:55b:1ed5) |
| 07:47:51 | → | fendor joins (~fendor@178.115.60.54.wireless.dyn.drei.com) |
| 07:48:41 | → | alx741 joins (~alx741@181.199.42.143) |
| 07:48:48 | → | yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 07:51:51 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:475:42ee:cbdc:5ced) (Remote host closed the connection) |
| 07:53:21 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 07:53:35 | × | yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 07:53:42 | → | Ariakenom_ joins (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) |
| 07:53:48 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 240 seconds) |
| 07:53:52 | × | cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds) |
| 07:55:02 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: Leaving) |
| 07:56:09 | → | MajorBiscuit joins (~MajorBisc@c-001-029-040.client.tudelft.eduvpn.nl) |
| 07:57:02 | × | Ariakenom quits (~Ariakenom@2001:9b1:efe:9d00:a0f2:d28e:55b:1ed5) (Ping timeout: 240 seconds) |
| 07:58:02 | → | komikat joins (~komikat@183.82.154.239) |
| 08:00:03 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 08:02:06 | × | kristjansson quits (sid126207@id-126207.tinside.irccloud.com) (Excess Flood) |
| 08:02:23 | → | zeenk joins (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) |
| 08:02:27 | → | kristjansson joins (sid126207@id-126207.tinside.irccloud.com) |
| 08:04:00 | → | neurocyte0917090 joins (~neurocyte@IP-213157011045.dynamic.medianet-world.de) |
| 08:04:00 | × | neurocyte0917090 quits (~neurocyte@IP-213157011045.dynamic.medianet-world.de) (Changing host) |
| 08:04:00 | → | neurocyte0917090 joins (~neurocyte@user/neurocyte) |
| 08:06:52 | → | benin joins (~benin@59.92.239.104) |
| 08:09:06 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 08:10:03 | → | alx741 joins (~alx741@181.199.42.143) |
| 08:13:03 | → | kuribas joins (~user@ptr-25vy0iagvdrvz4nz7gs.18120a2.ip6.access.telenet.be) |
| 08:17:27 | → | chele joins (~chele@user/chele) |
| 08:18:31 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Remote host closed the connection) |
| 08:18:46 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 08:18:47 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 08:22:23 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:23:31 | × | alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection) |
| 08:24:37 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 08:25:37 | → | img joins (~img@user/img) |
| 08:27:31 | × | img quits (~img@user/img) (Client Quit) |
| 08:27:55 | → | ccntrq joins (~Thunderbi@imx92-1-78-204-187-6.fbx.proxad.net) |
| 08:28:32 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Remote host closed the connection) |
| 08:28:54 | → | img joins (~img@user/img) |
| 08:29:35 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 08:35:19 | → | alx741 joins (~alx741@157.100.197.240) |
| 08:37:45 | → | lavaman joins (~lavaman@98.38.249.169) |
| 08:39:43 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 08:40:22 | → | cynomys joins (~cynomys@user/cynomys) |
| 08:40:24 | → | mastarija joins (~mastarija@2a05:4f46:e04:6000:d8c:f8d:c71e:751e) |
| 08:40:43 | × | fendor quits (~fendor@178.115.60.54.wireless.dyn.drei.com) (Remote host closed the connection) |
| 08:41:01 | → | fendor joins (~fendor@178.115.60.54.wireless.dyn.drei.com) |
| 08:42:18 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds) |
| 08:42:34 | → | max22- joins (~maxime@2a01cb08833598000dbf298a01dd3327.ipv6.abo.wanadoo.fr) |
| 08:43:24 | × | dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection) |
| 08:44:36 | → | vorpuni joins (~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) |
| 08:44:59 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 08:49:02 | → | wonko joins (~wjc@user/wonko) |
| 08:49:24 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 08:49:35 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 08:51:12 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 08:51:53 | → | komikat joins (~komikat@183.82.154.239) |
| 08:52:26 | → | yauhsien joins (~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net) |
| 08:55:47 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:56:15 | → | alx741 joins (~alx741@157.100.197.240) |
| 08:59:42 | → | jespada joins (~jespada@85.255.234.190) |
| 09:00:09 | × | alex[m]12345 quits (~alexchete@2001:470:69fc:105::1:1001) (Quit: You have been kicked for being idle) |
| 09:10:10 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 09:11:07 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 09:11:26 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 09:12:41 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 09:12:59 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 09:14:18 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 09:15:06 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 272 seconds) |
| 09:17:48 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds) |
| 09:19:22 | <merijn> | :O |
| 09:19:28 | <merijn> | https://twitter.com/GabriellaG439/status/1495957520459915266 |
| 09:19:32 | <merijn> | That's genius |
| 09:19:45 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 09:20:14 | → | arievw joins (~arievw@85.148.234.95) |
| 09:21:05 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 09:21:33 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 09:26:35 | <[exa]> | that's wunderbar |
| 09:27:07 | × | arievw quits (~arievw@85.148.234.95) (Quit: Nettalk6 - www.ntalk.de) |
| 09:27:12 | → | alx741 joins (~alx741@157.100.197.240) |
| 09:28:53 | → | AlexNoo_ joins (~AlexNoo@178.34.160.240) |
| 09:29:25 | × | shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit) |
| 09:29:29 | → | Alex_test_ joins (~al_test@178.34.160.240) |
| 09:29:32 | → | AlexZenon_2 joins (~alzenon@178.34.160.240) |
| 09:31:08 | → | AlexNoo__ joins (~AlexNoo@178.34.160.240) |
| 09:31:54 | × | AlexZenon quits (~alzenon@178.34.160.240) (Ping timeout: 256 seconds) |
| 09:32:04 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 09:32:08 | → | AlexZenon joins (~alzenon@178.34.160.240) |
| 09:32:35 | → | jespada_ joins (~jespada@85.255.234.190) |
| 09:32:37 | × | AlexNoo quits (~AlexNoo@178.34.160.240) (Ping timeout: 240 seconds) |
| 09:32:45 | × | jespada quits (~jespada@85.255.234.190) (Ping timeout: 256 seconds) |
| 09:33:24 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 09:33:29 | × | Alex_test quits (~al_test@178.34.160.240) (Ping timeout: 272 seconds) |
| 09:33:41 | → | AlexNoo joins (~AlexNoo@178.34.160.240) |
| 09:34:06 | × | AlexZenon_2 quits (~alzenon@178.34.160.240) (Ping timeout: 260 seconds) |
| 09:34:10 | × | Alex_test_ quits (~al_test@178.34.160.240) (Ping timeout: 256 seconds) |
| 09:34:11 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 09:34:26 | → | Alex_test joins (~al_test@178.34.160.240) |
| 09:34:37 | × | AlexNoo_ quits (~AlexNoo@178.34.160.240) (Ping timeout: 240 seconds) |
| 09:35:36 | × | vorpuni quits (~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) (Ping timeout: 250 seconds) |
| 09:35:45 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:36:09 | × | AlexNoo__ quits (~AlexNoo@178.34.160.240) (Ping timeout: 256 seconds) |
| 09:36:17 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 252 seconds) |
| 09:36:36 | × | acidjnk quits (~acidjnk@p200300d0c71a321635f6942ae4ff7a88.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 09:36:45 | → | alp joins (~alp@user/alp) |
| 09:37:18 | → | komikat joins (~komikat@183.82.154.239) |
| 09:39:16 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 09:39:45 | × | AlexZenon quits (~alzenon@178.34.160.240) (Quit: ;-) |
| 09:40:21 | × | Alex_test quits (~al_test@178.34.160.240) (Quit: ;-) |
| 09:41:05 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 09:41:21 | × | AlexNoo quits (~AlexNoo@178.34.160.240) (Quit: Leaving) |
| 09:45:11 | → | jstolarek joins (~jstolarek@staticline-31-183-182-85.toya.net.pl) |
| 09:48:28 | × | ss4 quits (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
| 09:48:48 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 09:49:04 | → | dvdrw joins (~dvdrw@user/dvdrw) |
| 09:49:43 | → | alx741 joins (~alx741@157.100.197.240) |
| 09:51:47 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection) |
| 09:52:41 | → | __monty__ joins (~toonn@user/toonn) |
| 09:53:45 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 09:53:50 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 09:55:58 | × | polyphem quits (~rod@2a02:810d:840:8754:2123:9506:671d:c7f0) (Ping timeout: 250 seconds) |
| 09:56:31 | → | AlexZenon joins (~alzenon@178.34.160.240) |
| 09:57:03 | → | polyphem joins (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) |
| 09:57:26 | → | Alex_test joins (~al_test@178.34.160.240) |
| 09:57:35 | → | vorpuni joins (~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) |
| 09:59:02 | × | polyphem quits (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) (Client Quit) |
| 10:01:17 | × | mastarija quits (~mastarija@2a05:4f46:e04:6000:d8c:f8d:c71e:751e) (Ping timeout: 240 seconds) |
| 10:01:47 | → | polyphem joins (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) |
| 10:04:00 | <tomsmeding> | neat |
| 10:04:16 | <dminuoso> | Hah that's really something |
| 10:05:10 | <tomsmeding> | I wonder how well that scales beyond nice examples though |
| 10:06:22 | <tomsmeding> | It's nice to be able to write `sum / length` instead of `lift2 (/) sum length`, but I'd guess that you'd have <20 occurrences of this in an actual codebase |
| 10:06:38 | <tomsmeding> | (not saying it's bad: certainly nice to have) |
| 10:07:03 | × | m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 272 seconds) |
| 10:07:23 | → | jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net) |
| 10:07:26 | × | alp quits (~alp@user/alp) (Remote host closed the connection) |
| 10:07:45 | → | alp joins (~alp@user/alp) |
| 10:08:09 | <[exa]> | I guess it could work for vectors right? "broadcasting" ops over vectors is super useful |
| 10:08:15 | → | m5zs7k joins (aquares@web10.mydevil.net) |
| 10:12:15 | → | alx741 joins (~alx741@157.100.197.240) |
| 10:12:37 | × | jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 250 seconds) |
| 10:12:46 | <merijn> | tomsmeding: That's not what it's doing, though |
| 10:12:59 | <merijn> | tomsmeding: It's much more efficient than liftA2 too |
| 10:13:25 | <merijn> | the liftA2 blows up memory on big, lazy things |
| 10:14:48 | <merijn> | sum (or length, whichever is forced first) will materialise the entire thing, then it will stay alive until the other finishes evaluating and *then* can things be GCed |
| 10:14:53 | <merijn> | the fold example is incremental |
| 10:18:03 | <tomsmeding> | merijn: note that I wrote lift2, not liftA2 |
| 10:18:04 | → | ubert1 joins (~Thunderbi@2a02:8109:9880:303c:b499:2e2d:5a8b:934e) |
| 10:18:13 | <tomsmeding> | I know that you'd need a special combinator for folds |
| 10:20:53 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 10:23:12 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 10:27:37 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 10:27:46 | → | AlexNoo joins (~AlexNoo@178.34.160.240) |
| 10:32:10 | <tomsmeding> | merijn: https://hackage.haskell.org/package/foldl-1.4.12/docs/src/Control.Foldl.html#line-291 |
| 10:32:13 | <tomsmeding> | it's literally liftA2 |
| 10:32:34 | <tomsmeding> | (with a well-chosen Applicative instance) |
| 10:34:05 | <kuribas> | liftA2 is constant for folds. |
| 10:34:13 | <kuribas> | it just operates on the end result. |
| 10:34:13 | <tomsmeding> | indeed |
| 10:34:30 | <tomsmeding> | I realised that after looking at the Num instance and going "wait, what? Oh, of course" |
| 10:35:23 | <tomsmeding> | [exa]: vectors are usually instances of Num precisely for that reason I think |
| 10:35:56 | <tomsmeding> | except if intended as linear algebra vectors I guess, then (*) is a bit dodgy perhaps |
| 10:36:26 | <dvdrw> | `signum' and `abs' are a bit dubious to pick an implementation for, too |
| 10:36:59 | <tomsmeding> | they are for all non-scalar stuff |
| 10:37:07 | × | vorpuni quits (~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) (Ping timeout: 256 seconds) |
| 10:37:18 | → | alx741 joins (~alx741@181.199.42.143) |
| 10:37:26 | <tomsmeding> | matrices, polynomials |
| 10:38:16 | <tomsmeding> | hindsight says that perhaps it should have been Ring { (+), (*), (-), negate }, Ring => Num { abs, signum } |
| 10:38:43 | <tomsmeding> | though that has the downside of more verbose instance declarations |
| 10:38:55 | <geekosaur> | yet another attempt to redesign Num… |
| 10:38:59 | <tomsmeding> | :D |
| 10:39:06 | <geekosaur> | hackage has several failed attempts already |
| 10:39:29 | <tomsmeding> | you know what would be nice? the ability to give instances for a whole tree of type classes compactly in a single clause |
| 10:39:41 | <dvdrw> | https://xkcd.com/927/ :) |
| 10:40:01 | <tomsmeding> | like, instance Monad Thing where fmap = ... ; pure = ... ; (<*>) = ... ; return = ... ; (>>=) = ... |
| 10:40:09 | <tomsmeding> | bad example because this has lots of redundancy as well |
| 10:40:15 | <geekosaur> | at some point one has to accept that Num exists for programmer convenience |
| 10:40:33 | <tomsmeding> | then you could split up Num in lots of fine-grained classes, without the downside of making instance declarations much more verbose |
| 10:40:38 | <dvdrw> | tomsmeding: maybe allow for lower typeclasses to use higher typeclass functions for default implementations? |
| 10:40:45 | <tomsmeding> | and less people would have complained about FAM I guess |
| 10:40:47 | <geekosaur> | already can |
| 10:41:01 | <dminuoso> | dvdrw: that's already perfectly possible. |
| 10:41:05 | <geekosaur> | many people backform Applicative instances with <*> = `ap` |
| 10:41:09 | <[exa]> | tomsmeding: does it do the fusion though, to avoid making the intermediate vectors? for me the explicit fold there kinda materializes the efficiency expectation there |
| 10:41:15 | <dminuoso> | dvdrw: Look how default Generic implementations usually work. |
| 10:41:28 | <dminuoso> | (They dont even have to be subclasses, they can be arbitrary classes) |
| 10:41:35 | <tomsmeding> | dvdrw: key thing is DefaultSignatures |
| 10:41:46 | <tomsmeding> | though of course Functor/Applicative don't do it because legacy |
| 10:41:52 | <dvdrw> | huh, didn't know that |
| 10:41:57 | <tomsmeding> | [exa]: what's "it" you're referring to? |
| 10:42:10 | <dminuoso> | tomsmeding: Honestly I'd find it detesting if `rg "instance Functor Foo"` wouldn't be fruitful. |
| 10:42:12 | <[exa]> | tomsmeding: Num instance for vectors |
| 10:42:20 | <tomsmeding> | dminuoso: very good point |
| 10:42:32 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 10:42:34 | <tomsmeding> | [exa]: ah, but fusion is a whole separate problem from operators like these |
| 10:42:48 | <merijn> | dvdrw: You can use DefaultSignatures extension for that |
| 10:42:56 | <[exa]> | yeah, it looked to me that the fold there could give a nice hint |
| 10:42:58 | <tomsmeding> | if a user writes `map (*2) (map (+3) v)`, you probably want fusion as well |
| 10:43:26 | <tomsmeding> | so not having easy broadcasting Num operators for your vectors doesn't allow you to ignore fusion :p |
| 10:43:45 | <merijn> | dvdrw: basically lets you have a signature and default implementation that is "less general" that the normal type, see: https://github.com/merijn/validated-literals/blob/master/ValidLiterals.hs#L87-L89 |
| 10:44:16 | <dminuoso> | tomsmeding: perhaps what you really want is some editor guidance. Say you let the editor know you want to write `instance Foo Monad`, and it will create a special buffer with `instance Functor where fmap = liftM; instance Applicative where pure = return; (<*>) = liftAP; instance Monad where return = ...; (>>=) = ...;`, and put your cursor directly to the definition of return |
| 10:44:28 | <dminuoso> | Or just insert it right into your haskell editor buffer |
| 10:44:35 | <dminuoso> | With HLS that should be doable |
| 10:44:56 | <tomsmeding> | dminuoso: maybe that does most of the job indeed |
| 10:45:59 | <tomsmeding> | dminuoso: I was thinking of a fragmentation of Num along the lines of this (linearity being irrelevant to the point) https://hackage.haskell.org/package/linear-base-0.1.0/docs/Data-Num-Linear.html |
| 10:46:31 | <tomsmeding> | making a new type an instance of the right stuff will be awfully verbose |
| 10:46:58 | <dvdrw> | merijn: that's a pretty cool feature |
| 10:47:21 | <tomsmeding> | editor support would be nice, but then you slowly degenerate to java-like "let's generate all the code, then it's not bad that everything is hugely boilerplaty" |
| 10:47:28 | <dminuoso> | Btw, I wish we had some way to attach metadata to constructors outside the type system. |
| 10:47:35 | <tomsmeding> | I'm not saying my multi-instance declaration is the nicest solution either though |
| 10:48:56 | <dminuoso> | It would be so neat if I could do something like `data Meta = Meta Int String; data State = Loaded {~ Meta 10 "loaded" ~} | Fixed {~ Meta 20 "fixed" ~}` |
| 10:49:13 | <dminuoso> | With that meta data being accessible in say generics or TH... |
| 10:49:29 | <lortabac> | clojure has something similar IIRC |
| 10:50:27 | <turlando> | Is there a way to import a data constructor without the record accessor functions? |
| 10:50:41 | <dminuoso> | turlando: import Foo (Foo(Foo)) |
| 10:50:54 | <dminuoso> | Okay, perhaps a bit confusing with the overloaded usage of Foo here.. |
| 10:51:05 | <dminuoso> | import Mod (TypeCon(DataCon)) |
| 10:51:06 | <geekosaur> | actually I think no |
| 10:51:15 | <turlando> | Yeah, it's confusing and I've tried it but with no luck, let me try harder |
| 10:51:37 | <dminuoso> | geekosaur: Mmm, would that give me record accessors regardless? |
| 10:51:37 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 10:51:42 | <geekosaur> | yes |
| 10:51:47 | <dminuoso> | Uh that's surprising |
| 10:51:59 | <geekosaur> | this is why 9.2 has an extension to not generate them |
| 10:52:01 | <turlando> | nope: Not in scope: data constructor ‘Frame’ |
| 10:52:12 | <turlando> | with: import Simulator.Frame (Frame(Frame)) |
| 10:52:12 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 10:52:31 | <geekosaur> | hm, that should importboth type and data constructor |
| 10:52:46 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 10:52:49 | <geekosaur> | (but no control over fields) |
| 10:53:21 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 10:53:35 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit) |
| 10:53:45 | <geekosaur> | actually, I wonder if you could export a bidirectional pattern synonym and not export the datacon itself |
| 10:54:01 | → | komikat joins (~komikat@183.82.154.239) |
| 10:54:16 | <geekosaur> | you'd need to turn on the extension that lets you say `pattern Foo` in the export list |
| 10:54:36 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 10:54:45 | <geekosaur> | ExplicitNamespaces |
| 10:54:48 | <turlando> | True that, but seems to me a bit of overkill since I need this in a module only so far |
| 10:56:17 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 240 seconds) |
| 10:58:36 | × | foul_owl quits (~kerry@23.82.193.88) (Ping timeout: 256 seconds) |
| 11:00:03 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 11:00:06 | <turlando> | stack clean && stack build did the trick :\ |
| 11:02:08 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 11:02:37 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 11:06:21 | → | notzmv joins (~zmv@user/notzmv) |
| 11:06:21 | → | komikat joins (~komikat@183.82.154.239) |
| 11:08:21 | tomsmeding | is happy to not have had build caching issues yet, neither stack nor cabal |
| 11:08:41 | → | alx741 joins (~alx741@157.100.197.240) |
| 11:11:20 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 11:13:50 | → | foul_owl joins (~kerry@23.82.193.89) |
| 11:15:48 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 11:17:32 | → | fendor_ joins (~fendor@178.165.167.221.wireless.dyn.drei.com) |
| 11:20:02 | × | fendor quits (~fendor@178.115.60.54.wireless.dyn.drei.com) (Ping timeout: 250 seconds) |
| 11:21:03 | → | kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) |
| 11:21:18 | → | ccntrq1 joins (~Thunderbi@2a01:e34:eccb:b060:8793:de70:3992:9c12) |
| 11:23:03 | × | ccntrq quits (~Thunderbi@imx92-1-78-204-187-6.fbx.proxad.net) (Ping timeout: 272 seconds) |
| 11:23:03 | ccntrq1 | is now known as ccntrq |
| 11:23:47 | → | whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com) |
| 11:24:16 | → | DNH joins (~DNH@2a02:8109:b740:2c4:e0aa:430d:d615:45f4) |
| 11:29:10 | → | alx741 joins (~alx741@157.100.197.240) |
| 11:31:48 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 11:31:49 | → | alphabeta joins (~kilolympu@31.205.200.235) |
| 11:32:36 | × | kilolympus quits (~kilolympu@vpn-fn-229.net.ed.ac.uk) (Ping timeout: 256 seconds) |
| 11:33:03 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 11:33:39 | → | alx741 joins (~alx741@157.100.197.240) |
| 11:37:14 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 11:38:50 | × | raym quits (~raym@user/raym) (Ping timeout: 256 seconds) |
| 11:39:40 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 11:41:03 | → | pokhu joins (~rishi@103.206.114.112) |
| 11:45:22 | → | raym joins (~raym@user/raym) |
| 11:48:37 | <dvdrw> | ski: awpr: Church-encoded constrained existential did it :) (Pretty similar to your ForSome) |
| 11:52:51 | <ski> | dvdrw : hm ? |
| 11:53:44 | → | alx741 joins (~alx741@157.100.197.240) |
| 11:53:53 | → | jm_jj joins (~jmjj@mobile-user-c3a5cc-243.dhcp.inet.fi) |
| 11:54:44 | <dvdrw> | ski: `(foldl1 (>>) $ map ftog) :: [exists a. Show a => F a] -> (exists a. Show a => G a)' |
| 11:55:04 | <dvdrw> | ...that should be a `(.)' |
| 11:55:48 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 11:56:41 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 11:56:54 | <ski> | s/=>/*>/ |
| 11:57:03 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 11:57:39 | <dvdrw> | that's because of the existential quantifier? |
| 11:57:47 | <ski> | (yes and) no |
| 11:58:38 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 11:58:51 | <ski> | to consume a value of type `Cxt => T', you have to provide evidence for the constraint `Cxt', and then you can consume the resulting value of type `T' |
| 11:58:57 | × | MochizukisLastTh quits (~Mochizuki@121-83-4-20f1.osk2.eonet.ne.jp) (Ping timeout: 256 seconds) |
| 11:59:28 | <ski> | to produce a value of type `Cxt => T', you get to assume (you will be handed) evidence for the constraint `Cxt', and then you have to produce a value of type `T' |
| 12:00:01 | <ski> | to produce a value of type `Cxt *> T', you have to provide evidence for the constraint `Cxt', and then you also have to produce a value of type `T' |
| 12:01:15 | <ski> | to consume a value of type `Cxt *> T', you will be provided/handed (you can assume) evidence for the constraint `Cxt', and then you will also be given a value of type `T' to consume |
| 12:01:52 | <dvdrw> | ah, I see |
| 12:01:53 | <ski> | `Cxt *> T' is to `Cxt => T' what `(U,V) ' is to `U -> V' |
| 12:02:23 | <ski> | `*>' is most commonly used directly inside `exists', just like `=>' is most commonly used directly inside `forall' |
| 12:02:36 | × | ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (K-Lined) |
| 12:02:36 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 12:02:47 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 12:02:47 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 12:03:10 | <dvdrw> | Do these arrows have a name? |
| 12:03:59 | <ski> | here's one way you can simulate `Cxt *> T' : `data CxtWithT = Cxt => WrapCxtWithT T'. or, using `GADTs' syntax, `data CxtWithT where WrapCxtWithT :: Cxt => T -> CxtWithT' |
| 12:05:06 | <ski> | (another way to simulate `Cxt *> T' is `forall o. (Cxt => T -> o) -> o'. this is the CPS / Church/Scott encoding) |
| 12:05:57 | <dvdrw> | Indeed that's how I've written it for my `ForSome ctx f' type |
| 12:06:41 | <dvdrw> | `forall r. (forall a. c a => tag a -> r) -> r' |
| 12:07:35 | <dvdrw> | er, ...ctx a... |
| 12:07:49 | <ski> | "Do these arrows have a name?" -- not really. the notation `*>' is something i've used for years, in here, to explain this distinction, and to be able to talk about this stuff |
| 12:08:36 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 12:08:49 | <ski> | although, it seems that the word "provide" may be useful to talk about it |
| 12:08:57 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 12:09:30 | <ski> | @hoogle Dict |
| 12:09:30 | <lambdabot> | Data.Constraint data Dict |
| 12:09:30 | <lambdabot> | Data.Constraint Dict :: a => Dict a |
| 12:09:30 | <lambdabot> | Data.Vinyl.Core data Dict c a |
| 12:10:27 | <ski> | that is `data Dict c = c => Dict', expressing `c *> ()'. which is itself one example of using `*>', not directly nested inside `exists' |
| 12:11:36 | × | cynomys quits (~cynomys@user/cynomys) (Ping timeout: 250 seconds) |
| 12:12:23 | → | acidjnk joins (~acidjnk@p200300d0c71a3216f19af2eb8990af00.dip0.t-ipconnect.de) |
| 12:13:31 | ski | . o O ( <https://hackage.haskell.org/package/constraints-0.13.3/docs/Data-Constraint.html> ) |
| 12:16:16 | → | alx741 joins (~alx741@157.100.197.240) |
| 12:17:11 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 12:22:53 | → | spacenautx joins (~spacenaut@user/spacenautx) |
| 12:23:42 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 12:29:43 | → | mastarija joins (~mastarija@2a05:4f46:e04:6000:d8cc:eac0:596a:75bb) |
| 12:30:30 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 12:31:36 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 12:32:05 | → | coot joins (~coot@213.134.190.95) |
| 12:33:27 | <ehammarstrom> | Since this compiles https://paste.tomsmeding.com/3IYPsd1g would this be considered a "proof" that ((g . f) .) = (g .) . (f .)? I guess given that I trust GHC (?) |
| 12:34:22 | × | deadmarshal quits (~deadmarsh@95.38.117.172) (Ping timeout: 256 seconds) |
| 12:34:37 | <ehammarstrom> | Shoot, forgot to include `f :: Int -> Bool` and `g :: Bool -> Char` in the paste |
| 12:34:56 | notabled1 | is now known as notableduck |
| 12:35:17 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 12:35:42 | <ski> | was just going to ask about those |
| 12:37:07 | <ski> | what does `(g . hb) . (f . ha)' have to do with `(g .) . (f .)' ? |
| 12:38:20 | <ski> | and you haven't really provided any argument or check that two things are equal, you've just showed that some (separate) stuff type-checks |
| 12:38:21 | <ehammarstrom> | ski: I thought of them as "hole a" and "hole b", filling in the missing args |
| 12:38:24 | → | alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 12:38:42 | <ski> | (g .) . (f .) |
| 12:38:51 | <ski> | = \h -> ((g .) . (f .)) h |
| 12:38:59 | <ski> | = \h -> (g .) ((f .) h) |
| 12:39:07 | <ski> | = \h -> g . (f . h) |
| 12:39:40 | <ski> | this doesn't seem too related to your `\ha hb -> (g . hb) . (f . ha)' |
| 12:39:55 | → | lavaman joins (~lavaman@98.38.249.169) |
| 12:41:32 | <ski> | (anyway, what `forall g f. ((g . f) .) = (g .) . (f .)' is really about is associativity. perhaps one could prove his as a consequence of a free theorem, hmm) |
| 12:41:38 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
| 12:41:59 | → | alx741 joins (~alx741@157.100.197.240) |
| 12:42:41 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 12:44:17 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 12:44:20 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:45:24 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 12:45:51 | → | lavaman joins (~lavaman@98.38.249.169) |
| 12:47:18 | <ski> | oh, just noticed your comment in the paste said `((g . f) . _) = (g . _) . (f . _)'. it's not too clear what you mean by that (although, you seem to have interpreted `(g . _) . (f . _)' as `(g . hb) . (f . ha)', but then what does those `hb' and `ha' have to do with the `h' that you get when you similarly interpret `((g . f) . _)' as `(g . f) . h' ?) in any case, it would seem to be different from your `((g |
| 12:47:24 | <ski> | . f) .) = (g .) . (f .)' above |
| 12:49:02 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 12:52:07 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:52:12 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 12:52:31 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds) |
| 12:53:25 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 12:54:24 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 12:54:35 | → | deadmarshal joins (~deadmarsh@95.38.117.172) |
| 12:54:50 | → | andreabedini joins (~andreabed@8s8kj68c1m9cwyq773h2.ip6.superloop.com) |
| 12:56:33 | × | alphabeta quits (~kilolympu@31.205.200.235) (Quit: Quitting IRC :() |
| 12:56:45 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 12:56:52 | → | kilolympus joins (~kilolympu@31.205.200.235) |
| 12:58:37 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 240 seconds) |
| 13:02:14 | → | alx741 joins (~alx741@157.100.197.240) |
| 13:03:41 | × | xff0x quits (~xff0x@2001:1a81:5372:9200:8a1a:331:2fa:81ab) (Ping timeout: 245 seconds) |
| 13:03:50 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 13:04:31 | → | xff0x joins (~xff0x@2001:1a81:5372:9200:6a39:7582:9b2d:4f3d) |
| 13:06:06 | × | chenqisu1 quits (~chenqisu1@183.217.200.249) (Ping timeout: 256 seconds) |
| 13:06:06 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 13:07:39 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 13:11:34 | × | jespada_ quits (~jespada@85.255.234.190) (Ping timeout: 260 seconds) |
| 13:14:34 | × | AlexNoo quits (~AlexNoo@178.34.160.240) (Quit: Leaving) |
| 13:14:46 | × | Alex_test quits (~al_test@178.34.160.240) (Quit: ;-) |
| 13:14:56 | × | DNH quits (~DNH@2a02:8109:b740:2c4:e0aa:430d:d615:45f4) (Ping timeout: 245 seconds) |
| 13:15:04 | × | AlexZenon quits (~alzenon@178.34.160.240) (Quit: ;-) |
| 13:18:05 | → | o-90 joins (~o-90@gateway/tor-sasl/o-90) |
| 13:20:32 | → | AlexZenon joins (~alzenon@178.34.160.240) |
| 13:20:41 | → | AlexNoo joins (~AlexNoo@178.34.160.240) |
| 13:22:16 | → | alx741 joins (~alx741@157.100.197.240) |
| 13:22:21 | → | Alex_test joins (~al_test@178.34.160.240) |
| 13:24:18 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 13:25:01 | → | nil joins (~user@134.209.106.31) |
| 13:25:37 | × | xff0x quits (~xff0x@2001:1a81:5372:9200:6a39:7582:9b2d:4f3d) (Ping timeout: 240 seconds) |
| 13:25:49 | <nil> | It is possible to use linear-base's mutable hash map to do something like: for (i in [1..100]) { hm.insert(i, i); print(i); } ? |
| 13:26:43 | → | xff0x joins (~xff0x@2001:1a81:5372:9200:4da8:4717:4e75:17ef) |
| 13:27:03 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 13:28:04 | <nil> | HashMap's constructors (empty and fromList) require the return types to be `Ur a`, so no `IO`. :-/ |
| 13:29:12 | × | o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection) |
| 13:30:52 | × | nil quits (~user@134.209.106.31) (Remote host closed the connection) |
| 13:32:18 | <merijn> | possibly? seems needlesly complicated for something trivially achieved by a fold seems overkill... |
| 13:32:41 | × | andreabedini quits (~andreabed@8s8kj68c1m9cwyq773h2.ip6.superloop.com) (Quit: WeeChat 3.3) |
| 13:33:02 | × | max22- quits (~maxime@2a01cb08833598000dbf298a01dd3327.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds) |
| 13:39:12 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 13:41:49 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 13:42:05 | × | deadmarshal quits (~deadmarsh@95.38.117.172) (Ping timeout: 256 seconds) |
| 13:43:21 | × | benin quits (~benin@59.92.239.104) (Quit: The Lounge - https://thelounge.chat) |
| 13:43:43 | → | benin joins (~benin@59.92.239.104) |
| 13:44:47 | → | alx741 joins (~alx741@157.100.197.240) |
| 13:48:18 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 13:49:17 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds) |
| 13:49:20 | × | komikat quits (~komikat@183.82.154.239) (Read error: Connection reset by peer) |
| 13:49:23 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 13:49:35 | → | komikat joins (~komikat@183.82.154.239) |
| 13:49:38 | → | fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) |
| 13:50:51 | × | mastarija quits (~mastarija@2a05:4f46:e04:6000:d8cc:eac0:596a:75bb) (Quit: Leaving) |
| 13:53:34 | × | acidjnk quits (~acidjnk@p200300d0c71a3216f19af2eb8990af00.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 13:56:09 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 13:56:11 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 13:56:41 | → | Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
| 13:56:52 | × | hololeap quits (~hololeap@user/hololeap) (Excess Flood) |
| 13:57:20 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 13:57:48 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 13:59:08 | → | hololeap joins (~hololeap@user/hololeap) |
| 14:01:23 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 272 seconds) |
| 14:02:36 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
| 14:05:39 | → | bahamas joins (~lucian@84.232.140.52) |
| 14:06:24 | → | alx741 joins (~alx741@157.100.197.240) |
| 14:10:15 | → | doyougnu joins (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) |
| 14:10:42 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 14:15:30 | → | deadmarshal joins (~deadmarsh@95.38.117.172) |
| 14:18:23 | → | max22- joins (~maxime@2a01cb088335980021dd241f5bb447ef.ipv6.abo.wanadoo.fr) |
| 14:19:04 | → | AlexNoo_ joins (~AlexNoo@178.34.160.252) |
| 14:19:32 | × | deadmarshal quits (~deadmarsh@95.38.117.172) (Ping timeout: 240 seconds) |
| 14:21:28 | × | Alex_test quits (~al_test@178.34.160.240) (Ping timeout: 256 seconds) |
| 14:22:02 | × | AlexZenon quits (~alzenon@178.34.160.240) (Ping timeout: 256 seconds) |
| 14:22:19 | × | AlexNoo quits (~AlexNoo@178.34.160.240) (Ping timeout: 256 seconds) |
| 14:23:56 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 14:23:56 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 14:23:56 | → | wroathe joins (~wroathe@user/wroathe) |
| 14:24:11 | × | benin quits (~benin@59.92.239.104) (Ping timeout: 272 seconds) |
| 14:24:52 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 14:25:11 | → | Alex_test joins (~al_test@178.34.160.252) |
| 14:25:49 | → | Alex_test_ joins (~al_test@178.34.160.252) |
| 14:25:56 | → | benin joins (~benin@59.92.239.104) |
| 14:25:57 | → | AlexZenon joins (~alzenon@178.34.160.252) |
| 14:26:14 | → | AlexZenon_2 joins (~alzenon@178.34.160.252) |
| 14:26:21 | → | shriekingnoise joins (~shrieking@201.231.16.156) |
| 14:28:45 | → | Null_A joins (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) |
| 14:28:56 | → | alx741 joins (~alx741@181.199.42.143) |
| 14:29:37 | → | CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 14:31:46 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 14:32:25 | → | alx741 joins (~alx741@181.199.42.143) |
| 14:33:41 | × | Null_A quits (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
| 14:34:08 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 14:34:25 | × | AlexZenon_2 quits (~alzenon@178.34.160.252) (Quit: ;-) |
| 14:34:59 | × | Alex_test_ quits (~al_test@178.34.160.252) (Quit: ;-) |
| 14:35:53 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 14:36:18 | AlexNoo_ | is now known as AlexNoo |
| 14:36:47 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit) |
| 14:36:59 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 14:40:39 | × | bahamas quits (~lucian@84.232.140.52) (Ping timeout: 272 seconds) |
| 14:41:19 | × | whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 14:42:09 | × | gawen quits (~gawen@user/gawen) (Quit: cya) |
| 14:42:32 | → | rtsn joins (~nstr@user/rtsn) |
| 14:45:05 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3) |
| 14:47:36 | → | gawen joins (~gawen@user/gawen) |
| 14:52:50 | → | alx741 joins (~alx741@157.100.197.240) |
| 14:53:23 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 14:54:56 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 14:54:59 | × | rembo10 quits (~rembo10@remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 14:55:56 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 14:55:58 | → | rembo10 joins (~rembo10@remulis.com) |
| 14:56:13 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 14:57:49 | × | CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 14:58:26 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 15:00:26 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:1947:6ff5:3916:a376) (Quit: WeeChat 2.8) |
| 15:00:36 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 250 seconds) |
| 15:01:28 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 15:02:29 | → | arjun joins (~arjun@user/arjun) |
| 15:04:05 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
| 15:04:22 | × | arjun quits (~arjun@user/arjun) (Remote host closed the connection) |
| 15:04:31 | × | wonko quits (~wjc@user/wonko) (Ping timeout: 245 seconds) |
| 15:06:12 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds) |
| 15:07:44 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 15:07:53 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:1947:6ff5:3916:a376) |
| 15:09:56 | → | bahamas joins (~lucian@84.232.140.52) |
| 15:13:05 | → | alx741 joins (~alx741@157.100.197.240) |
| 15:14:45 | → | hololeap_ joins (~hololeap@user/hololeap) |
| 15:15:24 | × | mbuf quits (~Shakthi@223.178.77.186) (Quit: Leaving) |
| 15:16:22 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 15:16:23 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 15:16:26 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds) |
| 15:17:56 | × | hololeap quits (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
| 15:18:39 | × | doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 272 seconds) |
| 15:19:35 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 15:23:46 | → | komikat joins (~komikat@183.82.154.239) |
| 15:23:58 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 15:26:21 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 256 seconds) |
| 15:29:19 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com) |
| 15:29:19 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host) |
| 15:29:19 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 15:29:22 | <fendor[m]> | did someone else notice that cabal's test-show-detail is ignored/missing in github actions? I thought `--test-show-details=direct` should always show the output of the test-stream... |
| 15:29:28 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 15:32:50 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 15:34:04 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 15:34:28 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 15:34:42 | → | alx741 joins (~alx741@157.100.197.240) |
| 15:34:43 | → | komikat joins (~komikat@183.82.154.239) |
| 15:34:47 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 15:34:59 | → | komikat joins (~komikat@183.82.154.239) |
| 15:37:56 | × | spacenautx quits (~spacenaut@user/spacenautx) (Quit: WeeChat 3.4) |
| 15:39:33 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 15:50:34 | × | max22- quits (~maxime@2a01cb088335980021dd241f5bb447ef.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
| 15:51:14 | → | max22- joins (~maxime@2a01cb088335980027fe609829d061d7.ipv6.abo.wanadoo.fr) |
| 15:57:13 | → | alx741 joins (~alx741@157.100.197.240) |
| 15:57:27 | × | shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Read error: Connection reset by peer) |
| 15:58:56 | → | shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net) |
| 15:59:21 | → | xkuru joins (~xkuru@user/xkuru) |
| 15:59:21 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 15:59:29 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 16:00:12 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds) |
| 16:00:24 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 16:01:10 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:1947:6ff5:3916:a376) (Quit: WeeChat 2.8) |
| 16:02:07 | → | joegard joins (~joegard@179.33.119.167) |
| 16:03:00 | → | zebrag joins (~chris@user/zebrag) |
| 16:04:52 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 16:07:09 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds) |
| 16:09:00 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds) |
| 16:09:19 | → | jespada joins (~jespada@85.255.234.190) |
| 16:10:38 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 252 seconds) |
| 16:12:31 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com) |
| 16:12:31 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host) |
| 16:12:31 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 16:13:28 | × | joegard quits (~joegard@179.33.119.167) (Quit: Client closed) |
| 16:17:29 | → | alx741 joins (~alx741@157.100.197.240) |
| 16:21:21 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 16:21:54 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 16:22:36 | × | bahamas quits (~lucian@84.232.140.52) (Ping timeout: 240 seconds) |
| 16:32:03 | × | LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection) |
| 16:32:18 | → | LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao) |
| 16:37:30 | → | alx741 joins (~alx741@157.100.197.240) |
| 16:38:57 | → | dust_ joins (~dust@2409:4071:4e8b:a664:ed93:7b31:fb42:6202) |
| 16:40:42 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 16:43:00 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:44:01 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 16:45:12 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 16:47:07 | × | komikat quits (~komikat@183.82.154.239) (Read error: Connection reset by peer) |
| 16:47:24 | → | komikat joins (~komikat@183.82.154.239) |
| 16:47:57 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:48:37 | × | Benzi-Junior quits (~BenziJuni@dsl-149-66-61.hive.is) (Ping timeout: 240 seconds) |
| 16:50:26 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 260 seconds) |
| 16:50:37 | × | ph88 quits (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Quit: Leaving) |
| 16:54:12 | → | Vajb joins (~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e) |
| 16:54:23 | <kronicma1> | hey folks, does anyone know what the proper term is for a freer/operational monad where all Return/Pure and Bind/Impure are defined in the same gadt as the instructions? |
| 16:54:23 | <fendor[m]> | I forgot, does dropping support for a ghc version require a major version bump? |
| 16:54:54 | <kronicma1> | rather than defining the instructions in a functor and having FFree/Operationl be polymorphic over functors and having Return:: a -> FFree f a and such |
| 16:57:01 | <ski> | (s/polymorphic/parametric/) |
| 16:57:21 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 16:57:43 | <kronicma1> | oops thanks ski |
| 16:58:52 | <kronicma1> | i've seen the technique a lot in various haskell and ocaml libraries but not sure if it has it's own name besides freer/operational monads (which are slightly different cause of the separation) |
| 16:59:08 | → | alx741 joins (~alx741@181.199.42.143) |
| 16:59:17 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 256 seconds) |
| 16:59:22 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:01:19 | → | lbseale joins (~ep1ctetus@user/ep1ctetus) |
| 17:01:32 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 17:02:27 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 17:03:18 | <ski> | kronicma1 : "deep embedding" of eDSL might be slightly relevant |
| 17:03:35 | × | Vajb quits (~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e) (Ping timeout: 256 seconds) |
| 17:04:07 | <ski> | (note that if you want it to be a monad, then it really should be an abstract data type (so that you can simulate the appropriate quotient of the representation data structure)) |
| 17:05:08 | <ski> | (an alternative is to fuse `Bind' with the primitive operations. or possibly to go CPS, which is close) |
| 17:06:28 | <turlando> | I've a question about style/architecture. I'm implementing a discrete event simulator. Right now I ask the user to implement a function that takes the current state, an incoming event to produce the resulting state. I have a function that folds over the events with the state transition function to produce the final result. So far so good. Now I want the user to be able to schedule or unschedule events from within the state transition function and I'm |
| 17:06:28 | <turlando> | not sure what's the cleanest approach. I'm thinking of changing the state transition function so that it gets an "environment" (state + future events) and produces an "environment", coupling it with functions to manipulate it to schedule events and updating the state. What do you think? |
| 17:07:14 | <lyxia> | kronicma1: isn't that Fix (for example in data-fix) |
| 17:07:38 | <ski> | i think kronicma1 also wanted the recursion baked in |
| 17:09:18 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection) |
| 17:11:25 | → | CATS joins (~apic@brezn2.muc.ccc.de) |
| 17:11:47 | <kronicma1> | lyxia, I don't think that's it |
| 17:11:56 | <kronicma1> | Here's an example of what I'm talking about: https://github.com/s-zeng/haskell-monads-showcase/blob/master/app/DiskFS.hs#L223 |
| 17:12:09 | <c_wraith> | turlando: from the point of view of your interface, isn't that all just a state? |
| 17:12:34 | <c_wraith> | turlando: like, why does it need to change at all to accommodate that use pattern? |
| 17:12:36 | <kronicma1> | You can see how it has the bind and pure baked in rather than the normal operational/ffree way of separating those two off into a different gadt |
| 17:13:17 | <lyxia> | I see, yeah Fix still keeps the "Bind" separate. |
| 17:13:40 | <ski> | BindTryCreateFile :: String -> String -> Simulator a -> Simulator a -- &c. |
| 17:14:16 | <turlando> | c_wraith because the "client" right now has no notion of the event list (which is an opaque type being a priority lists of client-defined events) |
| 17:15:22 | <lyxia> | I don't think it has a dedicated name, IMO it's still the free/operational monad approach even if you don't get a standalone type to give it the same name. |
| 17:15:25 | <ski> | BindTryCreateFile f s c >>= k = BindTryCreateFile f s (c >>= k) |
| 17:15:49 | <ski> | tryCreateFile f s = BindTryCreateFile f s (Return ()) |
| 17:16:21 | <ski> | (s/Return/Pure/, i suppose) |
| 17:16:36 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 17:17:42 | <ski> | but you could also go `newtype Simulator a = MkSimulator ((a -> Action) -> Action)', where `data Action = TryCreateFile String String Action | ...', which is the CPS |
| 17:17:59 | <c_wraith> | turlando: ah. I think I'd need to see a much more detailed breakdown to really understand. But I can think of a few different directions you could go, like using a sort of Has-pattern for the state, or registering clients with an update function that lets them operate only on portions of the total state. There are a lot of other options available as well, depending on details |
| 17:18:25 | <ski> | (you could include a `Result r' alternative in `Action r', and do `forall r. (a -> Action r) -> Action r', if you wanted to be able to export a final result) |
| 17:18:46 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 17:19:22 | → | alx741 joins (~alx741@157.100.197.240) |
| 17:20:05 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 17:21:48 | <turlando> | c_wraith thank you, but there might be a misunderstanding: I call "clients" what is using the interface, namely just a typeclass as of now. So I'm not sure about the registering thing |
| 17:22:16 | turlando | is ski is talking to me |
| 17:22:26 | <turlando> | s/is/is not sure/ |
| 17:23:06 | × | ajb_ quits (~ajb@cupid.whatbox.ca) (Remote host closed the connection) |
| 17:23:35 | <ski> | turlando : i was in the kronicma1 conversation |
| 17:23:49 | ski | calls the `/me' police |
| 17:24:22 | <turlando> | Sorry, the 'Simulator a' caught my attention |
| 17:24:42 | <ski> | nw. it was in the example kronicma1 linked to |
| 17:25:01 | <ski> | (also, i'm not sure what you mean by "unschedule events") |
| 17:25:01 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 17:25:45 | × | ubert1 quits (~Thunderbi@2a02:8109:9880:303c:b499:2e2d:5a8b:934e) (Remote host closed the connection) |
| 17:26:36 | <turlando> | Just removing an event from the future event list, actually I'm not even sure it has an use case, I'm more interested in the scheduling part |
| 17:26:50 | → | doyougnu joins (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) |
| 17:27:22 | <c_wraith> | I think you're making things too complicated by thinking of it as something outside of the state |
| 17:27:34 | <c_wraith> | It is quite literally part of the state |
| 17:28:02 | <ski> | at least it could be |
| 17:28:30 | <turlando> | So you suggest to make it part of non-user-defined state, right? |
| 17:28:45 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 17:28:58 | <c_wraith> | Well, make part of the state user-defined |
| 17:30:04 | <c_wraith> | But really, this whole thing needs code - at least type signatures. That would make the conversation a lot more useful. |
| 17:30:28 | <c_wraith> | Maybe you want a data type like Mealy which closes over local state. |
| 17:30:50 | <c_wraith> | Maybe you want the global state augmented |
| 17:31:20 | <c_wraith> | There are just too many degrees of freedom in text. |
| 17:31:57 | → | econo joins (uid147250@user/econo) |
| 17:33:51 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 17:33:55 | <turlando> | I can show you part of the thing. For instance the simulation interface https://github.com/turlando/discrete-event-simulator/blob/master/src/Simulator.hs#L12-L17 |
| 17:35:31 | → | bahamas joins (~lucian@84.232.140.52) |
| 17:35:39 | <ski> | oh, you also had something called `Simulator' there :) |
| 17:35:47 | <ski> | (er, `Simulation') |
| 17:35:50 | <turlando> | :) |
| 17:36:01 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 17:36:06 | <turlando> | Here is an example "client" https://github.com/turlando/discrete-event-simulator/blob/master/src/Simulator/Example/Server.hs |
| 17:36:30 | <turlando> | (just simulating a single threaded server, again, confusing naming) |
| 17:37:56 | <ski> | oh, `CalendarEvent event' is a type synonym |
| 17:38:10 | <ski> | (or family, i guess ?) |
| 17:38:39 | <ski> | incorrect `Show' instances detected |
| 17:38:46 | <turlando> | Yes, consisting of the discrete time instant and the user-defined event. And they're collected into a Calendar type, which is basically a priority list |
| 17:38:51 | → | Vajb joins (~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e) |
| 17:39:09 | <turlando> | (the calendar is the future event list I mentioned above) |
| 17:39:58 | <turlando> | So yeah, I'm not sure what's the most idiomatic way to implement adding new events from within the transition function or if it's a good idea at all |
| 17:40:42 | <c_wraith> | ok, so after reviewing most of the code there - why is Simulation a class at all? |
| 17:41:39 | <ski> | turlando : do you have multiple instances of `Simulator' ? do you have any operations which are polymorphic over `Simulator' instances ? |
| 17:41:40 | → | alx741 joins (~alx741@157.100.197.240) |
| 17:42:01 | <c_wraith> | yeah, the same question ski has. :) |
| 17:42:10 | <ski> | turlando : anyway, please don't abuse `Show' for custom pretty-printing |
| 17:42:17 | <turlando> | The run function in the Simulator module is polymorphic over Simulation |
| 17:43:03 | <c_wraith> | But why is it a class? |
| 17:43:15 | <turlando> | ski sorry, as you can see it's a quick and dirty thing as of now, I want to fix it when I get the Simulator design right, it just use that show to print the result in a eye-scanning-friendly manner |
| 17:43:15 | × | Vajb quits (~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e) (Ping timeout: 256 seconds) |
| 17:43:25 | <ski> | could `Simulation' be a record ? |
| 17:44:15 | <turlando> | Why do you suggest to change it to a record? |
| 17:44:19 | <ski> | turlando : well, from that response, hopefully you're at least aware that you're not supposed to use `Show' like that (although perhaps not aware of why) |
| 17:44:54 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 17:45:06 | <c_wraith> | because classes tie behavior to types. You can't change behavior without changing types. With a record of functions, you can change behavior without changing types. |
| 17:45:39 | <ski> | (or, if you don't really need multiple instances at all, you could directly use the implementation (or maybe use something like Backpack, which would give another way to swap out different implementations, although at compile-time)) |
| 17:46:03 | <c_wraith> | If you keep going in that direction, you eventually end up with a type kind of like Mealy. Or maybe Fold. |
| 17:46:06 | <ski> | what c_wraith just said can be a pro, as well as a con, depending on what you're after |
| 17:46:24 | → | lavaman joins (~lavaman@98.38.249.169) |
| 17:48:18 | <turlando> | First of all, thank you a lot for the effort you're putting into this. Secondly, I'm not sure I'm understanding everything. Could you elaborate a bit more the "change behavior without changing types" thing please? |
| 17:48:46 | × | dust_ quits (~dust@2409:4071:4e8b:a664:ed93:7b31:fb42:6202) (Quit: Konversation terminated!) |
| 17:50:05 | <turlando> | The Server's State and Event are supposed to have a single behavior over the simulation, so I thought a class would be a good fit so that I also handling the "running" bits externally, but I think I'm missing the point |
| 17:50:19 | <turlando> | s/I also/I also can/ |
| 17:50:28 | <turlando> | s/handling/handle/ |
| 17:50:35 | → | romesrf joins (~romes@44.190.189.46.rev.vodafone.pt) |
| 17:50:57 | × | MajorBiscuit quits (~MajorBisc@c-001-029-040.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds) |
| 17:51:11 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 17:51:24 | <romesrf> | hello, I'm running quickcheck with tasty but I don't get the falsifiable counter example |
| 17:51:35 | <romesrf> | *** Failed! Falsified (after 1 test): |
| 17:51:37 | <romesrf> | Use --quickcheck-replay=805757 to reproduce. |
| 17:52:04 | <romesrf> | I'm using cabal, how would I run the tests and output the counter example? |
| 17:52:44 | <romesrf> | I've also seen --quickcheck-verbose mentioned online -- but I don't know where to pass the flags |
| 17:52:46 | <sclv> | you can run the test executable directly. |
| 17:52:59 | <sclv> | its under dist-newstyle and the "list-bin" command will find it |
| 17:53:58 | × | polyphem quits (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) (Quit: WeeChat 3.4) |
| 17:54:06 | <romesrf> | Just did, but unfortunately I still get no counter example |
| 17:54:49 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds) |
| 17:54:51 | <romesrf> | the test is Gen Bool, and I'm using Test.Tasty.Quickcheck.testProperty |
| 17:55:38 | <sclv> | running it directly lets you pass the flags more easily, is why i suggested |
| 17:55:57 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 17:56:09 | <romesrf> | oh! |
| 17:56:20 | <c_wraith> | turlando: can you imagine ever wanting to transform an existing Simulation? like say... filterEvents :: (event -> Bool) -> Simulation state event result -> Simulation state event result |
| 17:56:23 | <romesrf> | thank you :) |
| 17:56:28 | <sclv> | you can even run it with --help to get a pretty good listing of what the options are |
| 17:56:35 | → | jao joins (~jao@68.235.43.174) |
| 17:56:40 | <romesrf> | sclv: that did it, ty |
| 17:56:51 | <ProfSimm> | Why have both do notation and >> |
| 17:57:15 | <ski> | turlando : if you have `run :: Simulation state event result -> state -> Calendar event -> (result,[Frame state event])', using `data Simulation state event result = MkSimulation {transition :: state -> CalendarEvent event -> state,result :: [Frame state event] -> result}', then you can pass different records of type `Simulation State Event Result' to `run', without having to change to different state, |
| 17:57:21 | <ski> | event, or result types |
| 17:57:31 | <c_wraith> | ProfSimm: sometimes it's easier to not have a lot have a lot of nested infix applications |
| 17:57:55 | → | jlamothe joins (~jlamothe@198.251.61.229) |
| 17:58:04 | <ski> | (whether that would be desirable or not is a different question) |
| 17:58:04 | <ProfSimm> | c_wraith: if we wrap do {} around >> application and replace >> with ; it's the same source |
| 17:58:14 | <c_wraith> | ProfSimm: also, do notation adds sugar for more than (>>) |
| 17:58:30 | <ProfSimm> | Does it |
| 17:58:33 | × | arcadiancomp quits (~anon626@96-91-245-193-static.hfc.comcastbusiness.net) (Quit: Leaving) |
| 17:59:06 | <c_wraith> | :t \f mx my -> do { x <- mx ; y <- my ; f x y } -- ProfSimm |
| 17:59:07 | <lambdabot> | Monad m => (t1 -> t2 -> m b) -> m t1 -> m t2 -> m b |
| 17:59:11 | → | dalek_caan joins (~Thunderbi@109.252.124.86) |
| 17:59:27 | <dolio> | @undo do { x ; y ; z } |
| 17:59:27 | <lambdabot> | x >> y >> z |
| 17:59:44 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 17:59:44 | <ski> | @undo do { x <- mx ; y <- my ; f x y } |
| 17:59:44 | <lambdabot> | mx >>= \ x -> my >>= \ y -> f x y |
| 17:59:54 | <ProfSimm> | Thanks |
| 18:00:06 | <c_wraith> | ProfSimm: also, that assertion isn't true the instant any of your statements involve infix operators with lower precedence than (>>) |
| 18:00:38 | <ski> | @undo do {x <- mx; let {y = ey}; Just z <- mz; f x y z} |
| 18:00:39 | <lambdabot> | mx >>= \ x -> let { y = ey} in mz >>= \ a -> case a of { Just z -> f x y z; _ -> fail ""} |
| 18:01:05 | <turlando> | c_wraith: no, but I might need to run the simulation with different conditions (e.g. terminate at a given Instant) |
| 18:01:38 | <ski> | @undo [f x y z | x <- xs,let y = e,Just z <- mzs,p x y z] |
| 18:01:38 | <lambdabot> | concatMap (\ x -> let { y = e} in concatMap (\ a -> case a of { Just z -> if p x y z then [f x y z] else []; _ -> []}) mzs) xs |
| 18:01:47 | <turlando> | ski: I'm tryinf to figure out the implications of that |
| 18:01:54 | → | alx741 joins (~alx741@157.100.197.240) |
| 18:02:14 | <ski> | turlando : well, you lose the "unique-implementation-per-type", and also the ability to have FDs |
| 18:03:35 | <turlando> | I'm not sure it's a great loss, but from what I imagine, it makes sense to only have a single implementation per (State, Event, Result) triplet. I'm trying to imagine when it might not be the case |
| 18:03:47 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 18:04:26 | → | emf joins (~emf@c-73-97-137-43.hsd1.wa.comcast.net) |
| 18:05:00 | × | alp quits (~alp@user/alp) (Ping timeout: 240 seconds) |
| 18:05:52 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 18:07:04 | <ski> | i guess we're still also wondering if you have multiple instances of `Simulation' in mind at all |
| 18:08:32 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 18:09:26 | <turlando> | ski: yes in the sense that in the same codebase I might implement different simulations and no in the sense that usually you're using a single simulation at any given moment |
| 18:09:33 | <turlando> | Not sure if it answers the question though |
| 18:10:35 | <ski> | and you'd want to share code (more than `run') that's polymorphic over that ? |
| 18:11:35 | × | bahamas quits (~lucian@84.232.140.52) (Ping timeout: 256 seconds) |
| 18:14:04 | ← | dalek_caan parts (~Thunderbi@109.252.124.86) () |
| 18:14:33 | <turlando> | Right now as an example I can definitely think of another function: runUntil that takes an upper bound Instant |
| 18:14:40 | × | zeenk quits (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!) |
| 18:15:25 | <turlando> | (I'm not trying to justify my design choises, I'm trying to understand what is wrong and why) |
| 18:17:59 | → | Akiva joins (~Akiva@user/Akiva) |
| 18:18:51 | <ski> | well .. i'm not sure there needs to be something wrong with your design. however, newbies to type classes (expecially if they have prior exposure to OO) tend to often misuse (and overuse) them |
| 18:19:24 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 18:19:48 | <ski> | @where existential-antipattern |
| 18:19:49 | <lambdabot> | "Haskell Antipattern: Existential Typeclass" by Luke Palmer at <http://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/> |
| 18:20:07 | <ski> | is somewhat related (though a more advanced example of misuse/overuse) |
| 18:20:18 | <ski> | (not that there's anything wrong with existentials, per se) |
| 18:21:28 | → | analognoise joins (~analognoi@185.202.221.26) |
| 18:23:21 | <turlando> | Thank you a lot ski, I will read it now. Do you think that choosing typelcasses over records can have implications on how I can implement the missing feature I was talking about before, namely scheduling new events from within the simulation? |
| 18:24:27 | → | alx741 joins (~alx741@157.100.197.240) |
| 18:24:45 | <dolio> | Personally, I think that article is over-cited. But I haven't been paying close attention to what's being done in this case. |
| 18:25:43 | → | cfricke joins (~cfricke@user/cfricke) |
| 18:26:56 | <ehammarstrom> | ski: Regarding the ((g . f) . _) = (g . _) . (f . _) earlier, a haskell program that reduces both of them to the same type (without executing it) isn't that a proof of some equality? Or would I have to explicitly have an "equality"-check in the type level? Here's the paste for reference: https://paste.tomsmeding.com/Fa1LgtV7 |
| 18:27:21 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 18:27:57 | → | alx741 joins (~alx741@157.100.197.240) |
| 18:30:41 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 18:31:02 | → | deadmarshal joins (~deadmarsh@95.38.119.78) |
| 18:32:04 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 18:32:22 | → | Guest85 joins (~Guest85@134.101.5.46) |
| 18:32:25 | × | Guest85 quits (~Guest85@134.101.5.46) (Write error: Broken pipe) |
| 18:33:23 | → | Midjak joins (~Midjak@82.66.147.146) |
| 18:34:04 | <ski> | turlando : the existential thing was mostly an aside. you're not doing anything existential, that i can see |
| 18:34:45 | <ski> | turlando : it's still unclear to me what you want from this new event scheduling, how you want to structure it |
| 18:35:15 | → | Guest68 joins (~Guest68@134.101.5.46) |
| 18:35:37 | × | deadmarshal quits (~deadmarsh@95.38.119.78) (Ping timeout: 256 seconds) |
| 18:36:15 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 272 seconds) |
| 18:37:00 | → | alp joins (~alp@user/alp) |
| 18:37:11 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 18:37:25 | <ski> | ehammarstrom : `False' and `True' have the same type, but are not equal. perhaps you could argue something from free theorems / parametricity, though. however, your `hb' is irrelevant (a misunderstanding) |
| 18:39:10 | <turlando> | ski: honestly, I have no idea other than what I proposed before (changing the state transition function so that it gets an "environment" (state + future events) and produces an "environment", coupling it with functions to manipulate it to schedule events and updating the state) or changing the state transition function adding another parameter (the calendar) and making it return (newstate, newcalendar) |
| 18:41:48 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 18:42:40 | → | vysn joins (~vysn@user/vysn) |
| 18:43:18 | <ski> | where do these "future events" come from ? |
| 18:43:22 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 18:44:23 | <turlando> | ski: either from a user defined list or from a randomly generated one, in both cases they end up in the Calendar type |
| 18:45:30 | <ski> | but they could also come from transitions on earlier events scheduling more events ? |
| 18:46:11 | × | nek0 quits (~nek0@nek0.eu) (Quit: The Lounge - https://thelounge.chat) |
| 18:46:11 | → | deadmarshal joins (~deadmarsh@95.38.119.78) |
| 18:46:12 | <ski> | do you want the transition for an event to be able to see other (presumably only future ?) events ? change (e.g. remove) them ? |
| 18:46:57 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:283e:efa7:e0c6:e848) |
| 18:47:33 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 18:48:06 | × | jao quits (~jao@68.235.43.174) (Remote host closed the connection) |
| 18:48:45 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 18:49:00 | → | jao joins (~jao@68.235.43.174) |
| 18:49:02 | → | alx741 joins (~alx741@157.100.197.240) |
| 18:49:17 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds) |
| 18:51:35 | <turlando> | ski: Sorry for not mentioning it in my previous message, I was just referring to the current state of the code. Yes, an event might be depending on another event, and specifically the happening of a certain event might cause the scheduling of another event in the future. E.g. a system detects a failing component and schedules the replacement of it in the future. Regarding your last question: I'm not sure if I want the transition to be able to see future |
| 18:51:35 | <turlando> | events; it might be handy but I don't have an use case for it right now. Regarding removing events: initially I didn't want to permit it, but since I allow to add new events, it might make sense to allow the removal too |
| 18:51:51 | → | norg[m] joins (~norgmatri@2001:470:69fc:105::1:c809) |
| 18:52:17 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 18:54:51 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 18:57:31 | <maerwald> | anyone ever used Database.PostgreSQL.Simple.Notification successfully? |
| 18:57:47 | <ski> | it seems to me it's probably be easier to reason about the event scheduling, if they can't see (or even change/retract) other scheduled events |
| 18:58:02 | × | euandreh quits (~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1) (Ping timeout: 240 seconds) |
| 18:58:24 | <ski> | (just because you can add doesn't mean it would have to make sense to remove, imho) |
| 18:58:36 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 18:58:48 | ski | was reminded of simulators for VHDL |
| 18:59:25 | × | lbseale quits (~ep1ctetus@user/ep1ctetus) (Ping timeout: 256 seconds) |
| 18:59:27 | <turlando> | ski: I just noticed another problem: if the scheduling of a dependent event is randomic, as in I might need to sample from a random distribution, the transition function might depend on the Random monad (?), and my signature no longer works |
| 19:00:04 | × | jespada quits (~jespada@85.255.234.190) (Read error: Connection reset by peer) |
| 19:00:34 | → | dextaa_ joins (~dextaa@user/dextaa) |
| 19:01:31 | → | euandreh joins (~euandreh@2804:14c:33:9fe5:fb55:f4b:9349:d06d) |
| 19:01:35 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 272 seconds) |
| 19:06:47 | × | doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 256 seconds) |
| 19:06:50 | <ski> | (i guess i was thinking, "an event might be depending on another event", depending in the sense of another event scheduling it, or in the sense of the transition of the first event depending on whether it can see the other event being scheduled) |
| 19:07:27 | <ski> | .. so, i'm still not sure what you intend by "dependent event" |
| 19:07:41 | → | polyphem joins (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) |
| 19:08:28 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 19:09:03 | → | alx741 joins (~alx741@157.100.197.240) |
| 19:09:29 | → | nek0 joins (~nek0@nek0.eu) |
| 19:11:10 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 19:15:05 | × | Ranhir quits (~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/) |
| 19:16:04 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 19:16:09 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds) |
| 19:17:30 | → | vicfred joins (~vicfred@user/vicfred) |
| 19:18:34 | → | Codaraxis joins (~Codaraxis@user/codaraxis) |
| 19:20:39 | ← | pokhu parts (~rishi@103.206.114.112) () |
| 19:21:48 | × | deadmarshal quits (~deadmarsh@95.38.119.78) (Ping timeout: 240 seconds) |
| 19:24:38 | → | bahamas joins (~lucian@84.232.140.52) |
| 19:27:44 | <turlando> | As you said ski: "depending in the sense of another event scheduling it" |
| 19:28:00 | → | _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl) |
| 19:29:02 | → | coot joins (~coot@213.134.190.95) |
| 19:29:27 | × | bahamas quits (~lucian@84.232.140.52) (Ping timeout: 272 seconds) |
| 19:29:48 | <Zemyla> | turlando: Can you use the IO monad and a RandomGen IOVar? |
| 19:31:22 | <turlando> | Zemyla why an IOVar? |
| 19:34:27 | × | Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection) |
| 19:34:32 | → | alx741 joins (~alx741@181.199.42.143) |
| 19:34:42 | → | Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
| 19:35:26 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 19:35:26 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 19:35:26 | → | wroathe joins (~wroathe@user/wroathe) |
| 19:40:18 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 19:41:11 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 19:42:51 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 245 seconds) |
| 19:45:14 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 19:46:27 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
| 19:46:31 | Lord_of_Life_ | is now known as Lord_of_Life |
| 19:47:42 | × | fendor_ quits (~fendor@178.165.167.221.wireless.dyn.drei.com) (Remote host closed the connection) |
| 19:50:14 | × | jm_jj quits (~jmjj@mobile-user-c3a5cc-243.dhcp.inet.fi) (Quit: Leaving) |
| 19:53:56 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 19:56:05 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 256 seconds) |
| 19:56:37 | → | whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com) |
| 19:57:59 | → | alx741 joins (~alx741@157.100.197.240) |
| 20:01:01 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 20:03:24 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 20:04:07 | <ProfSimm> | Isn't it a flaw to allow a Map to be converted toList, when it's not a list |
| 20:04:24 | <ProfSimm> | Makes all types kinda blurry in terms of semantics |
| 20:04:27 | <dolio> | Why? |
| 20:04:30 | → | bahamas joins (~lucian@84.232.140.52) |
| 20:04:42 | <ProfSimm> | dolio: well what's the order of items in a map |
| 20:05:06 | <dolio> | For Data.Map, it's the ordering on the keys. |
| 20:05:26 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 20:05:33 | × | juhp quits (~juhp@128.106.188.82) (Ping timeout: 272 seconds) |
| 20:05:51 | <ProfSimm> | dolio: what is that ordering |
| 20:05:55 | <monochrom> | Is it also a flaw to convert Maybe to list? |
| 20:06:15 | <ProfSimm> | monochrom: well it is a list |
| 20:06:18 | <dolio> | It's what's defined in the Ord type class that most Data.Map functions depend on. |
| 20:07:13 | → | juhp joins (~juhp@128.106.188.82) |
| 20:07:35 | <byorgey> | ProfSimm: Data.Map is an ordered map, just like e.g. TreeMap in Java, if you're familiar with that |
| 20:07:42 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 20:08:05 | <ProfSimm> | So what is an unordered map |
| 20:08:28 | <ProfSimm> | I mean OMap is ordered, I thought. |
| 20:08:31 | <ProfSimm> | Data.Map.Ordered |
| 20:08:35 | <byorgey> | I would have some sympathy for the argument that you should not be able to convert e.g. a HashMap to a list, though in practice I think it is fine as long as the documentation says "you cannot rely on the order of the elements in the resulting list" |
| 20:09:03 | <ProfSimm> | byorgey: "you should not rely on [feature that exists]" famous last words :P |
| 20:09:11 | <byorgey> | ProfSimm: I know =) |
| 20:09:21 | × | bahamas quits (~lucian@84.232.140.52) (Ping timeout: 272 seconds) |
| 20:09:23 | <byorgey> | I hadn't heard of Data.Map.Ordered before, but it looks like it's keeping track of the order *in which things were inserted* |
| 20:09:35 | <ProfSimm> | byorgey: yes, well it's some order I guess |
| 20:09:40 | <monochrom> | I haven't seen anyone relying on HashMap's toList order. |
| 20:09:50 | <ProfSimm> | monochrom: it's not always intentional |
| 20:10:24 | <ProfSimm> | monochrom: imagine you map the keys to something that creates duplicates and you overwrite on name collision. So now you accidentally depend on the order of toList |
| 20:10:25 | <monochrom> | No, I haven't seen anyone doing that accidentally either. |
| 20:10:37 | <ProfSimm> | Well I just provided an example |
| 20:11:07 | <ProfSimm> | monochrom: in JS, object iteration had no specific order. |
| 20:11:21 | <ProfSimm> | monochrom: no one therefore relied on it and all was fine. |
| 20:11:40 | <ProfSimm> | monochrom: Just kidding, it caused bunch of hard to debug issues in bunch of software, so the spec was updated to maintain specific order |
| 20:12:09 | <monochrom> | I'm talking about the Haskell community, not the JS community. |
| 20:12:39 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 20:12:56 | <dolio> | What does the example even mean? |
| 20:12:58 | <ProfSimm> | Sure, but let's not pretend Haskellers are some kind of infallible beings who at every step of their program think "wait, this came from a map like 10 000 lines ago, so I must ensure this code is order invariant" |
| 20:13:10 | <maerwald> | people rely on bugs. All the time |
| 20:13:21 | <ProfSimm> | Also. |
| 20:13:37 | <maerwald> | Software doesn't easily allow to distinguish bugs and features |
| 20:13:40 | <ProfSimm> | monochrom: if there was no specific order in toList, it'd mean it's not deterministic |
| 20:13:51 | <ProfSimm> | maerwald: absolutely |
| 20:14:03 | <polyphem> | is Maps toList a natural transformation as a mapping between Functors Map k v -> [(k,v)] ? It also not only transforms the Functor (Map v) to [] but also the contents v to (k,v) ? |
| 20:14:19 | <maerwald> | and in Haskell we have this odd notion of API that relates mainly to *types* and not *behavior* (or even *laws*) |
| 20:14:52 | <maerwald> | so your bugfix is PVP compliant, but you still cause a backend on the other end of the world to crash |
| 20:16:30 | → | x88x88x joins (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) |
| 20:17:07 | <geekosaur> | https://xkcd.com/1172/ |
| 20:18:14 | → | alx741 joins (~alx741@157.100.197.240) |
| 20:19:06 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds) |
| 20:19:08 | <byorgey> | polyphem: Data.Map.toList is a natural transformation from Map k -> ([] . (k,)), yes (I know '.' is not actually legal syntax for composition of type constructors) |
| 20:19:20 | <byorgey> | polyphem: I don't know what your second question means though |
| 20:19:32 | → | kenran joins (~kenran@200116b82b49e8006646f20137f4ed5b.dip.versatel-1u1.de) |
| 20:20:51 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 20:21:41 | <monochrom> | I think the second question is answered by "Map k -> ([] . (k,))" too. |
| 20:21:42 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 20:22:37 | <polyphem> | byorgey: ok , nvm , i was wondering if its still a natural composition if it also modifies the type inside the functor , but you restated it as : Compose [] (k,) |
| 20:23:10 | <polyphem> | s/natural composition/natural transformation/ |
| 20:25:52 | <monochrom> | BTW I had been procrastinating learning horizontal composition of two natural transformations until a few days ago. I had not felt like I needed to know. |
| 20:26:42 | <monochrom> | Then a few days ago I was learning monad morphisms. Naturally, a natural transformation that furthermore "preserves return" and "preserves join". |
| 20:27:14 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 20:27:35 | <monochrom> | I finally realized that just to state "preserves join" I need the horizontal composition of join and join. :) |
| 20:27:45 | <byorgey> | =D |
| 20:29:19 | <polyphem> | monochrom: the tongue keeps playing where the tooth hurts :) |
| 20:29:43 | <ski> | @type \fk fv -> M.mapKeysMonotonic fk . M.map fv |
| 20:29:44 | <lambdabot> | (k1 -> k2) -> (a1 -> a2) -> M.Map k1 a1 -> M.Map k2 a2 |
| 20:29:48 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 20:29:48 | <ski> | @type \fk fv -> M.mapKeysWith (<>) fk . M.map fv |
| 20:29:50 | <lambdabot> | (Ord k2, Semigroup a1) => (k1 -> k2) -> (a2 -> a1) -> M.Map k1 a2 -> M.Map k2 a1 |
| 20:29:53 | <ski> | @type \ks fk fv m -> M.fromList [(k,fv v) | k <- ks,Just v <- [m M.!? (fk k)]] |
| 20:29:54 | <lambdabot> | (Ord k1, Ord k2) => [k1] -> (k1 -> k2) -> (t -> a) -> M.Map k2 t -> M.Map k1 a |
| 20:30:02 | × | romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 240 seconds) |
| 20:30:17 | → | Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) |
| 20:30:41 | <polyphem> | ski: barely not flooding :) |
| 20:30:47 | → | Pickchea joins (~private@user/pickchea) |
| 20:31:01 | ski | glances around nervously |
| 20:31:50 | ski | still can never recall which is the horizontal and which is the vertical one |
| 20:32:13 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 20:33:32 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 20:34:11 | → | Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) |
| 20:35:19 | <monochrom> | Heh a lot of "left, right", "horizontal, vertical" namings in category theory were very accidental and arbitrary. |
| 20:35:54 | <monochrom> | Comparing to particle physics. The "top" quark is much heavier than the "bottom" quark. Ah, no wonder why they are so unstable. >:) |
| 20:36:03 | <monochrom> | s/Comparing/Comparable/ |
| 20:36:49 | <ski> | ok, "vertical composition" is "composition", and "horizontal composition" is "lifted composition" (i'm sure i'll quickly forget this again) |
| 20:36:49 | × | kuribas quits (~user@ptr-25vy0iagvdrvz4nz7gs.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 20:37:04 | <ski> | (yea, i don't like the "left adjoint","right adjoint" naming, either) |
| 20:37:55 | <byorgey> | I just remember the picture with two parallel morphisms going from left to right, and a natural transformation as an arrow going from the top morphism to the bottom. Then vertical and horizontal composition correspond to putting those cells next to each other vertically or horizontally. |
| 20:38:05 | <byorgey> | Of course that's yet another thing to remember, but somehow I find it easier |
| 20:38:22 | <monochrom> | Left adjoint is at least mnemonicable by "Hom(F x, y)" ooohhh F is on the left. |
| 20:38:29 | → | alx741 joins (~alx741@157.100.197.240) |
| 20:38:37 | <monochrom> | Now, left and right Kan extensions, I still haven't figured out how. |
| 20:38:58 | <ski> | except if you get into the habit of writing `A <---< F B' |
| 20:39:11 | <monochrom> | Yikes haha. |
| 20:39:17 | <ski> | (i do that, fairly often) |
| 20:39:27 | × | gdd quits (~gdd@129.199.146.230) (Quit: WeeChat 3.3) |
| 20:39:42 | <monochrom> | How would you like "source adjoint" and "target adjoint"? |
| 20:39:58 | <ski> | might work |
| 20:40:21 | <ski> | (i'm already using "pre-inverse" and "post-inverse", rather that "left-inverse" and "right-inverse") |
| 20:40:24 | <polyphem> | ski: isn't your third function Profunctor dimap |
| 20:40:35 | <ski> | polyphem : something like that |
| 20:40:50 | → | spacenautx joins (~spacenaut@user/spacenautx) |
| 20:41:10 | <ski> | polyphem : my lambdabot queries were basically questions "do you want co- or contra- variance in the keys ? are the key types ordered ? are the value types semigroups ?" |
| 20:41:17 | × | Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds) |
| 20:41:26 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 20:42:11 | × | Batzy quits (~quassel@user/batzy) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 20:42:35 | → | Batzy joins (~quassel@user/batzy) |
| 20:42:36 | × | ccntrq quits (~Thunderbi@2a01:e34:eccb:b060:8793:de70:3992:9c12) (Ping timeout: 240 seconds) |
| 20:42:58 | <ski> | ("are the key types ordered ?" implicitly suggests "are the key mappings order morphisms ?") |
| 20:43:01 | → | romesrf joins (~romes@44.190.189.46.rev.vodafone.pt) |
| 20:47:03 | <ProfSimm> | Can I make a map which is NOT iterable by design |
| 20:47:40 | → | gdd joins (~gdd@129.199.146.230) |
| 20:47:51 | <monochrom> | Sure. |
| 20:48:00 | <ski> | monochrom : right Kan extension is `G . F >---> H' iff `G >---> H <- F' (or `H / F'). left Kan extension is `H >---> G . F' iff `H /| F >---> G'. so, they're right and left adjoints of `(. F)' (precomposition) |
| 20:49:23 | <monochrom> | Ah, yeah, I need to spend more time on that connection. |
| 20:49:40 | <ski> | (or with more traditional notation, `Ran_F H' resp. `Lan_F H') |
| 20:49:41 | → | pavonia joins (~user@user/siracusa) |
| 20:53:03 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 272 seconds) |
| 20:55:00 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 252 seconds) |
| 20:57:20 | <ski> | given `phi :: forall a. G (F a) -> H a', we (via CoYoneda) get `stage phi :: forall b. G b -> Ran F H b', where `Ran F H b' is `forall a. (b -> F a) -> H a' |
| 20:58:07 | <ski> | similarly, given `psi :: forall a. H a -> G (F a)', we (via Yoneda) get `costage psi :: forall b. Lan F H b -> G b', where `Lan F H b' is `exists a. (H a,F a -> b)' |
| 20:58:30 | → | alx741 joins (~alx741@181.199.42.143) |
| 21:00:47 | × | Ariakenom_ quits (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Quit: Leaving) |
| 21:02:16 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 21:02:19 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4) |
| 21:02:46 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 21:02:59 | → | alx741 joins (~alx741@181.199.42.143) |
| 21:04:07 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 21:04:50 | → | Flonk8 joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 21:06:20 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 21:06:21 | × | Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 272 seconds) |
| 21:06:21 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Ping timeout: 256 seconds) |
| 21:06:57 | → | Maxdamantus joins (~Maxdamant@user/maxdamantus) |
| 21:07:14 | → | vorpuni joins (~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) |
| 21:07:27 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 21:07:29 | Flonk8 | is now known as Flonk |
| 21:10:51 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4) |
| 21:12:53 | × | _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
| 21:13:09 | <EvanR> | ProfSimm, I assume by design means implementation rather than interface. Since you can present whatever interface to your ADT |
| 21:13:09 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 21:13:45 | <EvanR> | to construct something intentionally omitting a feature seems unusual though xD |
| 21:19:24 | → | acidjnk joins (~acidjnk@p200300d0c71f74276499fb418a282b02.dip0.t-ipconnect.de) |
| 21:20:49 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 21:23:19 | → | alx741 joins (~alx741@157.100.197.240) |
| 21:24:24 | × | natechan quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
| 21:24:25 | → | v0rpun1 joins (~pvorp@2001:861:3881:c690:f6b3:6910:f82d:9617) |
| 21:25:24 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 21:26:06 | → | Slerba joins (~Slerba@85-76-49-165-nat.elisa-mobile.fi) |
| 21:26:08 | → | jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net) |
| 21:26:12 | → | natechan joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 21:26:25 | ← | Slerba parts (~Slerba@85-76-49-165-nat.elisa-mobile.fi) () |
| 21:26:28 | × | Batzy quits (~quassel@user/batzy) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 21:26:30 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 21:26:30 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 21:26:30 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:27:35 | → | Batzy joins (~quassel@user/batzy) |
| 21:27:45 | × | lottaquestions_ quits (~nick@2607:fa49:5041:a200:11a4:6cdd:1796:d5ed) (Quit: Konversation terminated!) |
| 21:28:02 | → | lottaquestions_ joins (~nick@2607:fa49:5041:a200:77ff:49ec:2b9c:10c4) |
| 21:29:02 | → | ajb joins (~ajb@cupid.whatbox.ca) |
| 21:29:35 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 21:29:48 | × | alp quits (~alp@user/alp) (Ping timeout: 240 seconds) |
| 21:30:54 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 21:35:49 | × | benin quits (~benin@59.92.239.104) (Quit: Ping timeout (120 seconds)) |
| 21:35:50 | <freeman42x[m]> | any good solution for `data X = A { x :: Int } | B { x :: Int, y :: Char }` and running `y (A 3)` compiling but throwing at runtime? I was told to avoid using records at all and write manual lenses for them but that seems a bad compromise |
| 21:36:09 | → | benin joins (~benin@59.92.239.104) |
| 21:40:08 | → | zeenk joins (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) |
| 21:40:57 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 21:46:47 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 21:46:47 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 21:46:47 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:46:52 | × | merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 21:47:59 | <dolio> | Can't the appropriate optics be generated? Lens for x, traversal for y. |
| 21:48:48 | → | alx741 joins (~alx741@157.100.197.240) |
| 21:49:48 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds) |
| 21:50:58 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
| 21:53:20 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 21:55:07 | <ski> | newtype Map k v = MkMap (k -> Maybe v) -- not iterable |
| 21:55:45 | <ski> | (cue covariant vs. contravariant powerset functor) |
| 21:57:39 | × | Katarushisu quits (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Ping timeout: 250 seconds) |
| 21:58:12 | × | jstolarek quits (~jstolarek@staticline-31-183-182-85.toya.net.pl) (Ping timeout: 256 seconds) |
| 21:58:26 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:00:11 | × | jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Remote host closed the connection) |
| 22:00:49 | → | lavaman joins (~lavaman@98.38.249.169) |
| 22:04:10 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:04:51 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 22:05:51 | × | Megant quits (megant@user/megant) (Ping timeout: 256 seconds) |
| 22:07:17 | → | Megant joins (megant@user/megant) |
| 22:07:54 | <freeman42x[m]> | <dolio> "Can't the appropriate optics..." <- to generate them you need to keep the records, doesn't it? and keeping the records allows others to misuse them in the way mentioned |
| 22:08:15 | → | jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net) |
| 22:09:58 | → | alx741 joins (~alx741@157.100.197.240) |
| 22:10:17 | × | kenran quits (~kenran@200116b82b49e8006646f20137f4ed5b.dip.versatel-1u1.de) (Quit: WeeChat info:version) |
| 22:13:32 | <dolio> | Turn off the field accessors and use the optics. |
| 22:13:55 | → | alp joins (~alp@user/alp) |
| 22:14:17 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 22:16:02 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 22:18:58 | → | jespada joins (~jespada@85.255.234.190) |
| 22:19:34 | <freeman42x[m]> | <dolio> "Turn off the field accessors and..." <- how do you achieve that? |
| 22:21:52 | <dolio> | NoFieldSelectors language setting, I think. |
| 22:23:25 | → | cynomys joins (~cynomys@user/cynomys) |
| 22:26:08 | → | Guest|86 joins (~Guest|86@136.228.217.112) |
| 22:26:41 | × | Guest|86 quits (~Guest|86@136.228.217.112) (Client Quit) |
| 22:28:32 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 22:30:52 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 22:31:57 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds) |
| 22:32:29 | → | alx741 joins (~alx741@157.100.197.240) |
| 22:33:20 | × | komikat quits (~komikat@183.82.154.239) (Remote host closed the connection) |
| 22:34:01 | → | komikat joins (~komikat@183.82.154.239) |
| 22:35:01 | × | spacenautx quits (~spacenaut@user/spacenautx) (Ping timeout: 272 seconds) |
| 22:36:35 | → | spacenautx joins (~spacenaut@user/spacenautx) |
| 22:36:46 | → | Katarushisu joins (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) |
| 22:37:50 | × | v0rpun1 quits (~pvorp@2001:861:3881:c690:f6b3:6910:f82d:9617) (Remote host closed the connection) |
| 22:38:17 | <gentauro> | how can I refactor this? `((\foo -> concat <$> foo) . mergeValues . concat)`. The `foo` part … |
| 22:38:23 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
| 22:38:46 | <dolio> | fmap concat . mergeValues . concat |
| 22:38:56 | <ski> | dang, beat me to it :) |
| 22:39:14 | <monochrom> | I was dense and thought of section syntax only. |
| 22:39:43 | <ski> | gentauro> :t mergeValues |
| 22:40:02 | <gentauro> | dolio: thx |
| 22:40:18 | × | cynomys quits (~cynomys@user/cynomys) (Quit: Lost terminal) |
| 22:40:43 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 22:41:07 | → | cynomys joins (~cynomys@user/cynomys) |
| 22:41:38 | → | alt-romes joins (~romes@44.190.189.46.rev.vodafone.pt) |
| 22:42:37 | × | komikat quits (~komikat@183.82.154.239) (Ping timeout: 272 seconds) |
| 22:42:38 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection) |
| 22:42:41 | × | spacenautx quits (~spacenaut@user/spacenautx) (Ping timeout: 256 seconds) |
| 22:44:06 | × | romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds) |
| 22:44:28 | → | spacenautx joins (~spacenaut@user/spacenautx) |
| 22:44:36 | × | dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection) |
| 22:45:03 | × | spacenautx quits (~spacenaut@user/spacenautx) (Max SendQ exceeded) |
| 22:45:16 | <freeman42x[m]> | <dolio> "NoFieldSelectors language..." <- that extension seems to have been merged but in the proposal it says: "Enabling this extension will beak Template Haskell which assumes the presence of a field selector." won't that prevent generating lenses via TH? |
| 22:45:43 | <dolio> | Dunno. |
| 22:47:29 | <dolio> | In the past, when you generate lenses, the field names would be like `_field`. And then the fact that someone might be able to write something that throws an exception by using the weird field accessors isn't really worth worrying about. |
| 22:47:42 | <dvdrw> | it sounds like it'll lift your code into undefined behaviour :) |
| 22:47:45 | → | komikat joins (~komikat@183.82.154.239) |
| 22:48:00 | <gentauro> | ski: I will soon release the code as "open source" so you will have plenty of time to "review it" (which will be very much appreciated) |
| 22:48:03 | <gentauro> | :) |
| 22:48:10 | <geekosaur> | doesn't that extension go along with others that mroe or less replace generating accessors via TH? |
| 22:48:19 | × | jespada quits (~jespada@85.255.234.190) (Read error: Connection reset by peer) |
| 22:48:20 | × | rtsn quits (~nstr@user/rtsn) (Quit: Lost terminal) |
| 22:49:10 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Read error: Connection reset by peer) |
| 22:49:13 | <ski> | gentauro : just wondering if one or both of those `concat's could be elided |
| 22:49:14 | → | bontaq` joins (~user@ool-45779fe5.dyn.optonline.net) |
| 22:50:54 | → | spacenautx joins (~spacenaut@user/spacenautx) |
| 22:53:18 | <gentauro> | ski: the complete line is: `fmap concat . mergeValues . concat <$> mapM (mapConcurrently aux) (chunksOf chk mids)`. I was guessing that I perhaps could use some `concatMap`? |
| 22:58:08 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 22:58:36 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 22:59:07 | → | alx741 joins (~alx741@157.100.197.240) |
| 22:59:29 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 22:59:51 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 23:00:21 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 272 seconds) |
| 23:02:53 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 23:03:23 | <ski> | well, there is some |
| 23:03:25 | <ski> | @hoogle concatMapM |
| 23:03:26 | <lambdabot> | Data.Vector.Fusion.Bundle.Monadic concatMapM :: Monad m => (a -> m (Bundle m v b)) -> Bundle m v a -> Bundle m v b |
| 23:03:26 | <lambdabot> | Data.Vector.Fusion.Stream.Monadic concatMapM :: Monad m => (a -> m (Stream m b)) -> Stream m a -> Stream m b |
| 23:03:26 | <lambdabot> | Data.Conduit.Combinators concatMapM :: (Monad m, MonoFoldable mono) => (a -> m mono) -> ConduitT a (Element mono) m () |
| 23:03:31 | <ski> | @hoogle+ |
| 23:03:31 | <lambdabot> | Data.Conduit.List concatMapM :: Monad m => (a -> m [b]) -> ConduitT a b m () |
| 23:03:32 | <lambdabot> | Control.Monad.Extra concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b] |
| 23:03:32 | <lambdabot> | Extra concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b] |
| 23:03:46 | <ski> | (apparently also `GHC.Utils.Monad') |
| 23:04:30 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 23:06:01 | <ski> | (and apparently the one in `Control.Monad.Extra' is not simply `(liftM concat .) . mapM', but is a `foldr' that checks if the current list (to prepend) is empty, avoiding the `liftM' in that case) |
| 23:06:17 | <ski> | but i was wondering if you could fuse the other `concat' with `mergeValues', possibly |
| 23:14:45 | → | yauhsien_ joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) |
| 23:15:07 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:16:49 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) |
| 23:17:34 | → | Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) |
| 23:17:42 | → | dons joins (~dons@user/dons) |
| 23:19:14 | × | yauhsien_ quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 23:20:44 | → | alx741 joins (~alx741@181.199.42.143) |
| 23:27:28 | × | alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
| 23:28:13 | → | alx741 joins (~alx741@157.100.197.240) |
| 23:28:16 | × | acidjnk quits (~acidjnk@p200300d0c71f74276499fb418a282b02.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 23:30:41 | <dons> | moin moin |
| 23:30:51 | → | CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 23:31:10 | <Zemyla> | I wish IntSet had a complement command. |
| 23:33:02 | <byorgey> | hey dons |
| 23:33:18 | <dsal> | Zemyla: You want a set of all integers? |
| 23:33:25 | <byorgey> | Zemyla: you mean e.g. if it stored a Bool saying whether it was complemented or not? |
| 23:33:42 | <byorgey> | I assume you would not want to literally store an IntSet of all Int values not in the original set |
| 23:33:46 | <Zemyla> | No, I was thinking about storing the members of the set as a list of intervals. |
| 23:34:03 | <byorgey> | Oh, a list of intervals, I see |
| 23:34:46 | <byorgey> | That would be nifty. Getting the details right re: union, intersection, etc. would be the tricky part I assume. But you should write it. =) |
| 23:35:46 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
| 23:35:46 | × | Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 245 seconds) |
| 23:36:31 | × | cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds) |
| 23:37:09 | <Zemyla> | Also, I should make Text.Parser.Permutation.Permutation an Applicative. |
| 23:38:57 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection) |
| 23:39:00 | × | Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Ping timeout: 240 seconds) |
| 23:39:42 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:42:20 | × | juhp quits (~juhp@128.106.188.82) (Quit: juhp) |
| 23:42:34 | → | juhp joins (~juhp@128.106.188.82) |
| 23:43:01 | → | merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
| 23:43:51 | × | spacenautx quits (~spacenaut@user/spacenautx) (Quit: WeeChat 3.4) |
| 23:44:22 | × | jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 260 seconds) |
| 23:45:36 | → | jgeerds joins (~jgeerds@d53600c5.access.ecotel.net) |
| 23:47:51 | × | alt-romes quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds) |
| 23:48:42 | → | alt-romes joins (~romes@44.190.189.46.rev.vodafone.pt) |
| 23:49:20 | × | cosimone quits (~user@93-34-132-33.ip49.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1)) |
| 23:53:16 | × | alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 23:53:44 | → | alx741 joins (~alx741@157.100.197.240) |
| 23:57:26 | × | zeenk quits (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!) |
| 23:58:17 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 240 seconds) |
| 23:58:38 | × | alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
All times are in UTC on 2022-02-22.