2023-02-15 00:02:43 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2023-02-15 00:04:30 +0100 | myyo | (~myyo@71-211-142-215.hlrn.qwest.net) () |
2023-02-15 00:07:15 +0100 | anderson_ | (~ande@user/anderson) |
2023-02-15 00:07:29 +0100 | thongpv87 | (~thongpv87@2402:9d80:3bb:7b3a:c56c:8a07:1b68:1877) |
2023-02-15 00:07:33 +0100 | mechap | (~mechap@user/mechap) (Quit: WeeChat 3.8) |
2023-02-15 00:08:16 +0100 | anderson | (~ande@user/anderson) (Quit: bye) |
2023-02-15 00:09:51 +0100 | anderson_ | anderson |
2023-02-15 00:10:25 +0100 | eldritch | (~eldritch@user/eldritch) (Quit: bye) |
2023-02-15 00:12:32 +0100 | patrl | (~patrl@user/patrl) (Ping timeout: 265 seconds) |
2023-02-15 00:15:22 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2023-02-15 00:21:17 +0100 | Guest23 | (~Guest23@c-24-56-246-176.customer.broadstripe.net) |
2023-02-15 00:21:33 +0100 | thongpv87 | (~thongpv87@2402:9d80:3bb:7b3a:c56c:8a07:1b68:1877) (Remote host closed the connection) |
2023-02-15 00:22:09 +0100 | Guest23 | (~Guest23@c-24-56-246-176.customer.broadstripe.net) (Client Quit) |
2023-02-15 00:22:20 +0100 | Guest23 | (~Guest23@c-24-56-246-176.customer.broadstripe.net) |
2023-02-15 00:22:35 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:834a:55d5:1880:33be) (Ping timeout: 255 seconds) |
2023-02-15 00:22:49 +0100 | thongpv | (~thongpv87@2402:9d80:3bb:7b3a:42c5:d1db:9622:c029) |
2023-02-15 00:23:46 +0100 | Guest23 | (~Guest23@c-24-56-246-176.customer.broadstripe.net) (Client Quit) |
2023-02-15 00:27:53 +0100 | utis | (~utis@178.255.149.137) |
2023-02-15 00:29:12 +0100 | <utis> | if on voidlinux i try to install ghc and stack and run stack setup i get |
2023-02-15 00:29:14 +0100 | <utis> | Error: [S-9443] |
2023-02-15 00:29:14 +0100 | <utis> | No setup information found for ghc-9.2.5 on your platform. |
2023-02-15 00:29:14 +0100 | <utis> | This probably means a GHC bindist has not yet been added for OS key 'linux64-ncurses6'. |
2023-02-15 00:29:17 +0100 | <utis> | Supported versions: ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, ghc-8.2.1, ghc-8.2.2 |
2023-02-15 00:29:52 +0100 | <utis> | doas that mean i have to download an older version of ghc? |
2023-02-15 00:30:58 +0100 | <c_wraith> | that is a very old list of ghc versions |
2023-02-15 00:31:22 +0100 | <geekosaur> | where did you get ghc and stack from? |
2023-02-15 00:31:29 +0100 | <c_wraith> | I don't use stack though, so I have no idea why it thinks that is appropriate |
2023-02-15 00:32:03 +0100 | gpncarl_ | (~gpncarl@210.12.195.6) |
2023-02-15 00:32:55 +0100 | <utis> | voidlinux repo |
2023-02-15 00:33:10 +0100 | <utis> | but i ran stack upgrade too |
2023-02-15 00:33:54 +0100 | <geekosaur> | add ~/.local/bin to your PATH or you'll still be running the voidlinux one, which may be old enough to be looking at the ancient stack configuration repo |
2023-02-15 00:35:01 +0100 | <utis> | yeah, i did that |
2023-02-15 00:35:28 +0100 | <geekosaur> | beginning or end of PATH? |
2023-02-15 00:35:56 +0100 | <utis> | `type stack` confirms $HOME/bin/stack |
2023-02-15 00:36:14 +0100 | <utis> | (which i symlinked to ~/.local/bin) |
2023-02-15 00:36:39 +0100 | gpncarl_ | (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds) |
2023-02-15 00:37:30 +0100 | <geekosaur> | weird |
2023-02-15 00:37:57 +0100 | <utis> | version is 2.9.3 |
2023-02-15 00:40:38 +0100 | <geekosaur> | https://docs.haskellstack.org/en/stable/faq/#how-do-i-install-ghc-in-stack-when-it-fails-with-the-… might work, if it's the libtinfo issue |
2023-02-15 00:41:30 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds) |
2023-02-15 00:43:41 +0100 | <geekosaur> | although that faq looks ancient |
2023-02-15 00:44:24 +0100 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2023-02-15 00:45:33 +0100 | jargon | (~jargon@184.101.95.90) |
2023-02-15 00:48:01 +0100 | <utis> | geekosaur: that worked! thanks! |
2023-02-15 00:49:19 +0100 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
2023-02-15 00:51:48 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Ping timeout: 252 seconds) |
2023-02-15 00:53:41 +0100 | jargon | (~jargon@184.101.95.90) (Remote host closed the connection) |
2023-02-15 00:53:49 +0100 | bitmapper | (uid464869@2a03:5180:f:2::7:17e5) (Quit: Connection closed for inactivity) |
2023-02-15 00:55:54 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-02-15 00:57:27 +0100 | utis | (~utis@178.255.149.137) (Quit: leaving) |
2023-02-15 00:57:42 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds) |
2023-02-15 01:08:56 +0100 | jargon | (~jargon@184.101.95.90) |
2023-02-15 01:09:38 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-02-15 01:15:05 +0100 | merijn | (~merijn@86.86.29.250) |
2023-02-15 01:17:24 +0100 | AWizzArd_ | (~code@gehrels.uberspace.de) (Changing host) |
2023-02-15 01:17:24 +0100 | AWizzArd_ | (~code@user/awizzard) |
2023-02-15 01:17:31 +0100 | AWizzArd_ | AWizzArd |
2023-02-15 01:20:09 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
2023-02-15 01:21:09 +0100 | merijn | (~merijn@86.86.29.250) (Ping timeout: 252 seconds) |
2023-02-15 01:22:13 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2023-02-15 01:22:46 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 01:23:07 +0100 | mauke[i]_ | (~mauke@user/mauke) |
2023-02-15 01:24:31 +0100 | mauke[i] | (~mauke@user/mauke) (Ping timeout: 248 seconds) |
2023-02-15 01:24:32 +0100 | mauke[i]_ | mauke[i] |
2023-02-15 01:25:58 +0100 | <Clint> | is there something that applies a function recursively until the output equals the input? |
2023-02-15 01:28:34 +0100 | werneta | (~werneta@137.79.195.231) (Remote host closed the connection) |
2023-02-15 01:28:56 +0100 | <hpc> | do you want fix, or (==) specifically? |
2023-02-15 01:29:04 +0100 | <int-e> | :t fst . head . dropWhile (uncurry (/=)) . ap zip tail . iterate ?f |
2023-02-15 01:29:05 +0100 | <lambdabot> | (Eq a, ?f::a -> a) => a -> a |
2023-02-15 01:29:28 +0100 | <int-e> | (I wouldn't use that; explicit recursion will be far more readable) |
2023-02-15 01:30:49 +0100 | <int-e> | anyway, it's not a `base` function |
2023-02-15 01:30:54 +0100 | <Clint> | hpc: (==) specifically |
2023-02-15 01:30:59 +0100 | <Clint> | okay, fair enough |
2023-02-15 01:31:26 +0100 | <int-e> | Though I'd bet that there are half a dozen hackage packages defining this. |
2023-02-15 01:31:42 +0100 | <int-e> | (But no particular one comes to mind.) |
2023-02-15 01:32:08 +0100 | <Clint> | clearly i have no idea how to search for this |
2023-02-15 01:32:17 +0100 | <hpc> | maybe for numerical functions specifically, to do stuff like newton's method? |
2023-02-15 01:32:27 +0100 | <int-e> | @hoogle Eq a => (a -> a) -> a -> a |
2023-02-15 01:32:28 +0100 | <lambdabot> | Data.Generics.SYB mkT :: (a -> a) -> (a -> a) |
2023-02-15 01:32:28 +0100 | <lambdabot> | Prelude ($) :: forall r a (b :: TYPE r) . (a -> b) -> a -> b |
2023-02-15 01:32:28 +0100 | <lambdabot> | Prelude ($!) :: forall r a (b :: TYPE r) . (a -> b) -> a -> b |
2023-02-15 01:32:56 +0100 | <int-e> | Right, that's not a very decriptive type |
2023-02-15 01:33:34 +0100 | master_ | (~master@user/masterbuilder) |
2023-02-15 01:35:11 +0100 | nehsou^ | (~nehsou@c-24-30-76-89.hsd1.ga.comcast.net) |
2023-02-15 01:36:49 +0100 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2023-02-15 01:37:51 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2023-02-15 01:39:26 +0100 | zaquest | (~notzaques@5.130.79.72) |
2023-02-15 01:42:10 +0100 | zeenk | (~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!) |
2023-02-15 01:43:58 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2023-02-15 01:49:00 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds) |
2023-02-15 01:49:15 +0100 | acidjnk | (~acidjnk@p200300d6e715c408e15a683b71611690.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2023-02-15 01:51:41 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-15 01:59:07 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-02-15 01:59:07 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-02-15 01:59:07 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-02-15 02:01:18 +0100 | gpncarl_ | (~gpncarl@210.12.195.6) |
2023-02-15 02:10:01 +0100 | zmt01 | (~zmt00@user/zmt00) (Read error: Connection reset by peer) |
2023-02-15 02:10:27 +0100 | zmt01 | (~zmt00@user/zmt00) |
2023-02-15 02:10:36 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Remote host closed the connection) |
2023-02-15 02:10:52 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2023-02-15 02:11:10 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2023-02-15 02:12:18 +0100 | mei | (~mei@user/mei) (Remote host closed the connection) |
2023-02-15 02:13:04 +0100 | Angelz | (Angelz@angelz.oddprotocol.org) (Ping timeout: 252 seconds) |
2023-02-15 02:13:40 +0100 | manwithluck | (~manwithlu@194.177.28.192) (Ping timeout: 260 seconds) |
2023-02-15 02:15:16 +0100 | manwithluck | (~manwithlu@194.177.28.192) |
2023-02-15 02:16:15 +0100 | [exa] | (~exa@user/exa/x-3587197) (Ping timeout: 248 seconds) |
2023-02-15 02:16:59 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2023-02-15 02:18:07 +0100 | [exa] | (~exa@srv3n.blesmrt.net) |
2023-02-15 02:18:22 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 02:18:42 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
2023-02-15 02:20:07 +0100 | mei | (~mei@user/mei) |
2023-02-15 02:21:18 +0100 | <master_> | hello, what's the status of dependent haskell exactly? |
2023-02-15 02:21:38 +0100 | master_ | themasterbuilder |
2023-02-15 02:22:17 +0100 | <geekosaur> | stuck |
2023-02-15 02:23:23 +0100 | themasterbuilder | masterbuilder |
2023-02-15 02:23:42 +0100 | <masterbuilder> | ah :/ so don't hold your breath? |
2023-02-15 02:24:13 +0100 | <geekosaur> | the very first phase of it (`forall x ->`) has run into issues https://github.com/ghc-proposals/ghc-proposals/issues/558 |
2023-02-15 02:24:17 +0100 | <geekosaur> | correct |
2023-02-15 02:24:47 +0100 | <masterbuilder> | thanks I'll have a read |
2023-02-15 02:29:14 +0100 | ddellacosta | (~ddellacos@146.70.166.203) (Quit: WeeChat 3.8) |
2023-02-15 02:30:44 +0100 | xbarnett | (~xbarnett@89.44.10.165) |
2023-02-15 02:32:50 +0100 | ddellacosta | (~ddellacos@146.70.166.203) |
2023-02-15 02:34:19 +0100 | larrythecow | (~Rahul_San@user/oldfashionedcow) |
2023-02-15 02:34:27 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Ping timeout: 255 seconds) |
2023-02-15 02:38:52 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2023-02-15 02:42:32 +0100 | telser | (~quassel@user/telser) |
2023-02-15 02:42:50 +0100 | npmania | (~Thunderbi@45.8.223.203) (Ping timeout: 260 seconds) |
2023-02-15 02:43:20 +0100 | fmlatghor | (~lcoogan@c-73-177-167-149.hsd1.va.comcast.net) |
2023-02-15 02:43:51 +0100 | johnw | (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in) |
2023-02-15 02:43:52 +0100 | telser_ | (~quassel@user/telser) (Ping timeout: 248 seconds) |
2023-02-15 02:43:52 +0100 | Angelz | (Angelz@2605:6400:30:fc15:9bd1:2217:41cd:bb15) |
2023-02-15 02:44:01 +0100 | xff0x | (~xff0x@2405:6580:b080:900:a328:3e4d:f447:d561) (Ping timeout: 252 seconds) |
2023-02-15 02:45:01 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2023-02-15 02:46:22 +0100 | larrythecow | oldfashionedcow |
2023-02-15 02:49:51 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 255 seconds) |
2023-02-15 02:55:24 +0100 | <sclv> | is Niklas Hambüchen ever on irc? |
2023-02-15 02:55:58 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
2023-02-15 02:58:02 +0100 | shailangsa_ | (~shailangs@host165-120-169-78.range165-120.btcentralplus.com) (Remote host closed the connection) |
2023-02-15 03:01:05 +0100 | xbarnett | (~xbarnett@89.44.10.165) (Quit: Leaving) |
2023-02-15 03:10:32 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 03:12:50 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 03:17:24 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-15 03:19:33 +0100 | zaquest | (~notzaques@5.130.79.72) (Ping timeout: 255 seconds) |
2023-02-15 03:21:50 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2023-02-15 03:22:22 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
2023-02-15 03:28:00 +0100 | rnat | (uid73555@2a03:5180:f:2::1:1f53) |
2023-02-15 03:28:09 +0100 | thongpv | (~thongpv87@2402:9d80:3bb:7b3a:42c5:d1db:9622:c029) (Remote host closed the connection) |
2023-02-15 03:29:59 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2023-02-15 03:32:36 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds) |
2023-02-15 03:32:45 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
2023-02-15 03:34:11 +0100 | thongpv | (~thongpv87@2402:9d80:3bb:7b3a:fd19:6778:f8a1:cf50) |
2023-02-15 03:34:59 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds) |
2023-02-15 03:37:06 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds) |
2023-02-15 03:37:33 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds) |
2023-02-15 03:39:52 +0100 | thongpv | (~thongpv87@2402:9d80:3bb:7b3a:fd19:6778:f8a1:cf50) (Remote host closed the connection) |
2023-02-15 03:40:00 +0100 | shailangsa | (~shailangs@host165-120-169-78.range165-120.btcentralplus.com) |
2023-02-15 03:42:24 +0100 | thongpv | (~thongpv87@2402:9d80:3bb:7b3a:54e2:c98:72f3:f791) |
2023-02-15 03:42:33 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-02-15 03:51:37 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds) |
2023-02-15 03:55:29 +0100 | gmg | (~user@user/gehmehgeh) |
2023-02-15 03:56:11 +0100 | thongpv | (~thongpv87@2402:9d80:3bb:7b3a:54e2:c98:72f3:f791) (Remote host closed the connection) |
2023-02-15 03:58:14 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Ping timeout: 255 seconds) |
2023-02-15 04:01:17 +0100 | flo[m] | (~flosansps@2001:470:69fc:105::1:c22d) |
2023-02-15 04:08:32 +0100 | razetime | (~Thunderbi@117.193.1.74) |
2023-02-15 04:09:10 +0100 | dtman34 | (~dtman34@2601:447:d000:93c9:4f13:e7d1:81fd:2aa6) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in) |
2023-02-15 04:09:30 +0100 | dtman34 | (~dtman34@2601:447:d000:93c9:45e0:f7b0:cefa:26ff) |
2023-02-15 04:16:24 +0100 | jmorris | (uid537181@2a03:5180:f:5::8:325d) |
2023-02-15 04:22:00 +0100 | gpncarl | (~gpncarl@210.12.195.6) |
2023-02-15 04:23:34 +0100 | gentauro | (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
2023-02-15 04:23:49 +0100 | thegeekinside | (~thegeekin@189.180.97.223) (Ping timeout: 246 seconds) |
2023-02-15 04:24:21 +0100 | gpncarl_ | (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds) |
2023-02-15 04:24:47 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 248 seconds) |
2023-02-15 04:28:52 +0100 | gentauro | (~gentauro@user/gentauro) |
2023-02-15 04:36:28 +0100 | ravamrt | (~ravamrt@112.134.192.214) |
2023-02-15 04:42:53 +0100 | ravamrt | (~ravamrt@112.134.192.214) (Quit: Leaving.) |
2023-02-15 04:44:19 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 04:44:42 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat) |
2023-02-15 04:46:05 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:4e8c::) |
2023-02-15 04:46:19 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2023-02-15 04:47:32 +0100 | ravamrt | (~ravamrt@112.134.192.214) |
2023-02-15 04:53:53 +0100 | razetime | (~Thunderbi@117.193.1.74) (Remote host closed the connection) |
2023-02-15 04:54:05 +0100 | td_ | (~td@i5387090E.versanet.de) (Ping timeout: 260 seconds) |
2023-02-15 04:55:31 +0100 | Guest95 | (~Guest95@202.67.40.15) |
2023-02-15 04:55:51 +0100 | td_ | (~td@i53870935.versanet.de) |
2023-02-15 04:56:42 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2023-02-15 04:58:38 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:f08f:f6f1:9d72:e3df) |
2023-02-15 05:01:41 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
2023-02-15 05:01:46 +0100 | <sm> | I seem to remember a nh2 |
2023-02-15 05:04:05 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-15 05:12:57 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 05:26:24 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 05:27:12 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Ping timeout: 248 seconds) |
2023-02-15 05:31:32 +0100 | notzmv | (~zmv@user/notzmv) |
2023-02-15 05:33:49 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-15 05:34:29 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8) |
2023-02-15 05:36:25 +0100 | jinsun | (~jinsun@user/jinsun) |
2023-02-15 05:37:31 +0100 | rnat | (uid73555@2a03:5180:f:2::1:1f53) (Quit: Connection closed for inactivity) |
2023-02-15 05:37:36 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:f08f:f6f1:9d72:e3df) (Ping timeout: 255 seconds) |
2023-02-15 05:38:11 +0100 | razetime | (~Thunderbi@117.193.1.74) |
2023-02-15 05:44:28 +0100 | mbuf | (~Shakthi@49.204.133.116) |
2023-02-15 05:47:56 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-15 05:48:17 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-02-15 05:49:11 +0100 | gmg | (~user@user/gehmehgeh) |
2023-02-15 05:49:52 +0100 | andrewboltachev | (~andrey@178.141.125.176) |
2023-02-15 05:50:53 +0100 | Togooroo | (~lalune@216.73.163.231) |
2023-02-15 05:51:08 +0100 | Guest95 | (~Guest95@202.67.40.15) (Ping timeout: 260 seconds) |
2023-02-15 05:53:46 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds) |
2023-02-15 05:55:16 +0100 | Vajb | (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer) |
2023-02-15 05:56:14 +0100 | Vajb | (~Vajb@88.195.165.27) |
2023-02-15 05:57:52 +0100 | andrewboltachev | (~andrey@178.141.125.176) () |
2023-02-15 06:09:50 +0100 | hounded | (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection) |
2023-02-15 06:09:50 +0100 | hounded_woodstoc | (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection) |
2023-02-15 06:09:50 +0100 | hounded_1969 | (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Read error: Connection reset by peer) |
2023-02-15 06:12:15 +0100 | aweinstock | (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) (Ping timeout: 268 seconds) |
2023-02-15 06:13:47 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
2023-02-15 06:15:57 +0100 | ddellacosta | (~ddellacos@146.70.166.203) (Ping timeout: 252 seconds) |
2023-02-15 06:19:05 +0100 | aweinstock | (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) |
2023-02-15 06:26:12 +0100 | jmorris | (uid537181@2a03:5180:f:5::8:325d) (Quit: Connection closed for inactivity) |
2023-02-15 06:31:21 +0100 | Vajb | (~Vajb@88.195.165.27) (Ping timeout: 252 seconds) |
2023-02-15 06:32:15 +0100 | Vajb | (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) |
2023-02-15 06:32:22 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-02-15 06:32:22 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-02-15 06:32:22 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-02-15 06:35:40 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:92a:83c4:99b:657e) |
2023-02-15 06:35:49 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-02-15 06:36:46 +0100 | gmg | (~user@user/gehmehgeh) |
2023-02-15 06:39:48 +0100 | jargon | (~jargon@184.101.95.90) (Ping timeout: 255 seconds) |
2023-02-15 06:45:22 +0100 | trev | (~trev@user/trev) |
2023-02-15 06:55:33 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 07:02:17 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2023-02-15 07:03:31 +0100 | thegeekinside | (~thegeekin@189.180.97.223) |
2023-02-15 07:08:36 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
2023-02-15 07:09:50 +0100 | srk | (~sorki@user/srk) |
2023-02-15 07:11:39 +0100 | jinsun | (~jinsun@user/jinsun) (Ping timeout: 255 seconds) |
2023-02-15 07:13:16 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2023-02-15 07:13:42 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2023-02-15 07:14:16 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
2023-02-15 07:33:08 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2023-02-15 07:45:01 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-02-15 07:49:59 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-15 07:59:41 +0100 | analoq | (~yashi@user/dies) (Ping timeout: 246 seconds) |
2023-02-15 08:01:38 +0100 | analoq | (~yashi@user/dies) |
2023-02-15 08:04:32 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 08:04:53 +0100 | <chreekat> | There's one of those on Matrix |
2023-02-15 08:11:59 +0100 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-02-15 08:20:44 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:1d05:832d:e3e6:a39e) |
2023-02-15 08:21:04 +0100 | Togooroo | (~lalune@216.73.163.231) (Quit: Togooroo) |
2023-02-15 08:22:29 +0100 | kenran | (~user@user/kenran) |
2023-02-15 08:23:25 +0100 | kenran | (~user@user/kenran) (Remote host closed the connection) |
2023-02-15 08:24:15 +0100 | jakalx | (~jakalx@base.jakalx.net) () |
2023-02-15 08:24:16 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds) |
2023-02-15 08:27:15 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:92a:83c4:99b:657e) (Ping timeout: 255 seconds) |
2023-02-15 08:27:17 +0100 | michalz | (~michalz@185.246.204.107) |
2023-02-15 08:31:05 +0100 | nattiestnate | (~nate@202.138.250.37) (Quit: WeeChat 3.8) |
2023-02-15 08:32:03 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) |
2023-02-15 08:34:10 +0100 | nehsou^ | (~nehsou@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection) |
2023-02-15 08:35:12 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 08:36:29 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 08:37:30 +0100 | Flow | (~none@gentoo/developer/flow) (Ping timeout: 260 seconds) |
2023-02-15 08:43:06 +0100 | opticblast | (~Thunderbi@172.58.82.191) (Ping timeout: 255 seconds) |
2023-02-15 08:43:07 +0100 | kritzefitz | (~kritzefit@debian/kritzefitz) (Ping timeout: 256 seconds) |
2023-02-15 08:44:10 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-15 08:50:00 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) |
2023-02-15 08:53:31 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2023-02-15 08:54:18 +0100 | freeside | (~mengwong@129.126.62.10) |
2023-02-15 08:56:33 +0100 | MajorBiscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
2023-02-15 08:57:10 +0100 | thegeekinside | (~thegeekin@189.180.97.223) (Ping timeout: 246 seconds) |
2023-02-15 08:59:00 +0100 | thegeekinside | (~thegeekin@189.180.97.223) |
2023-02-15 09:04:42 +0100 | razetime | (~Thunderbi@117.193.1.74) (Ping timeout: 255 seconds) |
2023-02-15 09:07:54 +0100 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) |
2023-02-15 09:16:33 +0100 | razetime | (~Thunderbi@117.193.1.74) |
2023-02-15 09:20:00 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2023-02-15 09:23:26 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) |
2023-02-15 09:24:00 +0100 | nschoe | (~q@141.101.51.197) |
2023-02-15 09:25:24 +0100 | freeside | (~mengwong@129.126.62.10) (Ping timeout: 255 seconds) |
2023-02-15 09:26:42 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-15 09:27:52 +0100 | johnw | (~johnw@2600:1700:cf00:db0:c50c:6975:4579:9276) |
2023-02-15 09:28:23 +0100 | jwiegley | (~jwiegley@2600:1700:cf00:db0:c50c:6975:4579:9276) |
2023-02-15 09:29:22 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2023-02-15 09:31:15 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds) |
2023-02-15 09:31:55 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving) |
2023-02-15 09:33:33 +0100 | chele | (~chele@user/chele) |
2023-02-15 09:36:42 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection) |
2023-02-15 09:41:04 +0100 | patrl | (~patrl@user/patrl) |
2023-02-15 09:43:10 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) |
2023-02-15 09:45:37 +0100 | shapr | (~user@net-5-88-239-92.cust.vodafonedsl.it) |
2023-02-15 09:49:33 +0100 | razetime | (~Thunderbi@117.193.1.74) (Remote host closed the connection) |
2023-02-15 09:55:35 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-02-15 09:57:41 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds) |
2023-02-15 09:59:29 +0100 | ezzieygu1wuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 255 seconds) |
2023-02-15 10:00:14 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2023-02-15 10:04:21 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-15 10:09:08 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-15 10:11:38 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds) |
2023-02-15 10:20:45 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds) |
2023-02-15 10:21:14 +0100 | CiaoSen | (~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5) |
2023-02-15 10:22:19 +0100 | pavonia | (~user@user/siracusa) (Ping timeout: 248 seconds) |
2023-02-15 10:24:32 +0100 | pavonia | (~user@user/siracusa) |
2023-02-15 10:24:46 +0100 | Square | (~Square4@user/square) |
2023-02-15 10:25:53 +0100 | <Square> | Wouldn it be possible to deprecate String or extend String with Text functionality? |
2023-02-15 10:26:01 +0100 | kritzefitz | (~kritzefit@debian/kritzefitz) |
2023-02-15 10:26:26 +0100 | <merijn> | Square: Define "extend" and "Text functionality"? |
2023-02-15 10:26:46 +0100 | <Square> | merijn, idk. I'm thinking from my hip here. |
2023-02-15 10:26:54 +0100 | <dminuoso_> | Square: Not really. |
2023-02-15 10:27:14 +0100 | <merijn> | Also, I see zero value in deprecating String. There's (arguably) some value to deprecating a bunch of stuff that is *using* String, but I don't see why (or even how) you would deprecate String independently of lists |
2023-02-15 10:27:35 +0100 | <Rembane> | Square: What's leading to the question? |
2023-02-15 10:27:36 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2023-02-15 10:28:16 +0100 | <Square> | i got the impression String is just a subset of Text and an unlucky choice. Maybe not? |
2023-02-15 10:28:43 +0100 | <Rembane> | String is a list of Char. I don't know what Text is. :) |
2023-02-15 10:29:20 +0100 | <merijn> | Square: I don't see in what way it is a subset? |
2023-02-15 10:29:22 +0100 | <Square> | ok, I guess I lack enough knowledge to talk about this. nvm =D |
2023-02-15 10:29:30 +0100 | <merijn> | String and Text are *very* different datastructures |
2023-02-15 10:29:53 +0100 | <hammond__> | new to haskell here |
2023-02-15 10:30:00 +0100 | <hammond__> | how are they different. |
2023-02-15 10:30:01 +0100 | <merijn> | Square: Essentially, String is just "a linked list of Char", with all the inherent advantages and/or disadvantages linked lists bring (including lots of overhead from all the list parts) |
2023-02-15 10:30:19 +0100 | <merijn> | Text on the other hand is a "densely packed binary representation of unicode" |
2023-02-15 10:30:29 +0100 | <merijn> | hammond__: See above ;) |
2023-02-15 10:31:18 +0100 | <merijn> | iow, Text consumes about 2 bytes (1, I suppose with the recent UTF-8 based Text) + say, 12ish bytes overhead every KB or so |
2023-02-15 10:31:22 +0100 | <hammond__> | ok :) |
2023-02-15 10:31:34 +0100 | <merijn> | Compare to String which may consume as much as 32 bytes per character |
2023-02-15 10:32:00 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds) |
2023-02-15 10:32:15 +0100 | <merijn> | On the flip side, modifying 1 character in a giant Text block effectively requires you to copy the entire block + 1 change (since immutable) |
2023-02-15 10:32:23 +0100 | gensyst | (gensyst@user/gensyst) |
2023-02-15 10:33:20 +0100 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) |
2023-02-15 10:34:16 +0100 | <merijn> | As base heuristic use Text anytime you deal with either 1) large blobs of text (like paragraphs/pages worth) or 2) if you're gonna have hundreds of values around (if you have a million 100 character keys, the memory difference adds up) |
2023-02-15 10:35:28 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-02-15 10:36:08 +0100 | <gensyst> | How can I match "settings" with separate "corresponding data"? This is what I mean: https://dpaste.com/54Z6R2KFU |
2023-02-15 10:36:14 +0100 | <gensyst> | The problem is that there's a burden on me, the programmer, to keep the two in sync and "error" when I do something unexpected. This is ugly. Can I somehow match the two at compile-time - without burdening the client in any way? |
2023-02-15 10:36:18 +0100 | <gensyst> | (The other problem of the client having to worry about matching the settings with initial state is not a big problem here - I could solve it by providing an "initialState" function) |
2023-02-15 10:36:46 +0100 | <dminuoso_> | gensyst: distribute around in this way |
2023-02-15 10:36:53 +0100 | <dminuoso_> | `data Mode = ModeA | ModeB` |
2023-02-15 10:36:55 +0100 | gmg | (~user@user/gehmehgeh) |
2023-02-15 10:37:01 +0100 | <dminuoso_> | Oh hold on that wont work |
2023-02-15 10:37:10 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
2023-02-15 10:37:27 +0100 | <dminuoso_> | Mmm this is an interesting example |
2023-02-15 10:37:28 +0100 | <merijn> | gensyst: Could make Settings a GADT tagged with a phantom |
2023-02-15 10:39:52 +0100 | <gensyst> | merijn, not sure how that would look... |
2023-02-15 10:40:50 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-02-15 10:40:56 +0100 | <merijn> | gensyst: https://dpaste.com/HDH7H3L6D |
2023-02-15 10:41:02 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 10:41:06 +0100 | <merijn> | Obligatory: It compiles, but I haven't tested it ;) |
2023-02-15 10:41:22 +0100 | gmg | (~user@user/gehmehgeh) |
2023-02-15 10:41:32 +0100 | <dminuoso_> | That looks good |
2023-02-15 10:41:42 +0100 | <merijn> | GHC even correctly warns if you add the wrong branch to the case! |
2023-02-15 10:42:09 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 10:42:11 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds) |
2023-02-15 10:42:27 +0100 | freeside | (~mengwong@122.11.214.229) |
2023-02-15 10:42:37 +0100 | <merijn> | Of course, how well this works depends on if you ever want to "change" the type of the state |
2023-02-15 10:43:17 +0100 | zmt00 | (~zmt00@user/zmt00) |
2023-02-15 10:43:23 +0100 | <gensyst> | merijn, why would that be a problem |
2023-02-15 10:44:27 +0100 | <merijn> | gensyst: in this example the 'm' encodes the mode, but if you'd want a function where the result is "either 'State A' or 'State B', decided dynamically at runtime", then that type won't work |
2023-02-15 10:44:57 +0100 | zmt01 | (~zmt00@user/zmt00) (Ping timeout: 255 seconds) |
2023-02-15 10:45:09 +0100 | <merijn> | gensyst: Because then you're in the realm of needing dependent types to figure out the result type of the function makeItHappen |
2023-02-15 10:45:28 +0100 | <gensyst> | i see |
2023-02-15 10:45:36 +0100 | <gensyst> | cool in my use case i won't need that |
2023-02-15 10:45:38 +0100 | <gensyst> | this is mind-blowing |
2023-02-15 10:45:39 +0100 | <gensyst> | thank you |
2023-02-15 10:45:52 +0100 | <merijn> | gensyst: GADTs are pretty neat :) |
2023-02-15 10:47:50 +0100 | <int-e> | "no one knows why" turns out to be "we have quite a few ideas but aren't sure how exactly they produce the data that we're seeing and whether there are other factors" |
2023-02-15 10:48:44 +0100 | <int-e> | So a clickbait headline. What a surprise. |
2023-02-15 10:48:55 +0100 | <merijn> | int-e: Wrong channel ;) |
2023-02-15 10:49:13 +0100 | <int-e> | damn |
2023-02-15 10:49:20 +0100 | <merijn> | gensyst: Can actually clean up further to this: https://dpaste.com/3NAHKS36D |
2023-02-15 10:49:49 +0100 | <int-e> | (also, sorry) |
2023-02-15 10:49:58 +0100 | <merijn> | ah, modern GHC whining about unticked promoted constructors, but no incomplete patterns :) |
2023-02-15 10:50:44 +0100 | <merijn> | gensyst: Might have to use 'A and 'B in the types, but other than that it compiles warning free on 9.2 :) |
2023-02-15 10:51:38 +0100 | patrl | (~patrl@user/patrl) (Quit: WeeChat 3.8) |
2023-02-15 10:52:12 +0100 | patrl | (~patrl@user/patrl) |
2023-02-15 10:52:15 +0100 | patrl | (~patrl@user/patrl) (Client Quit) |
2023-02-15 10:55:02 +0100 | zmt01 | (~zmt00@user/zmt00) |
2023-02-15 10:56:39 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 255 seconds) |
2023-02-15 10:57:06 +0100 | <gensyst> | merijn, excellent! |
2023-02-15 10:57:12 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 11:00:21 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 11:03:01 +0100 | vpan | (~0@212.117.1.172) |
2023-02-15 11:05:18 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 255 seconds) |
2023-02-15 11:10:49 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2023-02-15 11:19:11 +0100 | <gensyst> | merijn, is it possible to have record constructors (would be nice for describing each field in the state, esp. if there are many fields) |
2023-02-15 11:21:38 +0100 | <merijn> | gensyst: Yes, but the syntax is a bit wonky, should be described in the GHC user guide |
2023-02-15 11:23:23 +0100 | <merijn> | I don't think I have any examples using it lying around, though |
2023-02-15 11:24:19 +0100 | <gensyst> | thanks, i'll try to find it |
2023-02-15 11:24:43 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
2023-02-15 11:26:49 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2023-02-15 11:28:38 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-15 11:29:13 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) (Ping timeout: 268 seconds) |
2023-02-15 11:29:42 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) |
2023-02-15 11:31:40 +0100 | delYsid | (~user@user/delYsid) |
2023-02-15 11:37:35 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-02-15 11:37:41 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 11:44:20 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds) |
2023-02-15 11:44:34 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-02-15 11:52:52 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds) |
2023-02-15 11:55:15 +0100 | mmhat | (~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de) |
2023-02-15 11:57:17 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2023-02-15 11:58:16 +0100 | mmhat | (~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit) |
2023-02-15 11:58:39 +0100 | Miao[m] | hellwolf[m] |
2023-02-15 11:59:28 +0100 | ravamrt | (~ravamrt@112.134.192.214) (Quit: Leaving.) |
2023-02-15 12:01:49 +0100 | freeside | (~mengwong@122.11.214.229) (Read error: Connection reset by peer) |
2023-02-15 12:03:57 +0100 | quintasan_ | (~quassel@quintasan.pl) () |
2023-02-15 12:04:09 +0100 | quintasan | (~quassel@quintasan.pl) |
2023-02-15 12:05:31 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-02-15 12:10:10 +0100 | xff0x | (~xff0x@2405:6580:b080:900:1159:8d59:b148:53e) |
2023-02-15 12:12:10 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
2023-02-15 12:15:39 +0100 | CiaoSen | (~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5) (Ping timeout: 252 seconds) |
2023-02-15 12:25:58 +0100 | <tomsmeding> | gensyst: you've probably found it, but in case you haven't, or for lurkers, https://tomsmeding.com/ss/get/tomsmeding/NgiVcn (from https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/gadt.html#extension-GADTs ) |
2023-02-15 12:29:05 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:1d05:832d:e3e6:a39e) (Ping timeout: 260 seconds) |
2023-02-15 12:37:41 +0100 | <gensyst> | tomsmeding, thanks! |
2023-02-15 12:39:05 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) |
2023-02-15 12:39:47 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-02-15 12:42:57 +0100 | andrewboltachev | (~andrey@178.141.125.176) |
2023-02-15 12:44:53 +0100 | mastarija | (~mastarija@2a05:4f46:e03:6000:f467:8e26:a3e4:9c98) |
2023-02-15 12:46:05 +0100 | <mastarija> | So, I've defined my lens type like this: |
2023-02-15 12:46:08 +0100 | <mastarija> | type Lens s t a b = forall f. Functor f => ( a -> f b ) -> s -> f t |
2023-02-15 12:46:26 +0100 | <mastarija> | And my view function like this: |
2023-02-15 12:46:28 +0100 | <mastarija> | view :: Lens s t a b -> s -> a |
2023-02-15 12:46:33 +0100 | <mastarija> | view len = getConst . len Const |
2023-02-15 12:47:07 +0100 | <mastarija> | Now I'm trying to do this: |
2023-02-15 12:47:11 +0100 | <mastarija> | view traverse ["Hello", "World"] |
2023-02-15 12:47:46 +0100 | <mastarija> | But I get an error saying it couldn't deduce `Applicative f`. |
2023-02-15 12:48:28 +0100 | <mastarija> | Not sure what I'm doing wrong here. I'd expect "HelloWorld" as a result. |
2023-02-15 12:48:46 +0100 | <jackdk> | This is why `lens` defines `view :: MonadReader s m -> Getting a s a -> m a` |
2023-02-15 12:49:14 +0100 | <mastarija> | I'm following this tutorial: https://blog.jakuba.net/2014-08-06-lens-tutorial-stab-traversal-part-2/ |
2023-02-15 12:49:21 +0100 | <jackdk> | (You can read that `m a` as `s -> a`; the `MonadReader` version also lets it play nice with MTL |
2023-02-15 12:49:22 +0100 | <mastarija> | Where it supposedly works |
2023-02-15 12:50:14 +0100 | <jackdk> | Lens then says `type Getting r s a = (a -> Const r a) -> s -> Const r s`) |
2023-02-15 12:51:21 +0100 | npmania | (~Thunderbi@45.8.223.203) |
2023-02-15 12:51:22 +0100 | <jackdk> | I wouldn't be surprised if that author wrote `view` after testing with `lens` or something |
2023-02-15 12:51:45 +0100 | ubert | (~Thunderbi@2a02:8109:abc0:6434:4e5:1e44:42ea:9a2b) |
2023-02-15 12:51:47 +0100 | <jackdk> | It's an easy mistake to make and it tripped me up when I was writing minimal lens stuff for a package |
2023-02-15 12:51:50 +0100 | <mastarija> | So, `view` from e.g. relude wouldn't work with traverse? https://hackage.haskell.org/package/relude-1.1.0.0/docs/Relude-Extra-Lens.html#v:view |
2023-02-15 12:52:43 +0100 | <lyxia> | indeed |
2023-02-15 12:52:50 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds) |
2023-02-15 12:52:52 +0100 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-15 12:53:26 +0100 | <lyxia> | traverse is not a Lens |
2023-02-15 12:53:31 +0100 | <mastarija> | Hm... that's disappointing. I'm trying to construct simple lens library from the grounds up to understand underlying mechanisms and then I get tripped up like this. |
2023-02-15 12:53:44 +0100 | <mastarija> | This seems like another large gap I need to fill in. |
2023-02-15 12:53:53 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2023-02-15 12:54:24 +0100 | <jackdk> | Think of the `=>` as a function argument that GHC will solve and pass in. That `Lens s t a b` constraint in your example says "pass in a function that accepts a `Functor` dictionary". You try and pass `traverse` in there, and it fails because it requires an `Applicative` dictionary. |
2023-02-15 12:55:10 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2023-02-15 12:55:27 +0100 | <jackdk> | This is why lens specialises `view` to a form written in terms of `Const` — it then becomes usable with `Lens`, `Traversal`, `Fold`, `Iso` etc. |
2023-02-15 12:55:31 +0100 | <mastarija> | Yes, I get that. I'm just disappointed a bit that extra infrastructure is required around the basic lenses to make things work. |
2023-02-15 12:57:07 +0100 | <mastarija> | I wasn't paying atention when I was just using them. I thought those class constraints and weird types were needed for some advanced stuff I'm not using. |
2023-02-15 12:57:14 +0100 | <mastarija> | Not basic things like traversal. |
2023-02-15 12:57:19 +0100 | <jackdk> | *shrug* microlens does it this way too. However, the use of `view` to get a monoidal summary is pretty niche, and you could get a lot of get/set practice on records or lenses only without worrying about it. |
2023-02-15 12:58:03 +0100 | MajorBiscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 248 seconds) |
2023-02-15 12:58:14 +0100 | srk | (~sorki@user/srk) (Quit: ZNC 1.8.1 - https://znc.in) |
2023-02-15 12:58:37 +0100 | srk | (~sorki@user/srk) |
2023-02-15 12:59:39 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8) |
2023-02-15 13:02:52 +0100 | Flow | (~none@gentoo/developer/flow) |
2023-02-15 13:06:01 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2023-02-15 13:06:38 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-02-15 13:11:37 +0100 | npmania1 | (~Thunderbi@45.8.223.248) |
2023-02-15 13:12:15 +0100 | npmania | (~Thunderbi@45.8.223.203) (Ping timeout: 260 seconds) |
2023-02-15 13:12:15 +0100 | npmania1 | npmania |
2023-02-15 13:14:25 +0100 | xff0x | (~xff0x@2405:6580:b080:900:1159:8d59:b148:53e) (Ping timeout: 246 seconds) |
2023-02-15 13:14:49 +0100 | xff0x | (~xff0x@178.255.149.135) |
2023-02-15 13:16:14 +0100 | lortabac | (~lortabac@88.125.6.227) |
2023-02-15 13:25:24 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) |
2023-02-15 13:27:03 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds) |
2023-02-15 13:29:34 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds) |
2023-02-15 13:30:11 +0100 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb2 - https://znc.in) |
2023-02-15 13:32:29 +0100 | notzmv | (~zmv@user/notzmv) |
2023-02-15 13:35:08 +0100 | MajorBiscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
2023-02-15 13:43:09 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
2023-02-15 13:44:11 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-02-15 13:44:59 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2023-02-15 13:50:06 +0100 | mncheck | (~mncheck@193.224.205.254) |
2023-02-15 13:51:10 +0100 | xff0x | (~xff0x@178.255.149.135) (Ping timeout: 246 seconds) |
2023-02-15 13:51:30 +0100 | vpan | (~0@212.117.1.172) (Quit: Leaving.) |
2023-02-15 13:52:42 +0100 | accord | (uid568320@2a03:5180:f:4::8:ac00) |
2023-02-15 13:53:02 +0100 | xff0x | (~xff0x@2405:6580:b080:900:1159:8d59:b148:53e) |
2023-02-15 13:53:11 +0100 | lyle | (~lyle@104.246.145.237) |
2023-02-15 13:57:36 +0100 | mncheck | (~mncheck@193.224.205.254) (Quit: Leaving) |
2023-02-15 13:59:23 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2023-02-15 14:00:14 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2023-02-15 14:01:45 +0100 | kenran | (~user@user/kenran) |
2023-02-15 14:07:17 +0100 | mncheck | (~mncheck@193.224.205.254) |
2023-02-15 14:07:26 +0100 | <kenran> | I've stumbled upon this piece of code in our code base (with no colleague here to help): https://bpa.st/T754U. This builds with GHC 8.10.7. Now I'm trying to update to GHC 9.2.4 and I get the following error: https://bpa.st/LRQBC |
2023-02-15 14:08:06 +0100 | <tomsmeding> | kenran: put a space between the ~ and the a |
2023-02-15 14:08:19 +0100 | <tomsmeding> | interesting backwards-incompatibility |
2023-02-15 14:08:24 +0100 | infinity0 | (~infinity0@pwned.gg) (Remote host closed the connection) |
2023-02-15 14:08:29 +0100 | <kenran> | Can you tell me what I should be looking/googling for w.r.t. this ~a notation in the original code? |
2023-02-15 14:08:35 +0100 | <kenran> | tomsmeding: oh, you were fast, let me check that :) |
2023-02-15 14:08:50 +0100 | <Axman6> | is that accelerate code? |
2023-02-15 14:08:57 +0100 | <tomsmeding> | looks like it |
2023-02-15 14:09:09 +0100 | <tomsmeding> | though the ~ is just ghc haskell syntax |
2023-02-15 14:09:10 +0100 | <geekosaur> | kenran, type equivalence |
2023-02-15 14:09:17 +0100 | <kenran> | Axman6: yeah, it uses accelerate |
2023-02-15 14:09:23 +0100 | azure_vermilion | (~azure_ver@164.39.138.83) |
2023-02-15 14:09:24 +0100 | <geekosaur> | it's actually a ~ b, but see the note above it about ormolu |
2023-02-15 14:09:29 +0100 | <kenran> | this piece of code is notorious, as it also breaks ormolu/fourmolu |
2023-02-15 14:09:41 +0100 | <Axman6> | a ~ b is a constraint that says a is equal to b |
2023-02-15 14:09:45 +0100 | <tomsmeding> | I hate code formatters |
2023-02-15 14:10:31 +0100 | infinity0 | (~infinity0@pwned.gg) |
2023-02-15 14:10:37 +0100 | <azure_vermilion> | does anyone know how to use boomerang, the parser/pretty printer library? alpha parsers a letter and digit parses 0-9, how would you combine them to parse eg. a0? |
2023-02-15 14:10:57 +0100 | <Axman6> | (a ~ b) => a -> a -> b is (roughly) equivalent to a -> a -> a, if that helps at all |
2023-02-15 14:11:30 +0100 | <kenran> | I am undecided. We have some people here where it's impossible to decide on a "common style" (which is not necessary ofc), so we'd have people change between different do-notation alignments all the time |
2023-02-15 14:11:36 +0100 | <kenran> | cool, thanks everyone! |
2023-02-15 14:11:49 +0100 | <tomsmeding> | Axman6: makes a difference given that this is an instance though |
2023-02-15 14:12:04 +0100 | <tomsmeding> | difference in inference / instance selection |
2023-02-15 14:12:10 +0100 | thegeekinside | (~thegeekin@189.180.97.223) (Ping timeout: 246 seconds) |
2023-02-15 14:12:19 +0100 | <geekosaur> | azure_vermilion, I would be surprised if it's not alpha <> digit |
2023-02-15 14:12:36 +0100 | <kenran> | ok, I'll postpone the GHC upgrade it seems: the 'impossible' happened :) |
2023-02-15 14:13:00 +0100 | <tomsmeding> | azure_vermilion: yeah seems that Boomerang is a Monoid |
2023-02-15 14:13:54 +0100 | pernzs | (~pernzs@101.175.168.100) |
2023-02-15 14:14:22 +0100 | <Axman6> | hmm, boomerang looks kinda difficult to use |
2023-02-15 14:14:23 +0100 | <azure_vermilion> | I tried alpha <> digit and it seems to mean a single character that satisfies both, i.e. impossible |
2023-02-15 14:14:55 +0100 | <Axman6> | I would guess you need alpha . digit |
2023-02-15 14:15:10 +0100 | <Axman6> | where (.) is from Control.Category, not Prelude |
2023-02-15 14:15:24 +0100 | <Axman6> | I can't tell what type that would have |
2023-02-15 14:15:48 +0100 | <kuribas> | :t (<<<) |
2023-02-15 14:15:48 +0100 | gensyst | (gensyst@user/gensyst) (Quit: Leaving) |
2023-02-15 14:15:49 +0100 | <lambdabot> | forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c |
2023-02-15 14:16:06 +0100 | <tomsmeding> | :t (>>>) |
2023-02-15 14:16:07 +0100 | <lambdabot> | forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c |
2023-02-15 14:16:29 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) |
2023-02-15 14:16:58 +0100 | <tomsmeding> | ah yeah the haddocks of Text.Boomerang (at the top of the page) say that you should use (.) from Control.Category, which is (<<<) |
2023-02-15 14:16:59 +0100 | <Axman6> | ". is used to compose parsers together. <> is used for choice." |
2023-02-15 14:18:54 +0100 | <Axman6> | not particularly impressed with the docs, just half a tutorial and then links to some modules, with no clear next step |
2023-02-15 14:20:06 +0100 | <Axman6> | oh my, looking at Text.Boomerang.Combinators, it looks like they've managed to encode a fair amount of forth in its combinators... |
2023-02-15 14:22:57 +0100 | <Axman6> | I remember years ago some post on how amazing Forth and concatenative languages were, and how they could do things nothing else could, and somehow this ended up on r/haskell, and someone imp-lemented everything shown, with nearly identical syntax, in Haskell, with full static types. fun times |
2023-02-15 14:25:07 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 246 seconds) |
2023-02-15 14:26:56 +0100 | <tomsmeding> | that's fun for sure |
2023-02-15 14:27:08 +0100 | <tomsmeding> | concatenative? as in, you really write `3 4 add`? |
2023-02-15 14:27:38 +0100 | <tomsmeding> | I can imagine that if you wrangle the type classes hard enough, you might be able to make that work, but it would be ugly for sure |
2023-02-15 14:28:12 +0100 | hgolden | (~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection) |
2023-02-15 14:30:24 +0100 | <geekosaur> | someone managed to encode basic in haskell, forth wouldn't surprise me |
2023-02-15 14:30:28 +0100 | hgolden | (~hgolden@cpe-172-251-233-141.socal.res.rr.com) |
2023-02-15 14:30:31 +0100 | <geekosaur> | two someones, even |
2023-02-15 14:33:04 +0100 | haritz | (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) |
2023-02-15 14:33:04 +0100 | haritz | (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host) |
2023-02-15 14:33:04 +0100 | haritz | (~hrtz@user/haritz) |
2023-02-15 14:34:23 +0100 | xeph | (~xeph@2a02-8428-8326-2501-4a51-c5ff-fe27-99a8.rev.sfr.net) |
2023-02-15 14:34:27 +0100 | xeph | (~xeph@2a02-8428-8326-2501-4a51-c5ff-fe27-99a8.rev.sfr.net) (Client Quit) |
2023-02-15 14:35:45 +0100 | <jean-paul[m]> | is there a name for a variation of mod where the only difference is that x mod' x == x? |
2023-02-15 14:39:14 +0100 | <azure_vermilion> | thanks for your help Axman6 |
2023-02-15 14:40:29 +0100 | mauke[i] | .oO( mod' x d = mod (x - 1) d + 1 ) |
2023-02-15 14:40:42 +0100 | mauke[i] | (~mauke@user/mauke) (Quit: gone) |
2023-02-15 14:42:03 +0100 | <jean-paul[m]> | mauke[i]: Yea, the implementation is not very hard (though I don't want the `0 mod' x` behavior that implementation gives). Naming is the harder part. :) |
2023-02-15 14:42:22 +0100 | jinsun | (~jinsun@user/jinsun) |
2023-02-15 14:45:09 +0100 | <tomsmeding> | jean-paul[m]: americanClockMod? |
2023-02-15 14:45:56 +0100 | <jean-paul[m]> | cute |
2023-02-15 14:46:59 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
2023-02-15 14:47:11 +0100 | <jean-paul[m]> | I'm using it, thanks |
2023-02-15 14:47:15 +0100 | <tomsmeding> | :') |
2023-02-15 14:47:33 +0100 | CiaoSen | (~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5) |
2023-02-15 14:47:54 +0100 | <tomsmeding> | ceilMod is another option, alluding to the `mod' x d = x - ceil (x / d)` version, as contrasted to `mod x d = x - floor (x / d)` |
2023-02-15 14:48:09 +0100 | <tomsmeding> | eliding float-int casts |
2023-02-15 14:48:53 +0100 | <jean-paul[m]> | Hmm that's also good ... and I have a ceilDiv already |
2023-02-15 14:52:14 +0100 | <tomsmeding> | Uh |
2023-02-15 14:53:01 +0100 | <jean-paul[m]> | ceil gets hard to look at after you type it too many times though |
2023-02-15 14:53:42 +0100 | <tomsmeding> | `mod' x d = x - (ceil (x / d) - 1) * d` but I'm probably doing it wrong again lol |
2023-02-15 14:54:11 +0100 | <jean-paul[m]> | my implementation just has an if ... == 0 in it :) |
2023-02-15 14:55:05 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 14:56:04 +0100 | <segfaultfizzbuzz> | so (as an example, this is not a commentary on the company) apparently haskell is used at tesla, and i forget how but i heard that what they do is use haskell to generate C code but that haskell itself isn't used at runtime |
2023-02-15 14:56:18 +0100 | <segfaultfizzbuzz> | what is this style of programming called and are there some introductory materials for it somewhere? |
2023-02-15 14:57:23 +0100 | c0c0 | (~coco@212-51-146-137.fiber7.init7.net) |
2023-02-15 14:59:33 +0100 | thegeekinside | (~thegeekin@189.180.97.223) |
2023-02-15 14:59:47 +0100 | c0c0 | (~coco@212-51-146-137.fiber7.init7.net) (Client Quit) |
2023-02-15 15:00:33 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
2023-02-15 15:01:03 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection) |
2023-02-15 15:01:24 +0100 | <lyxia> | it's called writing a compiler |
2023-02-15 15:01:31 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-02-15 15:01:53 +0100 | <segfaultfizzbuzz> | so then they are building a new language? |
2023-02-15 15:02:23 +0100 | <lyxia> | not necessarily |
2023-02-15 15:02:46 +0100 | <segfaultfizzbuzz> | i could (maybe) understand adding new language features/macros but building a language is such a monumental undertaking that it's hard to imagine anything other than rather large entities (e.g. microsoft) doing such a thing |
2023-02-15 15:02:51 +0100 | __monty__ | (~toonn@user/toonn) |
2023-02-15 15:03:11 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2023-02-15 15:03:12 +0100 | <segfaultfizzbuzz> | so they are customizing how haskell is compiled to machine code...? or...? |
2023-02-15 15:03:29 +0100 | <lyxia> | you'll have to ask someone employed at tesla |
2023-02-15 15:03:49 +0100 | <geekosaur> | not difficult at all. building an ecosystem for it is the hard part, but for an embedded use you mostly don't care |
2023-02-15 15:03:50 +0100 | <chreekat> | could also be called writing an EDSL, though I agree it's another way of saying 'writing a compiler'. |
2023-02-15 15:04:05 +0100 | <geekosaur> | https://hackage.haskell.org/package/clash |
2023-02-15 15:04:34 +0100 | <geekosaur> | not saying that';s what they use, but e.g. nasa uses it to write the firmware for drones |
2023-02-15 15:04:37 +0100 | <dminuoso_> | C is a common target language for a compiler, as its relatively simple to generate code for and t facilitates easy interop with other libraries. |
2023-02-15 15:04:50 +0100 | <dminuoso_> | Didnt even GHC use the C backend as default for a long time? |
2023-02-15 15:05:25 +0100 | <geekosaur> | until 7.0ish, yes |
2023-02-15 15:06:00 +0100 | <geekosaur> | with a big ugly chunk of perl to rewrite the generated assembly to fit the STG for the target platform |
2023-02-15 15:06:09 +0100 | <segfaultfizzbuzz> | haha perl |
2023-02-15 15:06:21 +0100 | npmania | (~Thunderbi@45.8.223.248) (Quit: npmania) |
2023-02-15 15:07:56 +0100 | <dminuoso_> | I mean according to reddit, they take the generated C code and compile it into vehicle firmware |
2023-02-15 15:07:57 +0100 | <geekosaur> | ob https://xkcd.com/224/ |
2023-02-15 15:08:01 +0100 | <dminuoso_> | which might suggest that its also a tooling questoin |
2023-02-15 15:08:33 +0100 | <dminuoso_> | that is if you have a toolchain that ingests C and pumps out some firmware, then the easiest way to make haskell suitable for that, is to generate C code from that. |
2023-02-15 15:13:15 +0100 | thegeekinside | (~thegeekin@189.180.97.223) (Ping timeout: 255 seconds) |
2023-02-15 15:13:32 +0100 | thegeekinside | (~thegeekin@189.180.97.223) |
2023-02-15 15:13:41 +0100 | Niclelscore | (~Niclelsco@94.25.228.252) |
2023-02-15 15:14:38 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-15 15:17:06 +0100 | lortabac | (~lortabac@88.125.6.227) (Quit: WeeChat 2.8) |
2023-02-15 15:19:05 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-15 15:20:13 +0100 | <Axman6> | geekosaur: you mean copilot, not clash |
2023-02-15 15:20:23 +0100 | <Axman6> | @package copilot |
2023-02-15 15:20:23 +0100 | <lambdabot> | https://hackage.haskell.org/package/copilot |
2023-02-15 15:20:53 +0100 | <segfaultfizzbuzz> | hmm |
2023-02-15 15:21:07 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-15 15:21:15 +0100 | <Axman6> | there's also ivory |
2023-02-15 15:21:28 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2023-02-15 15:21:40 +0100 | <Axman6> | (And I think tower for coordinating programs written in ivory?) |
2023-02-15 15:24:09 +0100 | <azure_vermilion> | does Control.Category.(.) work in the normal way on functions? |
2023-02-15 15:24:11 +0100 | <Axman6> | copilot is probably the coolest C-generating DSL though, it produces guaranteed hard real-time programs with constant memory usage, all of which are essential in high assurance systems |
2023-02-15 15:24:28 +0100 | <Axman6> | azure_vermilion: yes, (->) has an instance for the Category class |
2023-02-15 15:24:36 +0100 | <azure_vermilion> | thanks |
2023-02-15 15:24:56 +0100 | <Axman6> | which is identical to prelude's (.), as you'd expect |
2023-02-15 15:26:16 +0100 | <Axman6> | tomsmeding: IIRC you needed to write START 3 4 add END but that was about it. it even had HOFs. the stack was just a tulpe list with () in the base (which START or END injected to ge things running) |
2023-02-15 15:27:23 +0100 | Cale | (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 248 seconds) |
2023-02-15 15:28:02 +0100 | <Axman6> | so add :: Num a => (a,(a,b)) -> (a,b), 3 :: Num a => b -> (a,b) (roughly - obviously it needed something slightly more complex to get the right syntax, but it ended up with quite readable types IIRC |
2023-02-15 15:28:49 +0100 | Cale | (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) |
2023-02-15 15:32:28 +0100 | delYsid | (~user@user/delYsid) (ERC 5.4.1 (IRC client for GNU Emacs 30.0.50)) |
2023-02-15 15:32:46 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2023-02-15 15:33:30 +0100 | <tomsmeding> | Axman6: ah right |
2023-02-15 15:34:21 +0100 | Midjak | (~Midjak@82.66.147.146) |
2023-02-15 15:35:25 +0100 | <Axman6> | @quote stack-calculator |
2023-02-15 15:35:26 +0100 | <lambdabot> | stack-calculator says: let start f = f (); push s a f = f (a,s); add (a,(b,s)) f = f (a+b,s); end (a,_) = a in start push 2 push 3 add end |
2023-02-15 15:35:32 +0100 | <Axman6> | hey, there it is |
2023-02-15 15:36:31 +0100 | <Axman6> | found via https://www.reddit.com/r/haskell/comments/ptji8/concatenative_rowpolymorphic_programming_in/ (including a dumb comment by me from a third of my life ago) |
2023-02-15 15:37:37 +0100 | <Axman6> | :t let start f = f (); push s a f = f (a,s); add (a,(b,s)) f = f (a+b,s); end (a,_) = a in (start, push, add, end) |
2023-02-15 15:37:38 +0100 | <lambdabot> | Num a1 => ((() -> t1) -> t1, b1 -> a2 -> ((a2, b1) -> t2) -> t2, (a1, (a1, b2)) -> ((a1, b2) -> t3) -> t3, (a3, b3) -> a3) |
2023-02-15 15:37:43 +0100 | mauke[i] | (~mauke@user/mauke) |
2023-02-15 15:38:49 +0100 | <Axman6> | concatenative languages are just three CPS transforms in a trenchcoat! |
2023-02-15 15:41:32 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 15:43:13 +0100 | <zebrag[m]> | Do you know what it is about that polymorphic functions are supposed to preserve relations? (Reynolds through Atkey 2009) |
2023-02-15 15:43:35 +0100 | <zebrag[m]> | I mean every polymorphic functions I can think of obviously preserve relations |
2023-02-15 15:43:50 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-15 15:43:57 +0100 | <zebrag[m]> | And usually there aren't any relations to preserve in the first place |
2023-02-15 15:44:36 +0100 | pernzs | (~pernzs@101.175.168.100) (Quit: Client closed) |
2023-02-15 15:44:42 +0100 | <byorgey> | zebrag[m]: this property is called "parametricity", it comes from the fact that polymorphic functions must work in exactly the same way for any type |
2023-02-15 15:44:54 +0100 | <byorgey> | hence they "commute with fmap" in some sense appropriate to the type |
2023-02-15 15:45:31 +0100 | <zebrag[m]> | So how did he come out with such characterisations, and how can it be useful (reading you just now...) |
2023-02-15 15:46:15 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Ping timeout: 260 seconds) |
2023-02-15 15:46:31 +0100 | <zebrag[m]> | okay, looking into the commute thing, tx |
2023-02-15 15:46:46 +0100 | <byorgey> | how did Reynolds come up with this idea, I don't know. But it is very useful indeed, just look up "theorems for free" |
2023-02-15 15:48:15 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2023-02-15 15:48:20 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-15 15:48:23 +0100 | cyphase | (~cyphase@user/cyphase) (Ping timeout: 246 seconds) |
2023-02-15 15:50:34 +0100 | Niclelscore | (~Niclelsco@94.25.228.252) (Remote host closed the connection) |
2023-02-15 15:50:42 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-02-15 15:50:42 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-02-15 15:50:42 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-02-15 15:55:34 +0100 | cyphase | (~cyphase@user/cyphase) |
2023-02-15 15:56:47 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
2023-02-15 15:57:44 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) |
2023-02-15 15:59:55 +0100 | <Axman6> | zebrag[m]: having some understanding about paramatricity means you can tell a hell of a lot about a function from it's type in many cases. Obviously there's only one functiuon with type a -> a; how many have type a -> a -> a? Do we know how many have type a -> [a]? |
2023-02-15 16:01:16 +0100 | <zebrag[m]> | If the function is parametric then it is a natural transform, and there must be a conversely (yes, reading you just now...) |
2023-02-15 16:01:25 +0100 | tomboy64 | (~tomboy64@user/tomboy64) (Ping timeout: 260 seconds) |
2023-02-15 16:02:00 +0100 | <zebrag[m]> | yes, interesting question, don't answer yet |
2023-02-15 16:03:12 +0100 | Cale | (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 255 seconds) |
2023-02-15 16:03:29 +0100 | <zebrag[m]> | 1, 2, countably many |
2023-02-15 16:03:42 +0100 | <Axman6> | what do we know about the [a] in the last one? |
2023-02-15 16:04:37 +0100 | <zebrag[m]> | it is the repetition n times of the input |
2023-02-15 16:04:56 +0100 | <Axman6> | yeah, if there are any a's, they must be the one we passed in |
2023-02-15 16:05:21 +0100 | <Axman6> | so it's also isomorphic to a -> (Nat, a) |
2023-02-15 16:06:03 +0100 | <zebrag[m]> | yes |
2023-02-15 16:08:32 +0100 | <Axman6> | (I'm by no means an expert on the topic, but we used to talk about this a lot in the NICTA course, and can serve as a good introduction to why the type system is so helpful in Haskell compared to languages like Java) |
2023-02-15 16:10:25 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds) |
2023-02-15 16:13:01 +0100 | akegalj | (~akegalj@225-212.dsl.iskon.hr) |
2023-02-15 16:15:28 +0100 | razetime | (~Thunderbi@117.193.1.74) |
2023-02-15 16:16:13 +0100 | Cale | (~cale@2605:8d80:6a2:d49b:a139:9a62:b1d5:76a4) |
2023-02-15 16:17:51 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Ping timeout: 248 seconds) |
2023-02-15 16:20:27 +0100 | mmhat | (~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de) |
2023-02-15 16:23:26 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-15 16:24:12 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-15 16:25:46 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 16:28:16 +0100 | <kuribas> | hiding information can be a good design tool. Having all information about the whole program available, like in a dynamic program, can make code less flexible. |
2023-02-15 16:31:55 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 16:32:10 +0100 | acidjnk | (~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2023-02-15 16:34:12 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 16:34:22 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds) |
2023-02-15 16:36:30 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 16:43:04 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 16:44:53 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-02-15 16:45:22 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
2023-02-15 16:45:49 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 246 seconds) |
2023-02-15 16:46:45 +0100 | <lyxia> | zebrag[m]: the introduction of Reynolds' paper gives the motivation and insight. Imagine two libraries of complex numbers, one with a cartesian representation, one with polar coordinates, but they expose the same interface. Intuitively they should be interchangeable. |
2023-02-15 16:47:18 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 16:48:41 +0100 | mmhat | (~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8) |
2023-02-15 16:48:42 +0100 | <lyxia> | a program which could be used with either library is a polymorphic function, and the relation it preserves relates equivalent representations |
2023-02-15 16:56:36 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 16:58:42 +0100 | vgtw_ | vgtw |
2023-02-15 17:00:41 +0100 | <zebrag[m]> | Yes, I remember the example, but now that you speak of it, wouldn't it look more like ad hoc polymorphism, or some existential type? It doesn't look like plain parametric function |
2023-02-15 17:01:28 +0100 | kenran | (~user@user/kenran) (Remote host closed the connection) |
2023-02-15 17:02:01 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 17:02:22 +0100 | mastarija | (~mastarija@2a05:4f46:e03:6000:f467:8e26:a3e4:9c98) (Quit: WeeChat 3.7.1) |
2023-02-15 17:03:19 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-02-15 17:04:54 +0100 | hounded | (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) |
2023-02-15 17:05:14 +0100 | hounded_woodstoc | (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) |
2023-02-15 17:07:21 +0100 | <zebrag[m]> | lyxia It seems the types are isomorphic, but I can't see the parametricity there, and the rest of the article I didn't understand a thing, at least the pages right after that introductory example |
2023-02-15 17:07:24 +0100 | <lyxia> | you can imagine a library in this context as a type C and a record of functions Library C = { (+) :: C -> C -> C ; ... }, then a function using the library would be forall c . Library c -> result |
2023-02-15 17:08:00 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
2023-02-15 17:09:11 +0100 | <zebrag[m]> | that is existential type isn't it? |
2023-02-15 17:09:16 +0100 | <zebrag[m]> | and yes you can encode it in System F |
2023-02-15 17:09:25 +0100 | <zebrag[m]> | So I see the point |
2023-02-15 17:10:01 +0100 | <lyxia> | the library has an existential type but we're focusing on a program that uses it, which has a universal type |
2023-02-15 17:10:25 +0100 | <zebrag[m]> | I've read somewhere that the whole point of Reynolds was abstract types (aka existential) |
2023-02-15 17:11:38 +0100 | <zebrag[m]> | lyxia: yes, right |
2023-02-15 17:12:54 +0100 | <lyxia> | abstraction has two sides, it looks existential on one side, universal on the other |
2023-02-15 17:15:55 +0100 | azure_vermilion | (~azure_ver@164.39.138.83) (Ping timeout: 246 seconds) |
2023-02-15 17:16:50 +0100 | azure_vermilion | (~azure_ver@164.39.138.83) |
2023-02-15 17:17:58 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-02-15 17:18:14 +0100 | cjay- | cjay |
2023-02-15 17:18:14 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds) |
2023-02-15 17:18:58 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-02-15 17:21:47 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 17:21:53 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 17:22:09 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 17:23:13 +0100 | mauke | mauke[m] |
2023-02-15 17:23:22 +0100 | mauke[i] | mauke |
2023-02-15 17:23:33 +0100 | mbuf | (~Shakthi@49.204.133.116) (Quit: Leaving) |
2023-02-15 17:26:04 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 246 seconds) |
2023-02-15 17:29:08 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection) |
2023-02-15 17:33:32 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8) |
2023-02-15 17:34:26 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-02-15 17:34:27 +0100 | nschoe | (~q@141.101.51.197) (Ping timeout: 255 seconds) |
2023-02-15 17:34:33 +0100 | akegalj | (~akegalj@225-212.dsl.iskon.hr) (Ping timeout: 255 seconds) |
2023-02-15 17:34:39 +0100 | jade[m] | (~jadecatgi@2001:470:69fc:105::3:194e) |
2023-02-15 17:34:47 +0100 | <segfaultfizzbuzz> | let's say that i create a variable in haskell with some type and a cosmic ray (or more likely a bad bit of code) corrupts the associated memory |
2023-02-15 17:35:10 +0100 | <segfaultfizzbuzz> | can i do something to verify at runtime that the variable actually "is" the type that i think it is |
2023-02-15 17:37:31 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
2023-02-15 17:37:59 +0100 | <mauke> | not if you assume cosmic rays, because your verification code might also become corrupted |
2023-02-15 17:38:08 +0100 | <segfaultfizzbuzz> | heh ok |
2023-02-15 17:38:19 +0100 | <segfaultfizzbuzz> | but if the code itself is still ok? |
2023-02-15 17:38:31 +0100 | <mauke> | I don't think the runtime representation records more than GC info |
2023-02-15 17:38:44 +0100 | <mauke> | so e.g. you couldn't distinguish newtypes |
2023-02-15 17:38:58 +0100 | <segfaultfizzbuzz> | for example let's say that i have a UTF8 string, but then maybe something is done to that string which breaks UTF8 (such as perhaps someone concats it to a UTF16 string) |
2023-02-15 17:39:24 +0100 | <segfaultfizzbuzz> | then can i say UTF8String.doublecheck mystr or something |
2023-02-15 17:42:08 +0100 | <jade[m]> | the static types should make sure the concatenation cannot happen at compile time |
2023-02-15 17:42:31 +0100 | Square | (~Square4@user/square) (Ping timeout: 246 seconds) |
2023-02-15 17:43:25 +0100 | <lyxia> | segfaultfizzbuzz: decodeUtf8' . encodeUtf8 |
2023-02-15 17:43:26 +0100 | merijn | (~merijn@86.86.29.250) |
2023-02-15 17:44:34 +0100 | <lyxia> | there's already error correction in hardware. if you're worried about that you can buy better hardware. |
2023-02-15 17:44:58 +0100 | <segfaultfizzbuzz> | ha |
2023-02-15 17:47:51 +0100 | CiaoSen | (~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5) (Ping timeout: 252 seconds) |
2023-02-15 17:50:47 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 17:52:15 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 17:54:20 +0100 | tomcatfish | (~tomcatfis@mobile-166-170-28-207.mycingular.net) |
2023-02-15 17:56:36 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 17:57:50 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) |
2023-02-15 17:58:31 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 17:58:57 +0100 | tomcatfish | (~tomcatfis@mobile-166-170-28-207.mycingular.net) (Remote host closed the connection) |
2023-02-15 17:59:13 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 17:59:49 +0100 | tomcatfish | (~tomcatfis@mobile-166-170-28-207.mycingular.net) |
2023-02-15 17:59:58 +0100 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-15 18:00:17 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 18:00:43 +0100 | <segfaultfizzbuzz> | i am a bad programmer so the rust "utf8 everywhere" philosophy brings me ease, how do i square this away with whatever happens in haskell? |
2023-02-15 18:01:08 +0100 | <mauke> | Unicode everywhere > UTF-8 everywhere |
2023-02-15 18:01:10 +0100 | <segfaultfizzbuzz> | i have run into many situations where my users submit god-knows-what string format |
2023-02-15 18:01:26 +0100 | <segfaultfizzbuzz> | mauke: care to elaborate? |
2023-02-15 18:01:32 +0100 | <[exa]> | segfaultfizzbuzz: pipe it through iconv |
2023-02-15 18:01:52 +0100 | <mauke> | unicode strings contain text. utf-8 strings contain bytes |
2023-02-15 18:02:01 +0100 | <merijn> | segfaultfizzbuzz: If your user submits "god-knows-what" string formats, you're fucked already |
2023-02-15 18:02:07 +0100 | <[exa]> | +1 ^ |
2023-02-15 18:02:17 +0100 | <merijn> | I also don't even know what "utf-8 string" would mean |
2023-02-15 18:02:33 +0100 | <mauke> | generally speaking, a text abstraction is nicer if you don't have to deal with single bytes |
2023-02-15 18:02:40 +0100 | <merijn> | as mauke suggests, utf-8 is "just bytes" |
2023-02-15 18:02:44 +0100 | acidjnk | (~acidjnk@p54ad56b7.dip0.t-ipconnect.de) |
2023-02-15 18:03:44 +0100 | <mauke> | as the old perl mantra goes, you decode your inputs into unicode, process as needed, then encode your outputs to bytes |
2023-02-15 18:03:44 +0100 | <segfaultfizzbuzz> | does the haskell type system protect me from the string format hellscape? |
2023-02-15 18:03:48 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 18:04:09 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-02-15 18:04:10 +0100 | <segfaultfizzbuzz> | unicode is utf8, but it also is other things...? |
2023-02-15 18:04:15 +0100 | <segfaultfizzbuzz> | so why not just utf8 then? |
2023-02-15 18:04:16 +0100 | <merijn> | segfaultfizzbuzz: That's wrong |
2023-02-15 18:04:20 +0100 | <mauke> | utf-8 is one of the possible encodings of unicode |
2023-02-15 18:04:27 +0100 | <merijn> | segfaultfizzbuzz: UTF-8 is a lossless encode of the unicode |
2023-02-15 18:04:40 +0100 | <merijn> | i.e. unicode specifies what characters are, etc. and how to operate them |
2023-02-15 18:04:57 +0100 | <mauke> | > length "€" |
2023-02-15 18:04:58 +0100 | <merijn> | utf-8 is merely one of a whole bunch of different representations of unicode |
2023-02-15 18:04:59 +0100 | <lambdabot> | 1 |
2023-02-15 18:05:16 +0100 | <mauke> | that's one unicode codepoint, but 3 bytes in UTF-8 |
2023-02-15 18:05:31 +0100 | <merijn> | utf-7, utf-16, utf-32, etc. different encodings for unicode |
2023-02-15 18:05:34 +0100 | <mauke> | (and 2 bytes in UTF-16) |
2023-02-15 18:06:15 +0100 | <segfaultfizzbuzz> | understood, but what is lost by mandating utf8 then |
2023-02-15 18:06:16 +0100 | <merijn> | segfaultfizzbuzz: String and Text operate on unicode directly, how GHC represents that unicode in memory is an implementation detail |
2023-02-15 18:06:18 +0100 | ubert | (~Thunderbi@2a02:8109:abc0:6434:4e5:1e44:42ea:9a2b) (Quit: ubert) |
2023-02-15 18:06:23 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 18:06:31 +0100 | <segfaultfizzbuzz> | so you can't think about bytes...? |
2023-02-15 18:07:00 +0100 | <mauke> | you can if you want |
2023-02-15 18:07:05 +0100 | <merijn> | segfaultfizzbuzz: Going from "abstract" unicode to specific sequences of bytes is something you do at the edge of your program |
2023-02-15 18:07:11 +0100 | <mauke> | it's just usually more convenient not to |
2023-02-15 18:07:23 +0100 | <merijn> | segfaultfizzbuzz: "mandating utf8" doesn't actually solve any problems |
2023-02-15 18:07:56 +0100 | <merijn> | segfaultfizzbuzz: if your user submits text data to your server as utf-16 then "I mandated utf-8" doesn't really solve anything |
2023-02-15 18:08:17 +0100 | thegeekinside | (~thegeekin@189.180.97.223) (Remote host closed the connection) |
2023-02-15 18:08:48 +0100 | <merijn> | segfaultfizzbuzz: By distinguishing bytes (i.e. ByteString) from Text (i.e. unicode) and requiring you to explicitly convert from ByteString to Text using an explicit decoder forces you to detect these errors |
2023-02-15 18:09:11 +0100 | <segfaultfizzbuzz> | well if i make use of different libraries, my head will explode if http requests are in utf8, but then talking to some database is utf16, and then in another situation,... |
2023-02-15 18:09:19 +0100 | <merijn> | segfaultfizzbuzz: If you just have "bytes" and "bytes, that we swear/assume only contain utf8 data" you're a problem |
2023-02-15 18:09:39 +0100 | <segfaultfizzbuzz> | the utf8 mandate is nice from an ecosystem/program boundary perspective,... i can (kinda) handle checking inputs at least |
2023-02-15 18:09:58 +0100 | <merijn> | segfaultfizzbuzz: What exactly does that mandate solve? |
2023-02-15 18:10:41 +0100 | <merijn> | Nothing can guarantee external data will be in the encoding you want |
2023-02-15 18:10:52 +0100 | <segfaultfizzbuzz> | well as i mentioned, perhaps i use an http request library, and that wants one kind of string |
2023-02-15 18:10:55 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 260 seconds) |
2023-02-15 18:11:04 +0100 | <segfaultfizzbuzz> | and then a database library thinks another type is better |
2023-02-15 18:11:28 +0100 | <segfaultfizzbuzz> | and it isn't clear to me how well the string format information would be represented in the type system,... |
2023-02-15 18:11:41 +0100 | <merijn> | segfaultfizzbuzz: How is that relevant when you have, say, Text? The database library and http library both take Text and then convert into the appropriate encoded bytes when needed |
2023-02-15 18:11:42 +0100 | <mauke> | does Haskell even have a "UTF-16 type"? |
2023-02-15 18:11:47 +0100 | <merijn> | mauke: no |
2023-02-15 18:11:53 +0100 | gmg | (~user@user/gehmehgeh) (Ping timeout: 255 seconds) |
2023-02-15 18:11:55 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2023-02-15 18:11:58 +0100 | <merijn> | segfaultfizzbuzz: You can't even tell what encoding is used by Text internally |
2023-02-15 18:12:11 +0100 | <segfaultfizzbuzz> | for example: https://stackoverflow.com/questions/23765903/why-is-text-utf-16-as-opposed-to-utf-8 |
2023-02-15 18:12:17 +0100 | <mauke> | is it utf-8 now? |
2023-02-15 18:12:21 +0100 | <lyxia> | Text is utf8 now |
2023-02-15 18:12:22 +0100 | <merijn> | mauke: yes |
2023-02-15 18:12:43 +0100 | <merijn> | segfaultfizzbuzz: Why do you think it matters what Text uses internally? |
2023-02-15 18:12:45 +0100 | <mauke> | I know the internals changed, but that's not really visible to users |
2023-02-15 18:13:01 +0100 | <Hecate> | merijn: space & performance? :'') |
2023-02-15 18:13:32 +0100 | <segfaultfizzbuzz> | merijn: well at some point let's say i use Text to create a web request html document to return |
2023-02-15 18:13:33 +0100 | <merijn> | Hecate: The intial UTF-8 conversion attempt performed worse and iirc the main reason to use utf-16 was that ICU used that |
2023-02-15 18:13:59 +0100 | <merijn> | segfaultfizzbuzz: but HTTP requests aren't unicode, they are bytes, so Text has to be encoded explicitly *anyway* |
2023-02-15 18:14:08 +0100 | <Hecate> | merijn: what about the second attempt? :3 |
2023-02-15 18:14:16 +0100 | <merijn> | Hecate: I dunno, I haven't kept up |
2023-02-15 18:14:25 +0100 | <segfaultfizzbuzz> | encoded explicitly? what does that mean? |
2023-02-15 18:14:49 +0100 | <merijn> | segfaultfizzbuzz: encodeUtf8 :: Text -> ByteString |
2023-02-15 18:14:58 +0100 | <merijn> | encodeUtf16 :: Text -> ByteString |
2023-02-15 18:15:31 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 18:15:44 +0100 | <Hecate> | merijn: you probably should https://github.com/haskell/text/pull/365#issue-976262730 |
2023-02-15 18:15:49 +0100 | <merijn> | segfaultfizzbuzz: That you need to convert the abstract unicode data to a specific encoding in terms of bytes |
2023-02-15 18:15:58 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2023-02-15 18:16:39 +0100 | <Hecate> | merijn: and https://www.youtube.com/watch?v=1qlGe2qnGZQ of course |
2023-02-15 18:17:25 +0100 | <mauke> | Eq 10x faster?! what happened there? |
2023-02-15 18:17:29 +0100 | <segfaultfizzbuzz> | i mean potentially every interaction with every library will need encoding (and decoding) ... ? |
2023-02-15 18:17:38 +0100 | <mauke> | segfaultfizzbuzz: ... no? |
2023-02-15 18:17:40 +0100 | <segfaultfizzbuzz> | depending on what the library authors thought was a good implementation...? |
2023-02-15 18:18:00 +0100 | <Hecate> | mauke: Ukrainian Excellence™ |
2023-02-15 18:18:04 +0100 | <merijn> | segfaultfizzbuzz: no, you only need to encode when you try and serialise unicode to the external world |
2023-02-15 18:18:08 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 18:18:08 +0100 | <merijn> | segfaultfizzbuzz: ??? |
2023-02-15 18:18:32 +0100 | <merijn> | I think you're confused and conflating several things |
2023-02-15 18:18:42 +0100 | <segfaultfizzbuzz> | merijn: yes probably as mentioned i am a bad programmer |
2023-02-15 18:18:56 +0100 | <merijn> | segfaultfizzbuzz: Start here: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely… |
2023-02-15 18:19:46 +0100 | <mauke> | Hecate: yeah, but ... equality on utf-16 and utf-8 should both be equivalent to memcmp() |
2023-02-15 18:20:02 +0100 | <mauke> | switching representations doesn't explain the speed-up here |
2023-02-15 18:20:15 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 260 seconds) |
2023-02-15 18:20:24 +0100 | <merijn> | mauke: Well, if you have biased input data you're gonna have half the size of bytes |
2023-02-15 18:20:29 +0100 | <Hecate> | mauke: look at the cbits |
2023-02-15 18:20:30 +0100 | <merijn> | Anyway, gotta run |
2023-02-15 18:21:09 +0100 | <Hecate> | merijn: see ya |
2023-02-15 18:21:19 +0100 | <mauke> | ok, yeah. if it's mostly ascii, you're probably going to win on cache alone |
2023-02-15 18:24:15 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection) |
2023-02-15 18:24:25 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2023-02-15 18:24:46 +0100 | <segfaultfizzbuzz> | "It does not make sense to have a string without knowing what encoding it uses." |
2023-02-15 18:24:53 +0100 | merijn | (~merijn@86.86.29.250) (Ping timeout: 252 seconds) |
2023-02-15 18:25:04 +0100 | razetime | (~Thunderbi@117.193.1.74) (Remote host closed the connection) |
2023-02-15 18:25:11 +0100 | accord | (uid568320@2a03:5180:f:4::8:ac00) (Quit: Connection closed for inactivity) |
2023-02-15 18:25:12 +0100 | <segfaultfizzbuzz> | ^ i agree with this completely, so then my question is |
2023-02-15 18:25:47 +0100 | <segfaultfizzbuzz> | am i guaranteed throughout the haskell ecosystem that all strings have a completely defined encoding? |
2023-02-15 18:25:49 +0100 | <mauke> | that statement assumes "string" means byte string |
2023-02-15 18:25:55 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
2023-02-15 18:26:07 +0100 | <mauke> | if you have a character string, there is no encoding |
2023-02-15 18:26:21 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2023-02-15 18:27:24 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-15 18:27:44 +0100 | Joao003 | (~Joao003@2804:840:830b:2100:ad60:28cd:6e23:d3c3) |
2023-02-15 18:27:52 +0100 | <Joao003> | hi |
2023-02-15 18:27:54 +0100 | <segfaultfizzbuzz> | by character string, you mean a sequence of unicode code points? |
2023-02-15 18:28:13 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection) |
2023-02-15 18:28:21 +0100 | <mauke> | yes (or better) |
2023-02-15 18:28:40 +0100 | <segfaultfizzbuzz> | what is "better" than that? |
2023-02-15 18:28:46 +0100 | <Joao003> | Doesn't String already exist? |
2023-02-15 18:28:46 +0100 | <mauke> | grapheme clusters |
2023-02-15 18:29:01 +0100 | <segfaultfizzbuzz> | mauke: this sounds like semantic meaning? |
2023-02-15 18:29:16 +0100 | <mauke> | well, it's closer to real-world "characters" |
2023-02-15 18:29:21 +0100 | <segfaultfizzbuzz> | and also this somewhat sidesteps my question |
2023-02-15 18:29:39 +0100 | <segfaultfizzbuzz> | if i pull in a bunch of commonly used haskell packages and do things with strings, |
2023-02-15 18:29:55 +0100 | <segfaultfizzbuzz> | do i need to constantly be vigilant about the encodings across those packages? |
2023-02-15 18:30:00 +0100 | <mauke> | LATIN CAPITAL LETTER A + COMBINING DIAERESIS is two codepoints, but a single "character" |
2023-02-15 18:30:25 +0100 | <mauke> | segfaultfizzbuzz: in my experience, that's never been an issue |
2023-02-15 18:30:34 +0100 | <segfaultfizzbuzz> | lol what in the hell is that lol |
2023-02-15 18:30:56 +0100 | <segfaultfizzbuzz> | mauke: ok but the typesystem itself doesn't track the encodings? |
2023-02-15 18:31:00 +0100 | <lyxia> | everyone uses String or Text so there is no possible confusion |
2023-02-15 18:31:06 +0100 | <mauke> | Ä |
2023-02-15 18:31:41 +0100 | <mauke> | segfaultfizzbuzz: people generally don't write interfaces that use bytestrings if they're trying to represent text |
2023-02-15 18:32:09 +0100 | <davean> | Yah you only see non-decoded Unicode in extremely low level APIs |
2023-02-15 18:32:13 +0100 | <mauke> | I mean, you could create separate types for those |
2023-02-15 18:32:24 +0100 | <davean> | And if you wanted that, it would be trivial to make |
2023-02-15 18:32:36 +0100 | <mauke> | with some sort of phantom parameter for the encoding |
2023-02-15 18:33:28 +0100 | <mauke> | it just doesn't come up very often in practice |
2023-02-15 18:33:32 +0100 | <davean> | newtype NonDecodedUnicode encoding = NDC ByteString |
2023-02-15 18:33:49 +0100 | <segfaultfizzbuzz> | a very practical example is some zurihac talk from 2022 says Text just switched from utf16 to utf8 so it seems rather likely that there will be a lot of packages (possibly abandoned) which might be relying on the assumption that Text is utf16 (possibly for unsafe computations and the like) |
2023-02-15 18:33:52 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 18:34:00 +0100 | <davean> | Yah, only in really low level APIs which are generally extremely local and don't actually care about the encoding! |
2023-02-15 18:34:39 +0100 | <davean> | segfaultfizzbuzz: Not a problem though, thats internal and they'd have to use internals *and* violate the PVP to get an issue there |
2023-02-15 18:34:39 +0100 | <Joao003> | what are you talking about |
2023-02-15 18:34:41 +0100 | <mauke> | segfaultfizzbuzz: ... so? |
2023-02-15 18:34:56 +0100 | <segfaultfizzbuzz> | PVP? |
2023-02-15 18:35:00 +0100 | <davean> | Package Version Policy |
2023-02-15 18:35:08 +0100 | <lyxia> | segfaultfizzbuzz: turns out there is not a log of package that relied on that assumption |
2023-02-15 18:35:12 +0100 | <mauke> | I don't know if those packages exist, but if they relied on Text internals, they are now broken |
2023-02-15 18:35:23 +0100 | <davean> | and there can't be any reasonable packages that break when they do |
2023-02-15 18:35:30 +0100 | <mauke> | the same thing would happen if you had bytestrings tagged with encodings |
2023-02-15 18:35:58 +0100 | <segfaultfizzbuzz> | i'm trying to wrap my head around the idea of working with strings without strictness and a concept of bytes |
2023-02-15 18:36:10 +0100 | ddellacosta | (~ddellacos@146.70.165.10) |
2023-02-15 18:36:19 +0100 | <mauke> | not sure what you mean by "without strictness" |
2023-02-15 18:36:22 +0100 | <glguy> | it's like working with ints and not knowing if the machine uses bit or little endian ordering internally |
2023-02-15 18:36:24 +0100 | <davean> | segfaultfizzbuzz: You mean without the problems?\ |
2023-02-15 18:36:29 +0100 | <segfaultfizzbuzz> | a lazy string |
2023-02-15 18:36:40 +0100 | <lyxia> | glguy++ |
2023-02-15 18:36:44 +0100 | <mauke> | laziness is orthogonal |
2023-02-15 18:36:55 +0100 | <mauke> | (we have lazy bytestrings, too) |
2023-02-15 18:36:57 +0100 | <davean> | segfaultfizzbuzz: You realize looking at the bytes is a core source of errors? |
2023-02-15 18:37:12 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-177-034.46.114.pool.telefonica.de) |
2023-02-15 18:37:27 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 18:37:45 +0100 | <segfaultfizzbuzz> | davean: trying to have a vague idea of what the alternative is, somehow the string type can accumulate a variety of operations on the string but provide some kind of collection of functions still which can index into the string and soforth |
2023-02-15 18:38:08 +0100 | econo | (uid147250@user/econo) |
2023-02-15 18:38:23 +0100 | <mauke> | the obvious alternative is an array or list of Chars |
2023-02-15 18:38:30 +0100 | <mauke> | (can be strict or lazy) |
2023-02-15 18:38:40 +0100 | <segfaultfizzbuzz> | mauke: yeah i learned to code in C originally so it's a hard habit of mind to break |
2023-02-15 18:38:50 +0100 | <darkling> | In erlang, for example, strings are literally lists of unicode code points. |
2023-02-15 18:39:01 +0100 | <mauke> | just imagine that every element of a string is a uint21_t |
2023-02-15 18:39:09 +0100 | <Joao003> | guys is there a way i can map multiple functions over a list without using concatMap |
2023-02-15 18:39:22 +0100 | <darkling> | ^^ what mauke said. |
2023-02-15 18:39:30 +0100 | <segfaultfizzbuzz> | ok so the shift is from moving from array to list, basically? |
2023-02-15 18:39:35 +0100 | <mauke> | no |
2023-02-15 18:39:38 +0100 | <mauke> | from 8 to 21 bits |
2023-02-15 18:40:06 +0100 | <segfaultfizzbuzz> | moving from 8 to 21 bits doesn't hurt my head at all, it's the layout and possibility of laziness which gives me a headache |
2023-02-15 18:40:21 +0100 | <mauke> | again, that has nothing to do with unicode or encodings |
2023-02-15 18:40:28 +0100 | <mauke> | we have lazy bytestrings |
2023-02-15 18:40:53 +0100 | <davean> | segfaultfizzbuzz: strings are made of code points, not bytes, if you look at bytes you aren't looking at a string, you need to decode it to get any sense of a string. |
2023-02-15 18:40:58 +0100 | <glguy> | segfaultfizzbuzz: you might just have to get used to headaches. tylenol? |
2023-02-15 18:41:10 +0100 | <lyxia> | Joao003: show us your code and we'll simplify it, maybe |
2023-02-15 18:41:10 +0100 | <davean> | segfaultfizzbuzz: even in C you can't look at bytes and do string operations correctly! |
2023-02-15 18:41:51 +0100 | <Joao003> | no basically is there a function in prelude which is concatMap but it doesn't string everything together into a flattened list |
2023-02-15 18:42:15 +0100 | <glguy> | Joao003: map (\x -> (f x, g x, h x)) |
2023-02-15 18:42:23 +0100 | <Joao003> | oh my god |
2023-02-15 18:42:30 +0100 | m1dnight | (~christoph@78-22-0-121.access.telenet.be) (Quit: WeeChat 3.8) |
2023-02-15 18:42:32 +0100 | <Joao003> | BUT I DON'T WANT TUPLES |
2023-02-15 18:42:32 +0100 | <mauke> | yeah: map |
2023-02-15 18:42:39 +0100 | <davean> | Joao003: what DO you want? |
2023-02-15 18:42:53 +0100 | <davean> | map (f . g . h)? |
2023-02-15 18:43:00 +0100 | <mauke> | concatMap without flatting is called map |
2023-02-15 18:43:07 +0100 | <mauke> | *flattening |
2023-02-15 18:43:13 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 252 seconds) |
2023-02-15 18:43:31 +0100 | <Joao003> | map is not [a -> b] -> [a] -> [b] |
2023-02-15 18:43:54 +0100 | <mauke> | what are you talking about, Jesse |
2023-02-15 18:44:02 +0100 | <davean> | map (foldl1 (.) fs) |
2023-02-15 18:44:10 +0100 | <davean> | er |
2023-02-15 18:44:13 +0100 | <davean> | no, thats the wrong code |
2023-02-15 18:44:16 +0100 | <segfaultfizzbuzz> | this dude says that many haskell libraries rely on Text internals: https://youtu.be/1qlGe2qnGZQ?t=2952 |
2023-02-15 18:44:26 +0100 | <Joao003> | i don't want functions composed together |
2023-02-15 18:44:30 +0100 | <davean> | concatMap (`map` fs) |
2023-02-15 18:44:48 +0100 | m1dnight | (~christoph@78.22.0.121) |
2023-02-15 18:45:00 +0100 | <mauke> | Joao003: again, what DO you want? |
2023-02-15 18:45:17 +0100 | <Joao003> | `f [(+1), (+2)] [1, 2, 3]` should give me `[[2, 3, 4], [3, 4, 5]]`. i want the `f` |
2023-02-15 18:45:26 +0100 | akegalj | (~akegalj@225-212.dsl.iskon.hr) |
2023-02-15 18:45:57 +0100 | <ddellacosta> | are you looking for https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelude.html#v:-60--42--62- ? |
2023-02-15 18:46:01 +0100 | <glguy> | > let f fs x = [f x | f <- fs] in f [(+1), (+2)] [1, 2, 3] |
2023-02-15 18:46:03 +0100 | <lambdabot> | error: |
2023-02-15 18:46:03 +0100 | <lambdabot> | • No instance for (Num [Integer]) arising from a use of ‘e_112123’ |
2023-02-15 18:46:03 +0100 | <lambdabot> | • In the expression: e_112123 |
2023-02-15 18:46:10 +0100 | <glguy> | hmm, kinda used too many fs |
2023-02-15 18:46:13 +0100 | <jade[m]> | zipWith ($) fs xs |
2023-02-15 18:46:24 +0100 | <jade[m]> | wait no |
2023-02-15 18:46:31 +0100 | <jade[m]> | that'd be for single pair |
2023-02-15 18:46:32 +0100 | <davean> | segfaultfizzbuzz: where does he claim that? |
2023-02-15 18:46:33 +0100 | <jade[m]> | s/pair/pairs/ |
2023-02-15 18:46:41 +0100 | <davean> | segfaultfizzbuzz: I expect you're just wrong here |
2023-02-15 18:46:46 +0100 | <glguy> | > let thing fs x = [map f x | f <- fs] in thing [(+1), (+2)] [1, 2, 3] |
2023-02-15 18:46:48 +0100 | <lambdabot> | [[2,3,4],[3,4,5]] |
2023-02-15 18:46:52 +0100 | <segfaultfizzbuzz> | davean: at the time linked to there |
2023-02-15 18:47:02 +0100 | <segfaultfizzbuzz> | at t=2952 |
2023-02-15 18:47:21 +0100 | <Joao003> | > let f fs xs = map (\ f -> map f xs) fs in f [(+1), (+2)] [1, 2, 3] |
2023-02-15 18:47:21 +0100 | <jade[m]> | you want `<*>` without the concatenation |
2023-02-15 18:47:23 +0100 | <lambdabot> | [[2,3,4],[3,4,5]] |
2023-02-15 18:47:23 +0100 | <Joao003> | found it |
2023-02-15 18:47:45 +0100 | <mauke> | @pl \fs xs -> map (\ f -> map f xs) fs |
2023-02-15 18:47:45 +0100 | <lambdabot> | flip (map . flip map) |
2023-02-15 18:48:06 +0100 | <Joao003> | wow that's a flip for every map |
2023-02-15 18:48:08 +0100 | <glguy> | you can make it harder to read replacing fmap with <$> and flip fmap with <&> |
2023-02-15 18:48:23 +0100 | <Joao003> | aaaaaaaaaaaaaaaa |
2023-02-15 18:48:31 +0100 | <mauke> | also, . can be replaced by `fmap` |
2023-02-15 18:48:57 +0100 | <Joao003> | > (flip (<$> <$> <&>)) [(+1), (+2)] [1, 2, 3] |
2023-02-15 18:48:59 +0100 | <lambdabot> | <hint>:1:12: error: parse error on input ‘<$>’ |
2023-02-15 18:49:16 +0100 | <Joao003> | > (flip ((<$>) <$> (<&>))) [(+1), (+2)] [1, 2, 3] |
2023-02-15 18:49:17 +0100 | <lambdabot> | [[2,3,4],[3,4,5]] |
2023-02-15 18:49:22 +0100 | <davean> | segfaultfizzbuzz: half of those are encoding libraries that specificly deal with the encoding |
2023-02-15 18:49:29 +0100 | <jade[m]> | map . flip map is what you want I think |
2023-02-15 18:49:36 +0100 | <davean> | and none would break with the upgrade I believe |
2023-02-15 18:49:50 +0100 | <segfaultfizzbuzz> | ok... |
2023-02-15 18:50:01 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2023-02-15 18:50:11 +0100 | <jade[m]> | ghci> (map . flip map) [1, 2, 3] [(+1), (+2)] |
2023-02-15 18:50:11 +0100 | <jade[m]> | [[2,3,4],[3,4,5]] |
2023-02-15 18:50:32 +0100 | <Joao003> | + extra flip for aligning with concatMap |
2023-02-15 18:51:32 +0100 | <davean> | segfaultfizzbuzz: thats a lot in the sense of "I personally had to do extra work to update things that were directly connected" not "a lot" in the sense of "wide spread" |
2023-02-15 18:51:50 +0100 | <davean> | segfaultfizzbuzz: as in "there was as much work to do outside the package as inside it" |
2023-02-15 18:52:02 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-15 18:52:18 +0100 | <davean> | It was a significant portion of the project time to update everyone else's code while doing text, not that it was wide spread in the ecosystem |
2023-02-15 18:52:50 +0100 | <davean> | (I was adjacent to that project) |
2023-02-15 18:52:53 +0100 | <segfaultfizzbuzz> | ok |
2023-02-15 18:53:04 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-02-15 18:53:05 +0100 | <mauke> | it's also kind of irrelevant because if we had used a tagged bytestring+encoding format, we would've had the same breakage |
2023-02-15 18:53:09 +0100 | <ddellacosta> | > foldMap (\f -> [f <$> [1,2,3]]) [(+1),(+2)] |
2023-02-15 18:53:11 +0100 | <lambdabot> | [[2,3,4],[3,4,5]] |
2023-02-15 18:54:02 +0100 | <ddellacosta> | I think it can be made more general |
2023-02-15 18:54:23 +0100 | <davean> | segfaultfizzbuzz: imagine if libc updated something and it was less than twice the work to update everything that depended on libc as compared to the work of updating libc its self |
2023-02-15 18:56:48 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
2023-02-15 18:58:42 +0100 | <davean> | segfaultfizzbuzz: and in C you should use functions like wcslen(_s) |
2023-02-15 19:00:46 +0100 | <davean> | segfaultfizzbuzz: note wchar_t is *implimentation defined* so portable code has to be abstract over it anyway. |
2023-02-15 19:01:01 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 19:01:12 +0100 | <davean> | (Its still not good enough of course, can't reliably hold unicode ...) |
2023-02-15 19:01:41 +0100 | notzmv | (~zmv@user/notzmv) |
2023-02-15 19:02:53 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-02-15 19:05:27 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 19:06:23 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1)) |
2023-02-15 19:09:20 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
2023-02-15 19:11:19 +0100 | <mauke> | #if WCHAR_MAX < 0x10ffff / #error "get a compiler that supports unicode" / #endif |
2023-02-15 19:12:15 +0100 | lechner | (~lechner@debian/lechner) (Ping timeout: 248 seconds) |
2023-02-15 19:12:58 +0100 | Joao003 | (~Joao003@2804:840:830b:2100:ad60:28cd:6e23:d3c3) (Read error: Connection reset by peer) |
2023-02-15 19:16:19 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
2023-02-15 19:16:32 +0100 | mastarija | (~mastarija@2a05:4f46:e03:6000:6c22:2fad:848c:c9d4) |
2023-02-15 19:16:55 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection) |
2023-02-15 19:17:13 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 19:23:05 +0100 | nattiestnate | (~nate@202.138.250.31) |
2023-02-15 19:24:39 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
2023-02-15 19:25:46 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-15 19:26:19 +0100 | <zero> | @type fix error |
2023-02-15 19:26:20 +0100 | <lambdabot> | [Char] |
2023-02-15 19:26:26 +0100 | <zero> | ^ why? |
2023-02-15 19:26:56 +0100 | <lyxia> | look at the type of fix, look at the type of error |
2023-02-15 19:27:26 +0100 | <mauke> | :t fix |
2023-02-15 19:27:27 +0100 | <lambdabot> | (a -> a) -> a |
2023-02-15 19:27:32 +0100 | <mauke> | :t error |
2023-02-15 19:27:33 +0100 | <lambdabot> | [Char] -> a |
2023-02-15 19:27:55 +0100 | <mauke> | fix takes a function whose argument and result types are the same |
2023-02-15 19:28:16 +0100 | <zero> | i understand the substitution, but something doesn't make sense. how do we get a string from error? |
2023-02-15 19:28:22 +0100 | <mauke> | since error takes [Char] as argument, it follows that a = [Char] within fix's type signature |
2023-02-15 19:28:31 +0100 | <geekosaur> | a unifies with anything including [Char] |
2023-02-15 19:28:46 +0100 | <mauke> | the a in error's type signature is completely free |
2023-02-15 19:28:50 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-15 19:28:52 +0100 | <mauke> | in particular, it can be set to [Char] |
2023-02-15 19:29:28 +0100 | <mauke> | so: fix error is well typed with fix :: ([Char] -> [Char]) -> [Char] and error :: [Char] -> [Char] |
2023-02-15 19:29:31 +0100 | jade[m] | uploaded an image: (924KiB) < https://libera.ems.host/_matrix/media/v3/download/catgirl.cloud/5b300071dcd72c885b45663174489212af… > |
2023-02-15 19:29:34 +0100 | <jade[m]> | fun |
2023-02-15 19:30:12 +0100 | <mauke> | zero: you get a string from error the same way you get any result from error, really |
2023-02-15 19:30:33 +0100 | <mauke> | it always returns a (lazy) exception, so it can pretend to be any type it wants |
2023-02-15 19:31:53 +0100 | <mauke> | in C++ terms, template<typename T> T error() { throw "lol, whatever"; } // sort of |
2023-02-15 19:32:15 +0100 | <zero> | > terror :: Char -> a ; terror _ = let a = a in a ; fix terror |
2023-02-15 19:32:17 +0100 | <lambdabot> | <hint>:1:21: error: parse error on input ‘;’ |
2023-02-15 19:32:36 +0100 | <geekosaur> | use yahb2 |
2023-02-15 19:32:46 +0100 | <geekosaur> | lambdabot is not ghci and won't accept definitions |
2023-02-15 19:33:00 +0100 | <mauke> | > let terror :: Char -> a; terror _ = let a = a in a in fix terror |
2023-02-15 19:33:03 +0100 | <lambdabot> | *Exception: <<loop>> |
2023-02-15 19:33:11 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:f515:cb26:b674:140e) |
2023-02-15 19:33:26 +0100 | <zero> | how does `fix error` *actually* return a string? |
2023-02-15 19:33:36 +0100 | <mauke> | it doesn't |
2023-02-15 19:33:41 +0100 | <mauke> | it throws an exception |
2023-02-15 19:33:48 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
2023-02-15 19:33:52 +0100 | <jade[m]> | jade[m]: . |
2023-02-15 19:34:06 +0100 | <zero> | ok |
2023-02-15 19:34:08 +0100 | <zero> | i see |
2023-02-15 19:34:12 +0100 | <zero> | > head $ fix error |
2023-02-15 19:34:14 +0100 | <geekosaur> | it doesn't. it returns a lazy exception that is thrown when lambdabot tries to display te string, then throws another exception when trying to display the string exception message, etc. |
2023-02-15 19:34:14 +0100 | <lambdabot> | *Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Exc... |
2023-02-15 19:34:22 +0100 | <zero> | ok i get it now. thanks |
2023-02-15 19:34:26 +0100 | <mauke> | ;-) |
2023-02-15 19:34:27 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
2023-02-15 19:34:41 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-15 19:35:19 +0100 | <mauke> | it's like an infinitely nested exception. when you look at the exception message, it throws another exception, whose message throws another exception, whose ... |
2023-02-15 19:35:19 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-15 19:37:06 +0100 | <zero> | fun... |
2023-02-15 19:37:45 +0100 | chele | (~chele@user/chele) (Remote host closed the connection) |
2023-02-15 19:41:49 +0100 | MajorBiscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Quit: WeeChat 3.6) |
2023-02-15 19:45:05 +0100 | <witcher> | i'm unsure how to continue my haskell journey from here besides "just programming": i've had a uni course in haskell, and read the book "Programming in Haskell" by Graham Hutton. what's the next logical step, if any? |
2023-02-15 19:46:10 +0100 | <Hecate> | witcher: solve your problems |
2023-02-15 19:46:15 +0100 | <Hecate> | but with Haskell this time |
2023-02-15 19:46:25 +0100 | shapr | (~user@net-5-88-239-92.cust.vodafonedsl.it) (Ping timeout: 246 seconds) |
2023-02-15 19:47:57 +0100 | <witcher> | Hecate: that's a given, but i'm wondering if there are any other materials to learn more about haskell while i do that |
2023-02-15 19:48:19 +0100 | <Hecate> | witcher: oh yeah sure :D but can *you* handle it? :p |
2023-02-15 19:48:23 +0100 | <zero> | yes solve your problems but don't fix your errors. unless you want and infinite exception |
2023-02-15 19:48:42 +0100 | <zero> | *an |
2023-02-15 19:48:49 +0100 | <Hecate> | witcher: I'd advise you to really program before going to the next step |
2023-02-15 19:49:05 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
2023-02-15 19:49:07 +0100 | <Hecate> | witcher: this book is a good road companion https://leanpub.com/finding-success-in-haskell |
2023-02-15 19:49:25 +0100 | chaitlatte0 | (ea29c0bb16@user/chaitlatte0) (Remote host closed the connection) |
2023-02-15 19:49:32 +0100 | chaitlatte0 | (ea29c0bb16@2604:bf00:561:2000::1124) |
2023-02-15 19:49:39 +0100 | chaitlatte0 | (ea29c0bb16@2604:bf00:561:2000::1124) (Remote host closed the connection) |
2023-02-15 19:49:46 +0100 | chaitlatte0 | (ea29c0bb16@2604:bf00:561:2000::1124) |
2023-02-15 19:50:25 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 19:50:39 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-15 19:50:48 +0100 | <witcher> | Hecate: that sounds like what i'm looking for, thank you! |
2023-02-15 19:52:21 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2023-02-15 19:52:42 +0100 | sm | wonders what sort of a journey are you on that doesn't involve programming ? |
2023-02-15 19:53:21 +0100 | <sm> | will there be programming later ? Or are you studying the concepts ? Just curious |
2023-02-15 19:54:05 +0100 | chaitlatte0 | (ea29c0bb16@2604:bf00:561:2000::1124) (Remote host closed the connection) |
2023-02-15 19:54:12 +0100 | <trev> | lol |
2023-02-15 19:54:15 +0100 | chaitlatte0 | (ea29c0bb16@user/chaitlatte0) |
2023-02-15 19:54:36 +0100 | <trev> | sm seems like a good time to shamelessly plug tiny-games-hs |
2023-02-15 19:54:48 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
2023-02-15 19:54:55 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-02-15 19:55:55 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
2023-02-15 19:56:00 +0100 | ardell | (~ardell@user/ardell) |
2023-02-15 19:56:45 +0100 | <sm> | haha please do trev, but that doesn't seem what's wanted here |
2023-02-15 19:57:39 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 20:00:13 +0100 | <trev> | my two cents would be to involve yourself with an open source haskell project, start your own project, or find a haskell job while continuing reading |
2023-02-15 20:00:23 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-15 20:03:57 +0100 | abiss27 | (~abiss27@190.213.236.106) |
2023-02-15 20:06:45 +0100 | <trev> | now that i'm thinking about it, there's nothing better than jumping into an open source project and forcing people to mentor you with PR feedbac :] |
2023-02-15 20:07:21 +0100 | <geekosaur> | we're always open to new contribs 🙂 |
2023-02-15 20:07:32 +0100 | <geekosaur> | (see #xmonad) |
2023-02-15 20:08:14 +0100 | <geekosaur> | https://hackage.haskell.org/package/xmonad-contrib-0.17.1/docs/XMonad-Doc-Developing.html |
2023-02-15 20:08:23 +0100 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2023-02-15 20:09:36 +0100 | <witcher> | sm: looks like this came across wrong. i *am* programming, that's the whole point of learning a language |
2023-02-15 20:12:26 +0100 | <sm> | well, I didn't want to assume that.. some might prefer to explore theory |
2023-02-15 20:12:54 +0100 | <sm> | cool |
2023-02-15 20:13:31 +0100 | <sm> | well, there's an internet ton of other materials |
2023-02-15 20:14:02 +0100 | Guest9 | (~Guest@2409:4073:28d:cb52:888b:1aab:b70f:4d3e) |
2023-02-15 20:14:08 +0100 | <sm> | a recent book I like is |
2023-02-15 20:14:08 +0100 | <sm> | @where PH |
2023-02-15 20:14:09 +0100 | <lambdabot> | https://leanpub.com/production-haskell 2023 book |
2023-02-15 20:14:17 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-15 20:14:46 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:f515:cb26:b674:140e) (Remote host closed the connection) |
2023-02-15 20:14:50 +0100 | <sm> | but it's too early for that perhaps. Another that includes several example projects is |
2023-02-15 20:14:50 +0100 | <sm> | @where HTAC |
2023-02-15 20:14:51 +0100 | <lambdabot> | "Haskell Tutorial and Cookbook" by Mark Watson in 2017-09-04 at <https://leanpub.com/haskell-cookbook> |
2023-02-15 20:15:39 +0100 | sm | checks out Hecate's |
2023-02-15 20:15:46 +0100 | <witcher> | i find it hard to filter through all the "haskell 101", "what is a monad", etc. there's a ton of it, which is good, but looking beyond it for topics that are ""a bit more advanced"" becomes harder and tedious |
2023-02-15 20:16:04 +0100 | <sm> | ha one that looks perfect for almost-valentine's day |
2023-02-15 20:16:15 +0100 | <witcher> | this is not a haskell problem, i'm just having a hard time finding these materials |
2023-02-15 20:16:46 +0100 | <witcher> | sm: thanks for the recommendations! |
2023-02-15 20:17:12 +0100 | <ddellacosta> | witcher: this is a great book too https://www.goodreads.com/book/show/17802513-parallel-and-concurrent-programming-in-haskell |
2023-02-15 20:17:29 +0100 | <sm> | witcher: yes.. there are a few standout resources but not knowing exactly where you are, recommending books seems the safest. And this is the best place for selecting books: |
2023-02-15 20:17:29 +0100 | <sm> | @where books |
2023-02-15 20:17:29 +0100 | <lambdabot> | https://www.extrema.is/articles/haskell-books is the best list of Haskell books. See also: LYAH, HTAC, RWH, PH, YAHT, SOE, HR, PIH, TFwH, wikibook, PCPH, HPFFP, FSAF, HftVB, TwT, FoP, PFAD, WYAH, |
2023-02-15 20:17:29 +0100 | <lambdabot> | non-haskell-books |
2023-02-15 20:17:31 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-15 20:18:12 +0100 | <witcher> | ddellacosta, sm: thanks! |
2023-02-15 20:19:14 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) |
2023-02-15 20:21:07 +0100 | <sm> | to describe the FSAF book, would it be fair to say it has a narrow focus on a few practical haskell programming topics likely to be helpful to a post-beginner haskeller ? |
2023-02-15 20:22:29 +0100 | <trev> | geekosaur can you convince me to switch from bspwm to xmonad in one sentence? |
2023-02-15 20:24:17 +0100 | <geekosaur> | probably not. the ecosystem doesn't really work that way. we do have our own BSP layout that can be combined with others (https://github.com/geekosaur/xmonad.hs/blob/skkukuk/xmonad.hs#L139-L153 for example) |
2023-02-15 20:24:32 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds) |
2023-02-15 20:26:24 +0100 | <trev> | interesting |
2023-02-15 20:26:30 +0100 | <trev> | bspwm seems way more primitive |
2023-02-15 20:26:36 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:3048:c7fd:edeb:3cc7) |
2023-02-15 20:26:48 +0100 | <witcher> | geekosaur: maybe i should give xmonad a try sometime - i've always been wondering what it's really about. i don't know anything about it besides it being a tiling window manager and written in Haskell |
2023-02-15 20:27:22 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) (Ping timeout: 246 seconds) |
2023-02-15 20:28:19 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-02-15 20:28:20 +0100 | Cale | (~cale@2605:8d80:6a2:d49b:a139:9a62:b1d5:76a4) (Read error: Connection reset by peer) |
2023-02-15 20:28:58 +0100 | <sm> | trev: it'd be a shame if something were to happen to that bspwm config.. accidents are so common |
2023-02-15 20:29:32 +0100 | <trev> | :D |
2023-02-15 20:30:31 +0100 | <sm> | the static typer's pitch to dynamic typers :) |
2023-02-15 20:30:48 +0100 | Guest9 | (~Guest@2409:4073:28d:cb52:888b:1aab:b70f:4d3e) (Ping timeout: 260 seconds) |
2023-02-15 20:33:02 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 20:33:50 +0100 | opticblast | (~Thunderbi@172.58.85.230) |
2023-02-15 20:34:19 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 20:35:45 +0100 | thegeekinside | (~thegeekin@189.180.97.223) |
2023-02-15 20:39:41 +0100 | Joao003 | (~Joao003@2804:840:830b:2100:6d10:13ec:f5fc:ff63) |
2023-02-15 20:39:49 +0100 | <Joao003> | hi |
2023-02-15 20:40:43 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
2023-02-15 20:43:33 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds) |
2023-02-15 20:44:14 +0100 | <Hecate> | * sm checks out Hecate's // I don't have a tutorial! |
2023-02-15 20:44:35 +0100 | <sm> | I meant your book recommendation |
2023-02-15 20:45:16 +0100 | <Hecate> | ah |
2023-02-15 20:45:21 +0100 | <Hecate> | yes, very good book |
2023-02-15 20:45:32 +0100 | <Hecate> | the next one about sockets and pipes is on the way |
2023-02-15 20:45:37 +0100 | <Hecate> | (no spoiler though) |
2023-02-15 20:45:44 +0100 | Cale | (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) |
2023-02-15 20:47:36 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-177-034.46.114.pool.telefonica.de) (Ping timeout: 255 seconds) |
2023-02-15 20:51:14 +0100 | jargon | (~jargon@184.101.95.90) |
2023-02-15 20:51:18 +0100 | nattiestnate | (~nate@202.138.250.31) (Quit: WeeChat 3.8) |
2023-02-15 21:00:16 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 21:04:42 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 21:10:43 +0100 | lagash_ | lagash |
2023-02-15 21:11:29 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 21:14:14 +0100 | mechap | (~mechap@user/mechap) |
2023-02-15 21:15:39 +0100 | lagash | (lagash@lagash.shelltalk.net) (Quit: ZNC - https://znc.in) |
2023-02-15 21:18:33 +0100 | akegalj | (~akegalj@225-212.dsl.iskon.hr) (Quit: leaving) |
2023-02-15 21:20:18 +0100 | lagash_ | (~lagash@lagash.shelltalk.net) |
2023-02-15 21:20:38 +0100 | pavonia | (~user@user/siracusa) |
2023-02-15 21:24:39 +0100 | mechap | (~mechap@user/mechap) (Quit: WeeChat 3.8) |
2023-02-15 21:24:53 +0100 | gensyst | (gensyst@user/gensyst) |
2023-02-15 21:25:09 +0100 | <gensyst> | Is there really no way to do better? https://dpaste.com/5H42RC2BT manually typing those strings is error-prone. |
2023-02-15 21:25:19 +0100 | <gensyst> | (Topic: GADTs deriving Show) |
2023-02-15 21:25:55 +0100 | ardell | (~ardell@user/ardell) (Quit: Konversation terminated!) |
2023-02-15 21:29:38 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-02-15 21:31:09 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 255 seconds) |
2023-02-15 21:31:43 +0100 | <geekosaur> | doesn't `deriving instance Show Settings` work? |
2023-02-15 21:32:07 +0100 | <geekosaur> | (StandaloneDeriving extension) |
2023-02-15 21:33:23 +0100 | <gensyst> | geekosaur, it does! nice... |
2023-02-15 21:34:25 +0100 | <Hecate> | gensyst: I was about to suggest the same thing indeed: https://play-haskell.tomsmeding.com/saved/a8pbO1dS |
2023-02-15 21:39:17 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 21:39:53 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-02-15 21:40:55 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 260 seconds) |
2023-02-15 21:43:19 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 246 seconds) |
2023-02-15 21:43:47 +0100 | phaazon2 | (~phaazon@2001:41d0:a:fe76::1) |
2023-02-15 21:43:48 +0100 | <gensyst> | thanks mates |
2023-02-15 21:44:02 +0100 | phaazon2 | phaazon |
2023-02-15 21:44:25 +0100 | trev | (~trev@user/trev) (Remote host closed the connection) |
2023-02-15 21:44:56 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 21:45:10 +0100 | <phaazon> | hi :) |
2023-02-15 21:46:12 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-15 21:47:28 +0100 | <sm> | I can't help but share tristanC's demo of terrorjack's work: you can easily run (or compile to a native binary) the 1.5Mb https://tristancacqueray.github.io/tiny-game-haskell-wasm/tiny-brot.wasm with a wasm runtime like https://wasmtime.dev |
2023-02-15 21:47:58 +0100 | <sm> | no haskell toolchain needed |
2023-02-15 21:50:34 +0100 | tdammers | (~tdammers@77.109.72.175.res.static.edpnet.net) (Ping timeout: 252 seconds) |
2023-02-15 21:50:52 +0100 | tdammers | (~tdammers@77.109.72.175.res.static.edpnet.net) |
2023-02-15 21:55:40 +0100 | vulpine | (xfnw@tilde.team) (Quit: Connection reset by purr) |
2023-02-15 21:57:16 +0100 | vulpine | (xfnw@tilde.team) |
2023-02-15 21:58:55 +0100 | nschoe | (~q@2a01:e0a:8e:a190:f84c:9cc5:2613:142) |
2023-02-15 21:59:05 +0100 | <phaazon> | question about linear types: isn’t there a « 0 » multiplicity? I know it might not be super useful, but I was wondering whether it existed |
2023-02-15 21:59:08 +0100 | <phaazon> | i.e. for typing const |
2023-02-15 21:59:18 +0100 | <phaazon> | const :: a %0 -> b %1 -> b |
2023-02-15 22:01:55 +0100 | <geekosaur> | not currently |
2023-02-15 22:02:01 +0100 | <geekosaur> | only ONE or MANY |
2023-02-15 22:03:09 +0100 | <phaazon> | hm, so -> ≃ %m ->? |
2023-02-15 22:03:26 +0100 | <geekosaur> | yes, afaik |
2023-02-15 22:03:58 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2023-02-15 22:03:59 +0100 | <phaazon> | thanks geekosaur |
2023-02-15 22:04:13 +0100 | <phaazon> | I’m having fun with them, and I initially tried to implement my lconst (linear const) with id |
2023-02-15 22:04:19 +0100 | <phaazon> | but… id has a %m multiplicity :) |
2023-02-15 22:04:26 +0100 | <phaazon> | funny to start thinking in terms of that now |
2023-02-15 22:05:11 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 22:07:27 +0100 | mechap | (~mechap@user/mechap) |
2023-02-15 22:13:38 +0100 | <jackdk> | phaazon: type a -> b = a %Many -> b (explicitly "many", not multiplicity-polymorphic); see https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/linear_types.html#extension-LinearT… |
2023-02-15 22:14:03 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 252 seconds) |
2023-02-15 22:14:03 +0100 | <phaazon> | oh, so %m is polymorphic in m |
2023-02-15 22:14:05 +0100 | <phaazon> | that’s interesting |
2023-02-15 22:14:14 +0100 | <phaazon> | so I guess that’s useful for higher order? |
2023-02-15 22:14:20 +0100 | <geekosaur> | oh, sorry. that sounds confusing |
2023-02-15 22:15:09 +0100 | <phaazon> | so if I want to write a function taking an argument that might be used 0, 1 or many times (I don’t know) |
2023-02-15 22:15:11 +0100 | <phaazon> | I should be using %m -> |
2023-02-15 22:16:21 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-15 22:16:40 +0100 | <phaazon> | lately, I’ve been thinking a lot about my times in Haskell a couple of years ago |
2023-02-15 22:16:45 +0100 | <phaazon> | and daaaaaaaamn I miss those times so much :) |
2023-02-15 22:17:42 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 22:17:42 +0100 | petrus_ | (0bb1bd6a3f@2604:bf00:561:2000::10d7) |
2023-02-15 22:19:49 +0100 | <Joao003> | any uses for the S combinator in Haskell? |
2023-02-15 22:20:15 +0100 | <geekosaur> | it's Monad's `ap` or Applicative's <*> |
2023-02-15 22:20:35 +0100 | <geekosaur> | which, yes, gets plenty of use |
2023-02-15 22:22:06 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 22:22:31 +0100 | nschoe | (~q@2a01:e0a:8e:a190:f84c:9cc5:2613:142) (Ping timeout: 252 seconds) |
2023-02-15 22:24:08 +0100 | <phaazon> | S combinator? |
2023-02-15 22:24:35 +0100 | gensyst | (gensyst@user/gensyst) (Quit: Leaving) |
2023-02-15 22:25:22 +0100 | <geekosaur> | look up the SKI calculus |
2023-02-15 22:25:42 +0100 | <phaazon> | do people still use ap today? |
2023-02-15 22:25:51 +0100 | <phaazon> | I think the question is probably the same as « do people still use return today? » |
2023-02-15 22:25:51 +0100 | <geekosaur> | in Haskell, S = <*>, K = const, I = id |
2023-02-15 22:26:03 +0100 | <phaazon> | interesting, I’ll have a look, thanks |
2023-02-15 22:26:06 +0100 | <geekosaur> | ap has mostly fallen out of use |
2023-02-15 22:26:14 +0100 | <phaazon> | let me guess |
2023-02-15 22:26:23 +0100 | <phaazon> | it used to be a thing before Applicative was a superclass of Monad |
2023-02-15 22:26:39 +0100 | <geekosaur> | it used to be a thing before Applicative existed 🙂 |
2023-02-15 22:27:27 +0100 | <phaazon> | :) |
2023-02-15 22:27:28 +0100 | <lyxia> | phaazon: In Agda, there is a "zero multiplicity" and it's useful to erase proofs when extracting code to Haskell. |
2023-02-15 22:28:46 +0100 | <phaazon> | yeah, I was thinking of something like the never type from Rust |
2023-02-15 22:28:58 +0100 | <phaazon> | (so you can prove you’re not going to emit en error, for instance) |
2023-02-15 22:29:07 +0100 | <phaazon> | (and then you can statically remove the Either) |
2023-02-15 22:29:09 +0100 | <phaazon> | (Result in Rust) |
2023-02-15 22:29:36 +0100 | <lyxia> | That's Void |
2023-02-15 22:29:46 +0100 | <phaazon> | yep |
2023-02-15 22:30:01 +0100 | <lyxia> | https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Void.html |
2023-02-15 22:32:06 +0100 | lyle | (~lyle@104.246.145.237) (Quit: WeeChat 3.8) |
2023-02-15 22:37:18 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2023-02-15 22:38:05 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection) |
2023-02-15 22:39:02 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-15 22:39:19 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
2023-02-15 22:41:07 +0100 | abiss27 | (~abiss27@190.213.236.106) (Quit: I'm off, Goodbye!) |
2023-02-15 22:44:22 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
2023-02-15 22:45:36 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-15 22:46:34 +0100 | Joao003 | (~Joao003@2804:840:830b:2100:6d10:13ec:f5fc:ff63) (Read error: Connection reset by peer) |
2023-02-15 22:48:03 +0100 | nschoe | (~q@2a01:e0a:8e:a190:e5e1:d084:9247:2697) |
2023-02-15 22:48:28 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Remote host closed the connection) |
2023-02-15 22:48:43 +0100 | nschoe | (~q@2a01:e0a:8e:a190:e5e1:d084:9247:2697) (Client Quit) |
2023-02-15 22:48:52 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-15 22:54:33 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-177-034.46.114.pool.telefonica.de) |
2023-02-15 22:56:33 +0100 | cheater | (~Username@user/cheater) |
2023-02-15 23:01:41 +0100 | npmania | (~Thunderbi@45.8.223.248) |
2023-02-15 23:01:51 +0100 | mastarija | (~mastarija@2a05:4f46:e03:6000:6c22:2fad:848c:c9d4) (Quit: WeeChat 3.7.1) |
2023-02-15 23:03:07 +0100 | michalz | (~michalz@185.246.204.107) (Remote host closed the connection) |
2023-02-15 23:03:54 +0100 | Arcade_Dan | (~dan@173.31.197.117) |
2023-02-15 23:05:38 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds) |
2023-02-15 23:05:57 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2023-02-15 23:10:03 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) |
2023-02-15 23:11:22 +0100 | petrus_ | (0bb1bd6a3f@2604:bf00:561:2000::10d7) () |
2023-02-15 23:12:43 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 23:15:59 +0100 | falafel | (~falafel@2607:fb91:143f:e47f:3048:c7fd:edeb:3cc7) (Ping timeout: 255 seconds) |
2023-02-15 23:18:33 +0100 | Arcade_Dan | (~dan@173.31.197.117) (Quit: leaving) |
2023-02-15 23:20:47 +0100 | myme1 | (~myme@40.51-175-185.customer.lyse.net) (Ping timeout: 248 seconds) |
2023-02-15 23:23:07 +0100 | sidy | (~sidy@user/sidy) (Ping timeout: 248 seconds) |
2023-02-15 23:23:49 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-15 23:26:34 +0100 | azure_vermilion | (~azure_ver@164.39.138.83) (Ping timeout: 246 seconds) |
2023-02-15 23:26:44 +0100 | azure_vermilion | (~azure_ver@164.39.138.83) |
2023-02-15 23:26:45 +0100 | beteigeuze1 | (~Thunderbi@85.247.81.220) |
2023-02-15 23:27:21 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 255 seconds) |
2023-02-15 23:27:21 +0100 | beteigeuze1 | beteigeuze |
2023-02-15 23:27:47 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
2023-02-15 23:28:09 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2023-02-15 23:29:09 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 255 seconds) |
2023-02-15 23:29:54 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-15 23:30:56 +0100 | ystael | (~ystael@user/ystael) (Ping timeout: 248 seconds) |
2023-02-15 23:32:53 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Ping timeout: 252 seconds) |
2023-02-15 23:33:18 +0100 | elevenkb | (~elevenkb@105.225.107.107) |
2023-02-15 23:37:44 +0100 | npmania1 | (~Thunderbi@45.8.223.218) |
2023-02-15 23:38:07 +0100 | npmania | (~Thunderbi@45.8.223.248) (Ping timeout: 246 seconds) |
2023-02-15 23:38:07 +0100 | npmania1 | npmania |
2023-02-15 23:38:28 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 246 seconds) |
2023-02-15 23:40:47 +0100 | manwithluck | (~manwithlu@194.177.28.192) (Remote host closed the connection) |
2023-02-15 23:42:13 +0100 | manwithluck | (~manwithlu@194.177.28.192) |
2023-02-15 23:50:19 +0100 | tomcatfish | (~tomcatfis@mobile-166-170-28-207.mycingular.net) (Read error: Connection reset by peer) |
2023-02-15 23:50:43 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-02-15 23:51:42 +0100 | jespada_ | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2023-02-15 23:52:38 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-02-15 23:53:25 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-02-15 23:55:02 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
2023-02-15 23:58:13 +0100 | myme | (~myme@40.51-175-185.customer.lyse.net) |