Logs on 2024-07-27 (liberachat/#haskell)
| 00:01:29 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 255 seconds) |
| 00:03:23 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 00:05:12 | × | hgolden quits (~hgolden@2603:8000:9d00:3ed1:1ee4:1b7c:94a7:8fa7) (Remote host closed the connection) |
| 00:05:53 | → | Rodney__ joins (~Rodney@90.201.223.82) |
| 00:07:39 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
| 00:08:20 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 00:09:22 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:21:35 | × | mud quits (~mud@user/kadoban) (Remote host closed the connection) |
| 00:22:02 | → | mud joins (~mud@user/kadoban) |
| 00:31:48 | × | prolic_ quits (~sasa@181.122.138.24) (Remote host closed the connection) |
| 00:32:07 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 00:35:17 | → | califax joins (~califax@user/califx) |
| 00:46:39 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 276 seconds) |
| 00:54:18 | <monochrom> | I have not learned the sieve of Atkin. I guess that's an implicit "not like" because the very decision to learn a million other things instead reflects what I like. |
| 00:57:51 | <monochrom> | 35 years ago I liked computational number theory so much I would even go out of my way to learn the number field sieve. But today, "category theory and dependent type theory are so much easier". |
| 00:59:12 | <monochrom> | But going back to the original point. Stop telling beginners how to split hair about what "sieve" means. |
| 01:14:32 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 01:31:05 | × | bolivood quits (~bolivood@user/bolivood) (Ping timeout: 260 seconds) |
| 01:35:10 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 02:01:53 | → | Rodney- joins (~Rodney@90.201.223.82) |
| 02:05:14 | × | Rodney__ quits (~Rodney@90.201.223.82) (Ping timeout: 255 seconds) |
| 02:07:29 | → | fiberchunks joins (~mike@32.221.120.181) |
| 02:08:28 | ← | fiberchunks parts (~mike@32.221.120.181) () |
| 02:11:48 | → | fiberchunks joins (~mike@32.221.120.181) |
| 02:12:16 | × | td_ quits (~td@i53870934.versanet.de) (Ping timeout: 252 seconds) |
| 02:14:16 | → | td_ joins (~td@i53870913.versanet.de) |
| 02:27:10 | ← | fiberchunks parts (~mike@32.221.120.181) () |
| 02:35:54 | → | ddellacosta joins (~ddellacos@ool-44c73d29.dyn.optonline.net) |
| 02:38:02 | → | tomku joins (~tomku@user/tomku) |
| 02:43:31 | × | terrorjack quits (~terrorjac@2a01:4f8:c17:87f8::) (Quit: The Lounge - https://thelounge.chat) |
| 02:46:22 | → | terrorjack joins (~terrorjac@2a01:4f8:c17:87f8::) |
| 03:00:01 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 03:27:33 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 03:36:08 | × | torkel quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Quit: WeeChat 4.3.5) |
| 03:38:33 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 03:41:19 | × | monochrom quits (trebla@216.138.220.146) (Quit: ZNC 1.9.0+deb2build3 - https://znc.in) |
| 03:49:35 | <jle`> | dsal: that sounds like also a good application of StateT |
| 03:49:51 | <jle`> | er just State maybe |
| 03:50:42 | <jle`> | ah Traversal + State is just mapAccumLOf |
| 03:52:21 | × | aforemny quits (~aforemny@i59F516C5.versanet.de) (Ping timeout: 248 seconds) |
| 03:53:29 | → | aforemny joins (~aforemny@i59F516D5.versanet.de) |
| 03:53:30 | → | monochrom joins (trebla@216.138.220.146) |
| 03:53:43 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 03:54:41 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 03:57:17 | → | sindu joins (~sindu@83-243-191-191.fth.tafjordconnect.net) |
| 03:59:41 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 03:59:55 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 04:01:47 | × | Square2 quits (~Square@user/square) (Ping timeout: 255 seconds) |
| 04:10:14 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 04:27:15 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 04:28:21 | × | slack1256 quits (~slack1256@2803:c600:5111:80cb:d321:865d:b7ff:34ea) (Remote host closed the connection) |
| 04:37:32 | → | skyesoss joins (~Thunderbi@c-73-208-45-119.hsd1.il.comcast.net) |
| 04:38:33 | × | sindu quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Ping timeout: 252 seconds) |
| 04:45:29 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:1ee4:1b7c:94a7:8fa7) |
| 04:52:29 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 04:58:46 | → | danza joins (~danza@na-19-79-8.service.infuturo.it) |
| 05:05:57 | × | danza quits (~danza@na-19-79-8.service.infuturo.it) (Remote host closed the connection) |
| 05:06:44 | → | danza joins (~danza@na-19-79-8.service.infuturo.it) |
| 05:17:54 | × | krei-se quits (~krei-se@p5085de4b.dip0.t-ipconnect.de) (Quit: ZNC 1.9.1 - https://znc.in) |
| 05:19:50 | → | krei-se joins (~krei-se@p5085de4b.dip0.t-ipconnect.de) |
| 05:27:14 | <dsal> | jle`: Yeah, I was in the process of writing it with State, but doing all of those tree descents is a lot more painful than just stating the path. |
| 05:29:15 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 05:32:11 | <jle`> | dsal: yeah if you just want to zip with over zipWith works. but mapAccumLOf from Control.Lens.Traversal might capture the idea of a stateful map over a traversal nicely |
| 05:32:39 | <dsal> | Oh. I missed the `Of` there. |
| 05:32:56 | × | skyesoss quits (~Thunderbi@c-73-208-45-119.hsd1.il.comcast.net) (Ping timeout: 272 seconds) |
| 05:35:09 | <danza> | i don't use mapAccum enough |
| 05:35:12 | <danza> | :t mapAccum |
| 05:35:13 | <lambdabot> | error: |
| 05:35:13 | <lambdabot> | • Variable not in scope: mapAccum |
| 05:35:14 | <lambdabot> | • Perhaps you meant one of these: |
| 05:35:20 | → | euphores joins (~SASL_euph@user/euphores) |
| 05:35:38 | <danza> | @hoogle mapAccum |
| 05:35:39 | <lambdabot> | Data.IntMap.Internal mapAccum :: (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) |
| 05:35:39 | <lambdabot> | Data.IntMap.Lazy mapAccum :: (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) |
| 05:35:39 | <lambdabot> | Data.IntMap.Strict mapAccum :: (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) |
| 05:39:02 | <geekosaur> | don't you want mapAccumL? |
| 05:39:37 | <danza> | who, me? |
| 05:40:26 | <geekosaur> | yes |
| 05:40:44 | <geekosaur> | @hoogle mapAccumL |
| 05:40:45 | <lambdabot> | Data.List mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
| 05:40:45 | <lambdabot> | Data.Traversable mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
| 05:40:45 | <lambdabot> | GHC.OldList mapAccumL :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y]) |
| 05:41:36 | <danza> | huh yeah, well i was looking for a definition with a default direction |
| 05:41:39 | <danza> | :t foldr |
| 05:41:40 | <lambdabot> | Foldable t => (a -> b -> b) -> b -> t a -> b |
| 05:41:42 | <danza> | :t fold |
| 05:41:43 | <lambdabot> | (Foldable t, Monoid m) => t m -> m |
| 05:42:13 | × | danza quits (~danza@na-19-79-8.service.infuturo.it) (Quit: on the move) |
| 05:45:45 | × | kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux) |
| 05:45:55 | × | CrunchyFlakes quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 05:46:52 | → | kimiamania joins (~65804703@user/kimiamania) |
| 05:48:22 | → | CrunchyFlakes joins (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) |
| 05:49:57 | → | danza joins (~danza@na-19-79-8.service.infuturo.it) |
| 05:51:01 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds) |
| 05:57:15 | → | skyesoss joins (~Thunderbi@c-73-208-45-119.hsd1.il.comcast.net) |
| 06:27:46 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 06:30:07 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 06:47:02 | → | misterfish joins (~misterfis@84.53.85.146) |
| 06:49:07 | × | lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection) |
| 06:49:35 | → | lambdabot joins (~lambdabot@silicon.int-e.eu) |
| 06:49:35 | × | lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host) |
| 06:49:35 | → | lambdabot joins (~lambdabot@haskell/bot/lambdabot) |
| 06:49:35 | ChanServ | sets mode +v lambdabot |
| 06:51:01 | → | Midjak joins (~MarciZ@82.66.147.146) |
| 06:56:17 | × | int-e quits (~noone@int-e.eu) (Remote host closed the connection) |
| 06:56:57 | → | int-e joins (~noone@int-e.eu) |
| 07:08:27 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 07:15:47 | → | aforemny_ joins (~aforemny@2001:9e8:6cdd:9b00:67d0:27e6:eba2:1a90) |
| 07:15:49 | × | danza quits (~danza@na-19-79-8.service.infuturo.it) (Quit: on the move) |
| 07:15:51 | × | aforemny quits (~aforemny@i59F516D5.versanet.de) (Ping timeout: 252 seconds) |
| 07:21:05 | → | acidjnk joins (~acidjnk@p200300d6e72cfb1421aec5076afe4c64.dip0.t-ipconnect.de) |
| 07:21:09 | → | oo_miguel joins (~Thunderbi@78.10.207.46) |
| 07:22:01 | <Unicorn_Princess> | i should be using aeson & aeson-pretty for dealing with json? |
| 07:28:22 | → | bolivood joins (~bolivood@2a0d:6fc2:5d11:200:113a:493:cf26:6dea) |
| 07:38:30 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 07:39:12 | <Hecate> | Unicorn_Princess: usually yes |
| 07:39:37 | × | oo_miguel quits (~Thunderbi@78.10.207.46) (Remote host closed the connection) |
| 07:41:19 | × | skyesoss quits (~Thunderbi@c-73-208-45-119.hsd1.il.comcast.net) (Quit: skyesoss) |
| 07:41:41 | <Unicorn_Princess> | thanks |
| 07:48:16 | → | sindu joins (~sindu@83-243-191-191.fth.tafjordconnect.net) |
| 07:49:49 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:55:16 | → | MadeleineSydney joins (~Thunderbi@c-71-229-185-228.hsd1.co.comcast.net) |
| 08:08:36 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 08:09:20 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 08:17:28 | × | sindu quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Ping timeout: 252 seconds) |
| 08:21:52 | → | cpressey joins (~weechat@176.254.71.203) |
| 08:22:29 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:25:24 | <Axman6> | Can anyone explain why this isn't working? I want to get a name associated with a value (something that seems to work find in Clash) but I don't understand why I'm getting this error: https://paste.tomsmeding.com/49bV7Tuu |
| 08:29:09 | × | cpressey quits (~weechat@176.254.71.203) (Ping timeout: 248 seconds) |
| 08:31:34 | <Lears> | Axman6: This worked: https://play-haskell.tomsmeding.com/saved/ICQgr1xB |
| 08:32:17 | <Lears> | A type synonym breaks because the `l` disappears from the RHS of the => I guess? |
| 08:33:25 | <Axman6> | Hmm, sadly I can't change the type, (:::) is from clash-prelude |
| 08:34:14 | <Lears> | Maybe the functions that use it in clash also take other arguments that alleviate the ambiguity. You could use type applications or proxies. |
| 08:38:42 | <Axman6> | I can;t even get your example to compile actually |
| 08:39:51 | × | xff0x quits (~xff0x@2405:6580:b080:900:8b26:ef3c:7f31:7c41) (Ping timeout: 276 seconds) |
| 08:54:02 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 08:54:41 | → | jerg joins (~jerg@2001:a61:247a:4700::bb0) |
| 09:00:12 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 09:06:10 | → | Inst joins (~Inst@user/Inst) |
| 09:12:20 | → | xff0x joins (~xff0x@2405:6580:b080:900:8b26:ef3c:7f31:7c41) |
| 09:12:24 | → | CiaoSen joins (~Jura@2a05:5800:2ea:1100:e6b9:7aff:fe80:3d03) |
| 09:19:07 | × | teqwve quits (teqwve@static.141.38.201.195.clients.your-server.de) (Quit: cya) |
| 09:21:12 | × | pkal quits (~pkal@2a01:4f8:1c1b:a321::) (Remote host closed the connection) |
| 09:21:20 | → | pkal joins (~pkal@2a01:4f8:1c1b:a321::) |
| 09:22:08 | × | pkal quits (~pkal@2a01:4f8:1c1b:a321::) (Remote host closed the connection) |
| 09:22:15 | → | pkal joins (~pkal@2a01:4f8:1c1b:a321::) |
| 09:27:41 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 09:29:22 | → | sindu joins (~sindu@83-243-191-191.fth.tafjordconnect.net) |
| 09:34:01 | → | __monty__ joins (~toonn@user/toonn) |
| 09:34:27 | × | bolivood quits (~bolivood@2a0d:6fc2:5d11:200:113a:493:cf26:6dea) (Ping timeout: 276 seconds) |
| 09:44:35 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 09:45:32 | → | euleritian joins (~euleritia@77.22.252.56) |
| 09:47:09 | × | MadeleineSydney quits (~Thunderbi@c-71-229-185-228.hsd1.co.comcast.net) (Remote host closed the connection) |
| 09:48:57 | → | danza joins (~danza@151.47.28.68) |
| 09:49:11 | × | euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
| 09:50:01 | → | euleritian joins (~euleritia@77.22.252.56) |
| 09:55:55 | × | Me-me quits (~me-me@kc.randomserver.name) (Changing host) |
| 09:55:55 | → | Me-me joins (~me-me@user/me-me) |
| 09:57:28 | × | sindu quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Ping timeout: 245 seconds) |
| 10:01:32 | → | aforemny joins (~aforemny@2001:9e8:6cde:4700:6284:f31d:42a8:a868) |
| 10:01:47 | × | aforemny_ quits (~aforemny@2001:9e8:6cdd:9b00:67d0:27e6:eba2:1a90) (Ping timeout: 244 seconds) |
| 10:12:53 | → | gmg joins (~user@user/gehmehgeh) |
| 10:13:35 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:14:16 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 10:15:26 | × | danza quits (~danza@151.47.28.68) (Quit: on the move) |
| 10:18:25 | → | sindu joins (~sindu@83-243-191-191.fth.tafjordconnect.net) |
| 10:28:20 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 260 seconds) |
| 10:29:08 | → | euleritian joins (~euleritia@dynamic-176-006-138-243.176.6.pool.telefonica.de) |
| 11:05:57 | × | sindu quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Ping timeout: 248 seconds) |
| 11:08:28 | → | bolivood joins (~bolivood@2a0d:6fc2:5d11:200:dac:74e5:33ad:6838) |
| 11:15:28 | → | danza joins (~danza@151.47.28.68) |
| 11:22:13 | → | sindu joins (~sindu@83-243-191-191.fth.tafjordconnect.net) |
| 11:27:50 | × | sindu quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Ping timeout: 260 seconds) |
| 11:29:09 | × | danza quits (~danza@151.47.28.68) (Quit: glitching) |
| 11:29:45 | → | danza joins (~danza@151.47.28.68) |
| 11:34:25 | × | danza quits (~danza@151.47.28.68) (Client Quit) |
| 11:35:28 | → | danza joins (~danza@151.47.28.68) |
| 11:39:56 | → | sindu joins (~sindu@83-243-191-191.fth.tafjordconnect.net) |
| 11:45:43 | × | CiaoSen quits (~Jura@2a05:5800:2ea:1100:e6b9:7aff:fe80:3d03) (Ping timeout: 252 seconds) |
| 11:47:00 | <Inst> | btw there's been no recent updates on graphql Rewriting it In Rust TM? |
| 11:52:49 | × | aforemny quits (~aforemny@2001:9e8:6cde:4700:6284:f31d:42a8:a868) (Ping timeout: 252 seconds) |
| 11:56:08 | → | danza5049 joins (~danza@151.47.19.9) |
| 11:56:12 | × | danza quits (~danza@151.47.28.68) (Read error: Connection reset by peer) |
| 11:58:26 | danza5049 | is now known as danza |
| 12:07:27 | → | aforemny joins (~aforemny@2001:9e8:6cde:f100:f13d:7189:cb6f:5d03) |
| 12:08:40 | × | danza quits (~danza@151.47.19.9) (Quit: nap) |
| 12:15:44 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
| 12:16:48 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 12:18:59 | <probie> | Inst: Do you mean Hasura moving to Rust, or something else? |
| 12:36:36 | <Inst> | yeah, i was suspecting it'd cost way more than anticipated and take longer than planned |
| 12:36:40 | <Inst> | I don't see anything on graphql v3 |
| 12:56:40 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 12:56:47 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 12:57:29 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Remote host closed the connection) |
| 13:01:39 | × | micro quits (~micro@user/micro) (Ping timeout: 245 seconds) |
| 13:02:39 | × | CrunchyFlakes quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 13:05:11 | → | CrunchyFlakes joins (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) |
| 13:07:30 | × | euleritian quits (~euleritia@dynamic-176-006-138-243.176.6.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 13:15:39 | → | micro joins (~micro@user/micro) |
| 13:18:42 | × | cheater quits (~Username@user/cheater) (Ping timeout: 276 seconds) |
| 13:28:21 | × | myme quits (~myme@2a01:799:d5c:5f00:4421:50a5:101e:8cb9) (Ping timeout: 248 seconds) |
| 13:29:10 | → | myme joins (~myme@2a01:799:d5c:5f00:8a75:ab8b:9550:20a2) |
| 13:39:29 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 13:50:17 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 14:04:04 | → | euleritian joins (~euleritia@dynamic-176-006-138-243.176.6.pool.telefonica.de) |
| 14:06:41 | → | CiaoSen joins (~Jura@2a05:5800:2ea:1100:e6b9:7aff:fe80:3d03) |
| 14:07:17 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 14:15:36 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 14:42:51 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 244 seconds) |
| 14:44:03 | → | danza joins (~danza@151.47.19.9) |
| 14:46:55 | → | Digitteknohippie joins (~user@user/digit) |
| 14:47:36 | × | Digit quits (~user@user/digit) (Ping timeout: 252 seconds) |
| 14:51:36 | → | billchenchina- joins (~billchenc@118.38.173.226) |
| 14:56:44 | Digitteknohippie | is now known as Digit |
| 14:57:06 | → | Enrico63 joins (~Enrico63@81.109.143.226) |
| 14:58:18 | <Enrico63> | Hi, what's the best chatroom to ask about packages on hackage? I've just uploaded this (https://hackage.haskell.org/package/xnobar-0.0.0.0), but I have questions about it :) |
| 14:58:46 | <Enrico63> | I mean, not questions about my own creation, ahah, but about how that page looks like |
| 15:00:26 | <danza> | it looks broken. Those badges come from the README i suppose |
| 15:03:30 | <danza> | and the module cannot be browsed. Maybe hackage failed, but not sure how to troubleshoot that besides trying a local build |
| 15:03:35 | → | ell1 joins (~ellie@user/ellie) |
| 15:05:29 | × | ell quits (~ellie@user/ellie) (Read error: Connection reset by peer) |
| 15:05:29 | ell1 | is now known as ell |
| 15:06:14 | <Enrico63> | Well, I've been using and building it on a daily basis :/ |
| 15:06:42 | <Enrico63> | (But is this the right place for this topic?) |
| 15:08:04 | <danza> | if there is no other conversation going on, i guess we can chat about that. There is also #hackage. Yeah maybe bthe bbuild works but the badges look failing, and maybe you did not build with haddock |
| 15:08:25 | <danza> | (before i wanted to write "haddock failed") |
| 15:08:56 | <Enrico63> | running cabal haddock in the shell succeeded |
| 15:10:23 | <danza> | hmm yeah not sure how to troubleshoot that ... maybe in hindsight #hackage is better to ask for help. Admittedly i don't have much experience about that |
| 15:10:28 | → | oo_miguel joins (~Thunderbi@78.10.207.46) |
| 15:13:08 | catties | is now known as civilization |
| 15:13:23 | civilization | is now known as Catty |
| 15:16:05 | × | CiaoSen quits (~Jura@2a05:5800:2ea:1100:e6b9:7aff:fe80:3d03) (Ping timeout: 248 seconds) |
| 15:19:14 | <Enrico63> | Thanks! :) |
| 15:19:45 | × | danza quits (~danza@151.47.19.9) (Changing host) |
| 15:19:45 | → | danza joins (~danza@user/danza) |
| 15:20:32 | <danza> | well i did nothing :P |
| 15:20:59 | <Enrico63> | Pointing me to the other room :P |
| 15:22:37 | <danza> | well as i said i don't have much experience uploading so not sure how people address similar issues... i lurk in #hackage but don't recall chats about package errors. But maybe i just did not pay enough attention |
| 15:23:05 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 255 seconds) |
| 15:23:19 | <tomsmeding> | Enrico63: er, what about clicking on the BuildFailed badge? https://hackage.haskell.org/package/xnobar-0.0.0.0/reports/2 |
| 15:24:10 | <tomsmeding> | hackage is trying to build your package with base-4.18.1.0 (GHC 9.6.3), but your package's cabal file says it's only compatible with base < 4.18 (i.e. GHC < 9.6) |
| 15:24:15 | <tomsmeding> | hence nothing works |
| 15:25:25 | → | Square2 joins (~Square@user/square) |
| 15:25:38 | <tomsmeding> | danza: those badges are in the package description area -- the readme area is below all the metadata :) |
| 15:25:59 | <tomsmeding> | hence I guessed that the badges were not from any readme but from hackage itself, and so it seems |
| 15:26:51 | <danza> | thanks tomsmeding. Hadn't noticed them in other packages |
| 15:27:31 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 15:27:32 | → | rvalue joins (~rvalue@user/rvalue) |
| 15:28:00 | <tomsmeding> | danza: I hadn't consciously noticed them either -- I conditioned myself to ignore such badges in github readmes because they never seemed to carry any info :p |
| 15:28:17 | <tomsmeding> | but you explicitly mentioned badges, so I noticed them :p |
| 15:28:43 | <tomsmeding> | I do wonder why hackage chose to use those badge images instead of putting this in metadata consistent with the rest of the interface |
| 15:29:07 | <tomsmeding> | you get the "it's too obvious so I missed it" effect |
| 15:30:06 | <danza> | i don't think it's a terrible idea anyways, lemme look some other package at random |
| 15:30:35 | <Enrico63> | tomsmeding, does that mean I have to upload a new version already, if I want to fix? |
| 15:30:44 | <Enrico63> | 0.0.0.0 sounded so good :/ |
| 15:31:11 | <danza> | yeah they have always been there. Not beautiful but not awful either |
| 15:31:16 | <tomsmeding> | I think only hackage admins have rights to update package metadata |
| 15:31:22 | <tomsmeding> | without publishing a new version, that is |
| 15:31:49 | <tomsmeding> | metadata revisions are like you see here under "Downloads": https://hackage.haskell.org/package/process |
| 15:32:04 | <tomsmeding> | if you click "revised" you see that there's one metadata revision for this version of 'process' |
| 15:32:17 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 15:32:27 | <tomsmeding> | oh |
| 15:32:33 | <tomsmeding> | apparently package maintainers can also do that? |
| 15:33:18 | <Enrico63> | Uh, I see it |
| 15:34:12 | <tomsmeding> | Enrico63: go to your package page and click on "edit package information" under "Maintainer's Corner" |
| 15:34:14 | <Enrico63> | It looks like I can modify the .cabal file directly from there |
| 15:34:17 | <tomsmeding> | right |
| 15:34:21 | <Enrico63> | yeah, yeah |
| 15:34:25 | <tomsmeding> | (first time I go there too) |
| 15:35:03 | <tomsmeding> | then to hope that hackage will actually do a rebuild upon metadata change |
| 15:35:05 | <Enrico63> | What the heck, I do have to provide an upper bound! |
| 15:35:17 | <tomsmeding> | hah, does it reject removing the upper bound? |
| 15:35:22 | <Enrico63> | Yes... |
| 15:35:31 | <tomsmeding> | '<5' is typical for base for "I dunno" |
| 15:35:33 | <Enrico63> | Basically it will periodically break, won't it? :( |
| 15:35:42 | <tomsmeding> | (stack generates this) |
| 15:36:11 | <tomsmeding> | Enrico63: the idea of package bounds is that you only include versions you've tested with, so that people don't get broken build plans from the solver |
| 15:36:27 | <tomsmeding> | so yes, that indeed means that things will periodically break and you have to continue testing with newer versions and bump bounds |
| 15:36:32 | <tomsmeding> | in practice, however |
| 15:36:46 | <tomsmeding> | this happens for actively maintained packages with maintainers that care about bounds |
| 15:36:56 | <tomsmeding> | e.g. the boot packages like containers, process, text |
| 15:37:39 | <tomsmeding> | if you are really quite sure that changes to 'base' will either break the entire world irrevocably or keep XNoBar working, feel free to put <5 there |
| 15:38:19 | <Enrico63> | I've update to <5 |
| 15:38:27 | <tomsmeding> | there is, by the way, also the option of uploading your own documentation to hackage for a package |
| 15:38:30 | <tomsmeding> | there's docs about doing that somewhere |
| 15:38:53 | <tomsmeding> | this is necessary if hackage can't build your package because e.g. you depend on some C system library that the hackage build machine doesn't have |
| 15:38:54 | <Enrico63> | I wanted to try how good the automated thing would do |
| 15:39:06 | <tomsmeding> | but making the automated thing work is always nicer |
| 15:39:16 | <Enrico63> | I suppose I don't depend on such a thing, do I? :/ |
| 15:39:26 | <tomsmeding> | we'll see :) |
| 15:40:02 | <Enrico63> | The build banner shows still the old bound, I guess I just have to wait, right? |
| 15:40:17 | <tomsmeding> | iirc hackage doesn't allow you to depend on internal libraries from other packages, but depending on internal libraries within your own package is probably fine |
| 15:41:02 | <tomsmeding> | hackage tried to build your thing twice so far |
| 15:41:07 | <tomsmeding> | https://hackage.haskell.org/package/xnobar-0.0.0.0/reports/ |
| 15:41:19 | <tomsmeding> | probably good to give it a few hours, perhaps there's a build queue |
| 15:41:29 | <Enrico63> | Yeah, I saw that before hasking, but I didn't really understand what it meant |
| 15:41:31 | <Enrico63> | hasking, ahahah |
| 15:41:33 | <tomsmeding> | :) |
| 15:41:46 | <tomsmeding> | I don't know why it tried twice either |
| 15:41:52 | <Enrico63> | Do you use xmobar by any chance? |
| 15:41:56 | <tomsmeding> | no sorry |
| 15:41:59 | <tomsmeding> | i3 user |
| 15:42:03 | <Enrico63> | Ok, fair enough :) |
| 15:42:12 | <Enrico63> | I was using that too, then I changed |
| 15:43:00 | <Enrico63> | To xmonad, I mean. I wanted to have more control on things. Actually, what I'm really customizing a lot is just xmobar, not xmonad, really. |
| 15:45:13 | <Enrico63> | Thank you very much for the explanations. I'll wait to see what happens to the build |
| 15:45:21 | <tomsmeding> | hope it works :) |
| 15:51:11 | × | Enrico63 quits (~Enrico63@81.109.143.226) (Ping timeout: 256 seconds) |
| 15:55:43 | → | danz38981 joins (~danza@user/danza) |
| 15:58:03 | × | danza quits (~danza@user/danza) (Read error: Connection reset by peer) |
| 15:58:34 | × | danz38981 quits (~danza@user/danza) (Client Quit) |
| 16:02:15 | × | Inst quits (~Inst@user/Inst) (Remote host closed the connection) |
| 16:02:43 | → | Inst joins (~Inst@user/Inst) |
| 16:04:15 | × | Inst quits (~Inst@user/Inst) (Remote host closed the connection) |
| 16:04:45 | → | Inst joins (~Inst@user/Inst) |
| 16:06:15 | × | Inst quits (~Inst@user/Inst) (Remote host closed the connection) |
| 16:06:42 | → | Inst joins (~Inst@user/Inst) |
| 16:14:27 | → | LawrenceBerkheim joins (~LBerkheim@user/LawrenceBerkheim) |
| 16:14:29 | <LawrenceBerkheim> | Good day gentlemen |
| 16:14:34 | <LawrenceBerkheim> | Time to do some more haskell programming |
| 16:23:38 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 16:29:09 | × | ddellacosta quits (~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 248 seconds) |
| 16:31:17 | → | ddellacosta joins (~ddellacos@ool-44c73d29.dyn.optonline.net) |
| 16:42:43 | × | euleritian quits (~euleritia@dynamic-176-006-138-243.176.6.pool.telefonica.de) (Ping timeout: 244 seconds) |
| 16:45:06 | × | ddellacosta quits (~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 265 seconds) |
| 16:52:05 | → | ddellacosta joins (~ddellacos@ool-44c73d29.dyn.optonline.net) |
| 17:31:09 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 17:35:04 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 17:38:38 | × | CrunchyFlakes quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 17:38:48 | → | euleritian joins (~euleritia@dynamic-176-006-138-243.176.6.pool.telefonica.de) |
| 17:41:01 | → | CrunchyFlakes joins (~CrunchyFl@146.52.130.128) |
| 17:44:52 | → | CiaoSen joins (~Jura@2a05:5800:2ea:1100:e6b9:7aff:fe80:3d03) |
| 17:51:42 | × | LawrenceBerkheim quits (~LBerkheim@user/LawrenceBerkheim) (Remote host closed the connection) |
| 17:52:43 | <Inst> | heh, exceptions are useful for something, no? |
| 17:53:21 | <Inst> | https://paste.tomsmeding.com/nml7kCLg |
| 17:54:56 | <Inst> | ideally the exception checking would be handled by getnumber, but afaik that'd leak, and moreover, it'd attempt to do everything underneath the error handler code once the error was resolved |
| 18:03:32 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 18:05:15 | <hololeap> | you'd basically be replacing 'Maybe Double' with 'Either BadNumberException Double', which doesn't add much value |
| 18:05:54 | <Inst> | this is just an idle exercise, but i was thinking |
| 18:06:15 | <Inst> | let's say i want it to loop back to the start of the function if i received erroneous input |
| 18:06:31 | <Inst> | XNonDecreasingIndentation works |
| 18:07:08 | <Inst> | https://paste.tomsmeding.com/8AwxQHBi |
| 18:07:14 | <Inst> | i know proper style is to avoid exceptions |
| 18:07:27 | <hololeap> | unless you need the exception to carry something more than "nope, didn't work", Maybe works just fine |
| 18:09:10 | <Inst> | i'm just wondering if you can get the second snippet to work without exceptions, i.e, maintain back to start logic without having to use annoying exceptions or memory leaking |
| 18:09:25 | <geekosaur> | there's Cont if you don't mind leaking sanity |
| 18:11:03 | <Inst> | as in, the cont type? |
| 18:11:08 | <geekosaur> | yes |
| 18:11:51 | <geekosaur> | lets you abort a computation with e.g. `Nothing` and the overlying logic can try again |
| 18:12:27 | <Inst> | yeah i saw |
| 18:12:29 | <Inst> | https://hackage.haskell.org/package/mtl-2.3.1/docs/Control-Monad-Cont.html |
| 18:12:54 | <hololeap> | I'm not sure where the memory leak would be. 'first' and 'second' are going to be fully evaluated even with out the ! in front of them |
| 18:15:03 | <hololeap> | since this is the IO monad, and order matters, so it has to evaluate those values in order to choose an execution path (somebody else can probably explain it in more accurate terms) |
| 18:15:30 | <JuanDaugherty> | you can get actual leaks with just hs? |
| 18:15:45 | <Inst> | the forcing isn't because of memory leaks, it's to force the thing to throw the exception asap |
| 18:16:04 | <JuanDaugherty> | (as opposed to blowing up memory) |
| 18:16:12 | <Inst> | otherwise it waits until the comparison before resetting |
| 18:16:29 | <hololeap> | blowing up is just a leak in fast-motion |
| 18:16:45 | <JuanDaugherty> | shit gets lost with leaks |
| 18:17:01 | <Inst> | maybe what I actually want is ExceptT IO? |
| 18:17:19 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 18:17:20 | <Inst> | and giving up and just declaring I love monad transformers? |
| 18:17:33 | <hololeap> | you might even try MaybeT and <|> to control the logic |
| 18:18:01 | → | gmg joins (~user@user/gehmehgeh) |
| 18:19:31 | <monochrom> | Are you looking at the leak explained in my https://www.vex.net/~trebla/haskell/exception-tutorial.xhtml#catch ? The solution is to use try, not catch. |
| 18:20:41 | <monochrom> | BTW you don't need !'s if you use readLn instead, it raises exceptions immediately. |
| 18:21:17 | <monochrom> | In fact readLn has a well-defined order of I/O and raising exception, ! doesn't. |
| 18:24:22 | <Inst> | i guess the issue is more that Haskell doesn't have while, and while you can substitute for it a bit with calling IO actions, it's not really the same as a goto because you end up returning |
| 18:24:26 | <Inst> | that's what i mean by leaking |
| 18:24:48 | <Inst> | you can be explicit in control flow but then you have indentations |
| 18:25:52 | <monochrom> | The try version has no leak. The recursive call becomes a tail call, you get a while loop. |
| 18:26:03 | <monochrom> | The catch version makes your recursive call non-tail. |
| 18:26:38 | <monochrom> | You should stick to {try*, bracket*, finally} unless you really know why you have no option but to use catch directly. |
| 18:27:17 | × | billchenchina- quits (~billchenc@118.38.173.226) (Remote host closed the connection) |
| 18:37:54 | × | CiaoSen quits (~Jura@2a05:5800:2ea:1100:e6b9:7aff:fe80:3d03) (Ping timeout: 245 seconds) |
| 18:40:43 | → | harveypwca joins (~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288) |
| 18:44:06 | <Inst> | yeah i tried to bite the bullet and use nondecreasingindentation, but it's now complaining? |
| 18:44:51 | <Inst> | https://paste.tomsmeding.com/mFHBPeii |
| 18:47:07 | <Inst> | does nondecreasingindentation simply not work on case? |
| 18:50:26 | <geekosaur> | if you read the documentation, it applies specifically to `do` |
| 18:50:37 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 18:50:45 | <geekosaur> | "Specifically, the restriction that “a nested context must be indented further to the right than the enclosing context” is relaxed to allow the nested context to be at the same level as the enclosing context, if the enclosing context is a do expression." |
| 18:51:17 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Read error: Connection reset by peer) |
| 18:51:39 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 18:53:05 | <monochrom> | Ugh I see absolutely decresing indentation in that code. |
| 18:53:40 | <Inst> | yeah, it's two levels |
| 18:53:46 | <geekosaur> | (and afaict this exists solely so that you don't have to indent `else` in a multiline if-then-else in a `do`) |
| 18:56:10 | <Inst> | https://gitlab.haskell.org/ghc/ghc/-/issues/20147 |
| 18:56:13 | <monochrom> | Other people would be happy to show you how to indent this code properly. I won't, this is flawed logic in the first place --- why are you forcing the user to enter two numbers again from scratch just because they made a mistake in the 2nd number? |
| 18:57:12 | <monochrom> | Instead, if you write one "readOneNumberUntilGood", then you simply have one single level of "x <- readOneNumberUntilGood; y <- readOneNumberUntilGood". |
| 18:57:34 | <Inst> | i know, it's an obvious solution |
| 18:57:45 | <Inst> | but the flawed logic created interesting problems that i wanted to solve |
| 18:57:54 | <monochrom> | Inside readOneNumberUntilGood you just have one level of try-readLn or you can use readMaybe<$>getLine or anything. It won't suck. |
| 18:58:43 | <monochrom> | If you really want on-error-start-from-scratch, that's the wrong code to write too. |
| 18:59:21 | <monochrom> | You are supposed to have one single try around (read 1st number; read 2nd number), just like you had one single outer catch previously. |
| 18:59:34 | <Inst> | ah, thanks |
| 19:00:05 | × | jerg quits (~jerg@2001:a61:247a:4700::bb0) (Ping timeout: 248 seconds) |
| 19:05:23 | → | Enrico63 joins (~Enrico63@81.109.143.226) |
| 19:07:31 | <Enrico63> | tomsmeding, I suspect that updating only the package information is not enough to trigger a rebuild. Or 3 hours are not enough :D |
| 19:17:13 | hololeap | . o ( https://bpa.st/ORTA ) |
| 19:19:47 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 19:19:52 | <tomsmeding> | Enrico63: click on that "edit package information" link again. See the bottom of that page. |
| 19:20:03 | <tomsmeding> | (I'm discovering this stuff now too) |
| 19:22:22 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 19:24:04 | <Enrico63> | Done. But I'm not sure if there's a way to see the "in progress" build |
| 19:24:20 | <Enrico63> | The list of reports still shows 2 rows |
| 19:24:30 | <Enrico63> | Maybe it is trying right now |
| 19:24:41 | <tomsmeding> | there is a build queue, but I don't know how long it is |
| 19:24:44 | <Enrico63> | I suppose I'll find out |
| 19:25:02 | <tomsmeding> | the "wait a few hours" resets now, I guess :p |
| 19:25:17 | <monochrom> | :( |
| 19:25:18 | <Enrico63> | ahahah, yeah, fair enough |
| 19:25:38 | <Enrico63> | I'll go eat some dinner |
| 19:25:46 | × | euleritian quits (~euleritia@dynamic-176-006-138-243.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 19:25:57 | <tomsmeding> | bon appetit :) |
| 19:26:24 | → | ss4 joins (~wootehfoo@user/wootehfoot) |
| 19:26:57 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 19:28:34 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 244 seconds) |
| 19:29:55 | × | Enrico63 quits (~Enrico63@81.109.143.226) (Ping timeout: 256 seconds) |
| 19:32:42 | <hololeap> | % :t (<*>) @((->) _) |
| 19:32:42 | <yahb2> | (<*>) @((->) _) :: (w -> (a -> b)) -> (w -> a) -> w -> b |
| 19:33:08 | <hololeap> | has anyone ever seen this used in the wild |
| 19:33:28 | <hololeap> | in a way that made sense, not some obfuscation challenge |
| 19:34:17 | hololeap | is just curious |
| 19:35:03 | × | ss4 quits (~wootehfoo@user/wootehfoot) (Ping timeout: 276 seconds) |
| 19:40:32 | → | TactfulCitrus joins (~al@2a02:8012:87a6:0:fbe0:6116:6e30:e047) |
| 19:41:42 | → | michalz joins (~michalz@185.246.207.218) |
| 19:43:11 | × | TMA quits (tma@twin.jikos.cz) (Ping timeout: 255 seconds) |
| 19:44:27 | → | tram joins (~tram@2a02:587:b43:7300:a89e:683a:2da1:a2ed) |
| 19:44:55 | <ncf> | probably. i wouldn't be surprised if i saw that used in the agda codebase |
| 19:45:09 | <mauke> | ah, good old S combinator |
| 19:47:52 | <mauke> | did you know that the opposite of (<*>) is (=<<)? |
| 19:48:16 | <ncf> | define opposite |
| 19:49:49 | <ncf> | oh, (<*>) = (=<<) . flip and (=<<) = (<*>) . flip. neat |
| 19:50:00 | <mauke> | (<*>) = \f g x -> f x (g x) |
| 19:50:08 | <mauke> | (=<<) = \f g x -> f (g x) x |
| 19:50:36 | <tram> | I'm writing my first parser and I came up with this: maybeTrash p = p *> pure () <|> pure ()! (type is Parser a -> Parser ()) Ok, I'm sure it's not a big deal, and maybe not good, but I feel like a genius, and I wanted to share the feeling before going out with friends that don't know Haskell... |
| 19:50:40 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 19:51:19 | <monochrom> | :) |
| 19:51:24 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 19:51:48 | <mauke> | :t optional |
| 19:51:49 | <lambdabot> | Alternative f => f a -> f (Maybe a) |
| 19:52:08 | <mauke> | :t \p -> optional p $> () |
| 19:52:09 | <lambdabot> | error: |
| 19:52:09 | <lambdabot> | • Variable not in scope: ($>) :: f (Maybe a) -> () -> t |
| 19:52:09 | <lambdabot> | • Perhaps you meant one of these: |
| 19:52:46 | <mauke> | :t \p -> optional p $> () |
| 19:52:47 | <lambdabot> | Alternative f => f a -> f () |
| 19:52:53 | <Inst> | hmmm, so when readLn fails, it throws an exception of type IOException? |
| 19:53:51 | <ncf> | :t void . optional |
| 19:53:52 | <lambdabot> | Alternative f => f a -> f () |
| 19:54:01 | <ncf> | oops too late |
| 19:55:33 | <tram> | mauke: :P nice! obviously it would be a thing. Haskell is too nice... |
| 19:55:48 | <mauke> | Inst: yes |
| 19:55:50 | <c_wraith> | Inst: I think it's documented as IOError, but that's the same type in GHC. |
| 19:56:13 | <Inst> | is there a way to identify the exception type from GHCi? |
| 19:56:20 | <mauke> | IOError is the "standard Haskell" type, which predates Exception IIRC |
| 19:57:05 | → | ystael joins (~ystael@user/ystael) |
| 19:58:09 | <Inst> | also, you can't case over two different types of exceptions, right? |
| 19:58:11 | <c_wraith> | Inst: no. The way GHC's exception mechanism works you can't identify the type of an error with any technique other than checking to see if it's a specific type |
| 19:58:40 | <geekosaur> | IOError is from the Report. Exception/extensible exceptions came later (don't recall when but the publish date of RWH should be a good indicator because EE went in during printing) |
| 19:59:45 | <c_wraith> | Inst: You can have handlers for multiple types of Exceptions, though. that's what `catches` does, for instance |
| 20:00:45 | <c_wraith> | the documentation for catches ( https://hackage.haskell.org/package/base-4.20.0.1/docs/Control-Exception.html#v:catches ) shows the alternative |
| 20:01:56 | <Inst> | yeah, but if you ask monochrom, then i should generally stick to try |
| 20:02:24 | <c_wraith> | You can nest try too |
| 20:03:13 | <c_wraith> | Though it's more common to just look for SomeException and then check for specific cases you care about |
| 20:03:16 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds) |
| 20:03:47 | <monochrom> | Would be nice if there were a "tries" analogous to "catches". |
| 20:04:02 | <tram> | mauke: Ok, how can I "join" the result of optional wich is Maybe in my Parser wich is String -> Either e r |
| 20:04:24 | <Inst> | interesting looking at the source code of catches |
| 20:04:40 | <c_wraith> | monochrom: How do you type that - an open sum type? |
| 20:05:05 | <monochrom> | catches already uses an existiential type "Handler". |
| 20:05:20 | <c_wraith> | yeah, but that wouldn't help with tries |
| 20:05:23 | <tram> | mauke: no that's not what I want... |
| 20:05:36 | <tram> | nvm I'm late. thanks |
| 20:05:37 | → | Enrico63 joins (~Enrico63@81.109.143.226) |
| 20:05:42 | ← | tram parts (~tram@2a02:587:b43:7300:a89e:683a:2da1:a2ed) () |
| 20:06:09 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 20:06:41 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 20:07:48 | → | TMA joins (tma@twin.jikos.cz) |
| 20:09:21 | <c_wraith> | monochrom: tries would need to do some sort of trickery like (AllInstances Exception es) => IO a -> IO (Either (OneOf es) a) |
| 20:11:55 | <c_wraith> | It's no wonder people just get SomeException and look for the cases they care about. Easier than using something like that. |
| 20:13:40 | <mauke> | tries :: IO a -> [Handler e] -> IO (Either e a) |
| 20:14:32 | <c_wraith> | that sort of loses the point of try |
| 20:15:39 | <c_wraith> | try exists to make it clear what the scope of the error checking is - you get the exception or the value. Any errors caused by the handler are outside the scope of try, because there is no handler passed in. |
| 20:15:42 | <mauke> | the alternative is to use more limited exception predicates and return SomeException, I think |
| 20:15:51 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 20:16:03 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:16:13 | × | fr33domlover quits (~fr33domlo@towards.vision) (Quit: The Lounge - https://thelounge.chat) |
| 20:16:30 | <Inst> | hmmm, okay, and toEnum failure triggers the Errorcall datatype, which is nice |
| 20:17:25 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 20:19:44 | → | skyesoss joins (~Thunderbi@c-73-208-45-119.hsd1.il.comcast.net) |
| 20:20:20 | → | fr33domlover joins (~fr33domlo@towards.vision) |
| 20:23:41 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 260 seconds) |
| 20:25:55 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 20:27:12 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 20:27:26 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
| 20:28:17 | × | Enrico63 quits (~Enrico63@81.109.143.226) (Ping timeout: 256 seconds) |
| 20:35:33 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 248 seconds) |
| 20:35:46 | → | tomku joins (~tomku@user/tomku) |
| 20:39:23 | <Inst> | cool |
| 20:39:32 | <Inst> | so that's why evaluate is there for (it's literally in the documentation) |
| 20:39:59 | <Inst> | try $ evaluate =<< io action |
| 20:40:06 | <c_wraith> | yep |
| 20:41:02 | <c_wraith> | though be aware that sometimes you'll want to combine it with `force` from the deepseq package |
| 20:41:24 | <Inst> | yeah i know, i used a ton of evaluate . force =<< in the past |
| 20:41:24 | <c_wraith> | (or sometimes you'll want less of a sledgehammer and need to do a bunch of stuff by hand) |
| 20:41:47 | <Inst> | basically i needed the result strict because otherwise it wouldn't trigger the exceptions I wanted |
| 20:42:09 | <Inst> | so evaluate =<< forces the evaluation of data in the IO action |
| 20:42:43 | <Inst> | letting try do its job instead of getting bypassed |
| 20:47:29 | <monochrom> | In the case of "read <$> ..." you should use readLn or readIO instead. Or readMaybe and you get a Nothing/Just and it's pure, no exception needed. |
| 20:47:54 | <Inst> | i'm using toEnum |
| 20:48:28 | <monochrom> | OK then yeah evaluate is appropriate for toEnum errors or division by zero. |
| 20:49:05 | <Inst> | also for tries, have you considered tryJust stacked? |
| 20:49:44 | <monochrom> | I have. |
| 20:50:04 | <monochrom> | But I am not sure you have the correct unstated assumption in the first place. |
| 20:50:45 | <Inst> | i don't |
| 20:50:51 | <monochrom> | Stacked tryJust has stacked semantics. Unstacked tryJust has unstacked semantics. |
| 20:51:00 | → | koolazer joins (~koo@user/koolazer) |
| 20:52:37 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 20:58:36 | × | TactfulCitrus quits (~al@2a02:8012:87a6:0:fbe0:6116:6e30:e047) (Remote host closed the connection) |
| 21:01:05 | → | cpressey joins (~weechat@176.254.71.203) |
| 21:03:20 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:04:24 | × | cpressey quits (~weechat@176.254.71.203) (Client Quit) |
| 21:05:42 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:12:26 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 21:13:56 | × | Midjak quits (~MarciZ@82.66.147.146) (Quit: This computer has gone to sleep) |
| 21:17:14 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 21:18:13 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit) |
| 21:20:14 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 21:23:20 | × | michalz quits (~michalz@185.246.207.218) (Quit: ZNC 1.9.0 - https://znc.in) |
| 21:24:31 | <c_wraith> | Well. I got curious how awful it really would be, and... https://paste.tomsmeding.com/KdmeZ85v |
| 21:24:59 | <c_wraith> | monochrom: ^ tries actually isn't that bad to use. It's more that it's a surprising amount of code to write |
| 21:25:59 | <monochrom> | Oh... I see, you were aiming at type-level list of exception types. |
| 21:26:49 | <c_wraith> | that's the obvious way to capture the semantics of try |
| 21:30:13 | <c_wraith> | Honestly, it's probably slightly easier to use that than it is to manually write the type matching against SomeException yourself |
| 21:35:14 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:38:00 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 21:44:03 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds) |
| 21:46:04 | <jle`> | kjkjkjkjjkk |
| 21:47:33 | × | CrunchyFlakes quits (~CrunchyFl@146.52.130.128) (Read error: Connection reset by peer) |
| 21:50:28 | → | CrunchyFlakes joins (~CrunchyFl@146.52.130.128) |
| 21:53:53 | × | harveypwca quits (~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288) (Quit: Leaving) |
| 21:59:47 | <Inst> | really? |
| 22:00:07 | <Inst> | https://revisecs.csuk.io/download/004-an-algorithm-a-day-pdf/?wpdmdl=12151&refresh=66a521afd5db91722098095 |
| 22:03:28 | <Inst> | the joke is that it just assignns variables without visible IO of any kind, it could easily be replaced simply by a random prompt with sanitization that terminates |
| 22:03:53 | <Inst> | but speaking of this, let's say, I main :: IO Int |
| 22:03:56 | <Inst> | and pure 4 |
| 22:04:01 | <Inst> | is the 4 ever evaluated? |
| 22:04:05 | <geekosaur> | no |
| 22:05:02 | <geekosaur> | https://play.haskell.org/saved/cfZzXPy8 |
| 22:05:23 | <monochrom> | "input(“Enter your dog’s age: ”)" is visible I/O for me. |
| 22:05:59 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:08:12 | <Inst> | yeah, but the computation is superfluous |
| 22:08:43 | <geekosaur> | (see https://github.com/ghc-proposals/ghc-proposals/pull/631) |
| 22:09:50 | <monochrom> | They are either just missing one output call or assuming that there is more code afterwards that uses the variables. Why are you nitpicking? |
| 22:10:16 | <monochrom> | Could you stop wasting my time nitpicking this or should I just put you on /ignore ? |
| 22:14:19 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:15:21 | × | tomsmeding quits (~tomsmedin@2a01:4f8:c0c:5e5e::2) (Quit: ZNC 1.9.1 - https://znc.in) |
| 22:15:28 | × | jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer) |
| 22:15:55 | → | tomsmeding joins (~tomsmedin@static.21.109.88.23.clients.your-server.de) |
| 22:19:13 | → | ircbrowse_tom joins (~ircbrowse@user/tomsmeding/bot/ircbrowse-tom) |
| 22:19:13 | Server | sets mode +Cnt |
| 22:22:05 | → | jinsun joins (~jinsun@user/jinsun) |
| 22:23:05 | <Inst> | well, apologies for the spam, then |
| 22:41:01 | → | dtman34 joins (~dtman34@c-174-53-203-90.hsd1.mn.comcast.net) |
| 22:43:56 | <Inst> | geekosaur: ideally, on that proposal, main should have been able to return some form of data that could be piped into another program |
| 22:44:35 | × | tjbc quits (~tjbc@user/fliife) (Quit: ZNC 1.8.2 - https://znc.in) |
| 22:44:43 | <Inst> | i was thinking about main >>= foo, but since you start from main, you'll never be able to actually use the result of main |
| 22:45:18 | <geekosaur> | the original intent was that for very simple programs you could `main = … >> main` |
| 22:45:27 | <geekosaur> | but I don't think anyone ever used that |
| 22:47:37 | <Inst> | i suppose you could fork IO to get main to terminate and be able to use the result value |
| 22:50:57 | <c_wraith> | threads created by forkIO are terminated when main ends |
| 22:52:15 | <geekosaur> | (and if the RTS didn't do this, the OS would; the main thread is special, since it's the process) |
| 22:53:43 | <c_wraith> | That's still an RTS detail. in contrast, java programs stay active when main ends if there's a non-daemon thread running. That's a java runtime detail. |
| 22:53:45 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex) |
| 22:54:16 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 23:16:56 | × | acidjnk quits (~acidjnk@p200300d6e72cfb1421aec5076afe4c64.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 23:18:39 | × | sindu quits (~sindu@83-243-191-191.fth.tafjordconnect.net) (Ping timeout: 276 seconds) |
| 23:20:07 | → | pavonia joins (~user@user/siracusa) |
| 23:27:19 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 23:27:26 | → | prolic_ joins (~sasa@181.122.138.24) |
| 23:27:49 | → | fliife joins (~fliife@user/fliife) |
| 23:29:00 | × | prolic_ quits (~sasa@181.122.138.24) (Remote host closed the connection) |
| 23:29:36 | × | bolivood quits (~bolivood@2a0d:6fc2:5d11:200:dac:74e5:33ad:6838) (Ping timeout: 272 seconds) |
| 23:30:41 | × | fliife quits (~fliife@user/fliife) (Quit: ZNC - https://znc.in) |
| 23:32:40 | → | tjbc joins (~tjbc@user/fliife) |
| 23:32:42 | → | bolivood joins (~bolivood@2a0d:6fc2:5d11:200:d189:8884:fd00:6a5d) |
| 23:34:53 | <monochrom> | I bet theoretically the committee thought that one could have even "main >>= \x -> ..." for non-trivial x. In particular in the REPL if you have "main = pure 4" the REPL evals and prints that 4 too. (I used to use that with HUnit.) |
| 23:34:54 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 23:35:10 | <monochrom> | But of course by now we pretty much realize that no one will miss it. :) |
| 23:35:57 | <monochrom> | (I no longer use that feature, too.) |
| 23:40:07 | <Inst> | iirc the module and dependency system in Haskell wasn't that carefully designed, right? It was sort of an afterthought? |
| 23:40:29 | <Inst> | conceptually you could have two libraries with main as their interface |
| 23:40:40 | <Inst> | that could be run standalone, but could also provide useful return values |
| 23:40:55 | × | tjbc quits (~tjbc@user/fliife) (Quit: ZNC - https://znc.in) |
| 23:41:37 | → | tjbc joins (~tjbc@user/fliife) |
| 23:41:54 | <geekosaur> | not even conceptually. nothing prevents it except that ghc makes assumptions about module `Main` (or whatever module is identified by `-main-is`) |
| 23:41:57 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 23:49:42 | <Inst> | I guess it just wasn't that useful to chain together side effects in that way |
All times are in UTC on 2024-07-27.