Logs on 2024-03-26 (liberachat/#haskell)
| 00:02:40 | → | caconym7 joins (~caconym@user/caconym) |
| 00:04:15 | × | caconym quits (~caconym@user/caconym) (Ping timeout: 260 seconds) |
| 00:04:15 | caconym7 | is now known as caconym |
| 00:04:36 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:09:19 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 00:10:32 | × | tushar quits (~tushar@103.46.201.22) (Ping timeout: 260 seconds) |
| 00:14:59 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 260 seconds) |
| 00:22:32 | → | rvalue joins (~rvalue@user/rvalue) |
| 00:33:14 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 00:33:23 | × | [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection) |
| 00:41:50 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 00:45:58 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds) |
| 00:47:24 | × | mima quits (~mmh@aftr-62-216-211-241.dynamic.mnet-online.de) (Ping timeout: 260 seconds) |
| 00:53:32 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 00:54:32 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 00:57:55 | → | drdo joins (~drdo@bl5-29-74.dsl.telepac.pt) |
| 01:09:07 | × | shapr quits (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 256 seconds) |
| 01:12:48 | → | Square joins (~Square4@user/square) |
| 01:19:21 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 01:29:34 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 01:30:44 | → | califax_ joins (~califax@user/califx) |
| 01:30:46 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 01:32:01 | califax_ | is now known as califax |
| 01:35:41 | × | forell_ quits (~forell@host-178-216-90-220.sta.tvknaszapraca.pl) (Ping timeout: 240 seconds) |
| 01:40:26 | → | cheater joins (~Username@user/cheater) |
| 01:41:30 | → | sprout_ joins (~quassel@2a02-a448-3a80-0-e595-ce43-46c0-8c8c.fixed6.kpn.net) |
| 01:41:41 | × | sprout quits (~quassel@2a02-a448-3a80-0-355e-e5b2-f32d-a9c5.fixed6.kpn.net) (Ping timeout: 240 seconds) |
| 01:42:34 | → | notzmv joins (~daniel@user/notzmv) |
| 01:45:18 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 01:47:47 | sprout_ | is now known as sprout |
| 01:47:55 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 01:48:28 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
| 01:49:10 | × | petrichor quits (~znc-user@user/petrichor) (Ping timeout: 268 seconds) |
| 01:50:21 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 256 seconds) |
| 01:53:41 | → | petrichor joins (~znc-user@user/petrichor) |
| 02:02:59 | × | petrichor quits (~znc-user@user/petrichor) (Ping timeout: 264 seconds) |
| 02:03:21 | → | petrichor joins (~znc-user@user/petrichor) |
| 02:10:28 | × | xff0x quits (~xff0x@2405:6580:b080:900:3f35:2895:6fd4:d2c6) (Ping timeout: 260 seconds) |
| 02:14:59 | × | mulk quits (~mulk@p5b112c85.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 02:15:15 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 02:16:01 | → | mulk joins (~mulk@p5b2dc4f3.dip0.t-ipconnect.de) |
| 02:16:57 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 02:17:58 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 02:18:31 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 02:18:57 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 02:19:09 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 02:23:16 | × | otto_s quits (~user@p4ff27516.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 02:24:09 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Read error: Connection reset by peer) |
| 02:24:59 | → | otto_s joins (~user@p4ff27cae.dip0.t-ipconnect.de) |
| 02:25:01 | → | [Leary] joins (~Leary]@user/Leary/x-0910699) |
| 02:27:26 | hammond__ | is now known as h_______________ |
| 02:27:59 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 02:28:11 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 02:36:08 | × | liskin quits (~liskin@xmonad/liskin) (Ping timeout: 260 seconds) |
| 02:36:27 | → | liskin joins (~liskin@xmonad/liskin) |
| 02:40:57 | × | tertek quits (~tertek@user/tertek) (Quit: %quit%) |
| 02:41:18 | → | tertek joins (~tertek@user/tertek) |
| 02:51:05 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 272 seconds) |
| 02:56:04 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 03:21:32 | → | forell joins (~forell@user/forell) |
| 03:28:30 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 03:30:59 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 03:36:48 | × | forell quits (~forell@user/forell) (Ping timeout: 260 seconds) |
| 03:41:42 | × | td__ quits (~td@i53870914.versanet.de) (Ping timeout: 268 seconds) |
| 03:43:01 | → | td_ joins (~td@i5387093F.versanet.de) |
| 03:43:26 | → | forell joins (~forell@user/forell) |
| 03:45:00 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
| 03:48:49 | × | iteratee quits (~kyle@162.218.222.207) (Read error: Connection reset by peer) |
| 03:49:20 | → | iteratee joins (~kyle@162.218.222.207) |
| 03:51:45 | × | mei quits (~mei@user/mei) (Ping timeout: 256 seconds) |
| 04:01:49 | → | igemnace joins (~ian@user/igemnace) |
| 04:03:50 | → | mei joins (~mei@user/mei) |
| 04:05:05 | → | aforemny joins (~aforemny@2001:9e8:6cfa:3600:3f10:37b1:467:310c) |
| 04:05:56 | × | aforemny_ quits (~aforemny@i59F516FA.versanet.de) (Ping timeout: 252 seconds) |
| 04:07:52 | → | rosco joins (~rosco@2402:b400:4460:fc63:80a6:a666:aa55:2612) |
| 04:10:52 | × | forell quits (~forell@user/forell) (Quit: ZNC - https://znc.in) |
| 04:11:39 | → | forell joins (~forell@user/forell) |
| 04:14:58 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 260 seconds) |
| 04:15:58 | × | dsmith quits (~dsmith@024-029-202-168.inf.spectrum.com) (Ping timeout: 246 seconds) |
| 04:16:10 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 04:18:33 | → | Pixi` joins (~Pixi@user/pixi) |
| 04:18:45 | → | dsmith joins (~dsmith@024-029-202-168.inf.spectrum.com) |
| 04:21:05 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 04:21:42 | × | Pixi quits (~Pixi@user/pixi) (Ping timeout: 256 seconds) |
| 04:24:41 | → | falafel joins (~falafel@2607:fb91:8aa:877b:62d7:31a2:4645:9cb9) |
| 04:29:19 | × | falafel quits (~falafel@2607:fb91:8aa:877b:62d7:31a2:4645:9cb9) (Ping timeout: 260 seconds) |
| 04:35:52 | × | adium quits (adium@user/adium) (Remote host closed the connection) |
| 04:36:45 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 04:38:04 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:41:02 | × | pastly quits (~pastly@gateway/tor-sasl/pastly) (Remote host closed the connection) |
| 04:41:41 | → | pastly joins (~pastly@gateway/tor-sasl/pastly) |
| 04:41:55 | × | mmhat quits (~mmh@p200300f1c706a298ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.2.1) |
| 04:47:34 | → | tushar joins (~tushar@103.46.201.22) |
| 04:52:45 | × | pastly quits (~pastly@gateway/tor-sasl/pastly) (Remote host closed the connection) |
| 04:53:11 | → | pastly joins (~pastly@gateway/tor-sasl/pastly) |
| 04:59:48 | × | califax quits (~califax@user/califx) (Read error: Connection reset by peer) |
| 04:59:48 | × | ec quits (~ec@gateway/tor-sasl/ec) (Read error: Connection reset by peer) |
| 04:59:48 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 05:00:14 | → | qqq joins (~qqq@92.43.167.61) |
| 05:00:17 | → | califax joins (~califax@user/califx) |
| 05:00:18 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 05:00:51 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 05:01:28 | × | aforemny quits (~aforemny@2001:9e8:6cfa:3600:3f10:37b1:467:310c) (Ping timeout: 246 seconds) |
| 05:01:46 | → | aforemny joins (~aforemny@i59F516FD.versanet.de) |
| 05:02:22 | → | Core7852 joins (~rosco@183.171.72.200) |
| 05:02:30 | × | rosco quits (~rosco@2402:b400:4460:fc63:80a6:a666:aa55:2612) (Ping timeout: 256 seconds) |
| 05:02:47 | <mauke> | > 1.1.1.1.1.1.1.1.1.1.1.1 + 2.3 $ () |
| 05:02:48 | <lambdabot> | error: |
| 05:02:48 | <lambdabot> | • Could not deduce (Fractional (b0 -> c)) |
| 05:02:48 | <lambdabot> | (maybe you haven't applied a function to enough arguments?) |
| 05:04:56 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 05:11:52 | → | adium joins (adium@user/adium) |
| 05:16:08 | × | Me-me quits (~me-me@user/me-me) (Remote host closed the connection) |
| 05:16:35 | → | Me-me joins (~me-me@2602:ff16:3:0:1:dc:beef:d00d) |
| 05:19:25 | × | pastly quits (~pastly@gateway/tor-sasl/pastly) (Remote host closed the connection) |
| 05:19:45 | → | pastly joins (~pastly@gateway/tor-sasl/pastly) |
| 05:43:05 | → | hallucinagen joins (~prodmezha@123.63.203.210) |
| 05:53:34 | × | Me-me quits (~me-me@2602:ff16:3:0:1:dc:beef:d00d) (Changing host) |
| 05:53:34 | → | Me-me joins (~me-me@user/me-me) |
| 05:58:10 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 05:58:17 | → | euleritian joins (~euleritia@77.22.252.56) |
| 06:02:43 | → | rosco joins (~rosco@180.75.255.16) |
| 06:07:58 | → | michalz joins (~michalz@185.246.207.221) |
| 06:13:14 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 06:16:11 | × | Square quits (~Square4@user/square) (Ping timeout: 260 seconds) |
| 06:22:56 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 06:23:38 | × | tushar quits (~tushar@103.46.201.22) (Quit: WeeChat 4.2.1) |
| 06:29:29 | → | codolio joins (~dolio@130.44.134.54) |
| 06:29:46 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 256 seconds) |
| 06:30:00 | → | euleritian joins (~euleritia@dynamic-176-006-195-045.176.6.pool.telefonica.de) |
| 06:30:35 | × | dolio quits (~dolio@130.44.134.54) (Ping timeout: 264 seconds) |
| 06:30:41 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 06:31:02 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 06:32:35 | → | caconym joins (~caconym@user/caconym) |
| 06:36:31 | → | zetef joins (~quassel@5.2.182.99) |
| 06:37:52 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:39:41 | × | rosco quits (~rosco@180.75.255.16) (Ping timeout: 240 seconds) |
| 06:40:22 | × | codolio quits (~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in) |
| 06:40:30 | → | dolio joins (~dolio@130.44.134.54) |
| 06:43:33 | → | acidjnk_new joins (~acidjnk@p200300d6e708d544f8395f3770d8e9d9.dip0.t-ipconnect.de) |
| 06:45:20 | <probie> | % instance (a ~ String, b ~ String) => Num (a -> b) where { fromInteger = (++) . show ; f + g = \x -> f x ++ g x } |
| 06:45:20 | <yahb2> | <interactive>:13:10: error: ; • Illegal equational constraint a ~ String ; (Use GADTs or TypeFamilies to permit this) ; • In the instance declaration for ‘Num (a -> b)’ |
| 06:45:27 | × | michalz quits (~michalz@185.246.207.221) (Quit: ZNC 1.8.2 - https://znc.in) |
| 06:45:33 | <probie> | % :set -XGADTs |
| 06:45:33 | <yahb2> | <no output> |
| 06:45:39 | <probie> | % instance (a ~ String, b ~ String) => Num (a -> b) where { fromInteger = (++) . show ; f + g = \x -> f x ++ g x } |
| 06:45:39 | <yahb2> | <interactive>:17:10: warning: [-Wmissing-methods] ; • No explicit implementation for ; ‘*’, ‘abs’, ‘signum’, and (either ‘negate’ or ‘-’) ; • In the instance declaration for ‘Num (a... |
| 06:45:54 | <probie> | % instance (a ~ String, b ~ String) => Fractional (a -> b) where { fromRational = (++) . show } |
| 06:45:54 | <yahb2> | <interactive>:19:10: warning: [-Wmissing-methods] ; • No explicit implementation for ; either ‘recip’ or ‘/’ ; • In the instance declaration for ‘Fractional (a -> b)’ |
| 06:46:05 | <probie> | % 1.1.1.1.1.1.1.1.1.1.1.1 + 2.3 $ "" |
| 06:46:05 | <yahb2> | "11 % 1011 % 1011 % 1011 % 1011 % 1011 % 1023 % 10" |
| 06:48:36 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 255 seconds) |
| 06:50:12 | → | michalz joins (~michalz@185.246.207.215) |
| 06:51:08 | → | CiaoSen joins (~Jura@2a05:5800:2bf:c200:e6b9:7aff:fe80:3d03) |
| 06:51:31 | × | euleritian quits (~euleritia@dynamic-176-006-195-045.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 06:51:48 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 06:58:01 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds) |
| 06:58:29 | → | euleritian joins (~euleritia@dynamic-176-006-195-045.176.6.pool.telefonica.de) |
| 06:59:55 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:13:16 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:13:19 | × | JimL quits (~quassel@89.162.16.26) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 07:13:38 | → | JimL joins (~quassel@89.162.16.26) |
| 07:17:43 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
| 07:18:05 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:20:23 | × | JimL quits (~quassel@89.162.16.26) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 07:20:40 | → | JimL joins (~quassel@89.162.16.26) |
| 07:22:30 | × | JimL quits (~quassel@89.162.16.26) (Client Quit) |
| 07:22:48 | → | JimL joins (~quassel@89.162.16.26) |
| 07:24:41 | × | JimL quits (~quassel@89.162.16.26) (Client Quit) |
| 07:25:00 | → | JimL joins (~quassel@89.162.16.26) |
| 07:26:56 | × | JimL quits (~quassel@89.162.16.26) (Client Quit) |
| 07:27:15 | → | JimL joins (~quassel@89.162.16.26) |
| 07:29:10 | × | JimL quits (~quassel@89.162.16.26) (Client Quit) |
| 07:29:28 | → | JimL joins (~quassel@89.162.16.26) |
| 07:45:17 | × | hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 240 seconds) |
| 07:50:43 | × | hueso quits (~root@user/hueso) (Ping timeout: 255 seconds) |
| 07:52:26 | → | hiredman joins (~hiredman@frontier1.downey.family) |
| 07:53:18 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 07:57:42 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:57:46 | → | triceraptor joins (~prodmezha@115.248.21.178) |
| 08:00:40 | → | oo_miguel joins (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) |
| 08:01:17 | → | meritamen joins (~meritamen@user/meritamen) |
| 08:01:24 | × | hallucinagen quits (~prodmezha@123.63.203.210) (Ping timeout: 260 seconds) |
| 08:01:42 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 08:02:45 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 08:05:13 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 08:06:13 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 08:10:11 | × | euleritian quits (~euleritia@dynamic-176-006-195-045.176.6.pool.telefonica.de) (Ping timeout: 264 seconds) |
| 08:10:50 | → | CrunchyFlakes joins (~CrunchyFl@146.52.130.128) |
| 08:17:18 | × | triceraptor quits (~prodmezha@115.248.21.178) (Read error: Connection reset by peer) |
| 08:18:01 | → | hallucinagen joins (~prodmezha@123.63.203.210) |
| 08:18:15 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 08:20:19 | × | CrunchyFlakes quits (~CrunchyFl@146.52.130.128) (Ping timeout: 260 seconds) |
| 08:20:47 | → | zetef joins (~quassel@5.2.182.99) |
| 08:21:21 | → | CrunchyFlakes joins (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) |
| 08:24:19 | → | danse-nr3 joins (~danse@151.37.211.199) |
| 08:27:47 | × | hallucinagen quits (~prodmezha@123.63.203.210) (Ping timeout: 260 seconds) |
| 08:30:19 | → | mima joins (~mmh@aftr-62-216-211-42.dynamic.mnet-online.de) |
| 08:30:20 | × | danse-nr3 quits (~danse@151.37.211.199) (Ping timeout: 260 seconds) |
| 08:36:43 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
| 08:36:53 | → | danse-nr3 joins (~danse@151.37.211.199) |
| 08:37:45 | → | Domitar joins (~Domitar@193.198.16.218) |
| 08:37:53 | × | Domitar quits (~Domitar@193.198.16.218) (Remote host closed the connection) |
| 08:39:36 | × | meritamen quits (~meritamen@user/meritamen) (Quit: Client closed) |
| 08:42:00 | × | mima quits (~mmh@aftr-62-216-211-42.dynamic.mnet-online.de) (Ping timeout: 260 seconds) |
| 08:49:32 | <Inst> | EvanR: Real World is ultimately built on magic, but the edifice is a consistent and logical system |
| 08:49:43 | → | hallucinagen joins (~prodmezha@123.63.203.210) |
| 08:51:48 | <Inst> | grrr, still can't figure out how to get keys from a set / map |
| 08:51:51 | <Inst> | via lens |
| 08:52:32 | tomsmeding | . o O ( Data.Set.elems :: Set a -> [a] ) |
| 08:52:49 | × | tzh_ quits (~tzh@c-73-164-206-160.hsd1.or.comcast.net) (Quit: zzz) |
| 08:55:48 | <Inst> | yeah but I'm trying to avoid the containers interface because it's not polymorphic enough for me :( |
| 08:57:58 | <ncf> | > Set.fromList [0, 2, 4] ^.. folded |
| 08:58:00 | <lambdabot> | error: |
| 08:58:00 | <lambdabot> | Not in scope: ‘Set.fromList’ |
| 08:58:00 | <lambdabot> | Perhaps you meant one of these: |
| 09:00:29 | <danse-nr3> | seems a bit silly to be honest. Different data structures provide different operations |
| 09:00:38 | <ncf> | and for maps, > Map.fromList [(0, ()), (2, ()), (4, ())] ^.. folded . asIndex |
| 09:01:12 | <danse-nr3> | :t folded |
| 09:01:13 | <lambdabot> | (Indexable Int p, Contravariant f1, Foldable f2, Applicative f1) => p a (f1 a) -> f2 a -> f1 (f2 a) |
| 09:01:19 | × | igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer) |
| 09:01:20 | <danse-nr3> | :t (^..) |
| 09:01:21 | <lambdabot> | s -> Getting (Endo [a]) s a -> [a] |
| 09:02:04 | <danse-nr3> | (also, good morning from this part of the world) |
| 09:05:36 | <Inst> | thanks |
| 09:05:42 | <Inst> | i still can't read lens type sigs |
| 09:05:50 | <Inst> | i just know they work and if i get a type error i screwed up somewhere |
| 09:05:50 | <ncf> | good thing you don't need to |
| 09:06:46 | <danse-nr3> | i can't read them either ... was trying because the other day they were tamer so i hoped it was one of those cases |
| 09:06:51 | <danse-nr3> | maybe ... |
| 09:07:04 | <danse-nr3> | :t (^.. folded) |
| 09:07:05 | <lambdabot> | Foldable f => f a -> [a] |
| 09:07:44 | <ncf> | the actual type signatures you should read are in the haddocks |
| 09:07:46 | <ncf> | folded :: Foldable f => IndexedFold Int (f a) a |
| 09:10:09 | <Inst> | yeah but folded is basically equiv to fromList here :( |
| 09:11:03 | <ncf> | well what else do you want |
| 09:11:58 | <Inst> | foo = S.fromList [1..10] |
| 09:12:11 | <Inst> | foo ?? [???} <===> 3 |
| 09:12:27 | <ncf> | what |
| 09:12:57 | <Inst> | I want lens operations to extract the 3rd (2nd index) element from the Set Int foo |
| 09:13:35 | <Inst> | foo ^.. folded & (!! 2) works |
| 09:14:10 | <danse-nr3> | Set Int foo? |
| 09:14:26 | <danse-nr3> | oh i see what you mean |
| 09:14:41 | <ncf> | that's not really an operation Set provides... |
| 09:15:27 | <danse-nr3> | yeah i never think of sets as anything ordered |
| 09:15:32 | → | hueso joins (~root@user/hueso) |
| 09:17:01 | <ncf> | but if you insist |
| 09:17:19 | <ncf> | Set.fromList [1..10] ^? folded . index 2 |
| 09:18:18 | → | igemnace joins (~ian@user/igemnace) |
| 09:21:34 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 09:22:48 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 09:25:15 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:25:30 | × | danse-nr3 quits (~danse@151.37.211.199) (Ping timeout: 268 seconds) |
| 09:26:35 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 260 seconds) |
| 09:27:15 | <Inst> | i love you so much <3 |
| 09:27:16 | <Inst> | thanks |
| 09:27:23 | <Inst> | ehhh, it still seems ridiculous, but what can I do :( |
| 09:29:52 | → | danse-nr3 joins (~danse@151.37.211.199) |
| 09:30:21 | → | mima joins (~mmh@aftr-62-216-211-42.dynamic.mnet-online.de) |
| 09:32:52 | × | danse-nr3 quits (~danse@151.37.211.199) (Remote host closed the connection) |
| 09:34:34 | → | danse-nr3 joins (~danse@151.37.211.199) |
| 09:41:21 | → | zetef joins (~quassel@5.2.182.99) |
| 09:50:02 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
| 09:51:02 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 09:56:09 | <tomsmeding> | the Set data structure does not store sizes of subtrees |
| 09:56:14 | <tomsmeding> | so it cannot provide log-time indexing |
| 09:56:29 | <tomsmeding> | Inst: so anything you'd do is linear-time, so you might as well go through toList |
| 09:57:01 | <tomsmeding> | as notably distinct from Seq from Data.Sequence, which does provide log-time indexing |
| 09:57:23 | <tomsmeding> | as danse-nr3 said, different data structures provide different operations |
| 09:58:12 | <tomsmeding> | er wait |
| 09:58:37 | <tomsmeding> | it does |
| 09:58:40 | <Inst> | iirc Set is weird |
| 09:58:49 | <Inst> | it's a balanced binary tree that stores its own size |
| 09:58:57 | <tomsmeding> | :t Data.Set.elemAt |
| 09:58:58 | <lambdabot> | Int -> S.Set a -> a |
| 09:59:07 | tomsmeding | was mistaken |
| 09:59:38 | <tomsmeding> | that's not a very weird data structure, but I remembered incorrectly |
| 09:59:46 | <Inst> | maybe we just need better lenses for containers, some additions to Lens and Optics |
| 09:59:50 | <tomsmeding> | (the size is use for balancing as well) |
| 09:59:59 | <tomsmeding> | you can be the one to write them :) |
| 10:00:27 | <Inst> | right now, my goal is to get the NixOS server set up, then to put out a prototype site, working on postgresql / servant / blaze or lucid stack |
| 10:00:28 | <ncf> | no please don't write lenses for accessing the internal structure of Set |
| 10:00:31 | × | hallucinagen quits (~prodmezha@123.63.203.210) (Ping timeout: 256 seconds) |
| 10:00:54 | <Inst> | i just want to be able to access the key name, okay? |
| 10:01:04 | <tomsmeding> | but indeed it's a bit strange that you'd want the _index_ of a value in a Set |
| 10:01:16 | <Inst> | it's not exactly that I need an index |
| 10:01:28 | <Inst> | when I use mySet ^. ix 3, I just get Just () |
| 10:01:28 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 10:01:34 | <tomsmeding> | where does the 3 come from |
| 10:01:38 | <Inst> | it's arbitrary |
| 10:01:41 | × | hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 240 seconds) |
| 10:01:47 | × | zetef quits (~quassel@5.2.182.99) (Ping timeout: 264 seconds) |
| 10:01:48 | <tomsmeding> | why do you need this expression |
| 10:01:53 | <tomsmeding> | what's the X problem :p |
| 10:01:55 | <ncf> | sets are not for indexing into |
| 10:02:25 | <Inst> | iirc, sets have indexing functions in their lib |
| 10:02:33 | <tomsmeding> | they do, but why are you using them |
| 10:02:49 | <tomsmeding> | what thing are you implementing that you need to access elements in a set by their index |
| 10:02:55 | <Inst> | the goal is to not use the containers interface and just use the lens interface to provide a polymorphic way to work with data structures in haskell |
| 10:02:55 | × | hueso quits (~root@user/hueso) (Ping timeout: 256 seconds) |
| 10:03:19 | <tomsmeding> | well accessing elements by their index smells of not using a set like it should be used :p |
| 10:03:23 | <Inst> | because the containers import Data.Set qualified as Bleh shibboleth is horrible |
| 10:03:36 | <tomsmeding> | that's the problem with data structures, they don't all have precisely the same interface |
| 10:03:43 | <Inst> | I'm just floating a hypothesis |
| 10:03:44 | <tomsmeding> | that's just the module system being annoying |
| 10:03:52 | <Inst> | does it make more sense to teach Haskell with lens instead of monads? ;3 |
| 10:04:05 | <tomsmeding> | how does lens subsume monads |
| 10:04:31 | <tomsmeding> | similar to how you don't want to index into a [] list |
| 10:04:34 | <Inst> | insofar as the ideal is that after Haskell lessons, people get into practical programming, and monads are 80% a solved problem |
| 10:04:45 | <Inst> | at least it's log n indexing! |
| 10:04:49 | <tomsmeding> | you can, it's quite defineable, and lenses let you do it, but if you're indexing into a list you're probably doing the wrong thing |
| 10:04:56 | <ncf> | you still haven't answered the question |
| 10:05:03 | <Inst> | which one? |
| 10:05:09 | <ncf> | why do you need to index into a Set |
| 10:05:14 | <tomsmeding> | why don't you want to use a set like you're supposed to use it :p |
| 10:05:24 | <Inst> | I want to index into a set to replace the entire Data.Set interface with Lens / Optics |
| 10:05:27 | <tomsmeding> | not even talking about Data.Set.Set, just any set data structure will have this same discussion |
| 10:05:39 | <ncf> | that's your end goal? |
| 10:05:39 | <tomsmeding> | the key of a Set is not the index |
| 10:05:42 | <tomsmeding> | the key is the value |
| 10:05:43 | <Inst> | yeah |
| 10:05:58 | <Inst> | except under ^. at... on Set, you get () |
| 10:06:04 | <Inst> | because it's treating it as a map of () values |
| 10:06:23 | <tomsmeding> | then write a lens thing ish (I don't lens) that doesn't! |
| 10:06:24 | <ncf> | lenses are about mathematical representations of data, they're certainly not about peeking into the internal structure of things |
| 10:06:40 | <Inst> | ncf: yes, because the whole qualified imports shit on Vector and Containers feels like it defeats the point of typeclasses |
| 10:07:22 | <Inst> | like how there's no generic fmap on set etc because they're not functors |
| 10:07:28 | → | hueso joins (~root@user/hueso) |
| 10:07:33 | <ncf> | if you're using Set.elemAt, you're either implementing some primitive function that nobody should look at, or using Set incorrectly. in either case, you shouldn't be using lens |
| 10:07:35 | <Inst> | so you can sidestep the problem by going to lens instead |
| 10:07:49 | <tomsmeding> | you cannot sidestep the problem by going to lens instead |
| 10:07:56 | <Inst> | yeah, we can't :( |
| 10:07:58 | <tomsmeding> | the problem that a Set is not a functor doesn't go away :p |
| 10:08:13 | <tomsmeding> | you just hide it behind less readable types |
| 10:08:23 | × | TMA quits (tma@twin.jikos.cz) (Ping timeout: 264 seconds) |
| 10:08:31 | <tomsmeding> | formulate the API that you want to use for a Set, convince yourself that that API is implementable, and then implement it |
| 10:08:34 | × | gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 10:08:38 | <Inst> | i still need to go through ploeh showing how Set can violate the functor composition law |
| 10:08:39 | <tomsmeding> | well and that that API makes sense for the data structure |
| 10:09:20 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 10:09:24 | <tomsmeding> | the reason Set cannot implement Functor is that there's no way to implement `lookup` after you've fmapped in uncomparable values |
| 10:09:42 | <tomsmeding> | perhaps you can find some interesting violation of functor laws as well |
| 10:09:50 | <Inst> | it's just a pet peeve, and I think others pointed out there's no easy way to generate maps in Haskell, i.e, Haskell, unlike more recent languages, doesn't have special syntax for other data structures |
| 10:09:55 | <tomsmeding> | but the banal point is that the data structure just only works on orderable elements :p |
| 10:09:56 | <Inst> | hell, it doesn't even have special syntax for array |
| 10:10:12 | → | TMA joins (tma@twin.jikos.cz) |
| 10:10:44 | <tomsmeding> | what is `lookup id (fmap (+) (Set.fromList [1..5]))` supposed to do |
| 10:11:18 | <tomsmeding> | any lensy interface that you devise that would allow this, is wrong |
| 10:11:28 | <Inst> | Nothing? ;) |
| 10:11:42 | → | zmt01 joins (~zmt00@user/zmt00) |
| 10:11:45 | <tomsmeding> | any lensy interface that uses elemAt excessively, or even at all, is likely inefficient and probably suboptimal |
| 10:11:59 | <tomsmeding> | Inst: well that point you're _definitely_ breaking the functor laws :p |
| 10:12:22 | <tomsmeding> | at least when you combine them in a reasonable way with the properties of the Set methods |
| 10:12:23 | <Inst> | since list lookup returns a maybe |
| 10:12:41 | <ncf> | you're not breaking the functor laws |
| 10:13:01 | <tomsmeding> | yeah no you're breaking the presumed property that fmap commutes with lookup |
| 10:13:07 | <tomsmeding> | with sounds like a thing you really want to have |
| 10:13:16 | <ncf> | are you? |
| 10:13:17 | → | ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:8aa0:2a1c:7c77:360a) |
| 10:13:17 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 268 seconds) |
| 10:13:23 | <Inst> | anyways, the tentative plan is to provide a scripting dialect of haskell (or properly an eDSL) for the platform I want to use |
| 10:13:27 | <ncf> | i don't get your example |
| 10:13:44 | → | hiredman joins (~hiredman@frontier1.downey.family) |
| 10:13:52 | <Inst> | so you can see how my concerns are different, i.e, the plan is that the platform is FOSS, the database is blockchain (eventually) |
| 10:13:57 | <Inst> | but you can run apps on the platform |
| 10:13:58 | <tomsmeding> | ncf: Inst was suggesting that (ignoring concerns of "you can't check if a type does _not_ implement a type class") if a Set contains uncomparable values, lookup should just always return Nothing |
| 10:14:12 | <ncf> | oh sorry i skipped over half of the discussion |
| 10:15:36 | <tomsmeding> | Inst: then the challenge you have is not "how do I use elemAt", but "how do I design an interface to a number of data structures that is consistent, conventional in lensy idioms, and still properly aligns to the varying support for various operations of those data structures" |
| 10:15:38 | <ncf> | well, my point is just that the "exofunctor" instance for Set doesn't violate any functor laws. it's just not a Functor in the usual sense |
| 10:16:12 | <ncf> | (for compile time reasons rather than runtime reasons) |
| 10:16:18 | <Inst> | oh, i didn't understand what you meant by exofunctor to begin with |
| 10:16:33 | <ncf> | silly word for "not endo"-functor |
| 10:16:43 | <tomsmeding> | maybe the answer is to have `class CFunctor c f where cfmap :: c b => (a -> b) -> f a -> f b` |
| 10:16:47 | <ncf> | in this case a functor from the subcategory of Hask on the Ord types to Hask |
| 10:16:48 | <tomsmeding> | or, a part of the answer |
| 10:16:50 | <Inst> | since Set a puts a restriction on a of being a member of Eq, and functor can theoretically move it to non-Eq |
| 10:16:59 | <Inst> | which also creates the problem that, say, if it's non-Eq, how should Set behave? |
| 10:17:11 | <tomsmeding> | maybe CFunctor can work well with the rest of lens! Maybe not! |
| 10:17:23 | <Inst> | but Map at least is a functor, no? |
| 10:17:29 | <tomsmeding> | if you want to map over sets using lensy stuff, that's the question you'll need to answer |
| 10:17:30 | <ncf> | Map k is |
| 10:17:34 | <tomsmeding> | yes, because you're mapping over the values, not the keys |
| 10:17:45 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds) |
| 10:19:21 | <tomsmeding> | _embrace_ the fact that Set is not a Functor, and work with it |
| 10:19:32 | <tomsmeding> | the fact that Set is not a Functor allows it to have logarithmic-time lookup |
| 10:19:36 | <tomsmeding> | in a sense |
| 10:20:15 | <tomsmeding> | if you care more about being a Functor then you should use lists instead :p |
| 10:20:20 | <Inst> | as opposed to arrays with a constant time look-up? :) |
| 10:20:22 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 10:20:26 | <tomsmeding> | and linear-time insertion |
| 10:20:32 | <tomsmeding> | it's all trade-offs |
| 10:20:48 | <Inst> | yeah i'm still embarrassed i'm not good with ByteArray# |
| 10:21:21 | <tomsmeding> | constant-insert linear-lookup ([a]), log-insert log-lookup (Map Int a), linear-insert constant-lookup (Array Int a) |
| 10:21:56 | <Inst> | what's the standard implementation of set, anyways? |
| 10:22:00 | <tomsmeding> | why do you need ByteArray# all of a sudden lol |
| 10:22:01 | <Inst> | I'm surprised Data.Set is balanced binary tree |
| 10:22:14 | <mauke> | what was that proposal for making datatype contexts useful again? |
| 10:22:14 | × | ft quits (~ft@p508db238.dip0.t-ipconnect.de) (Quit: leaving) |
| 10:22:16 | <tomsmeding> | Data.Vector.Mutable is good enough |
| 10:22:45 | <tomsmeding> | Inst: what else would it be? |
| 10:23:20 | <tomsmeding> | because it's Haskell you have to choose from the persistent data structures |
| 10:23:31 | <mauke> | I remember something about swapping out Applicative for Monoidal and also making Set an instance of Functor |
| 10:23:35 | <Inst> | I'm just not familiar enough with fundamentals of computer science to think of it as such, I'm only starting to implement stuff in C and going through Udemy DS courses (which without exception, suck) |
| 10:23:39 | <tomsmeding> | balanced binary trees are a sweet spot that have log-time for most things and are still persistent |
| 10:23:47 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 10:23:47 | <Inst> | well, that's probably too harsh on Udemy, there's got to be a few good courses there |
| 10:24:10 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds) |
| 10:24:14 | AlexNoo_ | is now known as AlexNoo |
| 10:24:16 | <Inst> | regarding sets, I'm just curious how sets are implemented in other languages |
| 10:24:26 | <Inst> | I'd assume they'd be arrays with different accessors |
| 10:24:34 | <Inst> | set object |
| 10:24:35 | <mauke> | typically balanced trees or hashtables |
| 10:24:39 | <Inst> | ah |
| 10:24:47 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 10:24:54 | <Inst> | Data.HashSet |
| 10:24:58 | <mauke> | or bit arrays if the elements are enums |
| 10:24:59 | <tomsmeding> | i.e. the same as Map k () ;) |
| 10:25:09 | <mauke> | (hi, pascal) |
| 10:25:10 | <Inst> | Data.HashMap :) |
| 10:25:30 | <tomsmeding> | Inst: those are still balanced binary trees |
| 10:25:50 | <tomsmeding> | a proper hash table is backed by an array and thus requires mutability to have sub-linear mutation |
| 10:27:06 | <tomsmeding> | B-trees also exist as an implementation of maps (and thus sets), but those are still balanced trees, just not binary any more |
| 10:27:22 | <mauke> | ooh, the thing I remember is "partial type constructors"! |
| 10:28:00 | <Inst> | ack, w/e, going back to being psised at nixos-anywhere |
| 10:28:04 | <Inst> | sorry about that |
| 10:28:06 | <tomsmeding> | mauke: has the feeling of a hack that would break completely once haskell gets dependent enough |
| 10:28:09 | <tomsmeding> | but I dunno :) |
| 10:28:09 | <Inst> | i need to get the VPS running NixOS |
| 10:28:40 | <Inst> | tbh if Haskell gets dependent enough, any thoughts on fixing the freaking DS syntax? |
| 10:28:43 | <tomsmeding> | not because of the partiality, but because of the "where do you put the type class constraint" |
| 10:28:53 | <Inst> | XOverloadedLists is an ugly hack and the type inference engine knows it |
| 10:28:57 | <mauke> | https://dl.acm.org/doi/pdf/10.1145/3371108 |
| 10:29:01 | <tomsmeding> | -XOverloaded* needs to die |
| 10:29:11 | <tomsmeding> | can I have -XNonOverloadedInts already |
| 10:29:39 | <mauke> | -XNoOverloadedIntegers, please |
| 10:29:50 | <mauke> | :-P |
| 10:29:51 | <tomsmeding> | yes |
| 10:30:02 | <tomsmeding> | and have 123i mean an Int literal |
| 10:30:05 | <tomsmeding> | or something |
| 10:30:08 | <mauke> | no, Integer |
| 10:30:13 | <Inst> | default (Int, Float) |
| 10:30:23 | <mauke> | you made your cake, now lie in it |
| 10:30:33 | <tomsmeding> | and default declarations can go to hell as well |
| 10:30:47 | <tomsmeding> | mauke: fair :p |
| 10:31:25 | <Inst> | which language invented the [1 2 3] list syntax anyways? |
| 10:31:32 | <mauke> | MicroHs defaults to "default ()" IIRC |
| 10:32:20 | <tomsmeding> | mauke: ah, that paper gives a definition of Functor that is kind of in the direction of my CFunctor |
| 10:32:49 | tomsmeding | questions that you need a custom type system for this |
| 10:33:11 | <tomsmeding> | at the cost of some nice syntax, perhaps |
| 10:33:17 | <tomsmeding> | anyway I also have work to do lol |
| 10:34:33 | <mauke> | https://www.youtube.com/watch?v=rqmCwpRXT_E https://www.youtube.com/watch?v=oSWeQrQ9CCY |
| 10:38:29 | tomsmeding | should watch that at some point |
| 10:38:36 | <tomsmeding> | some interesting discussion under the munihac video |
| 10:41:42 | → | zetef joins (~quassel@5.2.182.99) |
| 10:43:02 | × | zetef quits (~quassel@5.2.182.99) (Remote host closed the connection) |
| 10:45:58 | × | hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 268 seconds) |
| 10:46:44 | <cheater> | anyone here running the discourse? |
| 10:46:49 | <cheater> | it's not sending out activation emails |
| 10:51:13 | → | zetef joins (~quassel@5.2.182.99) |
| 10:53:14 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 10:57:51 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 10:58:40 | → | hiredman joins (~hiredman@frontier1.downey.family) |
| 11:04:09 | → | mmhat joins (~mmh@p200300f1c706a298ee086bfffe095315.dip0.t-ipconnect.de) |
| 11:09:42 | × | zetef quits (~quassel@5.2.182.99) (Remote host closed the connection) |
| 11:11:47 | → | xff0x joins (~xff0x@2405:6580:b080:900:f97d:d4c:a5b1:7ce0) |
| 11:18:23 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 272 seconds) |
| 11:20:24 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 255 seconds) |
| 11:33:37 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 11:34:18 | <tomsmeding> | GHC at its best: |
| 11:34:20 | <tomsmeding> | > Expected a type, but ‘a’ has kind ‘Type’ |
| 11:35:27 | <Inst> | okay, so Nixos-anywhere is deploying now |
| 11:35:30 | <Inst> | I can BS a bit more |
| 11:35:44 | <Inst> | have there been any attempts to replace HTML with a Haskell-based eDSL? |
| 11:36:00 | <Inst> | Because the whole golden trinity thing, (HTML + CSS + JS), feels like BS to me |
| 11:36:09 | <Inst> | I guess it's what's been driving the development of frameworks and so on |
| 11:37:17 | <Inst> | HTML, even HTML5, is an ad-hoc pragmatic approach that has little logic other than historical precedent, CSS makes even less sense |
| 11:39:44 | <Inst> | i mean in the sense of something that compiles to HTML etc, anyways |
| 11:40:11 | → | hallucinagen joins (~prodmezha@123.63.203.210) |
| 11:43:19 | × | Core7852 quits (~rosco@183.171.72.200) (Ping timeout: 260 seconds) |
| 11:50:07 | → | renpose joins (~renpose@user/renpose) |
| 11:56:34 | × | hueso quits (~root@user/hueso) (Ping timeout: 246 seconds) |
| 11:59:09 | → | hueso joins (~root@user/hueso) |
| 11:59:38 | → | rvalue joins (~rvalue@user/rvalue) |
| 12:01:49 | → | alexherbo2 joins (~alexherbo@2a02-8440-3240-9adf-586c-24cb-10b4-f9fd.rev.sfr.net) |
| 12:03:42 | → | __monty__ joins (~toonn@user/toonn) |
| 12:05:13 | × | danse-nr3 quits (~danse@151.37.211.199) (Ping timeout: 268 seconds) |
| 12:05:40 | × | alexherbo2 quits (~alexherbo@2a02-8440-3240-9adf-586c-24cb-10b4-f9fd.rev.sfr.net) (Remote host closed the connection) |
| 12:10:54 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 12:11:19 | → | rvalue joins (~rvalue@user/rvalue) |
| 12:11:21 | × | robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 12:24:17 | → | alexherbo2 joins (~alexherbo@209.15.23.93.rev.sfr.net) |
| 12:27:46 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 12:35:15 | → | danse-nr3 joins (~danse@na-19-81-54.service.infuturo.it) |
| 12:35:47 | × | hallucinagen quits (~prodmezha@123.63.203.210) (Ping timeout: 256 seconds) |
| 12:50:20 | → | dminuoso joins (~weechat@user/dminuoso) |
| 12:52:13 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 12:53:45 | h_______________ | is now known as hammond |
| 12:53:54 | × | hammond quits (~abner@gateway02.insomnia247.nl) (Changing host) |
| 12:53:54 | → | hammond joins (~abner@user/hammond2) |
| 12:58:32 | × | danse-nr3 quits (~danse@na-19-81-54.service.infuturo.it) (Remote host closed the connection) |
| 12:58:54 | → | danse-nr3 joins (~danse@na-19-81-54.service.infuturo.it) |
| 13:01:08 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 13:01:18 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:03:33 | → | mei joins (~mei@user/mei) |
| 13:09:39 | × | CiaoSen quits (~Jura@2a05:5800:2bf:c200:e6b9:7aff:fe80:3d03) (Ping timeout: 260 seconds) |
| 13:22:05 | × | mmhat quits (~mmh@p200300f1c706a298ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 13:22:27 | → | mmhat joins (~mmh@p200300f1c706a2b6ee086bfffe095315.dip0.t-ipconnect.de) |
| 13:22:47 | <[exa]> | Inst: you'd probably need to replace the whole DOM model in all browsers first, HTML is just a trasmissible encoding of DOM |
| 13:39:01 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 13:39:26 | × | danse-nr3 quits (~danse@na-19-81-54.service.infuturo.it) (Remote host closed the connection) |
| 13:39:48 | → | danse-nr3 joins (~danse@na-19-81-54.service.infuturo.it) |
| 13:49:45 | × | danse-nr3 quits (~danse@na-19-81-54.service.infuturo.it) (Ping timeout: 272 seconds) |
| 13:55:11 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 13:55:21 | → | shapr joins (~user@c-24-218-186-89.hsd1.ma.comcast.net) |
| 14:01:30 | × | acidjnk_new quits (~acidjnk@p200300d6e708d544f8395f3770d8e9d9.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 14:04:49 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 14:05:14 | <Hecate> | https://discourse.haskell.org/t/pre-hftp-ghc-should-offer-low-level-logging-infrastructure/9159/12 |
| 14:09:41 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:10:56 | → | danse-nr3 joins (~danse@na-19-81-54.service.infuturo.it) |
| 14:11:01 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 14:11:18 | × | danse-nr3 quits (~danse@na-19-81-54.service.infuturo.it) (Remote host closed the connection) |
| 14:11:40 | → | danse-nr3 joins (~danse@na-19-81-54.service.infuturo.it) |
| 14:16:13 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 14:22:23 | <Inst> | [exa]: it gets me thinking of FRP and attempts to create a functional GUI |
| 14:22:50 | <Inst> | [exa]: I'm more thinking of something that transpiles to DOM, as an acceptable solution, until we have a proper functional GUI paradigm out |
| 14:23:46 | → | omegatron joins (~some@user/omegatron) |
| 14:25:24 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 14:46:44 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 14:54:27 | <danse-nr3> | my personal advice would be to do backend in haskell and frontend in purescript considering the current state of the ecosystem Inst. From the little i know you, you might not like to learn some purescript, yet that seems the most effective solution to me at the moment |
| 14:54:52 | <Inst> | i actually would prefer javascript :3 |
| 14:55:45 | <Inst> | like nicholas nassim taleb's stance on "middlebrow" art and literature, he'd rather do the pop pulp stuff and the classics / avant garde stuff, but not in between |
| 14:56:19 | <danse-nr3> | i thought you were asking about server-side rendering, then i must have misunderstood |
| 14:56:28 | <nullie> | is reflex-dom still alive? |
| 14:56:49 | <danse-nr3> | yeah some people use reflex as far as i know |
| 14:56:57 | <Inst> | i'm not actually going to do something like that, i just want to get the site working, have it look attractive ,then slowly expand functionality |
| 14:57:20 | <Inst> | my goal would be to have a Haskell eDSL for websites, which the server would then translate into html / css / js, etc |
| 14:57:39 | <danse-nr3> | that is server-side rendering |
| 14:58:25 | <Inst> | but that's like a long-term goal |
| 14:59:00 | <danse-nr3> | i mean that is what yesod offered before client-side rendering became more comfortable |
| 14:59:39 | <Inst> | did yesod really offer that? |
| 14:59:53 | <Inst> | i tried it, i didn't feel it, you had shakespearean templates that didn't really impress me |
| 15:01:12 | <danse-nr3> | i see what you mean. There were other attempts that get closer to an embedded language, but i don't think it is a viable path at the moment. Anyways, you seem to have more pressing goals |
| 15:02:28 | <Inst> | i mean the goal is that users on the platform would be able to use the eDSL to build apps for it |
| 15:02:57 | <danse-nr3> | huh i thought you wanted to make a "social marketplace"? |
| 15:02:57 | <Inst> | and iirc the monomer developer eventually wants his app to be suitable for mobile apps as well |
| 15:03:19 | <Inst> | an MMO of the real economy? I.e, some kind of weird metaverse concept? |
| 15:03:37 | <Inst> | one of the big inspirations is Chinese omni-apps |
| 15:03:52 | <Inst> | like, Wechat, there's tons of plug-in apps that wechat itself uses, connected to their payment system |
| 15:04:19 | <Inst> | so you just use wechat, it downloads its own apps, runs those apps, and you can buy stuff from its client apps |
| 15:04:58 | <Inst> | so an average user could easily design their own storefront app, or even a map app for their taxi service, etc |
| 15:05:10 | <danse-nr3> | i lost you. Monomer for mobile could make sense, yes |
| 15:06:04 | <Inst> | let's say i have a platform. The platform allows users to create their own apps to sell goods and services through their site |
| 15:06:37 | <danse-nr3> | and then you deploy such apps ... where? |
| 15:06:42 | <Inst> | on the website |
| 15:06:53 | <Inst> | on the platform, properly, with both a web and mobile app version |
| 15:07:19 | <danse-nr3> | and why would your website or app be full of buyers? |
| 15:07:44 | <Inst> | i mean the prime target is fiver and upwork taking like 20-30% rakes |
| 15:08:01 | <danse-nr3> | huh you are talking online jobs now |
| 15:08:12 | <Inst> | ya, that's the core competency, or at least starting competency |
| 15:08:34 | <Inst> | imagine if FOSS people (I'm not really one of them) decided to do a FOSS version of Uber, FiveRR, Upwork, and Amazon |
| 15:08:41 | <danse-nr3> | yeah so my advice would be try to focus on the core because that sounds challenging already |
| 15:08:56 | <Inst> | just put out a minimal app, that's essentially a social network |
| 15:09:15 | <Inst> | then work on making it so that members of the social network can advertise for and arrange transactions through Stripe or Paypal |
| 15:09:28 | × | Guest52 quits (~Guest52@185.57.29.142) (Ping timeout: 250 seconds) |
| 15:10:46 | <Inst> | and see here: |
| 15:10:47 | <Inst> | https://www.fiverr.com/gigs/microsoft |
| 15:11:20 | <Inst> | this, in my intended product, would instead be the Microsoft store presence on the social app |
| 15:11:30 | <Inst> | displaying the contracts they're buying and the contracts they're selling |
| 15:11:54 | <danse-nr3> | sounds ambitious, good luck |
| 15:12:25 | <Inst> | one step at a time, first step: get freaking nixos installed onto this VPS |
| 15:14:09 | → | zetef joins (~quassel@5.2.182.99) |
| 15:17:00 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 268 seconds) |
| 15:23:14 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 260 seconds) |
| 15:24:10 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 15:25:17 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 15:29:36 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 252 seconds) |
| 15:36:35 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 15:37:05 | × | zetef quits (~quassel@5.2.182.99) (Remote host closed the connection) |
| 15:46:53 | → | acidjnk_new joins (~acidjnk@p200300d6e708d544d1e6663fb0659050.dip0.t-ipconnect.de) |
| 15:48:25 | × | [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection) |
| 15:49:32 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 15:51:09 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 15:55:54 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 16:12:54 | × | danse-nr3 quits (~danse@na-19-81-54.service.infuturo.it) (Ping timeout: 255 seconds) |
| 16:13:59 | × | erisco quits (~erisco@d24-141-66-165.home.cgocable.net) (Ping timeout: 260 seconds) |
| 16:14:33 | → | erisco joins (~erisco@d24-141-66-165.home.cgocable.net) |
| 16:18:22 | → | zetef joins (~quassel@5.2.182.99) |
| 16:19:08 | → | tzh joins (~tzh@c-73-164-206-160.hsd1.or.comcast.net) |
| 16:24:27 | <dmj`> | Inst: htmx looks cool, you should check that out. Building a web framework around it w/ wai and jmacro could be nice |
| 16:27:37 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 16:31:53 | <Inst> | https://hackage.haskell.org/package/lucid-htmx |
| 16:32:05 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 256 seconds) |
| 16:32:23 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 264 seconds) |
| 16:33:06 | × | alexherbo2 quits (~alexherbo@209.15.23.93.rev.sfr.net) (Ping timeout: 250 seconds) |
| 16:34:59 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 16:39:10 | → | danza joins (~francesco@151.37.183.29) |
| 16:40:10 | <haskellbridge> | <Jade> why does `take 10 <$> readFile "/dev/random" result in an error `invalid argument (cannot decode byte sequence starting from <N>` after reading a few bytes? |
| 16:40:10 | → | billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) |
| 16:40:56 | gehmehgeh | is now known as gmg |
| 16:41:03 | <geekosaur> | because your locale is probably a UTF8 and /dev/random can easily produce illegal UTF8 sequences |
| 16:42:56 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:48:58 | × | phma_ quits (~phma@host-67-44-208-68.hnremote.net) (Read error: Connection reset by peer) |
| 16:50:04 | → | phma_ joins (~phma@host-67-44-208-21.hnremote.net) |
| 16:51:39 | <geekosaur> | the documentation says errors should be discarded, but https://downloads.haskell.org/ghc/9.8.1/docs/users_guide/bugs.html#in-prelude-support at end of subsection says ghc throws the error instead |
| 16:54:50 | → | tremon joins (~tremon@83.80.159.219) |
| 16:55:39 | × | zetef quits (~quassel@5.2.182.99) (Remote host closed the connection) |
| 16:56:53 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 16:57:56 | <ncf> | what would happened if the error was discarded? would it read more data until 10 unicode characters are produced? i don't think that's what the report entails |
| 16:57:59 | <ncf> | happen* |
| 16:58:47 | × | igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer) |
| 16:58:51 | <dmj`> | Inst: yea but that's just generating htmx that has the data- annotations, I'm referring to mapping the ajax handlers back to pure haskell functions |
| 16:59:03 | → | Guest52 joins (~Guest52@185.57.29.142) |
| 16:59:10 | <geekosaur> | the report says it acts like EOF |
| 16:59:49 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 17:00:44 | <geekosaur> | that said, this is actually a gray area: the report says I/O errors are discarded, but is silent about decoding errors (and in fact about decoding) |
| 17:02:42 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 17:03:27 | → | hackyhacker joins (~hackyhack@45-105-169-81.mobileinternet.proximus.be) |
| 17:03:59 | <Inst> | <Jade> Data.ByteString.readFile :3 |
| 17:05:19 | × | hackyhacker quits (~hackyhack@45-105-169-81.mobileinternet.proximus.be) (Read error: Connection reset by peer) |
| 17:05:50 | <Inst> | actually, that doesn't work |
| 17:06:41 | <Inst> | need Data.ByteString.Lazy.readFile |
| 17:07:12 | <Inst> | and... it's beautiful :3 |
| 17:10:03 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 255 seconds) |
| 17:15:27 | → | igemnace joins (~ian@user/igemnace) |
| 17:25:12 | phma_ | is now known as phma |
| 17:29:29 | <EvanR> | utf8 allows resuming decoding after encountering nonsense, in case valid utf8 was corrupted at some point |
| 17:29:38 | × | igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.1) |
| 17:30:01 | <EvanR> | it could be used to derive fun and profit from /dev/random |
| 17:30:18 | × | renpose quits (~renpose@user/renpose) (Ping timeout: 250 seconds) |
| 17:31:50 | → | hackyhacker joins (~hackyhack@43-105-169-81.mobileinternet.proximus.be) |
| 17:37:24 | → | hallucinagen joins (~prodmezha@123.63.203.210) |
| 17:45:53 | → | Square joins (~Square4@user/square) |
| 17:48:22 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 260 seconds) |
| 17:50:16 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 17:53:41 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:58:39 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds) |
| 18:00:10 | <Inst> | wait, a binary tree can be foldr-ed, right? |
| 18:00:59 | <danza> | i would expect so |
| 18:01:23 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 18:01:25 | <Inst> | oh, but this is really ugly |
| 18:02:06 | <Inst> | nstance Foldable BTree where |
| 18:02:07 | <Inst> | ghci| foldr f z Lf = z |
| 18:02:07 | <Inst> | ghci| foldr f z (Br a cont1 cont2) = foldr f (f a (foldr f z cont1)) cont2 |
| 18:02:07 | <Inst> | ghci| |
| 18:02:50 | <Inst> | should be in reverse |
| 18:03:48 | <Inst> | yeah, switching the conts should be correct |
| 18:03:48 | × | hackyhacker quits (~hackyhack@43-105-169-81.mobileinternet.proximus.be) (Read error: Connection reset by peer) |
| 18:06:53 | × | danza quits (~francesco@151.37.183.29) (Ping timeout: 268 seconds) |
| 18:07:13 | → | rvalue joins (~rvalue@user/rvalue) |
| 18:10:26 | → | hackyhacker joins (~hackyhack@43-105-169-81.mobileinternet.proximus.be) |
| 18:23:52 | <EvanR> | Inst, just replace the leaves with the z and the constructors with f |
| 18:24:12 | × | hackyhacker quits (~hackyhack@43-105-169-81.mobileinternet.proximus.be) (Read error: Connection reset by peer) |
| 18:27:22 | <Inst> | try it :3 |
| 18:27:33 | <Inst> | :t foldr |
| 18:27:34 | <lambdabot> | Foldable t => (a -> b -> b) -> b -> t a -> b |
| 18:27:46 | <Inst> | you can't do it the easy way in a binary tree |
| 18:28:25 | <Inst> | how about data RTree a = Rose [RTree a]? |
| 18:29:05 | <Inst> | I'm busy trying to inject data BTree a = Lf | Br a (BTree a) (BTree a) into a traversable now |
| 18:30:01 | <tomsmeding> | Inst: try writing the catamorphism |
| 18:30:22 | <tomsmeding> | cataBTree :: r -> (a -> r -> r -> r) -> BTree a -> r |
| 18:30:53 | <tomsmeding> | catamorphisms ("folds") are more well-behaved in a certain sense, but their signature naturally depends on the constructors of the data type |
| 18:31:04 | <tomsmeding> | Data.Foldable.foldr is the catamorphism on lists |
| 18:31:27 | <tomsmeding> | it so happens that you can also wrench it onto other data structures, but it was made for lists |
| 18:31:48 | <tomsmeding> | EvanR: you could do that to /dev/urandom but you wouldn't get a uniform distribution on unicode codepoints |
| 18:33:30 | <Inst> | i'm sort of embarrassed because I can't write instance Applicative BTree right now, nor can I write instance Applicative MyList :( |
| 18:33:46 | <tomsmeding> | can you write the monad instance |
| 18:34:02 | <Inst> | of course, that's easy |
| 18:34:04 | <tomsmeding> | because then (<*>) = ap ;) |
| 18:34:22 | <Inst> | yeah but that seems cheap |
| 18:34:27 | <Inst> | and i keep on wondering if it's actually performant |
| 18:34:40 | <tomsmeding> | it just calls (>>=) twice |
| 18:35:09 | <tomsmeding> | you can expand the >>= calls manually and see what you end up with :p |
| 18:35:17 | <tomsmeding> | and if you can simplify that |
| 18:36:55 | → | triceraptor joins (~prodmezha@223.187.113.18) |
| 18:36:56 | <tomsmeding> | the thing is that there are multiple possible Applicative instances for rose trees I think |
| 18:37:11 | <tomsmeding> | and I think also multiple monad instances |
| 18:37:26 | <tomsmeding> | Applicative and Monad for rose trees are the weirdest things |
| 18:37:50 | <tomsmeding> | you're forced to combine things that ought to be separate, and it's kind of arbitrary how you do so |
| 18:38:12 | <ncf> | every Monad instance yields two Applicative instances, for starters |
| 18:38:32 | <monochrom> | :( |
| 18:38:35 | <tomsmeding> | iirc for containers:Data.Tree.Tree there are actually multiple lawful monad instances |
| 18:38:42 | <tomsmeding> | and none of them is sensible (imo) |
| 18:40:47 | × | hallucinagen quits (~prodmezha@123.63.203.210) (Ping timeout: 264 seconds) |
| 18:41:52 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 18:47:53 | <EvanR> | tomsmeding, uniform would be boring anyway |
| 18:48:07 | <tomsmeding> | :p |
| 18:51:05 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:55:47 | → | linzage joins (~prodmezha@223.187.113.18) |
| 18:58:05 | → | ft joins (~ft@p508db238.dip0.t-ipconnect.de) |
| 18:58:41 | × | triceraptor quits (~prodmezha@223.187.113.18) (Ping timeout: 268 seconds) |
| 19:05:15 | <Inst> | https://paste.tomsmeding.com/2nrNVPi9 |
| 19:05:32 | <Inst> | oh, i'm an idiot |
| 19:06:05 | × | linzage quits (~prodmezha@223.187.113.18) (Ping timeout: 268 seconds) |
| 19:06:36 | <Inst> | I don't think I can do better than this for explicit recursive solutions, right? |
| 19:07:04 | <tomsmeding> | what is MyList |
| 19:07:30 | <Inst> | data MyList a = MLL | MLBr a (MyList a) |
| 19:07:58 | <tomsmeding> | which applicative instance are you going for :p |
| 19:08:15 | <tomsmeding> | the interleaving one, presumably |
| 19:08:21 | <Inst> | the standard one |
| 19:08:24 | <Inst> | not ziplist |
| 19:08:53 | <Inst> | i'm bored and bashing my head in against trying to install nixos, so might as well go review implementation of list applicatives and foldr |
| 19:09:30 | <tomsmeding> | MLBr f fcont <*> l = fmap f l ++ (fcont <*> l) |
| 19:09:32 | <tomsmeding> | right? |
| 19:09:36 | <EvanR> | review your scriptures |
| 19:09:54 | <tomsmeding> | potentially you can write a special-case fmap-plus-append |
| 19:09:55 | <monochrom> | Explicit recursion is OK. |
| 19:10:57 | <Inst> | the append is less efficient, no? |
| 19:11:14 | <tomsmeding> | yeah, so you'd manually fuse fmap and append |
| 19:11:24 | <tomsmeding> | which results in roughly the same code as you currently have :p |
| 19:11:28 | <tomsmeding> | slightly less special-cased |
| 19:11:34 | <monochrom> | In the case of list's <*>, it is even more enlightening to see that one of your two explicit recursions is just fmap. |
| 19:11:36 | <Inst> | oh wait, append should be doubly strict? I forget |
| 19:11:46 | <tomsmeding> | monochrom: have you looked at the paste |
| 19:12:11 | <monochrom> | Yes. It has an outer recursion and an inner recursion. One of them is fmap. |
| 19:12:19 | → | Guest28 joins (~Guest28@broadband-178-140-136-65.ip.moscow.rt.ru) |
| 19:12:26 | <tomsmeding> | no |
| 19:12:36 | <tomsmeding> | note the last equation of go |
| 19:12:49 | <Inst> | yeah, it is, but the point is that i'm trying to avoid the <> |
| 19:12:57 | <Inst> | (except this one doesn't even have a semigroup instance written for it) |
| 19:13:01 | <tomsmeding> | it's _approximately_ fmap, but not precisely |
| 19:13:10 | <tomsmeding> | it's fmap fused with this particular append |
| 19:13:52 | <monochrom> | Ugh then it's poorly written :) |
| 19:13:57 | <Inst> | ugh why |
| 19:14:00 | <Inst> | :( |
| 19:14:02 | <Inst> | oh, monochrom |
| 19:14:06 | <tomsmeding> | monochrom: would you use (++)? |
| 19:17:09 | ezzieygu1wuf | is now known as ezzieyguywuf |
| 19:18:05 | <monochrom> | Yes. |
| 19:18:19 | <tomsmeding> | then you have two traversals over each part: one in fmap and one in (++) |
| 19:18:42 | <tomsmeding> | barring clever deforestation by ghc (does that happen here? I dunno), that's less efficient than one traversal |
| 19:20:27 | × | elkcl quits (~elkcl@broadband-178-140-136-65.ip.moscow.rt.ru) (Remote host closed the connection) |
| 19:21:17 | <monochrom> | I have trouble seeing why that is a priority, given that the prior conversation seems to be on learning applicatives and monads. |
| 19:21:24 | → | elkcl joins (~elkcl@broadband-178-140-136-65.ip.moscow.rt.ru) |
| 19:21:24 | <tomsmeding> | fair :D |
| 19:21:43 | <tomsmeding> | Inst: ^ |
| 19:22:21 | <tomsmeding> | and it's a minor problem anyway, it's a constant factor overhead that won't even reach 2x; the complexity is fine |
| 19:22:55 | <Inst> | ??? |
| 19:22:59 | <Inst> | relearning applicatives and monads |
| 19:23:14 | <Inst> | the real goal is more like, actually getting a solid understanding of traversable |
| 19:23:14 | <tomsmeding> | still, the version with fmap and ++ is much nicer |
| 19:23:16 | <Inst> | I'm thinking about |
| 19:23:39 | <tomsmeding> | and much clearer in the actual data flow |
| 19:23:50 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 19:23:51 | <monochrom> | An insight I discovered when writing lectures for them was precisely that not only applicative does more than functor, but also an internal sense of how much: in many cases (at least Maybe and []), <*> can build upon fmap, but also needs to add its own case analysis. |
| 19:23:59 | <Inst> | traverseB_ :: (Applicative f, Traversable t) :: (a -> Maybe (f b)) -> t a -> f () |
| 19:24:35 | → | zetef joins (~quassel@5.2.182.98) |
| 19:24:36 | <Inst> | you can get what this is really about, right? |
| 19:24:39 | <monochrom> | For code optimization, I would still start with map and (++), then recongize that they are both foldr's, then try to use one of those foldr fusion laws. |
| 19:24:53 | <elkcl> | hi, maybe a bit of an offtopic question (idk of a better place to ask this): is there a more a less practical example of a type constructor in lambda *weak* omega? I tried writing down the pair type constructor as an example (pairs like in untyped lambda calculus, where pair a b = λf. f a b), but looks like I still need П-types for that (because it is unclear what the result type of f would be), which makes it lambda omega, not |
| 19:24:54 | <elkcl> | lambda *weak* omega |
| 19:25:09 | <Inst> | lol nested loops? :3 |
| 19:25:24 | <monochrom> | (And I don't commit to whether it is human or computer who do that rewrite.) |
| 19:25:31 | <tomsmeding> | monochrom: a <*> b == ap a b == do { f <- a; x <- b; return (f x) } == do { f <- a; f <$> b } |
| 19:25:42 | <tomsmeding> | it can always build on fmap |
| 19:25:58 | <monochrom> | But that one builds on >>= and join :( |
| 19:26:04 | <Inst> | okay, thanks for the challenge, i'll rewrite both of them as foldr :) |
| 19:26:13 | <tomsmeding> | monochrom: unless you inline this particular application of >>= :p |
| 19:26:20 | <tomsmeding> | which is the same anyway |
| 19:26:23 | <monochrom> | Yeah I inline that. |
| 19:26:31 | <Inst> | since i have a foldable implementation up already |
| 19:27:33 | <tomsmeding> | elkcl: try ##dependent or #agda perhaps |
| 19:28:10 | × | zetef quits (~quassel@5.2.182.98) (Remote host closed the connection) |
| 19:28:21 | <monochrom> | So I write like "Nothing <*> _ = Nothing; Just f <*> xs = fmap f xs" |
| 19:28:32 | <elkcl> | tomsmeding: ok thanks |
| 19:28:34 | tomsmeding | writes the same |
| 19:31:57 | Angelz | Back. |
| 19:32:04 | <Inst> | ugh, needs same number of arguments |
| 19:32:47 | <mauke> | Just f <*> Just x = pure (f x); _ <*> _ = mempty |
| 19:33:08 | <Inst> | (<*>) a = case a of Nothing -> Nothing; Just f -> fmap f |
| 19:33:09 | <Inst> | pffft |
| 19:33:26 | <Inst> | still need to deconstruct the thing |
| 19:33:31 | <Inst> | can't get it point free |
| 19:34:17 | <[exa]> | Inst: guards should help a little there |
| 19:34:18 | <mauke> | @pl \f x -> f >>= (<$> x) |
| 19:34:18 | <lambdabot> | (. flip (<$>)) . (>>=) |
| 19:34:33 | <Inst> | (<*>) = fromMaybe (const Nothing) |
| 19:35:16 | <Inst> | that doesn't work |
| 19:35:41 | <mauke> | :t fmap . fromMaybe (const Nothing) |
| 19:35:42 | <lambdabot> | Functor f => Maybe (a1 -> Maybe a2) -> f a1 -> f (Maybe a2) |
| 19:36:08 | <tomsmeding> | :t \f -> maybe Nothing (Just . f) |
| 19:36:09 | <lambdabot> | (a1 -> a2) -> Maybe a1 -> Maybe a2 |
| 19:37:09 | <tomsmeding> | @pl \f x -> maybe Nothing (\g -> g <$> x) f |
| 19:37:09 | <lambdabot> | flip (maybe Nothing . flip (<$>)) |
| 19:37:26 | <tomsmeding> | :t flip (maybe Nothing `fmap` flip fmap) |
| 19:37:27 | <lambdabot> | Maybe (a1 -> a2) -> Maybe a1 -> Maybe a2 |
| 19:38:29 | <Inst> | a <*> b = foldr (\f -> foldr ((:) . f) [] b) [] a |
| 19:38:32 | <Inst> | still doesn't work :( |
| 19:39:12 | <Inst> | should be able to figure out how to do it with foldr, but avoid the (<>) |
| 19:40:09 | <tomsmeding> | @pl \fs xs -> foldr (\f acc -> foldr (\x acc' -> f x : acc') acc xs) [] fs |
| 19:40:09 | <lambdabot> | flip (flip foldr [] . flip (flip . foldr . ((:) .))) |
| 19:40:16 | <tomsmeding> | chef's kiss |
| 19:41:44 | <mauke> | :t \a b -> foldr (\f z -> foldr ((:) . f) z b) [] a |
| 19:41:45 | <lambdabot> | (Foldable t1, Foldable t2) => t1 (a1 -> a2) -> t2 a1 -> [a2] |
| 19:42:09 | × | Pozyomka quits (~pyon@user/pyon) (Ping timeout: 255 seconds) |
| 19:43:55 | → | Pozyomka joins (~pyon@user/pyon) |
| 19:47:24 | <Inst> | grrrr! |
| 19:48:21 | <Inst> | and yeah that's better cuz of foldr streaming, no? |
| 19:48:46 | <ski> | Right x >>= k = k x |
| 19:48:58 | <ski> | e@(Left _) >>= _ = e |
| 19:53:38 | <tomsmeding> | ski: that second equation doesn't typecheck |
| 19:53:43 | <tomsmeding> | unfortunately |
| 19:54:18 | → | zetef joins (~quassel@5.2.182.98) |
| 19:54:53 | <mauke> | e@Left{} >>= _ = unsafeCoerce e |
| 19:55:55 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 20:00:06 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 20:00:52 | <haskellbridge> | <Jade> mauke: can you use record syntax for normal ADTs? |
| 20:01:08 | <tomsmeding> | only {} |
| 20:02:53 | <geekosaur> | is the as-pattern even needed there? the first pattern should have already forced it |
| 20:03:38 | <tomsmeding> | I should show that instance to my students lol |
| 20:03:42 | <tomsmeding> | they be "uh" |
| 20:03:52 | <haskellbridge> | <Jade> omsmeding: interesting, thanks |
| 20:04:03 | <ski> | tomsmeding : the point would be to have `e' get assigned the type `forall b. Either a b', there |
| 20:04:11 | <haskellbridge> | <Jade> oops, I'm sorry for cutting off your name |
| 20:04:17 | <tomsmeding> | ski: yeah but it doesn't :p |
| 20:04:25 | <ski> | in the current type system |
| 20:04:33 | <tomsmeding> | indeed |
| 20:04:46 | <tomsmeding> | Jade: I've seen much weirder misspellings :p |
| 20:04:58 | <tomsmeding> | and I sympathise because autocomplete is broken across the bridge |
| 20:05:05 | <tomsmeding> | (presumably; it is on this side) |
| 20:05:12 | → | hackyhacker joins (~hackyhack@109.140.160.93) |
| 20:05:15 | <ski> | with "polymorphic variants" (lightweight variants, using row types) in OCaml, the type of `e' in the corresponding code would not include the alternative `Right' |
| 20:05:35 | <haskellbridge> | <Jade> sadly can't blame this one on technology :P |
| 20:05:36 | <haskellbridge> | <Jade> purely my fault |
| 20:06:23 | <ski> | geekosaur : strictly speaking, no. i just tend to prefer to make the defining equations independent of each other, so that the result (not considering bottoms at least) does not depend on the ordering |
| 20:07:10 | <ski> | (in some cases, that does make the size of the code explode, though) |
| 20:09:25 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 20:13:18 | → | dhil joins (~dhil@2001:8e0:2014:3100:65f2:4b8b:1e5:eca) |
| 20:15:54 | → | pavonia joins (~user@user/siracusa) |
| 20:21:56 | × | hackyhacker quits (~hackyhack@109.140.160.93) (Read error: Connection reset by peer) |
| 20:36:52 | × | zetef quits (~quassel@5.2.182.98) (Remote host closed the connection) |
| 20:51:53 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 20:54:12 | × | Guest28 quits (~Guest28@broadband-178-140-136-65.ip.moscow.rt.ru) (Quit: Client closed) |
| 20:54:43 | × | elkcl quits (~elkcl@broadband-178-140-136-65.ip.moscow.rt.ru) (Quit: Konversation terminated!) |
| 20:58:23 | → | siw5ohs0 joins (~aiw5ohs0@user/aiw5ohs0) |
| 20:58:37 | ← | siw5ohs0 parts (~aiw5ohs0@user/aiw5ohs0) (Leaving) |
| 21:05:43 | × | target_i quits (~target_i@user/target-i/x-6023099) (Ping timeout: 268 seconds) |
| 21:05:59 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 21:06:16 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 21:08:47 | × | sprout quits (~quassel@2a02-a448-3a80-0-e595-ce43-46c0-8c8c.fixed6.kpn.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 21:09:23 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 21:15:08 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.1.1) |
| 21:16:07 | → | sprout joins (~quassel@2a02-a448-3a80-0-7de0-65dd-3177-b6a5.fixed6.kpn.net) |
| 21:16:23 | × | michalz quits (~michalz@185.246.207.215) (Quit: ZNC 1.8.2 - https://znc.in) |
| 21:27:07 | → | ania123 joins (~ania123@94-43-231-47.dsl.utg.ge) |
| 21:31:18 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Remote host closed the connection) |
| 21:31:51 | → | tri joins (~tri@ool-18bbef1a.static.optonline.net) |
| 21:36:27 | × | tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 252 seconds) |
| 21:38:11 | × | flukiluke quits (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Remote host closed the connection) |
| 21:39:23 | → | flukiluke joins (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) |
| 21:40:09 | → | [Leary] joins (~Leary]@user/Leary/x-0910699) |
| 21:51:28 | × | omegatron quits (~some@user/omegatron) (Quit: Power is a curious thing. It can be contained, hidden, locked away, and yet it always breaks free.) |
| 21:57:29 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 22:01:42 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 22:02:39 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 22:11:41 | × | dhil quits (~dhil@2001:8e0:2014:3100:65f2:4b8b:1e5:eca) (Ping timeout: 240 seconds) |
| 22:12:19 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds) |
| 22:12:58 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds) |
| 22:13:57 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 22:15:27 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 22:16:21 | × | ania123 quits (~ania123@94-43-231-47.dsl.utg.ge) (Quit: Client closed) |
| 22:18:32 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 22:19:13 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 22:20:34 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:36:02 | × | gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Quit: ZNC 1.7.5 - https://znc.in) |
| 22:36:35 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 264 seconds) |
| 22:39:49 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 22:42:24 | → | gabiruh joins (~gabiruh@vps19177.publiccloud.com.br) |
| 22:44:55 | × | Square quits (~Square4@user/square) (Ping timeout: 272 seconds) |
| 22:47:06 | × | gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Remote host closed the connection) |
| 22:51:16 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:51:19 | → | tri joins (~tri@2607:fb90:b11c:c26:dd1e:45f1:66e:dece) |
| 22:59:30 | → | gabiruh joins (~gabiruh@vps19177.publiccloud.com.br) |
| 23:01:09 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 23:05:58 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 268 seconds) |
| 23:06:44 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 23:09:44 | × | gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Quit: ZNC 1.7.5 - https://znc.in) |
| 23:13:01 | → | shapr` joins (~user@c-24-218-186-89.hsd1.ma.comcast.net) |
| 23:14:04 | → | gabiruh joins (~gabiruh@vps19177.publiccloud.com.br) |
| 23:14:06 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:14:55 | × | shapr quits (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 260 seconds) |
| 23:16:10 | × | acidjnk_new quits (~acidjnk@p200300d6e708d544d1e6663fb0659050.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 23:17:27 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:33:13 | × | tri quits (~tri@2607:fb90:b11c:c26:dd1e:45f1:66e:dece) (Remote host closed the connection) |
| 23:40:37 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 23:41:38 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving) |
| 23:45:03 | → | libertyprime joins (~libertypr@118-92-68-68.dsl.dyn.ihug.co.nz) |
| 23:45:07 | × | Luj quits (~Luj@2a01:e0a:5f9:9681:304f:b65d:c4ab:ff14) (Quit: Ping timeout (120 seconds)) |
| 23:45:27 | → | Luj joins (~Luj@2a01:e0a:5f9:9681:114f:c45b:717e:86b) |
| 23:54:03 | × | Tisoxin quits (~Ikosit@user/ikosit) (Quit: The Lounge - https://thelounge.chat) |
| 23:54:37 | → | Tisoxin joins (~Ikosit@user/ikosit) |
| 23:57:40 | × | mmhat quits (~mmh@p200300f1c706a2b6ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.2.1) |
All times are in UTC on 2024-03-26.