Logs on 2023-02-28 (liberachat/#haskell)
| 00:01:27 | <monochrom> | AWizzArd: Something about parametricity or Yoneda's lemma says that they do the same thing, too! |
| 00:02:12 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) |
| 00:03:38 | × | lxi quits (~quassel@2a02:2f08:4d1c:400:8170:232:8e57:afe9) (Remote host closed the connection) |
| 00:04:10 | × | zeenk quits (~zeenk@2a02:2f04:a20d:f900::7fe) (Quit: Konversation terminated!) |
| 00:04:52 | × | lyle quits (~lyle@104.246.145.237) (Quit: WeeChat 3.8) |
| 00:06:41 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) (Ping timeout: 255 seconds) |
| 00:08:55 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 00:09:43 | → | mauke_ joins (~mauke@user/mauke) |
| 00:11:28 | × | mauke quits (~mauke@user/mauke) (Ping timeout: 268 seconds) |
| 00:11:28 | mauke_ | is now known as mauke |
| 00:15:04 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 00:18:25 | → | dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) |
| 00:19:11 | × | acidjnk quits (~acidjnk@p200300d6e715c49250da1057090936da.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 00:20:02 | → | tubogram44 joins (~tubogram@user/tubogram) |
| 00:34:23 | × | mrcsno quits (~mrcsno@71.69.152.220) (Ping timeout: 264 seconds) |
| 00:50:20 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 00:52:35 | × | AlexNoo quits (~AlexNoo@94.233.240.140) (Read error: Connection reset by peer) |
| 00:55:24 | × | AlexZenon quits (~alzenon@94.233.240.140) (Ping timeout: 255 seconds) |
| 00:55:27 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 00:55:27 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 00:55:31 | allbery_b | is now known as geekosaur |
| 00:55:47 | → | AlexNoo joins (~AlexNoo@94.233.240.140) |
| 00:55:51 | × | Alex_test quits (~al_test@94.233.240.140) (Ping timeout: 255 seconds) |
| 00:58:35 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 00:58:35 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 00:58:35 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:59:40 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds) |
| 01:00:29 | → | emmanuelux_ joins (~emmanuelu@user/emmanuelux) |
| 01:01:06 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 01:03:08 | → | Alex_test joins (~al_test@94.233.240.140) |
| 01:03:50 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 255 seconds) |
| 01:04:24 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 01:08:36 | → | AlexZenon joins (~alzenon@94.233.240.140) |
| 01:10:45 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:16:52 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:18:00 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 01:21:15 | × | emmanuelux_ quits (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
| 01:33:32 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
| 01:47:32 | × | AlexNoo quits (~AlexNoo@94.233.240.140) (Read error: Connection reset by peer) |
| 01:49:01 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 01:49:09 | → | AlexNoo joins (~AlexNoo@94.233.240.140) |
| 01:55:43 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 248 seconds) |
| 02:00:10 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds) |
| 02:01:58 | × | mniip quits (mniip@libera/staff/mniip) (Quit: This page is intentionally left blank) |
| 02:02:06 | → | mniip joins (mniip@libera/staff/mniip) |
| 02:18:34 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer) |
| 02:22:58 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 02:26:38 | → | bilegeek joins (~bilegeek@2600:1008:b04a:2640:a05a:3165:8f58:e872) |
| 02:36:44 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 02:41:56 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds) |
| 02:43:22 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 02:44:51 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 02:49:14 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
| 02:50:36 | × | xff0x quits (~xff0x@ai081074.d.east.v6connect.net) (Ping timeout: 255 seconds) |
| 02:53:05 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:53:28 | × | gastus quits (~gastus@185.6.123.209) (Ping timeout: 246 seconds) |
| 02:56:53 | → | razetime joins (~Thunderbi@43.254.111.18) |
| 03:01:05 | × | jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection) |
| 03:09:34 | → | gastus joins (~gastus@185.6.123.209) |
| 03:23:30 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 03:23:45 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 03:24:25 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 03:26:44 | → | xff0x joins (~xff0x@125.103.176.34) |
| 03:27:24 | → | gastus_ joins (~gastus@185.6.123.141) |
| 03:27:50 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds) |
| 03:30:22 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) |
| 03:30:39 | × | gastus quits (~gastus@185.6.123.209) (Ping timeout: 255 seconds) |
| 03:36:50 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 255 seconds) |
| 03:39:39 | × | td_ quits (~td@i53870919.versanet.de) (Ping timeout: 255 seconds) |
| 03:40:15 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 03:41:20 | → | td_ joins (~td@i5387093D.versanet.de) |
| 03:44:22 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat) |
| 03:45:46 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:4e8c::) |
| 03:46:19 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 03:47:48 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:47:48 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 03:47:48 | finn_elija | is now known as FinnElija |
| 03:56:42 | × | nattiestnate quits (~nate@202.138.250.9) (Quit: WeeChat 3.8) |
| 04:08:07 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 04:09:43 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 04:15:05 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 04:37:28 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 04:42:58 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 04:50:45 | × | son0p quits (~ff@181.136.122.143) (Ping timeout: 255 seconds) |
| 04:53:27 | × | Square quits (~Square4@user/square) (Ping timeout: 255 seconds) |
| 04:55:08 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) |
| 04:59:14 | → | mrcsno joins (~mrcsno@71.69.152.220) |
| 05:04:48 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 05:06:07 | × | polyphem_ quits (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) (Ping timeout: 246 seconds) |
| 05:06:36 | → | Vajb joins (~Vajb@2001:999:230:f561:4ee8:ad7f:13ff:9959) |
| 05:11:10 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds) |
| 05:23:16 | × | razetime quits (~Thunderbi@43.254.111.18) (Ping timeout: 246 seconds) |
| 05:25:25 | → | razetime joins (~Thunderbi@43.254.111.18) |
| 05:26:07 | → | mbuf joins (~Shakthi@49.204.135.165) |
| 05:27:49 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
| 05:32:26 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 05:33:27 | → | trev joins (~trev@user/trev) |
| 05:49:52 | × | inversed quits (~inversed@bcdcac82.skybroadband.com) (Ping timeout: 248 seconds) |
| 05:56:54 | × | razetime quits (~Thunderbi@43.254.111.18) (Ping timeout: 255 seconds) |
| 05:57:22 | → | inversed joins (~inversed@bcdcac82.skybroadband.com) |
| 06:09:19 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 06:09:48 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 06:14:39 | × | bilegeek quits (~bilegeek@2600:1008:b04a:2640:a05a:3165:8f58:e872) (Quit: Leaving) |
| 06:20:16 | × | lottaquestions_ quits (~nick@2607:fa49:503e:7100:376d:3f27:951:60f7) (Remote host closed the connection) |
| 06:20:42 | → | lottaquestions_ joins (~nick@2607:fa49:503e:7100:508:8f8d:b11d:43cd) |
| 06:22:26 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 255 seconds) |
| 06:23:29 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 06:23:49 | → | Jade[m]1 joins (~jade1024t@2001:470:69fc:105::3:238b) |
| 06:24:21 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 255 seconds) |
| 06:25:46 | → | mechap joins (~mechap@user/mechap) |
| 06:28:50 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 06:32:02 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:35:09 | × | inversed quits (~inversed@bcdcac82.skybroadband.com) (Ping timeout: 255 seconds) |
| 06:37:52 | → | inversed joins (~inversed@bcdcac82.skybroadband.com) |
| 06:45:07 | × | whatsupdoc quits (uid509081@2a03:5180:f:4::7:c499) (Quit: Connection closed for inactivity) |
| 06:48:34 | ← | demsh parts (~demsh@algiz.demsh.org) () |
| 06:52:08 | → | michalz joins (~michalz@185.246.207.215) |
| 06:57:14 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 07:08:16 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 07:15:32 | → | alecs joins (~alecs@host-79-44-188-195.retail.telecomitalia.it) |
| 07:15:58 | → | roboguy_ joins (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) |
| 07:21:24 | → | razetime joins (~Thunderbi@117.193.6.229) |
| 07:23:45 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 255 seconds) |
| 07:29:37 | × | opticblast quits (~Thunderbi@172.58.85.230) (Ping timeout: 246 seconds) |
| 07:31:29 | × | xelxebar quits (~xelxebar@KD111239181227.au-net.ne.jp) (Read error: Connection reset by peer) |
| 07:32:03 | → | xelxebar joins (~xelxebar@om126166170159.28.openmobile.ne.jp) |
| 07:34:45 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 07:36:33 | × | mrcsno quits (~mrcsno@71.69.152.220) (Ping timeout: 252 seconds) |
| 07:41:45 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
| 07:42:39 | × | roboguy_ quits (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) (Quit: Leaving...) |
| 07:44:03 | → | coot joins (~coot@213.134.171.3) |
| 07:58:53 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:01:28 | × | razetime quits (~Thunderbi@117.193.6.229) (Ping timeout: 246 seconds) |
| 08:03:37 | → | MajorBiscuit joins (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
| 08:08:24 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 08:08:58 | → | Midjak joins (~Midjak@82.66.147.146) |
| 08:12:02 | → | lottaquestions joins (~nick@2607:fa49:503e:7100:29d5:6a23:249a:7ab4) |
| 08:13:22 | × | lottaquestions_ quits (~nick@2607:fa49:503e:7100:508:8f8d:b11d:43cd) (Ping timeout: 246 seconds) |
| 08:13:58 | × | [_________] quits (~oos95GWG@user/oos95GWG) (Quit: [_________]) |
| 08:14:11 | → | razetime joins (~Thunderbi@117.193.6.229) |
| 08:14:41 | → | xelxebar_ joins (~xelxebar@KD111239153139.au-net.ne.jp) |
| 08:16:12 | → | [_________] joins (~oos95GWG@user/oos95GWG) |
| 08:17:36 | × | xelxebar quits (~xelxebar@om126166170159.28.openmobile.ne.jp) (Ping timeout: 252 seconds) |
| 08:19:11 | → | mechap_ joins (~mechap@user/mechap) |
| 08:21:04 | → | acidjnk joins (~acidjnk@p200300d6e715c49275c5935bb14ea82c.dip0.t-ipconnect.de) |
| 08:21:27 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:22:15 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 255 seconds) |
| 08:22:48 | <sm> | 3,75h remaining in the haskell tiny game jam. If anyone has a tiny games still in mind , we could make 50 entries with 2 more. Submitting the PR before deadline will count. Good night all ! 🕹️🌙 |
| 08:23:19 | <sm> | https://github.com/haskell-game/tiny-games-hs |
| 08:23:26 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:9ac6:7f56:c345:9bac) |
| 08:26:05 | × | razetime quits (~Thunderbi@117.193.6.229) (Remote host closed the connection) |
| 08:30:22 | → | zeenk joins (~zeenk@2a02:2f04:a20d:f900::7fe) |
| 08:34:40 | → | fserucas joins (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) |
| 08:37:59 | × | Alex_test quits (~al_test@94.233.240.140) (Quit: ;-) |
| 08:39:08 | × | AlexZenon quits (~alzenon@94.233.240.140) (Quit: ;-) |
| 08:39:29 | × | AlexNoo quits (~AlexNoo@94.233.240.140) (Quit: Leaving) |
| 08:51:41 | → | machinedgod joins (~machinedg@2001:56a:7d0a:4a00:b9be:a4dc:5fc0:1fa5) |
| 08:53:44 | → | acidjnk_new joins (~acidjnk@2003:d6:e715:c492:38f8:489b:736b:3478) |
| 08:54:34 | → | yobson__ joins (~yobson@mail.jotron.com) |
| 08:56:12 | → | gmg joins (~user@user/gehmehgeh) |
| 08:56:27 | → | teo joins (~teo@user/teo) |
| 08:57:36 | × | acidjnk quits (~acidjnk@p200300d6e715c49275c5935bb14ea82c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 09:01:51 | × | phma quits (~phma@host-67-44-208-187.hnremote.net) (Read error: Connection reset by peer) |
| 09:02:46 | → | phma joins (phma@2001:5b0:210d:cd18:ce32:5877:1a8e:e7d3) |
| 09:05:38 | → | lxi joins (~quassel@2a02:2f08:4d1c:400:444f:c660:fa90:43e5) |
| 09:05:38 | × | lxi quits (~quassel@2a02:2f08:4d1c:400:444f:c660:fa90:43e5) (Client Quit) |
| 09:07:30 | × | ft quits (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving) |
| 09:08:02 | → | lxi joins (~quassel@2a02:2f08:4d1c:400:444f:c660:fa90:43e5) |
| 09:09:38 | → | edwtjo joins (~edwtjo@h-109-228-137-133.A213.priv.bahnhof.se) |
| 09:09:38 | × | edwtjo quits (~edwtjo@h-109-228-137-133.A213.priv.bahnhof.se) (Changing host) |
| 09:09:38 | → | edwtjo joins (~edwtjo@fsf/member/edwtjo) |
| 09:11:31 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 09:13:03 | → | chele joins (~chele@user/chele) |
| 09:14:02 | × | mauke quits (~mauke@user/mauke) (Quit: leaving) |
| 09:16:15 | → | CiaoSen joins (~Jura@p200300c9570e91002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 09:21:13 | → | AlexZenon joins (~alzenon@94.233.240.140) |
| 09:22:14 | → | AlexNoo joins (~AlexNoo@94.233.240.140) |
| 09:22:23 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 09:23:43 | × | MajorBiscuit quits (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 246 seconds) |
| 09:24:36 | → | Alex_test joins (~al_test@94.233.240.140) |
| 09:25:56 | → | MajorBiscuit joins (~MajorBisc@c-001-024-033.client.tudelft.eduvpn.nl) |
| 09:28:29 | → | kuribas joins (~user@ptr-17d51eo9wm7f6qjcnfd.18120a2.ip6.access.telenet.be) |
| 09:29:46 | → | ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:5492:5a32:98f1:9180) |
| 09:33:20 | → | caryhartline joins (~caryhartl@2600:1700:2d0:8d30:cdb3:8615:a2b3:ec7c) |
| 09:35:37 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 09:39:18 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 09:40:19 | → | MQ-17J joins (~MQ-17J@104.28.216.166) |
| 09:43:20 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 09:44:01 | × | mbuf quits (~Shakthi@49.204.135.165) (Ping timeout: 246 seconds) |
| 09:45:39 | → | gurkenglas joins (~gurkengla@dynamic-046-114-180-031.46.114.pool.telefonica.de) |
| 09:48:35 | × | yobson__ quits (~yobson@mail.jotron.com) (Quit: Leaving...) |
| 09:57:35 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 09:59:06 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) (Remote host closed the connection) |
| 10:07:13 | → | Milan19 joins (~Milan@46.143.81.55) |
| 10:09:14 | <Milan19> | Hi all, Do you recommend Functional programming languages as first language ? if yes,please recommend a simple language for self study |
| 10:09:47 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Quit: use-value) |
| 10:10:30 | xelxebar_ | is now known as xelxebar |
| 10:10:55 | × | acidjnk_new quits (~acidjnk@2003:d6:e715:c492:38f8:489b:736b:3478) (Ping timeout: 252 seconds) |
| 10:12:40 | <kuribas> | Milan19: scheme |
| 10:13:18 | <kuribas> | Milan19: but it depends on your goals. |
| 10:14:08 | <kuribas> | If you just want to write a simple webapp to impress friends and family, go with python. |
| 10:14:11 | × | KaitoDaumoto quits (~asdf@user/kaitodaumoto) (Remote host closed the connection) |
| 10:15:26 | <Milan19> | I am patient and i want to do the right sustainable option ,not "most in fashion" option |
| 10:15:41 | × | xff0x quits (~xff0x@125.103.176.34) (Ping timeout: 252 seconds) |
| 10:16:25 | <kuribas> | sustainable? |
| 10:16:30 | <kuribas> | there is no "right" option. |
| 10:16:35 | → | __monty__ joins (~toonn@user/toonn) |
| 10:17:23 | <kuribas> | If you want to do game programming, learn C++ and 3d mathematics. If you want to just make money programming in a business environment, learn java. |
| 10:17:29 | <kuribas> | If you want to do data science, learn python. |
| 10:17:31 | <kuribas> | etc... |
| 10:17:51 | <_________> | sustainable? learn cobol ;) |
| 10:19:32 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 10:19:44 | × | manwithluck quits (~manwithlu@194.177.28.192) (Remote host closed the connection) |
| 10:20:07 | <Milan19> | so I must see where I want to work and choose a language based on that? |
| 10:20:37 | <kuribas> | Milan19: That's a good idea in general |
| 10:20:44 | → | acidjnk_new joins (~acidjnk@p200300d6e715c492692e8d0c7f4fe68f.dip0.t-ipconnect.de) |
| 10:22:20 | <Milan19> | excuse me,it is a shame,I thought there are bad and good programming languages |
| 10:22:48 | <kuribas> | Milan19: you can become a generalist as well. |
| 10:22:51 | <Milan19> | thank you very much |
| 10:24:08 | <tomsmeding> | Milan19: there are bad and good programming languages for particular purposes; unfortunately, that ranking differs per purpose :) |
| 10:24:36 | <tomsmeding> | people like to get into flame wars based on bad vs good programming languages in general, but ultimately, it depends on the purpose |
| 10:24:36 | → | manwithluck joins (~manwithlu@194.177.28.192) |
| 10:25:00 | <tomsmeding> | (excluding obvious things like Brainfuck, which is suitable only for exercising your brain, not for any actual application) |
| 10:25:18 | <kuribas> | Milan19: there are bad languages for sure, only people don't agree which ones... |
| 10:25:20 | <__monty__> | Haskell scores pretty high if the goal is to be exposed to interesting stuff though : ) |
| 10:25:28 | <tomsmeding> | kuribas++ |
| 10:25:53 | <Milan19> | which language force thinking in a way ,that boost my problem solving skills? |
| 10:26:19 | × | ubert1 quits (~Thunderbi@2a02:8109:abc0:6434:5492:5a32:98f1:9180) (Ping timeout: 248 seconds) |
| 10:26:25 | <tomsmeding> | there functional languages may well be helpful, haskell is a decent candidate |
| 10:26:25 | <_________> | intercal ;) |
| 10:26:30 | <kuribas> | Milan19: any language, just do a lot of exercises. |
| 10:26:33 | <tomsmeding> | _________: PLEASE no |
| 10:26:41 | <_________> | :D |
| 10:27:01 | <tomsmeding> | I mean, then do malbolge |
| 10:27:21 | <Milan19> | are yo making fun of me |
| 10:27:22 | <kuribas> | Milan19: haskell helps you thinking about state management, and composition and parametricity. |
| 10:27:47 | <kuribas> | Milan19: "making fun", not of you... |
| 10:28:02 | <tomsmeding> | Milan19: I'm definitely not making fun of you, though intercal and malbolge are not serious languages, that was a joke :p |
| 10:28:40 | <_________> | programming in intercal posses a problem by itself, so it should boost your problem solving skills ;) |
| 10:30:52 | <Milan19> | thank you ,I guess i understand what yo meant |
| 10:31:21 | <Milan19> | haskell has a really friendly community |
| 10:31:39 | <Milan19> | I try to learn haskell one day |
| 10:31:47 | <merijn> | _________: I mean, intercal is much easier than malbolge :p |
| 10:31:48 | <kuribas> | Milan19: But more importantly, write code, do programming exercises, learn algorithms, etc.. |
| 10:32:06 | <merijn> | Milan19: for what it's worth, my girlfriend learned haskell as a first language just fine |
| 10:32:41 | <_________> | merijn: that's true; it can be next step in the journey... |
| 10:32:46 | × | coot quits (~coot@213.134.171.3) (Quit: coot) |
| 10:33:59 | <kuribas> | IMO "Structure and interpretation of computer programs" is one of the best resources to learn about programming paradigms. |
| 10:34:12 | <kuribas> | Except for static types and type theory. |
| 10:35:53 | → | a_coll joins (~acoll@45.92.120.189) |
| 10:38:51 | <Milan19> | is it wise to start learning java? does it promote good programming habits? and then start learning functional programing or it is better to invest on learning a functional programming first? |
| 10:39:39 | <Milan19> | i know functional programming jobs is not as much as oop |
| 10:40:27 | <tomsmeding> | Milan19: "better" for what? |
| 10:40:42 | <kuribas> | Milan19: there are some absolutately abysmal practices in java. |
| 10:40:48 | <tomsmeding> | getting a job quickly, being able to produce beautiful code, being able to solve algorithmic problems quickly, or something else? |
| 10:40:51 | <kuribas> | spring boot, hybernate ORM, etc... |
| 10:41:09 | <kuribas> | all this no-code xml stuff is pretty hairy. |
| 10:41:35 | × | theproffesor quits (~theproffe@user/theproffesor) (Ping timeout: 260 seconds) |
| 10:42:20 | <kuribas> | Milan19: learning haskell and idris or lisps can really spoil working in other languages. |
| 10:43:01 | <kuribas> | Because then you know how not code, except that you find out most of the code out there is don't in that way. |
| 10:43:30 | <hellwolf[m]> | spoiler or spoiling the appetite? |
| 10:44:59 | <kuribas> | ruining the experience. |
| 10:45:45 | <kuribas> | Especially when you have to deal with people claiming FP is only for "academics with no practical insights". |
| 10:46:36 | <kuribas> | Or people who claim that formal verification and type systems should not be used because they make your program too rigid. |
| 10:50:28 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 10:50:38 | → | theproffesor joins (~theproffe@user/theproffesor) |
| 10:54:05 | <Milan19> | it seems most of people in haskell community are professional programmers , if you were me with your current experiences,what would be the roadmap for me as an absolute beginner? |
| 10:54:37 | <Milan19> | and I like you are not stuck in one holy paradigm |
| 10:58:44 | <Milan19> | excuse me if i asked too much . |
| 10:59:35 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) |
| 11:00:45 | × | theproffesor quits (~theproffe@user/theproffesor) (Read error: Connection reset by peer) |
| 11:01:07 | → | theproffesor joins (~theproffe@user/theproffesor) |
| 11:02:25 | × | acidjnk_new quits (~acidjnk@p200300d6e715c492692e8d0c7f4fe68f.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 11:04:52 | → | mmhat joins (~mmh@p200300f1c7054cf0ee086bfffe095315.dip0.t-ipconnect.de) |
| 11:05:30 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) (Ping timeout: 260 seconds) |
| 11:06:37 | → | xff0x joins (~xff0x@ai081074.d.east.v6connect.net) |
| 11:06:49 | <hellwolf[m]> | Good question, it really depends on what's your expectation.... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/2cb6bda9a585e9314bf7a2d12dad9cb318e25a85>) |
| 11:07:18 | <hellwolf[m]> | I am biased, but I have programming decades and do know many languages. |
| 11:07:40 | × | mmhat quits (~mmh@p200300f1c7054cf0ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit) |
| 11:07:47 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer) |
| 11:10:33 | × | YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Ping timeout: 255 seconds) |
| 11:12:20 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 11:17:02 | <kuribas> | Milan19: again, it dependens on your goals. |
| 11:18:51 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 11:23:51 | <Milan19> | thank you all ,you are fantastic |
| 11:23:55 | × | alecs quits (~alecs@host-79-44-188-195.retail.telecomitalia.it) (Quit: WeeChat 3.8) |
| 11:24:38 | × | phma quits (phma@2001:5b0:210d:cd18:ce32:5877:1a8e:e7d3) (Read error: Connection reset by peer) |
| 11:25:10 | → | bitmapper joins (uid464869@2a03:5180:f:2::7:17e5) |
| 11:25:32 | → | phma joins (~phma@host-67-44-208-37.hnremote.net) |
| 11:25:36 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 11:25:36 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 11:26:24 | × | Milan19 quits (~Milan@46.143.81.55) (Quit: Client closed) |
| 11:28:23 | × | MQ-17J quits (~MQ-17J@104.28.216.166) (Ping timeout: 264 seconds) |
| 11:31:12 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 11:51:22 | × | CiaoSen quits (~Jura@p200300c9570e91002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 11:55:11 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:9ac6:7f56:c345:9bac) (Ping timeout: 248 seconds) |
| 12:03:47 | → | Nolrai joins (~Nolrai@c-73-240-99-98.hsd1.or.comcast.net) |
| 12:04:04 | × | Nolrai quits (~Nolrai@c-73-240-99-98.hsd1.or.comcast.net) (Client Quit) |
| 12:06:12 | → | use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) |
| 12:07:16 | → | `2jt joins (~jtomas@84.78.228.193) |
| 12:09:01 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 12:13:16 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 12:19:00 | × | theproffesor quits (~theproffe@user/theproffesor) (Ping timeout: 260 seconds) |
| 12:20:30 | → | zer0bitz joins (~zer0bitz@2001:2003:f443:d600:9d80:2d1f:b124:730) |
| 12:21:15 | → | lyle joins (~lyle@104.246.145.237) |
| 12:23:39 | <lyxia> | is there ever a reason to want foldl over foldl' for lists |
| 12:25:10 | → | CiaoSen joins (~Jura@p200300c9570e91002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 12:25:11 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:1e18:c182:81c1:156e) |
| 12:26:54 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 12:29:30 | × | `2jt quits (~jtomas@84.78.228.193) (Ping timeout: 260 seconds) |
| 12:30:21 | <opqdonut> | lyxia: for a short list with expensive elements and a short-circuiting operation maybe |
| 12:30:47 | <opqdonut> | but yeah, mostly not |
| 12:42:00 | → | acidjnk_new joins (~acidjnk@p200300d6e715c492c929333b144a2034.dip0.t-ipconnect.de) |
| 12:42:29 | <tomsmeding> | at that point I wonder if it'll be clearer what you're doing if you write it in terms of foldr and reverse instead |
| 12:43:08 | <opqdonut> | might be |
| 12:43:53 | <tomsmeding> | :t \f z -> foldr (flip f) z . reverse |
| 12:43:54 | <lambdabot> | (c -> b -> c) -> c -> [b] -> c |
| 12:44:04 | <lyxia> | yeah I imagine that would be my first thought too before wanting foldl |
| 12:44:12 | <tomsmeding> | because operationally that's kinda what you'll be doing with foldl anyway |
| 12:44:34 | <tomsmeding> | scan to the end, then walk backwards until the operation becomes lazy in its left argumnet |
| 12:45:10 | <opqdonut> | yeah |
| 12:48:51 | × | Midjak quits (~Midjak@82.66.147.146) (Read error: Connection reset by peer) |
| 12:49:45 | → | Midjak joins (~Midjak@82.66.147.146) |
| 12:52:37 | × | Midjak quits (~Midjak@82.66.147.146) (Read error: Connection reset by peer) |
| 12:53:19 | → | Midjak joins (~Midjak@82.66.147.146) |
| 12:54:32 | → | mrcsno joins (~mrcsno@71.69.152.220) |
| 12:57:50 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:59:50 | × | lxi quits (~quassel@2a02:2f08:4d1c:400:444f:c660:fa90:43e5) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 13:00:54 | → | jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) |
| 13:02:18 | × | K4su quits (~quassel@v2202212189510211193.supersrv.de) (Quit: ,o>) |
| 13:02:59 | → | it_ joins (~quassel@v2202212189510211193.supersrv.de) |
| 13:03:57 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds) |
| 13:13:29 | → | kenran joins (~user@user/kenran) |
| 13:28:30 | × | Midjak quits (~Midjak@82.66.147.146) (Read error: Connection reset by peer) |
| 13:29:15 | × | MajorBiscuit quits (~MajorBisc@c-001-024-033.client.tudelft.eduvpn.nl) (Ping timeout: 248 seconds) |
| 13:29:18 | → | Midjak joins (~Midjak@82.66.147.146) |
| 13:29:40 | <kuribas> | lyxia: theoretically yes, practially no :) |
| 13:31:40 | <kuribas> | > let lastEven = foldl (\a e -> if even? e then e else a) 0 in lastEven [1, undefined, 2, 3] |
| 13:31:42 | <lambdabot> | error: |
| 13:31:42 | <lambdabot> | Variable not in scope: (?) :: (a0 -> Bool) -> b1 -> Bool |
| 13:32:02 | <kuribas> | > let lastEven = foldl (\a e -> if e `mod` 2 == 0 then e else a) 0 in lastEven [1, undefined, 2, 3] |
| 13:32:04 | <lambdabot> | 2 |
| 13:32:08 | <kuribas> | > let lastEven = foldl' (\a e -> if e `mod` 2 == 0 then e else a) 0 in lastEven [1, undefined, 2, 3] |
| 13:32:10 | <lambdabot> | *Exception: Prelude.undefined |
| 13:35:24 | → | MajorBiscuit joins (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
| 13:37:19 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 13:38:26 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 13:43:37 | × | MajorBiscuit quits (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 252 seconds) |
| 13:43:37 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 13:45:38 | → | MajorBiscuit joins (~MajorBisc@c-001-024-033.client.tudelft.eduvpn.nl) |
| 13:52:53 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 13:54:07 | × | gurkenglas quits (~gurkengla@dynamic-046-114-180-031.46.114.pool.telefonica.de) (Ping timeout: 265 seconds) |
| 13:56:49 | → | masterbuilder joins (~masterbui@user/masterbuilder) |
| 13:59:46 | → | theproffesor joins (~theproffe@user/theproffesor) |
| 14:00:11 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
| 14:01:54 | × | theproffesor quits (~theproffe@user/theproffesor) (Read error: Connection reset by peer) |
| 14:02:14 | → | lxi joins (~quassel@2a02:2f08:4d1c:400:508d:2f08:6dd4:357e) |
| 14:04:02 | → | stevan joins (~stevan@user/stevan) |
| 14:05:55 | × | masterbuilder quits (~masterbui@user/masterbuilder) (Quit: leaving) |
| 14:12:22 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 14:20:19 | × | xelxebar quits (~xelxebar@KD111239153139.au-net.ne.jp) (Ping timeout: 260 seconds) |
| 14:30:23 | × | CiaoSen quits (~Jura@p200300c9570e91002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 14:31:17 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 14:31:25 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 14:34:19 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:1e18:c182:81c1:156e) (Ping timeout: 248 seconds) |
| 14:37:20 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 14:38:12 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds) |
| 14:41:13 | → | theproffesor joins (~theproffe@user/theproffesor) |
| 14:45:41 | Ellenor | is now known as AmyMalik |
| 14:47:03 | × | theproffesor quits (~theproffe@user/theproffesor) (Read error: Connection reset by peer) |
| 14:48:34 | → | Square joins (~Square4@user/square) |
| 14:50:00 | → | qhong_ joins (~qhong@DN160vrd000d6kpg009l6c0000ep.stanford.edu) |
| 14:51:12 | × | Angelz quits (Angelz@2605:6400:30:fc15:9bd1:2217:41cd:bb15) (Ping timeout: 248 seconds) |
| 14:52:23 | × | bigtestaccount[m quits (~bigtestac@2001:470:69fc:105::2:fae3) (Ping timeout: 264 seconds) |
| 14:52:24 | × | mimi1vx[m] quits (~osukupmat@2001:470:69fc:105::2:418d) (Ping timeout: 264 seconds) |
| 14:52:27 | × | tjnhxmzhmqgytuwt quits (~tjnhxmzhm@2001:470:69fc:105::3:70e) (Ping timeout: 248 seconds) |
| 14:52:27 | × | fgaz quits (~fgaz@2001:470:69fc:105::842) (Ping timeout: 248 seconds) |
| 14:52:27 | × | bgamari[m] quits (~bgamari@2001:470:69fc:105::c7b9) (Ping timeout: 248 seconds) |
| 14:52:28 | × | chreekat quits (~chreekat@2001:470:69fc:105::16b5) (Ping timeout: 248 seconds) |
| 14:52:29 | × | jade[m] quits (~jadecatgi@2001:470:69fc:105::3:194e) (Ping timeout: 256 seconds) |
| 14:52:29 | × | JensPetersen[m] quits (~juhp@2001:470:69fc:105::6e9) (Ping timeout: 256 seconds) |
| 14:52:29 | × | jmcantrell quits (~jmcantrel@user/jmcantrell) (Ping timeout: 256 seconds) |
| 14:52:29 | × | Orbstheorem quits (~orbstheor@2001:470:69fc:105::a56) (Ping timeout: 256 seconds) |
| 14:52:29 | × | VOID[m] quits (~void404ma@2001:470:69fc:105::2:c72c) (Ping timeout: 256 seconds) |
| 14:52:31 | × | M0rphee[m] quits (~M0rpheema@2001:470:69fc:105::2:b1ce) (Ping timeout: 260 seconds) |
| 14:52:32 | × | MangoIV[m] quits (~mangoivma@2001:470:69fc:105::2:8417) (Ping timeout: 260 seconds) |
| 14:52:32 | × | nomagno quits (~nomagno@2001:470:69fc:105::c1f0) (Ping timeout: 260 seconds) |
| 14:52:32 | × | maralorn quits (~maralorn@2001:470:69fc:105::251) (Ping timeout: 260 seconds) |
| 14:52:36 | × | JonathanWatson[m quits (~jjwmatrix@2001:470:69fc:105::2:a544) (Ping timeout: 265 seconds) |
| 14:52:37 | × | psydroid quits (~psydroid@user/psydroid) (Ping timeout: 265 seconds) |
| 14:52:37 | × | disco-dave[m] quits (~disco-dav@2001:470:69fc:105::2:1892) (Ping timeout: 265 seconds) |
| 14:52:38 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Read error: Connection reset by peer) |
| 14:52:42 | × | tiziodcaio quits (~tiziodcai@2001:470:69fc:105::1:2bf8) (Ping timeout: 246 seconds) |
| 14:52:48 | × | Franciman quits (~Franciman@mx1.fracta.dev) (Ping timeout: 248 seconds) |
| 14:52:52 | × | charukiewicz[m] quits (~charukiew@2001:470:69fc:105::ded4) (Ping timeout: 252 seconds) |
| 14:52:52 | × | elvishjerricco quits (~elvishjer@2001:470:69fc:105::6172) (Ping timeout: 252 seconds) |
| 14:52:52 | × | peddie quits (~peddie@2001:470:69fc:105::25d) (Ping timeout: 252 seconds) |
| 14:52:52 | × | cstml[m] quits (~cstmmatri@2001:470:69fc:105::2:f76f) (Ping timeout: 252 seconds) |
| 14:52:52 | × | mon_aaraj quits (~montchncs@2001:470:69fc:105::8e6b) (Ping timeout: 252 seconds) |
| 14:52:52 | × | hussam quits (~hussam@user/hussam) (Ping timeout: 252 seconds) |
| 14:52:59 | × | Jade[m]1 quits (~jade1024t@2001:470:69fc:105::3:238b) (Ping timeout: 248 seconds) |
| 14:53:00 | × | aaRabbit[m] quits (~rootsandw@2001:470:69fc:105::2:ca2e) (Ping timeout: 260 seconds) |
| 14:53:00 | × | kadenwolff[m] quits (~kadenwolf@2001:470:69fc:105::1:d97f) (Ping timeout: 260 seconds) |
| 14:53:00 | × | maerwald[m] quits (~maerwaldm@2001:470:69fc:105::1ee) (Ping timeout: 248 seconds) |
| 14:53:00 | × | eldritchcookie[m quits (~eldritchc@2001:470:69fc:105::2:d53c) (Ping timeout: 248 seconds) |
| 14:53:00 | × | ormaaj quits (~ormaaj@user/ormaaj) (Ping timeout: 264 seconds) |
| 14:53:00 | × | VarikValefor[m] quits (~varikvale@2001:470:69fc:105::a5d) (Ping timeout: 248 seconds) |
| 14:53:00 | × | alexfmpe[m] quits (~alexfmpem@2001:470:69fc:105::38ba) (Ping timeout: 248 seconds) |
| 14:53:00 | × | Guillaum[m] quits (~guiboumat@2001:470:69fc:105::1:72ac) (Ping timeout: 264 seconds) |
| 14:53:00 | × | ericson2314 quits (~ericson23@2001:470:69fc:105::70c) (Ping timeout: 264 seconds) |
| 14:53:00 | × | jneira[m] quits (~jneiramat@2001:470:69fc:105::d729) (Ping timeout: 264 seconds) |
| 14:53:00 | × | Christoph[m] quits (~hpotsirhc@2001:470:69fc:105::2ff8) (Ping timeout: 264 seconds) |
| 14:53:00 | × | smichel17[m] quits (~smichel17@2001:470:69fc:105::2d32) (Ping timeout: 264 seconds) |
| 14:53:00 | × | akadude[m] quits (~akadudema@2001:470:69fc:105::2:5bf7) (Ping timeout: 264 seconds) |
| 14:53:00 | × | geekosaur[m] quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 248 seconds) |
| 14:53:02 | × | Deide quits (~deide@user/deide) (Ping timeout: 246 seconds) |
| 14:53:02 | × | famubu[m] quits (~famubumat@2001:470:69fc:105::1081) (Ping timeout: 246 seconds) |
| 14:53:02 | × | ManofLetters[m] quits (~manoflett@2001:470:69fc:105::3be) (Ping timeout: 246 seconds) |
| 14:53:03 | × | cdsmith quits (~cdsmithma@2001:470:69fc:105::284) (Ping timeout: 256 seconds) |
| 14:53:03 | × | paulapatience quits (~paulapati@2001:470:69fc:105::16a4) (Ping timeout: 256 seconds) |
| 14:53:03 | × | steve[m] quits (~stevetrou@2001:470:69fc:105::e0b) (Ping timeout: 256 seconds) |
| 14:53:05 | × | megaTherion quits (~therion@unix.io) (Ping timeout: 265 seconds) |
| 14:53:05 | × | instagib[m] quits (~instagibm@2001:470:69fc:105::8156) (Ping timeout: 265 seconds) |
| 14:53:05 | × | agevelt[m] quits (~ageveltmo@2001:470:69fc:105::3:16db) (Ping timeout: 265 seconds) |
| 14:53:05 | × | foghorn quits (~foghorn@user/foghorn) (Ping timeout: 265 seconds) |
| 14:53:06 | × | SeanKing[m] quits (~seankingm@2001:470:69fc:105::cf9c) (Ping timeout: 265 seconds) |
| 14:53:14 | × | christiansen[m] quits (~christian@2001:470:69fc:105::2:f23d) (Ping timeout: 252 seconds) |
| 14:53:15 | × | qhong quits (~qhong@2607:f6d0:d:3533:1:3533:0:1d9) (Ping timeout: 252 seconds) |
| 14:53:16 | → | megaTherion joins (~therion@unix.io) |
| 14:53:27 | × | hellwolf[m] quits (~hellwolfm@2001:470:69fc:105::3:6a4) (Ping timeout: 260 seconds) |
| 14:53:35 | × | KabeloMsobomvuMo quits (~elevenkb@2001:470:69fc:105::2:cb89) (Ping timeout: 264 seconds) |
| 14:53:35 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 264 seconds) |
| 14:53:37 | × | yl53[m] quits (~yl53matri@2001:470:69fc:105::85b) (Ping timeout: 256 seconds) |
| 14:53:37 | × | Clinton[m] quits (~clintonme@2001:470:69fc:105::2:31d4) (Ping timeout: 256 seconds) |
| 14:53:41 | → | Franciman joins (~Franciman@mx1.fracta.dev) |
| 14:53:50 | × | MironZ quits (~MironZ@nat-infra.ehlab.uk) (Quit: Ping timeout (120 seconds)) |
| 14:54:40 | → | MironZ joins (~MironZ@nat-infra.ehlab.uk) |
| 14:57:04 | <cheater> | can someone explain to me what all this type instance / data instance stuff is all about? i used to know, but it flew out |
| 14:57:30 | × | acidjnk_new quits (~acidjnk@p200300d6e715c492c929333b144a2034.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 14:57:54 | → | acidjnk_new joins (~acidjnk@p200300d6e715c4929ccd0d51d52c8268.dip0.t-ipconnect.de) |
| 14:58:02 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 14:58:45 | × | machinedgod quits (~machinedg@2001:56a:7d0a:4a00:b9be:a4dc:5fc0:1fa5) (Ping timeout: 252 seconds) |
| 14:58:57 | <merijn> | cheater: Type and data families |
| 14:59:11 | <cheater> | you'll have to start me from zero |
| 14:59:12 | <merijn> | Should be a chapter in the GHC user guide |
| 14:59:30 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 14:59:31 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 14:59:31 | → | wroathe joins (~wroathe@user/wroathe) |
| 15:00:39 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 15:01:54 | → | maralorn joins (~maralorn@2001:470:69fc:105::251) |
| 15:03:44 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) |
| 15:03:52 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 15:04:08 | → | chreekat joins (~chreekat@2001:470:69fc:105::16b5) |
| 15:04:18 | → | Angelz joins (Angelz@Angelz.oddprotocol.org) |
| 15:07:21 | <cheater> | yeah but it's like really dry and opaque. i don't understand it |
| 15:08:02 | × | MironZ quits (~MironZ@nat-infra.ehlab.uk) (Quit: Ping timeout (120 seconds)) |
| 15:08:03 | → | M0rphee[m] joins (~M0rpheema@2001:470:69fc:105::2:b1ce) |
| 15:08:05 | → | Orbstheorem joins (~orbstheor@2001:470:69fc:105::a56) |
| 15:08:21 | → | MironZ joins (~MironZ@nat-infra.ehlab.uk) |
| 15:08:23 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) (Ping timeout: 260 seconds) |
| 15:08:32 | → | jade[m] joins (~jadecatgi@2001:470:69fc:105::3:194e) |
| 15:10:13 | → | geekosaur[m] joins (~geekosaur@xmonad/geekosaur) |
| 15:11:36 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 15:12:13 | → | cdsmith joins (~cdsmithma@2001:470:69fc:105::284) |
| 15:12:17 | → | jneira[m] joins (~jneiramat@2001:470:69fc:105::d729) |
| 15:12:18 | → | alexfmpe[m] joins (~alexfmpem@2001:470:69fc:105::38ba) |
| 15:12:18 | → | Guillaum[m] joins (~guiboumat@2001:470:69fc:105::1:72ac) |
| 15:12:48 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 15:12:53 | <c_wraith> | first off: start with type families. You'll get a long way if you just think of them as functions from types to types. That's not a 100% accurate description, but it gets you a long way |
| 15:13:25 | → | psydroid joins (~psydroid@user/psydroid) |
| 15:16:41 | <c_wraith> | data families are a specialization of type families to the specific case where each data instance results in a new, unique type |
| 15:17:07 | → | foghorn joins (~foghorn@user/foghorn) |
| 15:17:24 | <c_wraith> | Without polluting the namespace with types you intend to use only via the family |
| 15:21:02 | → | JonathanWatson[m joins (~jjwmatrix@2001:470:69fc:105::2:a544) |
| 15:21:24 | → | hussam joins (~hussam@user/hussam) |
| 15:21:25 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:a4e4:67ed:f903:e93d) |
| 15:21:49 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) |
| 15:21:54 | → | elvishjerricco joins (~elvishjer@2001:470:69fc:105::6172) |
| 15:22:25 | → | akadude[m] joins (~akadudema@2001:470:69fc:105::2:5bf7) |
| 15:22:28 | → | Jade[m]1 joins (~jade1024t@2001:470:69fc:105::3:238b) |
| 15:22:49 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 15:23:07 | → | disco-dave[m] joins (~disco-dav@2001:470:69fc:105::2:1892) |
| 15:27:26 | <kuribas> | and data families are injective, which means they have less unpleasant surprises. |
| 15:27:47 | × | sidy quits (~sidy@user/sidy) (Quit: Leaving) |
| 15:28:12 | → | polyphem_ joins (~rod@2a02:810d:840:8754:7a70:3c2e:4ee0:14f) |
| 15:29:15 | <kuribas> | and type families look like type functions. Except that type level haskell is basically prolog, so they are more like horn clauses. |
| 15:29:28 | <maerwald> | heh |
| 15:30:03 | <c_wraith> | while I'm sure that data family injectivity was intentional, it's also sort of inevitable. |
| 15:30:35 | <c_wraith> | Since every data instance is a new type, there's no way for them to not be injective |
| 15:32:11 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 15:32:25 | <c_wraith> | oh! and of course, just to complicate things, there are also associated type families and data families. They aren't different things, but they're slightly different syntax and have slightly different definition requirements. |
| 15:34:14 | <gurkenglas> | Can Haskell define the subtype of X a for which "all functions (forall b. X b -> Y b) agree"? |
| 15:36:03 | → | mimi1vx[m] joins (~osukupmat@2001:470:69fc:105::2:418d) |
| 15:37:08 | <c_wraith> | the only subtyping relationship in Haskell is "type A is more general than type B |
| 15:37:42 | <c_wraith> | But maybe you meant something more colloquial by "subtyping"? |
| 15:37:55 | <gurkenglas> | Nope! I am wondering whether my thing fits into that. |
| 15:39:38 | <gurkenglas> | A traversal is a more general lens; an X a is a more general "X a on which all (X -> Y) agree". |
| 15:40:09 | → | JensPetersen[m] joins (~juhp@2001:470:69fc:105::6e9) |
| 15:40:11 | → | fgaz joins (~fgaz@2001:470:69fc:105::842) |
| 15:40:20 | → | SeanKing[m] joins (~seankingm@2001:470:69fc:105::cf9c) |
| 15:40:34 | <gurkenglas> | It's fine if X a needs to be rewritten into another form for that to be possible. |
| 15:41:00 | → | npm_i_kurbus joins (~npm_i_kur@user/kurbus) |
| 15:41:44 | <kuribas> | gurkenglas: "traversals" and "lenses" are type synonyms, they are not really first class things in haskell. |
| 15:42:07 | <gurkenglas> | kuribas: sure! it's fine if X needs to be rewritten into a type synonym. |
| 15:43:00 | → | tjnhxmzhmqgytuwt joins (~tjnhxmzhm@2001:470:69fc:105::3:70e) |
| 15:43:10 | → | nomagno joins (~nomagno@2001:470:69fc:105::c1f0) |
| 15:43:14 | → | ormaaj joins (~ormaaj@user/ormaaj) |
| 15:43:25 | <c_wraith> | gurkenglas: it feels like you're looking for ideas related to parametricity, as at the type level the only things you have to go on are free theorems. But I don't see how to express that in Haskell types |
| 15:43:33 | → | yl53[m] joins (~yl53matri@2001:470:69fc:105::85b) |
| 15:44:10 | <gurkenglas> | c_wraith: yes i also think that i am looking for an arcane application of free theorems. what should i read about those |
| 15:44:32 | → | instagib[m] joins (~instagibm@2001:470:69fc:105::8156) |
| 15:44:32 | → | agevelt[m] joins (~ageveltmo@2001:470:69fc:105::3:16db) |
| 15:44:37 | → | cstml[m] joins (~cstmmatri@2001:470:69fc:105::2:f76f) |
| 15:45:12 | → | bigtestaccount[m joins (~bigtestac@2001:470:69fc:105::2:fae3) |
| 15:45:26 | → | VOID[m] joins (~void404ma@2001:470:69fc:105::2:c72c) |
| 15:46:14 | → | jmcantrell joins (~jmcantrel@user/jmcantrell) |
| 15:46:49 | <c_wraith> | I've never actually read any of the stuff about free theorems. It looks like Wadler's 1989 paper was a big deal. I also see https://bartoszmilewski.com/2014/09/22/parametricity-money-for-nothing-and-theorems-for-free/ exists, and that series of blog posts was highly regarded |
| 15:46:51 | → | ericson2314 joins (~ericson23@2001:470:69fc:105::70c) |
| 15:47:01 | × | npm_i_kurbus quits (~npm_i_kur@user/kurbus) (Quit: Client closed) |
| 15:49:25 | → | hellwolf[m] joins (~hellwolfm@2001:470:69fc:105::3:6a4) |
| 15:49:36 | → | KabeloMsobomvuMo joins (~elevenkb@2001:470:69fc:105::2:cb89) |
| 15:50:10 | → | bgamari[m] joins (~bgamari@2001:470:69fc:105::c7b9) |
| 15:50:44 | → | sm joins (~sm@plaintextaccounting/sm) |
| 15:52:16 | → | charukiewicz[m] joins (~charukiew@2001:470:69fc:105::ded4) |
| 15:52:31 | → | MangoIV[m] joins (~mangoivma@2001:470:69fc:105::2:8417) |
| 15:52:31 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 15:53:27 | × | dsrt^ quits (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection) |
| 15:53:37 | → | peddie joins (~peddie@2001:470:69fc:105::25d) |
| 15:53:54 | → | aaRabbit[m] joins (~rootsandw@2001:470:69fc:105::2:ca2e) |
| 15:54:24 | → | kadenwolff[m] joins (~kadenwolf@2001:470:69fc:105::1:d97f) |
| 15:54:55 | × | bitmapper quits (uid464869@2a03:5180:f:2::7:17e5) (Quit: Connection closed for inactivity) |
| 15:55:29 | → | bgs joins (~bgs@212-85-160-171.dynamic.telemach.net) |
| 15:55:31 | → | paulapatience joins (~paulapati@2001:470:69fc:105::16a4) |
| 15:55:52 | <gurkenglas> | hmmmmm might there be some way to say "if you can take 2 values from a type and tell any difference between them, Void" |
| 15:56:28 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 15:59:10 | → | christiansen[m] joins (~christian@2001:470:69fc:105::2:f23d) |
| 16:00:07 | → | smichel17[m] joins (~smichel17@2001:470:69fc:105::2d32) |
| 16:00:48 | → | ManofLetters[m] joins (~manoflett@2001:470:69fc:105::3be) |
| 16:00:52 | → | mon_aaraj joins (~montchncs@2001:470:69fc:105::8e6b) |
| 16:01:41 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 16:01:44 | → | famubu[m] joins (~famubumat@2001:470:69fc:105::1081) |
| 16:01:49 | → | Deide joins (~deide@user/deide) |
| 16:01:58 | → | maerwald[m] joins (~maerwaldm@2001:470:69fc:105::1ee) |
| 16:02:06 | → | VarikValefor[m] joins (~varikvale@2001:470:69fc:105::a5d) |
| 16:02:17 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 16:02:19 | → | eldritchcookie[m joins (~eldritchc@2001:470:69fc:105::2:d53c) |
| 16:02:46 | → | Clinton[m] joins (~clintonme@2001:470:69fc:105::2:31d4) |
| 16:03:47 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 264 seconds) |
| 16:04:24 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
| 16:04:52 | × | mechap_ quits (~mechap@user/mechap) (Quit: WeeChat 3.8) |
| 16:05:05 | <gurkenglas> | (a -> b -> a) and (b -> a -> a) are subtypes of (a -> a -> a) with ~1 inhabitant each... |
| 16:05:15 | → | waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
| 16:06:08 | → | xelxebar joins (~xelxebar@KD111239153139.au-net.ne.jp) |
| 16:07:13 | <gurkenglas> | but saying that the two A->A->A you can get that way are equal sounds like i've reduced the problem to itself |
| 16:08:20 | × | a_coll quits (~acoll@45.92.120.189) (Remote host closed the connection) |
| 16:09:56 | <kuribas> | Isn't it the other way? |
| 16:10:27 | <kuribas> | (a -> a -> a) is a subtype of (a -> b -> a) |
| 16:11:50 | <gurkenglas> | kuribas: nope! then both would be subtypes of (a -> b -> c), which is empty |
| 16:14:43 | → | steve[m] joins (~stevetrou@2001:470:69fc:105::e0b) |
| 16:14:58 | → | Christoph[m] joins (~hpotsirhc@2001:470:69fc:105::2ff8) |
| 16:15:06 | <kuribas> | hmm, right |
| 16:15:32 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Read error: Connection reset by peer) |
| 16:19:55 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 248 seconds) |
| 16:21:01 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 16:21:18 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:a4e4:67ed:f903:e93d) (Quit: WeeChat 2.8) |
| 16:21:43 | × | Philonous_ quits (~Philonous@user/philonous) (Quit: ZNC - https://znc.in) |
| 16:22:03 | → | Philonous joins (~Philonous@user/philonous) |
| 16:22:44 | × | GoldsteinQ quits (~goldstein@goldstein.rs) (Quit: ZNC 1.8.2 - https://znc.in) |
| 16:23:33 | → | GoldsteinQ joins (~goldstein@goldstein.rs) |
| 16:23:59 | × | xerox quits (~edi@user/edi) (Ping timeout: 248 seconds) |
| 16:24:52 | → | xerox joins (~edi@user/edi) |
| 16:27:05 | × | stevan quits (~stevan@user/stevan) (Quit: leaving) |
| 16:27:33 | → | npm_i_kurbus joins (~npm_i_kur@user/kurbus) |
| 16:28:25 | → | finnekit1 joins (~finnekit@fsf/member/finnekit) |
| 16:28:54 | × | rhart quits (~rhart@user/rhart) (Remote host closed the connection) |
| 16:29:27 | × | manwithluck quits (~manwithlu@194.177.28.192) (Excess Flood) |
| 16:30:03 | × | finnekit quits (~finnekit@fsf/member/finnekit) (Ping timeout: 255 seconds) |
| 16:30:03 | finnekit1 | is now known as finnekit |
| 16:30:15 | → | manwithluck joins (~manwithlu@194.177.28.192) |
| 16:30:25 | → | mechap joins (~mechap@user/mechap) |
| 16:30:48 | → | Ghostpatsch joins (~Profpatsc@static.88-198-193-255.clients.your-server.de) |
| 16:30:50 | <gurkenglas> | i think the thing i'm looking for could be cheated through the use of error and teaspoon, much like this makes Void "nonempty" |
| 16:31:17 | <gurkenglas> | What are some existing things known to be cheatable using error/teaspoon? |
| 16:32:11 | → | bliminse_ joins (~bliminse@user/bliminse) |
| 16:33:33 | → | oats_ joins (~thomas@user/oats) |
| 16:34:06 | × | oats quits (~thomas@user/oats) (Killed (NickServ (GHOST command used by oats_))) |
| 16:34:09 | oats_ | is now known as oats |
| 16:34:52 | <gurkenglas> | "-> Void" takes inhabited types to uninhabited ones and vice versa, now i'm looking for something which can distinguish uniquely inhabited from non-uniquely. |
| 16:36:25 | × | Franciman quits (~Franciman@mx1.fracta.dev) (*.net *.split) |
| 16:36:25 | × | Square quits (~Square4@user/square) (*.net *.split) |
| 16:36:25 | × | trev quits (~trev@user/trev) (*.net *.split) |
| 16:36:25 | × | notzmv quits (~zmv@user/notzmv) (*.net *.split) |
| 16:36:25 | × | SenFache quits (~sauvin@user/Sauvin) (*.net *.split) |
| 16:36:25 | × | asm quits (~alexander@user/asm) (*.net *.split) |
| 16:36:25 | × | phaazon quits (~phaazon@2001:41d0:a:fe76::1) (*.net *.split) |
| 16:36:25 | × | jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (*.net *.split) |
| 16:36:25 | × | bgamari quits (~bgamari@2a06:a000:b00d::2) (*.net *.split) |
| 16:36:26 | × | fr33domlover quits (~fr33domlo@towards.vision) (*.net *.split) |
| 16:36:26 | × | bliminse quits (~bliminse@user/bliminse) (*.net *.split) |
| 16:36:26 | × | acarrico quits (~acarrico@dhcp-68-142-49-163.greenmountainaccess.net) (*.net *.split) |
| 16:36:26 | × | mixphix quits (~cigsender@74.124.58.162) (*.net *.split) |
| 16:36:26 | × | brettgilio quits (~brettgili@x-irc.gq) (*.net *.split) |
| 16:36:26 | × | Yumemi quits (~Yumemi@chamoin.net) (*.net *.split) |
| 16:36:26 | × | kaskal quits (~kaskal@089144220250.atnat0029.highway.webapn.at) (*.net *.split) |
| 16:36:26 | × | quintasan quits (~quassel@quintasan.pl) (*.net *.split) |
| 16:36:26 | × | sm[i]_ quits (~user@li229-222.members.linode.com) (*.net *.split) |
| 16:36:26 | × | ghostbuster quits (~admin@user/ghostbuster) (*.net *.split) |
| 16:36:26 | × | aku quits (~aku@163.172.137.34) (*.net *.split) |
| 16:36:26 | × | Ekho quits (~Ekho@user/ekho) (*.net *.split) |
| 16:36:26 | × | gabiruh_ quits (~gabiruh@vps19177.publiccloud.com.br) (*.net *.split) |
| 16:36:26 | × | Unode quits (~Unode@fg-ext-220.embl.de) (*.net *.split) |
| 16:36:26 | × | kronicma1 quits (user13639@neotame.csclub.uwaterloo.ca) (*.net *.split) |
| 16:36:26 | × | nullsh quits (nullsh@user/nexeq) (*.net *.split) |
| 16:36:27 | × | wrengr quits (~wrengr@201.59.83.34.bc.googleusercontent.com) (*.net *.split) |
| 16:36:27 | × | EsoAlgo8 quits (~EsoAlgo@129.146.136.145) (*.net *.split) |
| 16:36:27 | × | kitzman quits (~kitzman@user/dekenevs) (*.net *.split) |
| 16:36:27 | × | Profpatsch quits (~Profpatsc@static.88-198-193-255.clients.your-server.de) (*.net *.split) |
| 16:36:27 | × | hiredman quits (~hiredman@frontier1.downey.family) (*.net *.split) |
| 16:36:27 | × | AkechiShiro quits (~licht@user/akechishiro) (*.net *.split) |
| 16:36:27 | × | krjst quits (~krjst@2604:a880:800:c1::16b:8001) (*.net *.split) |
| 16:36:27 | × | sajith quits (~sajith@user/sajith) (*.net *.split) |
| 16:36:27 | × | drewolson quits (~drewolson@user/drewolson) (*.net *.split) |
| 16:37:35 | → | Franciman joins (~Franciman@mx1.fracta.dev) |
| 16:37:35 | → | Square joins (~Square4@user/square) |
| 16:37:35 | → | trev joins (~trev@user/trev) |
| 16:37:35 | → | notzmv joins (~zmv@user/notzmv) |
| 16:37:35 | → | SenFache joins (~sauvin@user/Sauvin) |
| 16:37:35 | → | asm joins (~alexander@user/asm) |
| 16:37:35 | → | phaazon joins (~phaazon@2001:41d0:a:fe76::1) |
| 16:37:35 | → | jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
| 16:37:35 | → | bgamari joins (~bgamari@2a06:a000:b00d::2) |
| 16:37:35 | → | fr33domlover joins (~fr33domlo@towards.vision) |
| 16:37:35 | → | acarrico joins (~acarrico@dhcp-68-142-49-163.greenmountainaccess.net) |
| 16:37:35 | → | mixphix joins (~cigsender@74.124.58.162) |
| 16:37:35 | → | brettgilio joins (~brettgili@x-irc.gq) |
| 16:37:35 | → | Yumemi joins (~Yumemi@chamoin.net) |
| 16:37:35 | → | kaskal joins (~kaskal@089144220250.atnat0029.highway.webapn.at) |
| 16:37:35 | → | quintasan joins (~quassel@quintasan.pl) |
| 16:37:35 | → | sm[i]_ joins (~user@li229-222.members.linode.com) |
| 16:37:35 | → | ghostbuster joins (~admin@user/ghostbuster) |
| 16:37:35 | → | aku joins (~aku@163.172.137.34) |
| 16:37:35 | → | Ekho joins (~Ekho@user/ekho) |
| 16:37:35 | → | gabiruh_ joins (~gabiruh@vps19177.publiccloud.com.br) |
| 16:37:35 | → | Unode joins (~Unode@fg-ext-220.embl.de) |
| 16:37:35 | → | kronicma1 joins (user13639@neotame.csclub.uwaterloo.ca) |
| 16:37:35 | → | nullsh joins (nullsh@user/nexeq) |
| 16:37:35 | → | wrengr joins (~wrengr@201.59.83.34.bc.googleusercontent.com) |
| 16:37:35 | → | EsoAlgo8 joins (~EsoAlgo@129.146.136.145) |
| 16:37:35 | → | kitzman joins (~kitzman@user/dekenevs) |
| 16:37:35 | → | hiredman joins (~hiredman@frontier1.downey.family) |
| 16:37:35 | → | AkechiShiro joins (~licht@user/akechishiro) |
| 16:37:35 | → | krjst joins (~krjst@2604:a880:800:c1::16b:8001) |
| 16:37:35 | → | sajith joins (~sajith@user/sajith) |
| 16:37:35 | → | drewolson joins (~drewolson@user/drewolson) |
| 16:37:56 | × | xelxebar quits (~xelxebar@KD111239153139.au-net.ne.jp) (Quit: WeeChat 3.8) |
| 16:37:59 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds) |
| 16:38:52 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer) |
| 16:39:58 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 16:40:33 | × | Square quits (~Square4@user/square) (Remote host closed the connection) |
| 16:40:33 | × | SenFache quits (~sauvin@user/Sauvin) (Remote host closed the connection) |
| 16:40:36 | × | harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
| 16:40:47 | → | SenFache joins (~sauvin@user/Sauvin) |
| 16:41:03 | → | Square joins (~Square4@user/square) |
| 16:41:29 | → | shriekingnoise_ joins (~shrieking@186.137.175.87) |
| 16:41:47 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 248 seconds) |
| 16:42:15 | <gurkenglas> | "A has exactly one element if, for any A->b, we already know what it's going to output"... |
| 16:44:47 | <gurkenglas> | or less circuitously, if given any A we didn't need to be given it |
| 16:45:18 | <Jade[m]1> | The concept of ()? |
| 16:45:32 | <gurkenglas> | What do you mean? |
| 16:45:52 | <Jade[m]1> | () is the type with exactly one inhabitant |
| 16:46:03 | <Jade[m]1> | which is () (unit) |
| 16:46:15 | × | malte quits (~malte@mal.tc) (Ping timeout: 255 seconds) |
| 16:46:38 | <gurkenglas> | sure. how do i tell whether a type (such as (forall x. x -> x)) is essentially that. |
| 16:47:12 | <Jade[m]1> | I'm having trouble understanding what you are asking for |
| 16:47:39 | <Jade[m]1> | `() -> x`? |
| 16:47:39 | <Jade[m]1> | * `() -> x` ? |
| 16:47:55 | <Jade[m]1> | * `forall x. () -> x` ? |
| 16:49:02 | <gurkenglas> | Jade[m]1: is there some type constructor AtLeastTwo of kind * -> * which maps a type with at least two values to a type with at least one value, and a type with one value to the empty type? |
| 16:49:46 | <gurkenglas> | (or vice versa: UniquelyInhabited of kind * -> *) |
| 16:49:47 | × | teo quits (~teo@user/teo) (Ping timeout: 256 seconds) |
| 16:49:48 | <Jade[m]1> | AFAIK there is no way to statically encode the inhabitancy (?) of types |
| 16:50:12 | <Jade[m]1> | can you show what you need with an actual use-case? |
| 16:50:23 | <Jade[m]1> | because you might just want normal polymorphic types |
| 16:50:46 | <gurkenglas> | Jade[m]1: "type ThisTypeHasNoValues a = forall b. a -> b" <- does that count as a way to encode inhabitancy? |
| 16:51:14 | <Jade[m]1> | no |
| 16:51:32 | <Jade[m]1> | it just aliases a general function from a -> b |
| 16:51:47 | <Jade[m]1> | ah no, let me rethink |
| 16:52:06 | <geekosaur> | if b is not otherwise constrained then it must be uninhabited |
| 16:52:14 | <Jade[m]1> | yes |
| 16:52:25 | <geekosaur> | but you can't generalize this to "has one element" |
| 16:52:31 | <Jade[m]1> | mhm |
| 16:52:33 | <gurkenglas> | geekosaur: is there proof of that? |
| 16:52:36 | <geekosaur> | no elements is a special case |
| 16:53:07 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 16:53:24 | <geekosaur> | by construction there is no value that inhabits all types, and the `forall` indicates that it's the caller of the function that picks `b` |
| 16:53:32 | <geekosaur> | (except bottom) |
| 16:54:05 | → | Guest78 joins (~Guest78@41.36-131-109.adsl-dyn.isp.belgacom.be) |
| 16:54:24 | <ncf> | a proof of that would look like an interpretation of system F in a model with exactly two types |
| 16:54:26 | <Jade[m]1> | yeah, no type is truly uninhabited |
| 16:54:27 | <ncf> | i wonder if that exists |
| 16:55:20 | <geekosaur> | Jade[m]1, bottom doesn't really count here since it's a non-value |
| 16:55:31 | <gurkenglas> | geekosaur: that justifies being able to tell 0 from 1, but it doesn't justify being unable to tell 1 from 2 |
| 16:55:32 | <geekosaur> | (nontermination, aka failure to produce a value) |
| 16:55:50 | <Jade[m]1> | mhm |
| 16:55:54 | <geekosaur> | gurkenglas, correct, that's why I called it a special case |
| 16:56:08 | <gurkenglas> | i said "unable" :D |
| 16:56:19 | <gurkenglas> | i'm not yet convinced that we can't do another trick to tell 1 from 2 |
| 16:56:51 | <geekosaur> | I'm reasonably certain that requires true dependent types |
| 16:56:53 | <Jade[m]1> | The problem is that you cannot introspect on the type itself |
| 16:56:58 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.8) |
| 16:57:09 | <Jade[m]1> | geekosaur: mhm |
| 16:58:07 | <gurkenglas> | something like, "a type X is uniquely inhabited if, given some (forall a. a->a->a), you cannot tell whether it is "const" or "const id" by specializing it to X->X->X" |
| 17:00:37 | <Jade[m]1> | but how would you encode this in types? |
| 17:00:43 | <gurkenglas> | I'm thinking! |
| 17:00:50 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 17:01:00 | <Jade[m]1> | Something like this is what the compiler could do - but the compiler can also just look at the ADT defition |
| 17:01:50 | × | Guest78 quits (~Guest78@41.36-131-109.adsl-dyn.isp.belgacom.be) (Quit: Connection closed) |
| 17:02:01 | <gurkenglas> | what im hoping to *use* this for is to enforce a typeclass law i found that fits this pattern surprisingly well |
| 17:02:31 | <Jade[m]1> | care to elaborate? |
| 17:02:46 | <Jade[m]1> | you've got me interested by this point lmao |
| 17:03:16 | <gurkenglas> | a category is a way to compose paths-of-arrows such that any way to compose em that you can construct from that one is that one |
| 17:04:56 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 17:06:57 | <gurkenglas> | (forall a. a -> a -> a) -> Either (forall a b. a -> b -> a) (forall a b. b -> a -> a) ...one can't actually construct this, can one |
| 17:07:37 | <ncf> | λ f. f (Left const) (Right (const id)) |
| 17:07:41 | <ncf> | ? |
| 17:08:31 | <gurkenglas> | ahaha |
| 17:09:07 | <gurkenglas> | i mean i didn't actually rule out even "\_ -> Left const" but that one is fun |
| 17:09:58 | <gurkenglas> | what i meant was, one can't actually do "take the f, check whether it is Left const or Right (const id) by experiment, then having proven this return it specialized properly" |
| 17:10:29 | <Jade[m]1> | that can't really be encoded in the type |
| 17:10:34 | <gurkenglas> | i can probably scribble up a variant that rules out just saying "Left const" or "Right (const id)" |
| 17:11:49 | <ncf> | i'm pretty confident that system F is not expressive enough to let you prove the things you want to prove, but i don't have a reference; you should consider asking somewhere that isn't #haskell |
| 17:12:08 | <ncf> | (or Fω) |
| 17:13:12 | <ncf> | i'd ask on https://proofassistants.stackexchange.com/ |
| 17:14:15 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 17:14:56 | <ncf> | (i'd love to be proven wrong, of course) |
| 17:16:14 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds) |
| 17:16:38 | × | kenran quits (~user@user/kenran) (Remote host closed the connection) |
| 17:17:06 | <gurkenglas> | (forall x. x a -> x b -> x c) -> Either (forall x. x a -> x c) (forall x. x b -> x c) can one construct this? |
| 17:17:24 | → | dhil joins (~dhil@78.45.150.83.ewm.ftth.as8758.net) |
| 17:17:58 | <gurkenglas> | if one dares to use error "impossible", i think one can. can one also without that? |
| 17:20:04 | <int-e> | Nah, it would amount to a runtime check whether a = c or b = c. But there's no type information available. |
| 17:20:43 | <gurkenglas> | int-e: what about a runtime check whether the operator returns the first or second argument when called? |
| 17:27:28 | <gurkenglas> | :t gurk -- int-e, be amazed! |
| 17:27:29 | <lambdabot> | forall k (a :: k) (b :: k) (c :: k) r. (forall (x :: k -> *). x a -> x b -> x c) -> ((forall (x :: k -> *). x a -> x c) -> r) -> ((forall (x :: k -> *). x b -> x c) -> r) -> r |
| 17:27:47 | × | polyphem_ quits (~rod@2a02:810d:840:8754:7a70:3c2e:4ee0:14f) (Ping timeout: 264 seconds) |
| 17:28:25 | → | polyphem_ joins (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) |
| 17:29:57 | <gurkenglas> | (that one does use undefined in a manner which should never be executed) |
| 17:36:13 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 17:37:05 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 17:37:23 | × | MajorBiscuit quits (~MajorBisc@c-001-024-033.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.6) |
| 17:38:13 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:38:34 | → | econo joins (uid147250@user/econo) |
| 17:49:15 | × | euandreh quits (~Thunderbi@189.6.18.7) (Remote host closed the connection) |
| 17:49:54 | → | mauke joins (~mauke@user/mauke) |
| 17:51:31 | → | CiaoSen joins (~Jura@p200300c9570e91002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 17:55:09 | × | zeenk quits (~zeenk@2a02:2f04:a20d:f900::7fe) (Quit: Konversation terminated!) |
| 17:56:01 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 17:57:59 | <sm> | Haskell Tiny Game Jam update: my last post was wrong, there's still a few hours left to enter. Correct timer is here: |
| 17:57:59 | <sm> | https://www.timeanddate.com/countdown/generic?iso=20230228T235959&p0=1440&msg=Haskell+Tiny+Game+Jam+1+deadline&font=cursive&csz=1 |
| 17:59:28 | <shapr> | We never pushed ours, sadly |
| 17:59:44 | <int-e> | gurkenglas: in the end it's really easy: https://paste.tomsmeding.com/6GRAZ33t |
| 18:00:31 | <shapr> | oh, six hours left? |
| 18:00:36 | <shapr> | hmmm |
| 18:01:28 | <int-e> | UTC? |
| 18:01:48 | <int-e> | Ah it says that right there. |
| 18:03:04 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 18:03:10 | <segfaultfizzbuzz> | what is "reify" or "reified"? |
| 18:04:11 | <int-e> | roughly the same as "materialize" |
| 18:04:17 | <segfaultfizzbuzz> | which is...? |
| 18:04:23 | <int-e> | https://www.merriam-webster.com/dictionary/reify |
| 18:04:36 | <segfaultfizzbuzz> | ok so it doesn't mean anything specific in programming...? |
| 18:05:09 | <monochrom> | Everyone uses it for their own purposes... |
| 18:05:28 | <int-e> | Well, there's reflection/reification that reflects types in values, and reifies values as types. |
| 18:05:45 | <gurkenglas> | int-e: nice :) |
| 18:05:52 | <segfaultfizzbuzz> | ayyyy ok so it's a terrible term |
| 18:06:04 | <int-e> | Pet peeve warning... which, of course, makes no sense at all, because the values should be the concrete material thing. |
| 18:06:19 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) |
| 18:06:37 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) (Remote host closed the connection) |
| 18:06:51 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) |
| 18:07:03 | → | opticblast joins (~Thunderbi@172.58.82.191) |
| 18:07:22 | <gurkenglas> | next step would be: can we encode in the types that the two possibilities must be distinguished by plugging in two different values of our given type? to use this for AtLeastTwoDistinguishableInhabitants :: * -> * |
| 18:07:23 | <int-e> | segfaultfizzbuzz: you haven't provided context though, so you may be encountering the word in a different meaning. |
| 18:09:30 | <segfaultfizzbuzz> | i was looking at https://arxiv.org/pdf/1804.00746.pdf for instance which mentions reification on the first page,... and someone else was talking about reification in the ad haskell package, saying that it was somehow bad |
| 18:10:45 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 18:15:59 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds) |
| 18:17:58 | <gurkenglas> | int-e: *looks again* wait, now i'm confused. why does *this* work? |
| 18:18:52 | <gurkenglas> | One can say both "Left id" and "Right id" without it therefore unifying all a,b,c?? |
| 18:19:27 | <int-e> | gurkenglas: no, you take c = a for the first value, c = b for the second value and the result has c = c. |
| 18:19:43 | <mauke> | segfaultfizzbuzz: I think in that context it means "represented explicitly" |
| 18:19:59 | <mauke> | it's from the latin word "res" (thing) |
| 18:20:06 | <segfaultfizzbuzz> | evaluated/strict, basically? |
| 18:20:15 | <mauke> | no |
| 18:20:25 | <gurkenglas> | ah, that makes much more sense :) |
| 18:21:34 | → | akegalj joins (~akegalj@89-164-77-228.dsl.iskon.hr) |
| 18:23:09 | <mauke> | I'm not familiar with the domain, but perhaps even "represented symbolically" |
| 18:24:16 | <mauke> | > 1 + 2 * 3 :: Expr |
| 18:24:18 | <lambdabot> | 1 + 2 * 3 |
| 18:24:49 | → | czy joins (~user@50.30.140.25) |
| 18:24:51 | <mauke> | that's not just a lazily evaluated number, that's a full expression tree |
| 18:24:59 | <segfaultfizzbuzz> | as opposed to like 1 + my_mult_function(2, 3) ? |
| 18:25:12 | <mauke> | > 1 + 2 * 3 |
| 18:25:14 | <lambdabot> | 7 |
| 18:25:16 | <mauke> | as opposed to 7 |
| 18:25:30 | <segfaultfizzbuzz> | 7 is reified, 1 + 2*3 is not, then? |
| 18:26:00 | <mauke> | no, I would say Add (Const 1) (Mul (Const 2) (Const 2)) is a reified expression |
| 18:26:02 | <int-e> | one of the references is about "observable sharing" which is probably a more fruitful keyword |
| 18:26:26 | <mauke> | s/2\)\)/3))/ |
| 18:27:25 | <int-e> | So rather than an expression tree, we'll actually have a DAG. |
| 18:28:31 | <Inst> | is there any research on the Haskell IO story? |
| 18:28:49 | <Inst> | tbh, you have "Avoid $ Success At All Costs", which is to say, Haskell is not interested in being too popular |
| 18:28:58 | <Jade[m]1> | what do you mean by that? |
| 18:29:01 | <Inst> | but the reason Haskell isn't popular is, for complicated algorithms |
| 18:29:10 | <monochrom> | I don't think we take that seriously. |
| 18:29:26 | <Jade[m]1> | Inst: I disagree |
| 18:29:33 | <Jade[m]1> | > <@Inst:libera.chat> but the reason Haskell isn't popular is, for complicated algorithms |
| 18:29:33 | <Jade[m]1> | * I disagree, strongly |
| 18:29:35 | <lambdabot> | <hint>:1:1: error: parse error on input ‘<@’ |
| 18:29:56 | <Inst> | you pay lambda tax; often the algorithm is less performant than a similar imperative algorithm due to translation from lambda calculus (or STG) to something a Von Neumann machine can handle, and immutability |
| 18:30:04 | <segfaultfizzbuzz> | Inst: justin beiber programs in haskell but people don't know that yet |
| 18:30:10 | <int-e> | Even if you can't use Haskell directly for, say, performance reasons, it can still be a great meta language. |
| 18:30:24 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f1bd:eef9:4eee:a4c2) (Remote host closed the connection) |
| 18:30:26 | <Inst> | for IO-facing issues, it's often more complicated than dedicated scripting languages |
| 18:30:32 | <Inst> | the lambda tax problem is actively being worked on |
| 18:30:43 | <Inst> | we're working on better abstractions and better ways for the compiler to handle the abstractions |
| 18:30:57 | <monochrom> | When are you going to accept that popularity is a function of networking effects not technical reasons? Programming is a social construct. |
| 18:31:28 | <mauke> | no, no. if I just make my programming language *really good*, everyone will start using it |
| 18:31:35 | <Inst> | (in 20 years) |
| 18:31:50 | <Inst> | or rather, 25, it took 25 for Python to become the imperative scripting language par excellence |
| 18:31:59 | <mauke> | and it still sucks |
| 18:32:00 | <segfaultfizzbuzz> | or maybe programming languages are just in a pre-scientific era |
| 18:32:22 | <int-e> | PL Cemetary. A horror story. |
| 18:32:24 | <kuribas> | "popularity" is a social construct. I can give objective reasons why languages are deficient. |
| 18:32:27 | <Inst> | they'll likely always be in a pre-scientific era, we'll figure out how to replace developers with AI before we figure out how to get a "very good, 80% of the way there" language |
| 18:32:34 | <segfaultfizzbuzz> | kuribas: i mostly agree with you |
| 18:32:57 | <int-e> | (Where *all* programming languages ever invented come back to life.) |
| 18:32:59 | <Inst> | w/e, not intending on trolling |
| 18:33:33 | <mauke> | kuribas: same. for example, python has indentation-based syntax, which is obviously deficient |
| 18:33:33 | <kuribas> | I can refute most arguments clojurists make wrt to types. But I still think criticising haskell for its complexity is valid. |
| 18:34:14 | <kuribas> | mauke: in a way yes |
| 18:34:16 | <Inst> | my issue right now is that either I don't know the effectful computation / IO loop story in Haskell properly, i.e, there are great abstractions I don't understand, or Haskell can't beat Python at scripting |
| 18:34:40 | <mauke> | Inst: both can be true |
| 18:34:51 | <mauke> | also, python is not a scripting language |
| 18:34:52 | <Inst> | it seems as though someone would have identified this as a problem, and worked toward fixing it |
| 18:35:00 | <kuribas> | language A "beating" B is a silly discussion, more interesting is how we can augment our experience. |
| 18:35:10 | <mauke> | ... LSD? |
| 18:35:16 | <kuribas> | That's one way :) |
| 18:35:18 | <Inst> | I prefer a nice Grand Marnier :) |
| 18:35:35 | <segfaultfizzbuzz> | Inst: try maintaining 10M lines of python used in prod vs haskell and then we can talk |
| 18:35:42 | <mauke> | Inst: what keeps you from writing imperative algorithms in ST? |
| 18:35:44 | <kuribas> | But I doubt it will improve the efficiency or programmers. |
| 18:35:45 | <Inst> | segfaultfizzbuzz: in that scenario it clearly wins |
| 18:36:03 | <Inst> | I'm just sad I can't show newbies "look how nice your Python script is in Haskell" and watch their heads explode |
| 18:36:27 | <segfaultfizzbuzz> | nobody is worried about newbie orthopaedic surgeons |
| 18:36:29 | <kuribas> | Inst: why would you want that? |
| 18:36:33 | <segfaultfizzbuzz> | why are we worried about newbie programmers |
| 18:36:35 | <mauke> | Inst: do you have any examples of "look how nice your Haskell script is in Python"? |
| 18:36:53 | <Inst> | I can make exactly one Python program much better in the Haskell version |
| 18:36:54 | <int-e> | segfaultfizzbuzz: they practice on animals and corpses |
| 18:37:15 | <Inst> | because it's doing a cryptographic transformation over String, but I can't do it in a natural fashion, only in a code-golfed fashion |
| 18:37:35 | <Inst> | then again, we still have the problem that doing it in an idiomatic python style is cancer / disgusting when you know what an idiomatic Haskell style looks like |
| 18:37:41 | <segfaultfizzbuzz> | Inst: as a potentially more productive direction for this discussion, check out elm-lang and roc-lang |
| 18:37:51 | <Inst> | roc i haven't heard of |
| 18:38:05 | <Inst> | elm, FP courses should switch to Elm instead more often instead of Haskell |
| 18:38:14 | <Inst> | same nice currying syntax, less hardcore abstractions that make newbie brains explode |
| 18:38:32 | <monochrom> | This is why programming is still not a profession. |
| 18:38:33 | <mauke> | where's the fun if your brain doesn't explode now and then? |
| 18:38:42 | <sm> | Inst: I'm interested in haskell scripting, feel free to share scripts you've made that aren't satisfying |
| 18:39:04 | <monochrom> | In all professions --- accounting, law, medicine, ... --- no one worries about "make it easier for newbies". |
| 18:39:09 | <Inst> | mauke: what's the human quality if you don't enjoy having your brain explode every now and then? |
| 18:39:10 | <int-e> | monochrom: you mean, like, managing a theatre's program? |
| 18:39:28 | <segfaultfizzbuzz> | monochrom: yeah exactly :-P |
| 18:39:29 | <Inst> | sm: thank you so much for the offer |
| 18:39:38 | <Inst> | I'll get to you on Matrix |
| 18:39:43 | <Inst> | query there? |
| 18:39:59 | <mauke> | Inst: neophobia? |
| 18:40:22 | <sm> | https://github.com/haskell-game/tiny-games-hs is one repository of small scripts (the unminified versions). Haskell seems not too bad for scripting, except for the hassle of imports |
| 18:40:33 | → | weirdsmiley joins (~weirdsmil@103.25.231.102) |
| 18:40:48 | <Inst> | I have monomer working, I probably can get img-ui working. I love your part of the community, i.e, the Haskell games community. |
| 18:41:11 | <sm> | public chat is better, we'll all learnm |
| 18:41:13 | <hellwolf[m]> | > except for the hassle of imports |
| 18:41:13 | <hellwolf[m]> | @sm is that different in other language? |
| 18:41:13 | <lambdabot> | *SMACK*, *SLAM*, take that is that different in other language?! |
| 18:41:14 | <hellwolf[m]> | s/language/languages/ |
| 18:41:14 | <lambdabot> | <hint>:1:23: error: parse error on input ‘of’ |
| 18:41:20 | <Inst> | welp |
| 18:41:21 | <Inst> | https://github.com/haskell-game/tiny-games-hs/blob/main/prelude/guess1/guess1.hs |
| 18:41:22 | × | weirdsmiley quits (~weirdsmil@103.25.231.102) (Client Quit) |
| 18:41:24 | <hellwolf[m]> | It's probably about what is by default imported. |
| 18:41:30 | → | weirdsmiley joins (~weirdsmil@103.25.231.102) |
| 18:41:36 | <sm> | some languages have more batteries included or packaged in fewer imports I feel |
| 18:41:39 | <sm> | php being a good example |
| 18:41:48 | <monochrom> | Java and Python have a lot of imports too. |
| 18:41:53 | <hellwolf[m]> | yea, perhaps a runghc -bigger-battery would be an idea |
| 18:41:55 | <Inst> | i'm not sure if our prelude is considered notoriously bad |
| 18:42:15 | <monochrom> | Especially since their communities frown upon "import x.y.*". |
| 18:42:26 | <int-e> | hellwolf[m]: that's why `cabal run` and whatever the `stack` command is are a thing |
| 18:42:41 | <mauke> | heh. I love having 2000 reserved identifiers in the global namespace |
| 18:43:04 | <hellwolf[m]> | yea, in python you'd also need to do import math, this kind of thing |
| 18:43:11 | <int-e> | mauke: _how _about _infinitely _many _of _them? |
| 18:43:21 | <Inst> | what is with the Haskell games community, anyways? I know someone's working on both Linear-Haskell and Haskell Games? |
| 18:43:46 | <Inst> | the blackjack game I'm working on right now, is about 200 lines, which is probably 100-150 lines too many for me |
| 18:43:47 | <weirdsmiley> | hey folks, i have a vim+coc setup, but i can't jump to definitions. |
| 18:43:51 | <mauke> | int-e: those are only reserved in theory. php actually dumps thousands of identifiers in your global environment |
| 18:43:52 | <Inst> | i'm going to rework it into a testing framework soon |
| 18:44:18 | <hellwolf[m]> | int-e: fair, perhaps qualified imports such as "control", "math", "text", etc. |
| 18:44:20 | <int-e> | Inst: that combination makes sense, when one of the promises of linear types is timely resource management |
| 18:44:39 | <hellwolf[m]> | * fair, perhaps implicit qualified imports |
| 18:44:54 | <mauke> | oh, like ocaml? |
| 18:45:01 | <Inst> | I mean, my agenda right now is working, in my own incompetent way, toward having a turnkey ability for the Haskell community |
| 18:45:04 | <mauke> | well, not quite |
| 18:45:21 | <Inst> | so when the Haskell community finally gets bored with research and says: "send in the monkeys!" we'll have the pedagogy and libraries to support them |
| 18:45:38 | <int-e> | mauke: you said "reserved" though :) (we're all trolling a bit, aren't we) |
| 18:45:44 | mauke | has flashbacks to ENTERPRISE TURKEY SOLUTIONS |
| 18:46:24 | hellwolf[m] | looking at Urbit community, wondering why would we ever care about being popular |
| 18:47:16 | <int-e> | hellwolf[m]: FWIW, I don't use Haskell for scripting but the reason for that is compile time/binary size, not the imports. |
| 18:47:30 | <monochrom> | I still go by what Graham Hutton said. Programming is difficult, Haskell is just being honest about it. |
| 18:47:56 | <hellwolf[m]> | I must say I haven't noticed compile time cost most of the time for prelude/base/default tiny games. |
| 18:48:03 | <Inst> | for some definition of programming, as opposed to codemonkeys using brain-dead frameworks for very repetitive design tasks |
| 18:48:06 | <hellwolf[m]> | s/most/at/, s/of/all/, s/the time// |
| 18:48:30 | <mauke> | well, that was a silly edit |
| 18:48:47 | <hellwolf[m]> | :D |
| 18:49:05 | <mauke> | could be massively simplified to s/most of the time/at all/ |
| 18:49:10 | <Inst> | i wonder, would it be more fun to crap on the Clojurians instead? |
| 18:49:22 | <Inst> | supposedly the core Clojure team has made clear that they don't want to expand their community |
| 18:49:28 | <Inst> | I have an emotional attachment toward Haskell / Haskell community |
| 18:49:36 | <Inst> | trying to expand their community against their will would be funny |
| 18:50:27 | <int-e> | that doesn't sound constructive |
| 18:50:46 | <int-e> | we joke, but I don't think we're here to cause actual drama in any language's community |
| 18:51:08 | <Inst> | yeah, sorry, shouldn't be discussing that here |
| 18:51:10 | <int-e> | except maybe Haskell's, on occasion. |
| 18:52:33 | → | xelxebar joins (~xelxebar@wilsonb.com) |
| 18:53:09 | <monochrom> | It is easy to be snobbish and dismiss what codemonkeys do as brain-dead. But given that they are making big money, considering them brain-dead makes no economic sense. |
| 18:54:12 | → | ft joins (~ft@p3e9bc443.dip0.t-ipconnect.de) |
| 18:55:05 | <Inst> | i don't think codemonkeys make that much money; the salaries are less than other professional jobs, at least in the United States |
| 18:55:12 | <Inst> | solidly middle-class on average |
| 18:55:41 | <Inst> | you can hire Haskellers for 20k a year from China, it seems. Ukrainians might be even cheaper. |
| 18:55:45 | <sm> | int-e yes the heavy toolchain requirement is the biggest downside of haskell for scripting. It's best for folks already bought in to the language |
| 18:56:27 | <sm> | there's no need to compile or make large binaries, but you do need 2G of tools and deps |
| 18:57:21 | → | Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) |
| 18:57:54 | <Inst> | i'm more interested in what being good at scripting represents, i.e, a highly-efficient way to handle IO |
| 18:57:55 | → | king_gs joins (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) |
| 18:57:55 | × | king_gs quits (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) (Client Quit) |
| 18:58:12 | <Inst> | Haskell is already good at scripting, if you're willing to sacrifice pure expressivity for correctness and call it a win |
| 19:01:41 | <segfaultfizzbuzz> | inst: maybe you can move this to #haskell-beginners unless you have a specific question |
| 19:03:09 | <sm> | segfaultfizzbuzz: why ? this is the general haskell channel |
| 19:03:23 | × | euandreh quits (~Thunderbi@189.6.18.7) (Remote host closed the connection) |
| 19:06:01 | <Inst> | i can take it elsewhere if you want, I know the community is fed up with me griping about Haskell while not having the ability to improve things |
| 19:06:26 | <Inst> | the specific question was asking about research efforts toward improving Haskell in scripting and IO-facing code |
| 19:06:59 | <mauke> | I disagree with your definition of "scripting" |
| 19:07:14 | <hellwolf[m]> | it would be more constructive if you could present a small example that we can try to think what can we improve with |
| 19:07:38 | <segfaultfizzbuzz> | there is no such thing as scripting, only bad programming and languages which do not enforce invariants |
| 19:08:33 | <mauke> | there is such a thing as scripting, which is driving a normally interactive application through program code |
| 19:08:50 | <mauke> | (see also: scriptable text editors, scriptable debuggers) |
| 19:08:56 | <int-e> | Of course there's scripting. In its bare form it's like a cooking recipe, a sequence of steps to be performed to accomplish a task. |
| 19:08:59 | <Jade[m]1> | I use haskell for "scripting" with ghci |
| 19:09:05 | <segfaultfizzbuzz> | so you mean hotswappable code then? |
| 19:09:22 | <sm> | no need for griping, but let's get concrete once in a while. Show us what you made, it always helps |
| 19:09:26 | <Inst> | https://pastebin.com/h25rn0HR |
| 19:09:53 | <mauke> | oh god, that syntax highlighting is unreadable |
| 19:09:54 | <sm> | nice! |
| 19:09:56 | <Inst> | https://inventwithpython.com/bigbookpython/project1.html |
| 19:10:00 | <mauke> | white text on light green background |
| 19:10:24 | <int-e> | But this is computers, so scripts will grow conditionals and loops. And then might end up with something like the Bourne shell. Or Perl or... well, the list is endless. It's hard to delineate it from other programming languages that have all those capabilities and more. |
| 19:10:41 | <Inst> | fixed version: |
| 19:10:42 | <Inst> | https://pastebin.com/MMKjh1R2 |
| 19:11:16 | <mauke> | Perl is not a scripting language, under my definition |
| 19:11:24 | <sm> | but yes god my eyes, how about |
| 19:11:24 | <sm> | @where paste |
| 19:11:25 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 19:11:34 | <int-e> | (Personally I tend to think that scripting languages are interpreted, low on boilerplate to execute a single command, and also low on syntactic overhead to execute external commands. This is rather subjective.) |
| 19:12:20 | <hellwolf[m]> | As far as I can tell the hs tiny games rarely had boilerplate! |
| 19:12:25 | <Inst> | yeah, for whatever reason, Tom's pastebin got taken off topic |
| 19:12:49 | <sm> | I see it there |
| 19:13:03 | <mauke> | ... | Paste code/errors: https://paste.tomsmeding.com | ... |
| 19:13:04 | <sm> | some clients won't show it all |
| 19:13:38 | <sclv> | yeah its just topic got big lmao |
| 19:14:00 | <Inst> | there's obviously partiality |
| 19:14:03 | <Inst> | in part of the code |
| 19:14:28 | <sm> | Inst: planning to add a shebang line to make that more runnable ? |
| 19:14:33 | <mauke> | -!- Topic for #haskell: https://www.reddit.com/r/haskell | Admin: #haskell-ops | Offtopic: #haskell-offtopic | https://downloads.haskell.org https://play-haskell.tomsmeding.com/ | Paste code/errors: https://paste.tomsmeding.com | Logs: https://ircbrowse.tomsmeding.com/browse/lchaskell |
| 19:14:36 | <Inst> | shebang line? |
| 19:14:38 | <mauke> | (for completeness) |
| 19:14:47 | <mauke> | Inst: #!... |
| 19:15:16 | <sm> | like: #!/usr/bin/env runghc |
| 19:15:16 | <sm> | or: #!/usr/bin/env -S stack script --resolver lts-20 --package random |
| 19:15:29 | <Inst> | ahhh |
| 19:15:35 | <int-e> | mauke: hmm does that have room for another | between the downloads and the playground link? |
| 19:15:50 | <sm> | also, chmod +x myscript.hs. Then it's more like a typical script |
| 19:15:54 | <mauke> | int-e: no idea :-) |
| 19:16:04 | <mauke> | don't ask me what the IRC limits are |
| 19:16:30 | <darkling> | Server-dependent, I think. |
| 19:16:46 | <darkling> | (Plus other arbitrary limits imposed by clients, most likely) |
| 19:16:49 | <sm> | Inst: also, you may not have time but that looks to me possibly compressible to 10 lines |
| 19:17:32 | <int-e> | It's still way under the ~480 characters limit where things usually start to break. |
| 19:17:34 | <Inst> | sm: can I take a raincheck on that? Because that's awesome. |
| 19:17:47 | <Inst> | Sans comments, the Python original is 78 lines |
| 19:18:13 | <Inst> | I generally regard boilerplatey or verbose Haskell as a bug |
| 19:18:25 | <Inst> | or, more accurately, a deficiency in the developer, but a bug is that too, no? |
| 19:18:36 | <int-e> | ? |
| 19:18:46 | <sm> | still https://www.timeanddate.com/countdown/generic?iso=20230228T235959&p0=1440&msg=Haskell+Tiny+Game+Jam+1+deadline&font=cursive&csz=1 ~4 hours to go and folks in #haskell-game:matrix.org happy to help with golfing. But no pressure :) |
| 19:20:21 | <Inst> | well, the question is, how idiomatic is it? |
| 19:20:26 | <Inst> | i had a golfed solution that was completely unreadable |
| 19:20:59 | <yushyin> | so i wouldn't measure 'good', 'bugfree' code by the density of the code ... |
| 19:22:04 | hellwolf[m] | ponders that "unbearable lightness of Haskell" would be a good movie. |
| 19:22:43 | sm | likes a semi golfed style: one item per line, long lines, short names with a legend in comments - very compact yet still somewhat readable |
| 19:23:06 | <sm> | it's apl/j/k like |
| 19:23:11 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) (Ping timeout: 260 seconds) |
| 19:24:03 | × | mei quits (~mei@user/mei) (Quit: mei) |
| 19:26:37 | <Inst> | and thanks, sm, for offering to teach me a little bit of how to do Haskell code in IO-facing side properly |
| 19:26:57 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 19:27:15 | <mauke> | sm: what are the default packages? |
| 19:27:52 | <sm> | the ones that come with ghc.. there's a list in the ghc guide I don't have just now |
| 19:30:54 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) |
| 19:32:34 | × | dumptruckman quits (~dumptruck@45-33-69-234.ip.linodeusercontent.com) (Quit: ZNC - https://znc.in) |
| 19:34:35 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds) |
| 19:35:19 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) (Ping timeout: 260 seconds) |
| 19:37:13 | → | dumptruckman joins (~dumptruck@143-42-239-71.ip.linodeusercontent.com) |
| 19:41:23 | <hellwolf[m]> | ghc-pkgs list |
| 19:41:38 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) |
| 19:41:38 | <gurkenglas> | proooobably this doesn't quite do it, but here's attempt number one at a class that forces whoever implements it to have at least two distinguishable inhabitants |
| 19:42:06 | <gurkenglas> | proooobably this doesn't quite do it, but here's attempt number one at a class that forces whoever implements it to have at least two distinguishable inhabitants: class AtLeastTwo t where distinguish :: forall constraint. constraint (Const t) => (forall x. constraint x => x a -> x b -> x c) -> Either (forall x. constraint x => x a -> x c) (forall x. constraint x => x b -> x c) |
| 19:43:03 | × | npm_i_kurbus quits (~npm_i_kur@user/kurbus) (Quit: Client closed) |
| 19:44:11 | <hellwolf[m]> | what is distinguishable, or the meaning of equality here? Runtime representation wise? |
| 19:44:34 | <gurkenglas> | of course, what i actually want instead of my last line 2 minutes ago is "the subtype of X a on which all functions (forall a. X a -> Y a) agree". i might be able to build it from this, using -> Void and the like? but maybe there's a nicer way |
| 19:45:16 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) |
| 19:45:45 | <gurkenglas> | hellwolf[m]: observation-wise - whether you can use it to tell between "const id" and "cost" |
| 19:45:50 | <gurkenglas> | s/cost/const/ |
| 19:47:48 | <gurkenglas> | hm, my attempt doesn't work because constraint could be Applicative and then the (x a -> x b -> x c) needn't be const id or const. |
| 19:48:16 | × | dcoutts_ quits (~duncan@cpc69403-oxfd27-2-0-cust285.4-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 19:50:01 | <hellwolf[m]> | I wonder how you can prove such thing in logic.... you'd have to contradiction? |
| 19:50:09 | <hellwolf[m]> | I can't imagine how you'd do that even in Agda |
| 19:54:16 | <gurkenglas> | i need to both force the definer of distinguish to be unable to set x to anything but Const, and force the caller of distinguish to be unable to assume anything about x... |
| 19:56:41 | → | gmg joins (~user@user/gehmehgeh) |
| 20:01:25 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds) |
| 20:03:10 | <hellwolf[m]> | What about coercibles. Maybe it's relevant to know how this is being used? |
| 20:03:30 | → | mei joins (~mei@user/mei) |
| 20:03:51 | <gurkenglas> | hellwolf[m], a category is a way to compose paths-of-arrows such that any way to compose em that you can construct from that one is that one |
| 20:04:25 | <gurkenglas> | which looks suspiciously-convenient enough that one might be able to express it in a type somehow |
| 20:04:55 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 20:09:28 | <ncf> | gurkenglas: what is to stop me from defining distinguish for t ~ () ? just return Left always? |
| 20:10:00 | <gurkenglas> | ncf: Left what? :) |
| 20:10:56 | <ncf> | ah i see |
| 20:11:07 | <ncf> | let me flip this around then: how do you define distinguish @Bool? |
| 20:11:57 | <gurkenglas> | Good question! the hope-plan was: call the argument with x=Const Bool, figure out which one it is, return that one |
| 20:12:03 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 20:12:13 | qhong_ | is now known as qhong |
| 20:12:14 | <gurkenglas> | but yes, there's a problem convincing the compmiler that this works out |
| 20:12:31 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 20:17:47 | <gurkenglas> | "a type t has at least two inhabitants if for any a b there is some t -> Either a b via which you can build (a,b)"... |
| 20:18:05 | <gurkenglas> | (a and b both inhabited, of course) |
| 20:18:15 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) (Remote host closed the connection) |
| 20:19:23 | × | dhil quits (~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 248 seconds) |
| 20:19:44 | × | lyle quits (~lyle@104.246.145.237) (Quit: WeeChat 3.8) |
| 20:22:32 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 20:26:53 | × | akegalj quits (~akegalj@89-164-77-228.dsl.iskon.hr) (Quit: leaving) |
| 20:27:07 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
| 20:28:38 | <hellwolf[m]> | would a this alternative work |
| 20:28:38 | <hellwolf[m]> | class AtLeastTwoInhatants k where |
| 20:28:38 | <hellwolf[m]> | prove_me :: (~(Coercible a b), k a, k b) => a -> b -> () |
| 20:28:38 | <hellwolf[m]> | Ignore me if I am completely misunderstanding it. |
| 20:29:02 | <hellwolf[m]> | (doing it on mobile.. likely wrong code) |
| 20:29:16 | <ncf> | can you negate constraints like that? |
| 20:30:33 | <gurkenglas> | k is a constraint here? a and b are... surely not inhabitants? |
| 20:32:22 | <gurkenglas> | "a type o has exactly one inhabitant iff any calculation you can do with it, you can do without it"... where once again i can't express "and arrive at the same result" |
| 20:33:10 | <gurkenglas> | ...or can I? |
| 20:34:52 | <gurkenglas> | nope. thought free theorems would get me "same result" in this case, but not quite. |
| 20:36:15 | × | mauke quits (~mauke@user/mauke) (Read error: Connection reset by peer) |
| 20:37:06 | → | mauke joins (~mauke@user/mauke) |
| 20:40:46 | <dminuoso_> | ncf: At least in case of Coercible, a Nocoercible constraint is at least conceivable on a technical level |
| 20:40:50 | × | CiaoSen quits (~Jura@p200300c9570e91002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 20:41:02 | <dminuoso_> | But not in general |
| 20:42:40 | <gurkenglas> | "a type o has exactly one inhabitant iff any (o -> Either a b) -> x a b polymorphic in a and b must have the x a b be actually (forall c. x a c) or (forall c. x c b)" |
| 20:43:39 | <gurkenglas> | but how do i say that it is polymorphic in a and b while remaining able to say that we can make some (forall c. x a c) or (forall c. x c b) out of it? |
| 20:45:26 | <jean-paul[m]> | Can I get a pretty printer for lists of byte strings in tasty / hunit test failures? |
| 20:45:58 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds) |
| 20:49:22 | <hellwolf[m]> | https://hackage.haskell.org/package/type-eq-0.5/docs/Type-Eq.html would this be of any help |
| 20:49:33 | <gurkenglas> | oh, of course! |
| 20:51:53 | → | fnurglewitz joins (uid263868@id-263868.lymington.irccloud.com) |
| 20:54:04 | <gurkenglas> | @let class ExactlyOne o where sift :: (forall x a b. (o -> Either a b) -> x a b) -> forall r. ((forall x a b c. (o -> Either a b) -> x a c) -> r) -> ((forall x a b c. (o -> Either a b) -> x c b) -> r) -> r -- does this do it? I think this does it! |
| 20:54:05 | <lambdabot> | /sandbox/tmp/.L.hs:177:9: error: |
| 20:54:05 | <lambdabot> | Multiple declarations of ‘sift’ |
| 20:54:05 | <lambdabot> | Declared at: /sandbox/tmp/.L.hs:170:9 |
| 20:54:11 | <gurkenglas> | @undefine |
| 20:54:11 | <lambdabot> | Undefined. |
| 20:54:15 | <gurkenglas> | @let class ExactlyOne o where sift :: (forall x a b. (o -> Either a b) -> x a b) -> forall r. ((forall x a b c. (o -> Either a b) -> x a c) -> r) -> ((forall x a b c. (o -> Either a b) -> x c b) -> r) -> r |
| 20:54:17 | <lambdabot> | Defined. |
| 20:54:39 | <gurkenglas> | (excuse the impredicative-types-caused continuation passing style.) |
| 20:55:27 | <gurkenglas> | a *separate* question is whether this can actually be instantiated for (), but that feels relatively possible since the space of all x is so large |
| 20:56:07 | <fnurglewitz> | hi, anyone knows an http library that gives you a lazy bytestring when GETting a file? I would like to pipe it into json-stream to avoid loading a quite big json (1.5+ gigs) into memory |
| 20:57:29 | × | Guest5069 quits (~m-mzmz6l@38.242.236.220) (Remote host closed the connection) |
| 20:59:01 | → | manwithl- joins (~manwithlu@hoeven.dossingday.ml) |
| 20:59:02 | → | dcoutts_ joins (~duncan@cpc69403-oxfd27-2-0-cust285.4-3.cable.virginm.net) |
| 20:59:14 | → | root joins (~m-mzmz6l@vmi833741.contaboserver.net) |
| 20:59:28 | <gurkenglas> | (flaw spotted in ExactlyOne: the x renders sift's first argument too powerful. maybe one can just replace every "Either a b" with "Either (forall c. x a c) (forall c. x c b)"?) |
| 20:59:38 | root | is now known as Guest3592 |
| 21:02:15 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Remote host closed the connection) |
| 21:02:39 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 21:05:16 | <hellwolf[m]> | And this old article: https://ryanglscott.github.io/2018/03/04/how-quantifiedconstraints-can-let-us-put-join-back-in-monad/ |
| 21:06:57 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 21:06:59 | → | Sciencentistguy7 joins (~sciencent@hacksoc/ordinary-member) |
| 21:07:28 | × | manwithluck quits (~manwithlu@194.177.28.192) (Quit: ZNC - https://znc.in) |
| 21:07:50 | × | manwithl- quits (~manwithlu@hoeven.dossingday.ml) (Quit: ZNC - https://znc.in) |
| 21:09:27 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds) |
| 21:09:27 | Sciencentistguy7 | is now known as Sciencentistguy |
| 21:10:12 | → | manwithluck joins (~manwithlu@hoeven.dossingday.ml) |
| 21:11:31 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 21:16:23 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 264 seconds) |
| 21:18:18 | → | cheater_ joins (~Username@user/cheater) |
| 21:18:45 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) |
| 21:20:55 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 21:21:03 | cheater_ | is now known as cheater |
| 21:23:15 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) (Ping timeout: 260 seconds) |
| 21:26:18 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 21:30:36 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 21:31:05 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 21:31:21 | → | jinsun__ joins (~jinsun@user/jinsun) |
| 21:31:21 | × | jinsun quits (~jinsun@user/jinsun) (Killed (silver.libera.chat (Nickname regained by services))) |
| 21:31:21 | jinsun__ | is now known as jinsun |
| 21:31:43 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) (Ping timeout: 248 seconds) |
| 21:37:13 | <hellwolf[m]> | gurkenglas: what about this https://pastebin.com/zemLtfu0 |
| 21:38:06 | hellwolf[m] | sent a code block: https://libera.ems.host/_matrix/media/v3/download/libera.chat/5a8f2d13e43ce63d40d6878ec6fe2a8d13d4067f |
| 21:42:27 | × | mauke quits (~mauke@user/mauke) (Read error: Connection reset by peer) |
| 21:46:55 | → | mauke joins (~mauke@user/mauke) |
| 21:49:20 | × | czy quits (~user@50.30.140.25) (Quit: ERC 5.4.1 (IRC client for GNU Emacs 30.0.50)) |
| 21:49:40 | → | czy joins (~user@host-140-25.ilcub310.champaign.il.us.clients.pavlovmedia.net) |
| 21:50:08 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) |
| 21:55:23 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds) |
| 21:57:34 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) (Ping timeout: 268 seconds) |
| 22:00:11 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 264 seconds) |
| 22:01:29 | × | dgb8 quits (~dgb@astra4961.startdedicated.net) (Quit: Ping timeout (120 seconds)) |
| 22:01:29 | × | phma quits (~phma@host-67-44-208-37.hnremote.net) (Read error: Connection reset by peer) |
| 22:01:45 | → | dgb8 joins (~dgb@astra4961.startdedicated.net) |
| 22:02:05 | → | mechap joins (~mechap@user/mechap) |
| 22:02:37 | → | phma joins (phma@2001:5b0:215a:9618:c34:315f:ca7c:13ac) |
| 22:03:22 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) |
| 22:04:08 | <mauke> | how do I know which version of base Data.Ord.clamp was added in? |
| 22:05:40 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 22:06:25 | <lyxia> | enumerate base versions? |
| 22:06:35 | <xerox> | https://github.com/ghc/ghc/commit/fc965c0910757410d624229419f36f0829cf73f6 |
| 22:06:52 | <lyxia> | it's in 4.16 but not 4.15 |
| 22:07:40 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 22:08:07 | <mauke> | xerox: I know the commit |
| 22:08:11 | <mauke> | but how does that help me? |
| 22:08:25 | <xerox> | mauke: to be honest I was just hoping it would! |
| 22:10:18 | <geekosaur> | it shows what ghc release tags it's in, then check version-history to see what version of base corresponds to the oldest? (9.2.1 => 4.16.0.0) |
| 22:10:46 | <xerox> | maybe with ghcup one can figure out ghc<->base mapping? I have some vague memory about that |
| 22:11:02 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) (Ping timeout: 255 seconds) |
| 22:11:29 | <segfaultfizzbuzz> | so i was watching this: https://twitter.com/chenwang_j/status/1628792565385564160 and it got me thinking about the fact that this robot would watch a towel it was supposed to fold, and then when the environment (a hostile person) comes along an unfolds the towel, the robot figures out the right way to re-fold the towel |
| 22:11:38 | <geekosaur> | yes, ghcup tui in particular shows which base version goes with a ghc version |
| 22:11:56 | × | trev quits (~trev@user/trev) (Remote host closed the connection) |
| 22:12:39 | <lyxia> | also https://wiki.haskell.org/Base_package |
| 22:12:44 | <segfaultfizzbuzz> | in the context of programming, this would be like assuming that the program state can get screwed up in many ways and having the program "comb" the program state towards some kind of fixed point,... |
| 22:12:53 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Read error: Connection reset by peer) |
| 22:13:20 | <segfaultfizzbuzz> | this would (i guess?) be an alternative to the pure functional style of programming, ... is there a name for this? |
| 22:14:25 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 246 seconds) |
| 22:16:11 | × | michalz quits (~michalz@185.246.207.215) (Remote host closed the connection) |
| 22:16:33 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 22:16:52 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) |
| 22:19:39 | <[exa]> | l.org/Base_package |
| 22:19:55 | <[exa]> | oh noes wrong button, sorry |
| 22:20:30 | <segfaultfizzbuzz> | [exa]: any commentary on "fixed point oriented computing"? |
| 22:22:48 | <c_wraith> | Just replace direct recursion with explicit fixed-point combinators |
| 22:22:58 | <c_wraith> | then all programming is fixed-point-oriented |
| 22:23:52 | × | fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 246 seconds) |
| 22:24:33 | <segfaultfizzbuzz> | c_wraith: how does that interact with mutability? and i don't understand what a fixed-point combinator is |
| 22:25:06 | <c_wraith> | > fix (\loop n -> if n == 0 then 1 else n * loop (n - 1)) 5 |
| 22:25:08 | <lambdabot> | 120 |
| 22:26:08 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 22:26:21 | <c_wraith> | as far as working with mutability, one of my favorite uses of fix is for loops in IO that close over something previously bound in a do block. |
| 22:26:24 | × | mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8) |
| 22:26:47 | <segfaultfizzbuzz> | hmmm? ok i will have to look up fix, but do you have a small example of this? |
| 22:26:57 | <c_wraith> | :t fix |
| 22:26:58 | <lambdabot> | (a -> a) -> a |
| 22:26:59 | <segfaultfizzbuzz> | so i guess this is a structure which is actually used? |
| 22:27:13 | <c_wraith> | Don't try to make too much sense out of that type. It's a logical fallacy. :) |
| 22:27:20 | <segfaultfizzbuzz> | lol |
| 22:27:30 | <segfaultfizzbuzz> | the more i learn about programming the less i try to make sense out of anything |
| 22:28:05 | ← | weirdsmiley parts (~weirdsmil@103.25.231.102) () |
| 22:28:07 | <c_wraith> | you know how like foldl is abstracting out "recursion with an accumulator"? |
| 22:28:23 | <c_wraith> | fix is abstracting out general recursion. Just any and all recursion |
| 22:28:35 | <segfaultfizzbuzz> | vaguely, i get the folds mixed up but sure one of them has an accumulator ;-) |
| 22:28:45 | <segfaultfizzbuzz> | ok interesting and strange |
| 22:29:08 | <c_wraith> | it's *mostly* of theoretical interest |
| 22:29:23 | <segfaultfizzbuzz> | ok, but what i am talking about is extremely practical |
| 22:29:29 | <c_wraith> | But there are some times when it's more convenient. |
| 22:29:54 | × | kuribas quits (~user@ptr-17d51eo9wm7f6qjcnfd.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1)) |
| 22:30:09 | <hpc> | arguably fix isn't the interesting bit, but the function you pass to it |
| 22:30:21 | <segfaultfizzbuzz> | i am saying is that the pure fp paradigm is to minimize shared state, be explicit with state, etc... basically treat program state like a fragile piece of glass which is delicately handed off |
| 22:30:24 | <hpc> | (\loop n -> if n == 0 then 1 else n * loop (n - 1)) is a perfectly fine lambda |
| 22:30:38 | <hpc> | and you can pass it to fix, or you can pass it to a modified fix that prints all the intermediate results |
| 22:30:53 | <segfaultfizzbuzz> | whereas i am saying that the opposite is also interesting, which is to assume that your program state always gets screwed up and write code which can bring it back to a good state, however the program state gets broken |
| 22:30:56 | <hpc> | or steps through the function every time you press enter |
| 22:31:53 | <c_wraith> | yeah. moving the recursion out allows you to modify the way recursion works. |
| 22:32:24 | × | EvanR quits (~EvanR@user/evanr) (Remote host closed the connection) |
| 22:32:27 | <hpc> | :t iterate |
| 22:32:28 | <lambdabot> | (a -> a) -> a -> [a] |
| 22:32:34 | <hpc> | > iterate (\loop n -> if n == 0 then 1 else n * loop (n - 1)) |
| 22:32:35 | <lambdabot> | <(Integer -> Integer) -> [Integer -> Integer]> |
| 22:32:44 | → | EvanR joins (~EvanR@user/evanr) |
| 22:33:06 | <hpc> | > iterate ((\loop n -> if n == 0 then 1 else n * loop (n - 1)) 5) |
| 22:33:07 | <lambdabot> | error: |
| 22:33:07 | <lambdabot> | • No instance for (Num (Integer -> Integer)) |
| 22:33:07 | <lambdabot> | arising from a use of ‘e_10115’ |
| 22:33:24 | <hpc> | bah, pretend i am not an idiot right now :P |
| 22:33:39 | <c_wraith> | there's a reason I tested in a private chat with lambdabot first :) |
| 22:33:55 | <c_wraith> | it's not that I'm magically good at this stuff, it's that I hide all my failures |
| 22:34:40 | <hpc> | i was feeling lucky |
| 22:34:46 | <hpc> | i didn't learn my lesson from clint eastwood :P |
| 22:34:51 | <segfaultfizzbuzz> | hahaha |
| 22:35:54 | → | thegeekinside joins (~thegeekin@189.180.66.126) |
| 22:36:26 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 22:37:25 | SenFache | is now known as Sauvin |
| 22:38:00 | <c_wraith> | anyway... this is a different kind of fixed point than you probably meant. |
| 22:38:08 | → | ph88 joins (~ph88@ip5b426553.dynamic.kabel-deutschland.de) |
| 22:38:08 | <c_wraith> | this is a fixed point in domain theory |
| 22:39:05 | <ph88> | i'm trying to model connecting to a server and tracking the server's state (i'm writing the client). From this post https://stackoverflow.com/a/28696299/1833322 what would be the type of DVD ? what could/should i put there ? |
| 22:40:06 | <c_wraith> | > fix $ (0:) . scanl (+) 1 -- and of course, there's everyone's favorite parlor trick with fix |
| 22:40:08 | <lambdabot> | [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,... |
| 22:40:16 | <segfaultfizzbuzz> | c_wraith: a simple example of what i mean by fixed point would be "the entries in this list of integers shall be sorted by value" |
| 22:40:38 | <segfaultfizzbuzz> | c_wraith: the list we will treat as a mutable structure, and something will mutate the list to generate a list which violates the fixed point |
| 22:41:43 | → | biberu joins (~biberu@user/biberu) |
| 22:41:58 | <hpc> | ph88: in that particular example? maybe it would be a wrapper around a device file like "/dev/cdrom0" |
| 22:42:10 | <segfaultfizzbuzz> | c_wraith: and then something periodically checks that the list is indeed sorted by value, realizes it is not sorted by value, and then begins sorting the list... |
| 22:42:14 | <hpc> | or maybe you're writing a hypervisor and it can be either a device or a path to a .iso file |
| 22:42:32 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 22:42:38 | <segfaultfizzbuzz> | lol fix fibonacci parlor trick eh |
| 22:42:59 | <hpc> | for you, dInsert might be onClientConnect, and dEject onClientDisconnect |
| 22:43:01 | <hpc> | or something |
| 22:43:12 | <hpc> | and DVD would be replaced with some info about the client that's connecting |
| 22:44:17 | <ph88> | hpc, i am writing the client .. maybe it would hold some info about the connection to the server ? |
| 22:44:34 | <hpc> | yeah, probably that then |
| 22:44:36 | <[Leary]> | segfaultfizzbuzz: That's just a data invariant. If deviations are observable, however, then it's quite pointless. A system that maintains invariants by preventing such observation but nevertheless proceeds optimistically would be something like STM. |
| 22:44:56 | × | lxi quits (~quassel@2a02:2f08:4d1c:400:508d:2f08:6dd4:357e) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 22:44:57 | <hpc> | at a minimum, the handle it communicates over |
| 22:45:31 | <ph88> | hpc, in the example of the DVD the state transitions make a circle. A -> B -> C -> A (as example) .. but in my case i have a diamond shape like A -> B, A -> C, B -> D, C -> D, D -> A how should i model that ? |
| 22:45:44 | <segfaultfizzbuzz> | [Leary]: i am here actually saying that the invariant *can* be violated, but that the program works to restore the invariant when it (inevitably) breaks |
| 22:46:07 | <hpc> | you'd have more sorts of things with which you index the monad |
| 22:46:14 | <hpc> | and then functions that represent each of those transitions |
| 22:46:44 | <hpc> | so like how dInsert is False->True and dEject is True->False, maybe you have |
| 22:46:54 | <hpc> | connect is Disconnected->Request |
| 22:47:03 | <hpc> | send is Request->Response |
| 22:47:03 | → | Ashkan joins (~Ashkan@a119011.upc-a.chello.nl) |
| 22:47:09 | <hpc> | and close is Response->Disconnected |
| 22:47:18 | <ph88> | hpc, i have this https://bpa.st/EG7F6 .. but i'm not sure if it is the right shape. It's supposed to track the state of the server |
| 22:47:54 | <ph88> | hpc, i have connect Disconnected -> Connected and connect Disconnected -> Defunct (connection refused). That is what i meant with diamond shape state transition |
| 22:48:01 | <hpc> | ah |
| 22:49:17 | <Ashkan> | Hi |
| 22:49:18 | <Ashkan> | I need to share a `Map` between multiple (green) threads, each thread potentially trying to both read from and write to the map. I should use `TVar` right ? |
| 22:49:31 | <ph88> | hpc, here i get confused https://bpa.st/7G5IQ |
| 22:50:10 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-219.46.114.pool.telefonica.de) (Ping timeout: 260 seconds) |
| 22:50:23 | <hpc> | Ashkan: yeah, probably |
| 22:50:33 | <hpc> | TVar is transaction-y, MVar is lock-y |
| 22:50:56 | <hpc> | if you change your mind later, they have pretty much the exact same api |
| 22:51:01 | <Ashkan> | hpc Thank you . Care to elaborate on the *probably* part ? |
| 22:51:03 | <hpc> | shouldn't be too hard to switch |
| 22:51:53 | <hpc> | Ashkan: depending on access patterns one might be faster than the other |
| 22:51:57 | <[Leary]> | segfaultfizzbuzz: Yes, my point is that you really want your system to cleverly fix the breakage before anything else is able to notice it. An invariant that can't be assumed to hold at the time of observation doesn't buy you anything. |
| 22:52:03 | <Ashkan> | hpc Oh I see, the `TVar` vs `MVar` . I believe I'm better of with the safer option so `TVar` for now:D |
| 22:52:05 | <hpc> | like if you have lots of reads, it's silly to have MVar's locking |
| 22:53:14 | <hpc> | ph88: i guess you're running into that you don't know statically if a connect succeeded |
| 22:53:33 | <hpc> | so you can't really produce one or the other, and you can't express it in the type either |
| 22:54:02 | <ph88> | hpc, no i don't know that statically .. but i would only like to allow those two options as valid state. I was thinking about making it an Either |
| 22:54:05 | <Ashkan> | hpc I see your point. The actual usage profile is to be seen. The idea is to share a central registry of sorts between threads that are spawn as clients make http calls to endpoints (`createGame` / `joinGame` / `listGames`) in Yesod |
| 22:54:13 | <hpc> | maybe, withConnection :: ConnectOptions -> (Server Connected k a) -> (Server ??? k a)? |
| 22:54:16 | <hpc> | or something |
| 22:54:55 | <c_wraith> | Ashkan: TVar use is more likely to run into thundering herd issues if you aren't careful with how you use them. but the compose cleanly with a very nice API, unlike MVars |
| 22:55:07 | → | zeenk joins (~zeenk@2a02:2f04:a20d:f900::7fe) |
| 22:55:13 | <hpc> | or maybe, withConnection :: ConnectOptions -> (Server Connected k a) -> (Server Defunct k a) -> (Server ??? k a) |
| 22:55:27 | <ph88> | hpc, Either was suggested on slide 34 / 35 here https://www.lambdadays.org/static/upload/media/1519637389130819oskarwickstromfinitestatemachines_.pdf |
| 22:55:28 | <hpc> | and then withConnection dynamically moves things through the right states |
| 22:55:54 | <hpc> | that works too, you'd need a data constructor that can satisfy that type |
| 22:56:05 | <hpc> | (for Server) |
| 22:56:06 | <ph88> | but then on slide 37 "Either would not work, only handles two" |
| 22:56:22 | <ph88> | ok i will try to remodel State type |
| 22:57:59 | <Ashkan> | c_wraith honestly not sure how things will turn out atm but I appreciate the heads up |
| 22:58:32 | <segfaultfizzbuzz> | [Leary]: realistically the core of a computer program will be stateful (such as a database) and mutable... and mutation means your invariants will break... |
| 22:58:38 | <ph88> | hpc, i think that doesn't work out https://bpa.st/ATWNO |
| 22:59:51 | <[Leary]> | segfaultfizzbuzz: "Break" /internally/. Not /observably/, from the outside. |
| 23:00:59 | <c_wraith> | Ashkan: This is also a space where a bit of bog-standard software engineering can resolve a lot of issues. Like if you meaningfully stripe your data structures to reduce update conflicts, you've made a massive improvement no matter which approach you're using. |
| 23:01:28 | <hpc> | probably just need to rename those constructors then? |
| 23:03:05 | <Ashkan> | I was thinking, if perhaps there is something to the effect of `StateT` but for concurrent access ? |
| 23:03:44 | <segfaultfizzbuzz> | [Leary]: well,... if the invariant breaks internally then at the very least the outside will encounter a delay as it is being restored |
| 23:03:50 | → | slack1256 joins (~slack1256@186.11.13.167) |
| 23:03:55 | <hpc> | Ashkan: that's what STM and such are :P |
| 23:04:14 | <hpc> | there's no getting around that concurrency is tricky |
| 23:05:34 | <Ashkan> | Yeah but STM is more like modify in-place, *mutable* shared state but in `StateT` nothing is mutated. I was thinking could it be that there is a state monad but for concurrent access. Maybe it doesn't make sense. Too much cognitive load for my peanut Scala brain:D |
| 23:06:08 | <c_wraith> | Ashkan: there are ideas like CSP |
| 23:06:18 | <hpc> | the value inside isn't mutated, just what value TVars point to |
| 23:06:30 | <hpc> | in a (TVar Int), that Int value isn't suddenly mutable, it just gets switched out |
| 23:06:31 | <[Leary]> | segfaultfizzbuzz: That's not important. What matters is that the program never sees data violating the invariant. |
| 23:06:45 | <hpc> | the TVar part is what mutates |
| 23:06:49 | <segfaultfizzbuzz> | ok... |
| 23:07:34 | <c_wraith> | Ashkan: a library like https://hackage.haskell.org/package/chp gives you access to something a lot like go channels. (They're also based on CSP.) They are much more constrained than general mutable cells |
| 23:08:14 | <hpc> | segfaultfizzbuzz: for an example of mutation that's abstracted over the way [Leary] talks about, imagine a really slow thunk |
| 23:08:18 | <c_wraith> | .... though that library is old enough I'm not sure if it still builds... |
| 23:08:20 | <hpc> | like the thunk for (busyBeaver 5) |
| 23:08:38 | <segfaultfizzbuzz> | lol busyBeaver 5 |
| 23:08:40 | <hpc> | it eventually resolves to an Int, and the first time you evaluate it your computer gets warm |
| 23:08:55 | <hpc> | the thunk gets mutated so instead of calculating it just produces the value |
| 23:08:56 | <Ashkan> | hpc hmm ... should think on it some more. I thought since concurrent access means sequencing is essentially lost, then talking *monadic* access is meaningless hence the shared states becomes mutable in nature |
| 23:09:01 | <hpc> | (this is actually how ghc works) |
| 23:09:12 | <segfaultfizzbuzz> | ok... |
| 23:09:16 | <c_wraith> | hpc: I don't think there's a Haskell implementation where Int is large enough to hold the result of busybeaver 5 |
| 23:09:48 | <hpc> | c_wraith: your install doesn't have Int1267650600228229401496703205376? |
| 23:10:00 | <c_wraith> | let me double-check |
| 23:10:19 | <hpc> | :D |
| 23:10:21 | <c_wraith> | I don't even have something as cool as Int128 |
| 23:10:25 | × | thegeekinside quits (~thegeekin@189.180.66.126) (Remote host closed the connection) |
| 23:11:00 | <hpc> | segfaultfizzbuzz: anyhoo, there's even a mutation before it starts evaluating |
| 23:11:27 | <hpc> | segfaultfizzbuzz: if you've ever written a loop that results in just printing <loop>, you've encountered that modified thunk |
| 23:11:42 | → | stackdroid18 joins (14094@de1.hashbang.sh) |
| 23:11:45 | <hpc> | a thunk currently being evaluated gets modified so re-entering it detects a loop |
| 23:11:56 | <c_wraith> | oh, huh. This blog post I'm re-reading is bringing up an idea closely related to busy beavers. fun! |
| 23:11:57 | <hpc> | (or makes the thread go to sleep until something else can kill it, in the threaded runtime) |
| 23:12:31 | <hpc> | > fix id |
| 23:12:33 | <lambdabot> | *Exception: <<loop>> |
| 23:12:54 | <hpc> | ghc didn't solve the halting problem :P |
| 23:12:58 | <c_wraith> | the GC can kill a thread blocked on itself in the threaded runtime. I was surprised the first time I discovered that. |
| 23:13:50 | <hpc> | oh, that's neat |
| 23:14:01 | <segfaultfizzbuzz> | oh wow really |
| 23:14:04 | <c_wraith> | But it makes sense. the GC is all about tracking dependencies around |
| 23:14:36 | <c_wraith> | It obviously can't detect *all* evaluation loops, as some are too complex for it. But it can detect a lot of simplified ones. |
| 23:16:31 | <hpc> | in javascript, one might write a thunk as var thunk = function() {result = calculation(); thunk = function() {return result}; return result} |
| 23:17:02 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
| 23:17:54 | × | opticblast quits (~Thunderbi@172.58.82.191) (Quit: opticblast) |
| 23:18:13 | → | opticblast joins (~Thunderbi@172.58.82.191) |
| 23:18:19 | <hpc> | although probably not that exact way, you would have a hard time passing thunk around, but you get the idea |
| 23:20:50 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) |
| 23:22:42 | × | opticblast quits (~Thunderbi@172.58.82.191) (Ping timeout: 255 seconds) |
| 23:25:06 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8429:4ceb:8103:61ef) (Ping timeout: 252 seconds) |
| 23:29:40 | × | Ashkan quits (~Ashkan@a119011.upc-a.chello.nl) (Quit: Client closed) |
| 23:34:23 | → | whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com) |
| 23:39:10 | <ph88> | is it possible to make GADT without type variable ? |
| 23:40:40 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 23:40:48 | <hpc> | it wouldn't be a GADT, but the syntax is still available |
| 23:40:52 | <geekosaur> | ? you can use GADT syntax but I don't think a GADT is meaningful without a type variable |
| 23:40:58 | <hpc> | you can even get just the syntax with the GADTSyntax extension |
| 23:41:18 | <mauke> | my game is not tiny enough :-( |
| 23:41:26 | → | opticblast joins (~Thunderbi@172.58.82.191) |
| 23:43:23 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:45:52 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 252 seconds) |
| 23:46:08 | <ph88> | hpc, geekosaur understood thank you |
| 23:51:39 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
| 23:52:10 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 23:52:44 | <geekosaur> | what are you trying to accomplish? |
| 23:52:45 | × | xff0x quits (~xff0x@ai081074.d.east.v6connect.net) (Ping timeout: 246 seconds) |
| 23:53:09 | → | xff0x joins (~xff0x@178.255.149.135) |
| 23:54:38 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
| 23:56:39 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds) |
| 23:58:24 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:59:24 | <ph88> | geekosaur, this is my code from my editor https://bpa.st/IWBKA i'm trying to model all possible state transitions. (see links in documentation) .. i'm not sure if it's going to work like this, do you have a better idea ? |
All times are in UTC on 2023-02-28.