2024/06/12

2024-06-12 00:09:15 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-06-12 00:11:00 +0200y04nn(~username@2a03:1b20:8:f011::e10d)
2024-06-12 00:13:19 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2024-06-12 00:14:05 +0200joeyadams(~joeyadams@2603:6010:5100:2ed:3133:5b8c:8231:983f)
2024-06-12 00:15:29 +0200falafel(~falafel@2a0c:5a87:3103:ec01::62b8)
2024-06-12 00:22:53 +0200target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2024-06-12 00:41:19 +0200Square(~Square@user/square) (Ping timeout: 260 seconds)
2024-06-12 00:42:42 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 00:45:15 +0200falafel(~falafel@2a0c:5a87:3103:ec01::62b8) (Ping timeout: 264 seconds)
2024-06-12 00:51:37 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 255 seconds)
2024-06-12 00:56:06 +0200alexherbo2(~alexherbo@2a02-8440-3306-1145-352a-53a6-543c-8dd1.rev.sfr.net) (Remote host closed the connection)
2024-06-12 00:57:53 +0200erisco(~erisco@d24-141-66-165.home.cgocable.net) (Quit: ZNC 1.8.2+cygwin2 - https://znc.in)
2024-06-12 00:58:45 +0200erisco(~erisco@d24-141-66-165.home.cgocable.net)
2024-06-12 00:59:30 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128) (Read error: Connection reset by peer)
2024-06-12 01:02:09 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128)
2024-06-12 01:03:46 +0200sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 255 seconds)
2024-06-12 01:07:41 +0200acidjnk(~acidjnk@p200300d6e714dc992098ece2ddb096ca.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2024-06-12 01:08:01 +0200Midjak(~MarciZ@82.66.147.146) (Quit: This computer has gone to sleep)
2024-06-12 01:12:46 +0200mei(~mei@user/mei)
2024-06-12 01:12:49 +0200dmj`(uid72307@id-72307.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2024-06-12 01:14:38 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-06-12 01:24:54 +0200pointlessslippe1(~pointless@212.82.82.3) (Ping timeout: 255 seconds)
2024-06-12 01:26:54 +0200dcoutts(~duncan@185.110.91.104)
2024-06-12 01:31:17 +0200pointlessslippe1(~pointless@212.82.82.3)
2024-06-12 01:37:43 +0200zopsicle(~zopsicle@2001:1c02:2f00:2f00:e4c:72df:ff5c:6bc2) (Quit: WeeChat 4.2.2)
2024-06-12 01:42:36 +0200phma(~phma@2001:5b0:211f:6dd8:9ffc:e310:b6f5:9e6f) (Read error: Connection reset by peer)
2024-06-12 01:44:03 +0200phma(~phma@2001:5b0:2143:81d8:b3f6:8ae3:d398:5c40)
2024-06-12 01:50:23 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2024-06-12 01:50:52 +0200euleritian(~euleritia@dynamic-176-000-199-065.176.0.pool.telefonica.de)
2024-06-12 02:09:21 +0200vadparaszt(~Rodney@176.254.244.83) (Ping timeout: 272 seconds)
2024-06-12 02:10:16 +0200Rodney_(~Rodney@85.255.233.18)
2024-06-12 02:11:09 +0200tertek_(~tertek@101.175.150.247) (Quit: %quit%)
2024-06-12 02:11:27 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2024-06-12 02:11:34 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds)
2024-06-12 02:12:11 +0200vadparaszt(~Rodney@176.254.244.83)
2024-06-12 02:12:51 +0200Lord_of_Life_Lord_of_Life
2024-06-12 02:13:10 +0200Rodney_(~Rodney@85.255.233.18) (Read error: No route to host)
2024-06-12 02:13:26 +0200zlqrvx_(~zlqrvx@101.175.150.247) (Quit: %quit%)
2024-06-12 02:13:47 +0200zlqrvx(~zlqrvx@user/zlqrvx)
2024-06-12 02:16:11 +0200dcoutts(~duncan@185.110.91.104) (Ping timeout: 264 seconds)
2024-06-12 02:22:03 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 255 seconds)
2024-06-12 02:27:17 +0200oo_miguel(~Thunderbi@78-11-181-16.static.ip.netia.com.pl) (Ping timeout: 240 seconds)
2024-06-12 02:32:13 +0200califax(~califax@user/califx) (Remote host closed the connection)
2024-06-12 02:33:44 +0200califax(~califax@user/califx)
2024-06-12 02:40:28 +0200 <cheater> hello
2024-06-12 02:40:37 +0200 <cheater> i heard this is a cult now is that true
2024-06-12 02:41:13 +0200 <EvanR> "now" ?
2024-06-12 02:41:29 +0200 <cheater> yeah there was a haskell hit piece
2024-06-12 02:41:34 +0200 <cheater> recently on the news
2024-06-12 02:41:44 +0200 <cheater> lol
2024-06-12 02:41:49 +0200 <EvanR> what was the AOL keyword so I can find it
2024-06-12 02:44:10 +0200 <cheater> https://www.wired.com/story/inside-the-cult-of-the-haskell-programmer/
2024-06-12 02:45:00 +0200 <EvanR> the cover art fails to compile
2024-06-12 02:45:10 +0200 <haskellbridge> <sm> that's us starting to go mainstream
2024-06-12 02:45:42 +0200 <cheater> wired isn't mainstream
2024-06-12 02:47:51 +0200Guest40(~Guest40@c-98-37-216-109.hsd1.ca.comcast.net)
2024-06-12 02:49:13 +0200 <EvanR> the last comment on the article says he turned a 100,000 line C rule engine for medical devices into 11 lines of haskell xD
2024-06-12 02:49:34 +0200 <EvanR> what an elitist!
2024-06-12 02:49:48 +0200 <Guest40> loop :: a -> (a -> Bool) -> (a -> a) -> [a]
2024-06-12 02:49:49 +0200 <Guest40> loop seed pred next = go seed pred next []
2024-06-12 02:49:49 +0200 <Guest40>     where go curr pred next xs = if pred curr
2024-06-12 02:49:50 +0200 <Guest40>                                         then xs
2024-06-12 02:49:50 +0200 <Guest40>                                     else go (next curr) pred next (curr : xs)
2024-06-12 02:49:51 +0200 <Guest40> is there a function in base/monad-loops/some other library that replicates this functionality but with more polymorphism?
2024-06-12 02:50:47 +0200 <EvanR> no need for monads there
2024-06-12 02:51:23 +0200 <EvanR> but you could rewrite it using a combination of existing functions
2024-06-12 02:51:51 +0200machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds)
2024-06-12 02:52:20 +0200 <EvanR> :t \seed pred next -> takeWhile pred (iterate next seed)
2024-06-12 02:52:21 +0200 <lambdabot> a -> (a -> Bool) -> (a -> a) -> [a]
2024-06-12 02:53:57 +0200 <EvanR> cheater, any idea what the operator :>: is?
2024-06-12 02:54:33 +0200 <cheater> some sorta subtyping shit?
2024-06-12 02:54:42 +0200 <cheater> i think i saw it used with effects
2024-06-12 02:54:44 +0200 <cheater> or with servant
2024-06-12 02:55:34 +0200 <EvanR> Guest40, loop seed pred next = takeWhile pred (iterate next seed)
2024-06-12 02:56:01 +0200 <EvanR> you might be able to rearrange the arguments to make that a nicer combo
2024-06-12 02:56:25 +0200 <cheater> EvanR: where did you see it
2024-06-12 02:56:48 +0200 <EvanR> it's in the article complaining about how haskell syntax is terse and incomprehensible because of operators such as >>=, <$>, and :>:
2024-06-12 02:57:03 +0200 <EvanR> you don't usually get complaints about this last one xD
2024-06-12 02:57:05 +0200 <cheater> why are you reading articles like that
2024-06-12 02:57:07 +0200 <cheater> it's unhealthy
2024-06-12 02:59:04 +0200 <Guest40> EvanR Makes sense, thanks
2024-06-12 03:04:11 +0200pointlessslippe1(~pointless@212.82.82.3) (Ping timeout: 264 seconds)
2024-06-12 03:06:06 +0200 <EvanR> gratuitous awful use of monads for the same thing
2024-06-12 03:06:15 +0200 <EvanR> :t \seed pred next -> execWriter (fix (\loop s -> if pred s then return () else tell s >> loop (next s)) seed)
2024-06-12 03:06:16 +0200 <lambdabot> Monoid t => t -> (t -> Bool) -> (t -> t) -> t
2024-06-12 03:07:13 +0200 <EvanR> ok that's botched
2024-06-12 03:07:46 +0200 <EvanR> :t \seed pred next -> execWriter (fix (\loop s -> if pred s then return () else tell [s] >> loop (next s)) seed)
2024-06-12 03:07:47 +0200 <lambdabot> t -> (t -> Bool) -> (t -> t) -> [t]
2024-06-12 03:16:12 +0200Guest40(~Guest40@c-98-37-216-109.hsd1.ca.comcast.net) (Quit: Client closed)
2024-06-12 03:16:26 +0200 <joeyadams> :t \predicate -> takeWhile predicate . iterate
2024-06-12 03:16:27 +0200 <lambdabot> error:
2024-06-12 03:16:27 +0200 <lambdabot> • Couldn't match type ‘a1 -> [a1]’ with ‘[a]’
2024-06-12 03:16:27 +0200 <lambdabot> Expected type: (a1 -> a1) -> [a]
2024-06-12 03:17:51 +0200 <joeyadams> :t \pred next seed -> takeWhile pred (iterate next seed)
2024-06-12 03:17:52 +0200 <lambdabot> (a -> Bool) -> (a -> a) -> a -> [a]
2024-06-12 03:18:04 +0200 <joeyadams> I think that's what Guest40 was looking for, but I was 10 seconds too late.
2024-06-12 03:18:18 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
2024-06-12 03:21:19 +0200 <EvanR> yeah I said that one
2024-06-12 03:21:34 +0200 <EvanR> to compose all that you will need .:
2024-06-12 03:23:25 +0200 <EvanR> @define (.:) = (.) . (.)
2024-06-12 03:23:26 +0200 <lambdabot> Defined.
2024-06-12 03:23:39 +0200 <EvanR> :t \predicate -> takeWhile predicate .: iterate
2024-06-12 03:23:40 +0200 <lambdabot> (a -> Bool) -> (a -> a) -> a -> [a]
2024-06-12 03:23:53 +0200 <EvanR> but I don't know if that's very clear
2024-06-12 03:29:19 +0200 <geekosaur> they should have used that operator instead of :>:
2024-06-12 03:44:13 +0200divya(~user@202.170.201.94)
2024-06-12 03:44:48 +0200divya(~user@202.170.201.94) (Client Quit)
2024-06-12 03:45:14 +0200divya(~user@202.170.201.94)
2024-06-12 03:51:02 +0200 <monochrom> Also, a -> Maybe a is better than a pair of a->Bool, a->a.
2024-06-12 03:53:50 +0200 <EvanR> iterate doesn't work with a -> Maybe a :(
2024-06-12 03:54:16 +0200 <EvanR> :t unfoldr
2024-06-12 03:54:17 +0200 <lambdabot> (b -> Maybe (a, b)) -> b -> [a]
2024-06-12 03:54:22 +0200 <monochrom> iterate doesn't plan to end. But you can use unfoldr.
2024-06-12 03:54:50 +0200 <monochrom> And there is a reason why it is not a triple of b->Bool, b->a, b->b.
2024-06-12 03:55:17 +0200 <EvanR> after all this shenanigans are worked out, I can finally create my a -> Maybe a to feed into it by combining my a -> a and a -> Bool that I started with xD
2024-06-12 03:55:58 +0200 <monochrom> Despite how much misguided beginners wish for it in, e.g., https://discourse.haskell.org/t/equivalence-of-unfoldr-and-unfold/9657
2024-06-12 03:57:12 +0200 <EvanR> :t \f seed -> unfoldr (let g x = (x,x) in g . f) seed
2024-06-12 03:57:13 +0200 <lambdabot> error:
2024-06-12 03:57:13 +0200 <lambdabot> • Couldn't match type ‘(b, b)’ with ‘Maybe (a1, a)’
2024-06-12 03:57:13 +0200 <lambdabot> Expected type: a -> Maybe (a1, a)
2024-06-12 03:57:35 +0200 <EvanR> :t \f seed -> unfoldr (let g x = (x,x) in fmap g f) seed
2024-06-12 03:57:36 +0200 <lambdabot> error:
2024-06-12 03:57:36 +0200 <lambdabot> • Couldn't match type ‘(b1, b1)’ with ‘Maybe (a, b)’
2024-06-12 03:57:36 +0200 <lambdabot> Expected type: b -> Maybe (a, b)
2024-06-12 03:57:40 +0200 <EvanR> frak
2024-06-12 03:59:07 +0200 <monochrom> I think it is fmap g . f
2024-06-12 03:59:39 +0200 <EvanR> :t \f seed -> unfoldr (let g x = (x,x) in fmap (fmap g) f) seed
2024-06-12 03:59:40 +0200 <lambdabot> (a -> Maybe a) -> a -> [a]
2024-06-12 04:00:07 +0200 <monochrom> :)
2024-06-12 04:01:32 +0200 <EvanR> :t \next pred x -> if pred x then Nothing else Just (next x)
2024-06-12 04:01:33 +0200 <lambdabot> (t -> a) -> (t -> Bool) -> t -> Maybe a
2024-06-12 04:02:28 +0200 <EvanR> apparently the types can change
2024-06-12 04:08:27 +0200 <probie> :t \f seed -> catMaybes $ takeWhile isJust $ iterate (>>= f) (Just seed)
2024-06-12 04:08:29 +0200 <lambdabot> (a -> Maybe a) -> a -> [a]
2024-06-12 04:16:07 +0200 <probie> :t unfoldr . (fmap (join (,)) .)
2024-06-12 04:16:08 +0200 <lambdabot> (a -> Maybe a) -> a -> [a]
2024-06-12 04:39:23 +0200philopsos1(~caecilius@user/philopsos)
2024-06-12 04:56:21 +0200td_(~td@i53870920.versanet.de) (Ping timeout: 268 seconds)
2024-06-12 04:58:04 +0200td_(~td@i5387092E.versanet.de)
2024-06-12 05:07:13 +0200rdcdr(~rdcdr@user/rdcdr) (Read error: Connection reset by peer)
2024-06-12 05:09:15 +0200y04nn(~username@2a03:1b20:8:f011::e10d) (Ping timeout: 264 seconds)
2024-06-12 05:11:54 +0200Lycurgus(~georg@user/Lycurgus)
2024-06-12 05:45:57 +0200aforemny(~aforemny@2001:9e8:6cf6:d100:13b7:91e0:122d:7bf6)
2024-06-12 05:47:13 +0200aforemny_(~aforemny@i59F516DE.versanet.de) (Ping timeout: 256 seconds)
2024-06-12 06:00:21 +0200Garbanzo(~Garbanzo@2602:304:6eac:dc10:fbf2:b01f:1d47:7542)
2024-06-12 06:03:27 +0200 <probie> I don't suppose anyone knows what language I mean when I say "functional, but looks procedural with an effect system with some sort of reference counting". I can't seem to recall the name or even enough for a search engine to find it
2024-06-12 06:05:06 +0200 <glguy> Nim?
2024-06-12 06:07:17 +0200 <probie> Nah, it was newer than that (and not production ready)
2024-06-12 06:09:27 +0200 <probie> Found it; https://koka-lang.github.io (sorry for the slightly off-topic spam)
2024-06-12 06:15:41 +0200 <Lycurgus> it's on topic for telepathy, my last interlocution here
2024-06-12 06:17:20 +0200 <Lycurgus> also this is a pretty permissive channel, and that query was about FP
2024-06-12 06:24:45 +0200Guest27(~Guest37@123.24.49.96)
2024-06-12 06:24:55 +0200michalz(~michalz@185.246.207.201)
2024-06-12 06:26:15 +0200Guest27(~Guest37@123.24.49.96) (Client Quit)
2024-06-12 06:30:24 +0200euleritian(~euleritia@dynamic-176-000-199-065.176.0.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-12 06:30:41 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-12 06:31:15 +0200vadparaszt(~Rodney@176.254.244.83) (Quit: Connection error?!)
2024-06-12 06:31:23 +0200vizimajac(vizimajac@shell.xshellz.com)
2024-06-12 06:45:56 +0200 <mauke> "with some sort of reference counting" made me think of perceus
2024-06-12 06:46:42 +0200 <mauke> ... which is indeed what's implemented in koka: https://www.microsoft.com/en-us/research/publication/perceus-garbage-free-reference-counting-with-…
2024-06-12 06:57:18 +0200sp1ff(~user@c-24-21-45-157.hsd1.wa.comcast.net) (Read error: Connection reset by peer)
2024-06-12 06:58:26 +0200sp1ff(~user@c-24-21-45-157.hsd1.wa.comcast.net)
2024-06-12 07:07:24 +0200philopsos1(~caecilius@user/philopsos) (Ping timeout: 268 seconds)
2024-06-12 07:11:17 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2024-06-12 07:11:50 +0200sympt(~sympt@user/sympt) (Ping timeout: 252 seconds)
2024-06-12 07:15:15 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2024-06-12 07:16:28 +0200euleritian(~euleritia@dynamic-176-004-148-108.176.4.pool.telefonica.de)
2024-06-12 07:17:47 +0200euleritian(~euleritia@dynamic-176-004-148-108.176.4.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-12 07:19:05 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-12 07:25:27 +0200superbil(~superbil@1-34-176-171.hinet-ip.hinet.net) (Ping timeout: 260 seconds)
2024-06-12 07:30:01 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-06-12 07:37:40 +0200superbil(~superbil@1-34-176-171.hinet-ip.hinet.net)
2024-06-12 07:56:50 +0200Garbanzo(~Garbanzo@2602:304:6eac:dc10:fbf2:b01f:1d47:7542) (Remote host closed the connection)
2024-06-12 08:04:50 +0200y04nn(~username@2a03:1b20:8:f011::e10d)
2024-06-12 08:05:44 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2024-06-12 08:06:29 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 08:07:07 +0200euleritian(~euleritia@dynamic-176-004-148-108.176.4.pool.telefonica.de)
2024-06-12 08:11:10 +0200Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2024-06-12 08:15:15 +0200joeyadams(~joeyadams@2603:6010:5100:2ed:3133:5b8c:8231:983f) (Quit: Leaving)
2024-06-12 08:15:37 +0200rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2024-06-12 08:16:08 +0200rvalue(~rvalue@user/rvalue)
2024-06-12 08:27:18 +0200Flow_(~none@gentoo/developer/flow)
2024-06-12 08:27:31 +0200qhong(~qhong@rescomp-21-400677.stanford.edu)
2024-06-12 08:27:50 +0200Flow(~none@gentoo/developer/flow) (Read error: Connection reset by peer)
2024-06-12 08:34:46 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2024-06-12 08:37:48 +0200dcoutts(~duncan@212.23.229.86)
2024-06-12 08:39:25 +0200rdcdr(~rdcdr@user/rdcdr)
2024-06-12 08:41:51 +0200y04nn(~username@2a03:1b20:8:f011::e10d) (Ping timeout: 255 seconds)
2024-06-12 08:52:18 +0200oo_miguel(~Thunderbi@78-11-181-16.static.ip.netia.com.pl)
2024-06-12 09:01:49 +0200 <cheater> i'm surprised we don't have refcounting in ghc
2024-06-12 09:02:09 +0200 <cheater> you'd think that would be the one thing a functional language would be good at
2024-06-12 09:03:38 +0200dcoutts(~duncan@212.23.229.86) (Ping timeout: 268 seconds)
2024-06-12 09:04:21 +0200dcoutts(~duncan@212.23.229.86)
2024-06-12 09:04:45 +0200 <probie> refcounting is a poor choice for a lazy language where cycles lurk everywhere
2024-06-12 09:07:10 +0200gmg(~user@user/gehmehgeh)
2024-06-12 09:07:44 +0200pointlessslippe1(~pointless@212.82.82.3)
2024-06-12 09:08:00 +0200acidjnk(~acidjnk@p200300d6e714dc68856d8905203ea039.dip0.t-ipconnect.de)
2024-06-12 09:09:40 +0200sord937(~sord937@gateway/tor-sasl/sord937)
2024-06-12 09:13:56 +0200dcoutts(~duncan@212.23.229.86) (Ping timeout: 252 seconds)
2024-06-12 09:15:21 +0200jespada_(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 268 seconds)
2024-06-12 09:18:00 +0200fun-safe-math(~fun-safe-@24.21.106.247)
2024-06-12 09:18:01 +0200zetef(~quassel@136.255.76.202)
2024-06-12 09:22:47 +0200jespada(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
2024-06-12 09:23:12 +0200chele(~chele@user/chele)
2024-06-12 09:27:17 +0200zetef(~quassel@136.255.76.202) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2024-06-12 09:31:18 +0200euleritian(~euleritia@dynamic-176-004-148-108.176.4.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-12 09:31:47 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-12 09:34:27 +0200jle`(~jle`@2603:8001:3b02:84d4:f1a2:838a:8749:d076) (Ping timeout: 256 seconds)
2024-06-12 09:34:39 +0200Luj(~Luj@2a01:e0a:de4:a0e1:be24:11ff:febc:b5b5) (Quit: Ping timeout (120 seconds))
2024-06-12 09:34:58 +0200Luj(~Luj@2a01:e0a:de4:a0e1:be24:11ff:febc:b5b5)
2024-06-12 09:35:33 +0200jle`(~jle`@2603:8001:3b02:84d4:8e83:44df:afb0:80e1)
2024-06-12 09:45:07 +0200rosco(~rosco@175.136.155.137)
2024-06-12 09:46:18 +0200sadome(~sadome@user/sadome)
2024-06-12 09:46:19 +0200sadome(~sadome@user/sadome) (Excess Flood)
2024-06-12 09:49:00 +0200target_i(~target_i@user/target-i/x-6023099)
2024-06-12 09:53:55 +0200danza(~francesco@rm-19-59-6.service.infuturo.it)
2024-06-12 09:57:28 +0200machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net)
2024-06-12 09:57:56 +0200rachelambda(~rachelamb@cust-95-80-25-71.csbnet.se) (Ping timeout: 252 seconds)
2024-06-12 09:59:59 +0200dcoutts(~duncan@212.23.229.86)
2024-06-12 10:00:35 +0200fun-safe-math(~fun-safe-@24.21.106.247) (Ping timeout: 264 seconds)
2024-06-12 10:03:55 +0200 <cheater> eh
2024-06-12 10:04:03 +0200 <cheater> there's solutions to that...
2024-06-12 10:05:03 +0200dcoutts(~duncan@212.23.229.86) (Ping timeout: 264 seconds)
2024-06-12 10:06:51 +0200danza(~francesco@rm-19-59-6.service.infuturo.it) (Ping timeout: 264 seconds)
2024-06-12 10:15:02 +0200pyooque(~puke@user/puke)
2024-06-12 10:15:02 +0200pukeGuest6730
2024-06-12 10:15:02 +0200Guest6730(~puke@user/puke) (Killed (mercury.libera.chat (Nickname regained by services)))
2024-06-12 10:15:02 +0200pyooquepuke
2024-06-12 10:16:25 +0200puke(~puke@user/puke) (Max SendQ exceeded)
2024-06-12 10:16:35 +0200rachelambda(~rachelamb@cust-95-80-25-71.csbnet.se)
2024-06-12 10:18:09 +0200puke(~puke@user/puke)
2024-06-12 10:19:22 +0200puke(~puke@user/puke) (Max SendQ exceeded)
2024-06-12 10:19:51 +0200puke(~puke@user/puke)
2024-06-12 10:20:16 +0200puke(~puke@user/puke) (Remote host closed the connection)
2024-06-12 10:28:51 +0200 <probie> the solution is garbage collection
2024-06-12 10:32:13 +0200rachelambda(~rachelamb@cust-95-80-25-71.csbnet.se) (Ping timeout: 272 seconds)
2024-06-12 10:33:00 +0200danse-nr3(~danse-nr3@rm-19-59-6.service.infuturo.it)
2024-06-12 10:33:34 +0200danse-nr3(~danse-nr3@rm-19-59-6.service.infuturo.it) (Remote host closed the connection)
2024-06-12 10:33:58 +0200danse-nr3(~danse-nr3@rm-19-59-6.service.infuturo.it)
2024-06-12 10:52:20 +0200sawilagar(~sawilagar@user/sawilagar)
2024-06-12 10:56:12 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2024-06-12 10:56:25 +0200Franciman(~Franciman@mx1.fracta.dev) (Ping timeout: 255 seconds)
2024-06-12 10:59:50 +0200cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-12 11:00:51 +0200lxsameer(~lxsameer@Serene/lxsameer)
2024-06-12 11:09:15 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 11:14:29 +0200zmt01(~zmt00@user/zmt00)
2024-06-12 11:18:04 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 268 seconds)
2024-06-12 11:18:35 +0200ft(~ft@p508db8fc.dip0.t-ipconnect.de) (Quit: leaving)
2024-06-12 11:21:31 +0200 <lortabac> is there a cabal option to force recompilation of a single file? I have some Template Haskell code which needs to be executed on each build
2024-06-12 11:22:37 +0200 <sclv> nope. you can add a dependent file in th tho which forces recomp if that dependent file changed
2024-06-12 11:23:06 +0200 <sclv> or have a build.sh that touches the file then runs cabal build
2024-06-12 11:25:41 +0200 <tomsmeding> lortabac: https://hackage.haskell.org/package/template-haskell-2.18.0.0/docs/Language-Haskell-TH-Syntax.html…
2024-06-12 11:27:15 +0200 <lortabac> tomsmeding: this doesn't look like what I was asking for
2024-06-12 11:27:38 +0200 <tomsmeding> it's not, but if the reason you want to re-execute is that some non-haskell file changed, then that might have been the solution to the X problem :)
2024-06-12 11:28:27 +0200 <lortabac> the TH code returns the current Git hash
2024-06-12 11:29:21 +0200 <lortabac> maybe I can add some Git internal file as a dependent file?
2024-06-12 11:29:22 +0200 <tomsmeding> hm, yeah there's not a single file that contains that
2024-06-12 11:29:30 +0200 <tomsmeding> .git/HEAD contains a ref, but not necessarily the commit hash
2024-06-12 11:29:42 +0200cfricke(~cfricke@user/cfricke)
2024-06-12 11:29:47 +0200 <tomsmeding> you could parse that manually and add a dependent file on .git/refs/heads/THE_HEAD_NAME
2024-06-12 11:31:44 +0200 <lortabac> maybe .git/refs/heads/production
2024-06-12 11:31:53 +0200 <tomsmeding> if you know that it will always be that branch :p
2024-06-12 11:32:01 +0200 <lortabac> yes it's always that branch
2024-06-12 11:32:06 +0200 <tomsmeding> then yes
2024-06-12 11:32:32 +0200 <tomsmeding> it will depend on the wrong file if switch branches then, though
2024-06-12 11:32:39 +0200 <tomsmeding> *if you
2024-06-12 11:32:55 +0200 <lortabac> not an ideal solution because if we change our deployment strategy we need to remember to update the dependent file as well
2024-06-12 11:33:21 +0200 <lortabac> probably a full 'cabal clean' is a better option
2024-06-12 11:33:23 +0200 <tomsmeding> yeah, more robust would be parsing .git/HEAD and referring to that file
2024-06-12 11:33:43 +0200 <lortabac> or as you say, parsing .git/HEAD
2024-06-12 11:33:44 +0200 <tomsmeding> where you should note that if you checkout a commit ("detached HEAD"), .git/HEAD just contains a commit hash
2024-06-12 11:34:54 +0200 <sclv> people often use a cusrom
2024-06-12 11:35:06 +0200 <sclv> a custom setup with hooks for this
2024-06-12 11:35:21 +0200 <tomsmeding> wouldn't the Setup.hs still need to figure out exactly what files to depend on
2024-06-12 11:35:27 +0200 <sclv> but i think its cleaner to avoid that using just th
2024-06-12 11:35:28 +0200 <tomsmeding> or does cabal run Setup every time the user compiles?
2024-06-12 11:36:26 +0200 <sclv> it runs some setup phases. but custom setups are fragile and don’t always work with newer features like multirepl
2024-06-12 11:37:41 +0200econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2024-06-12 11:42:01 +0200__monty__(~toonn@user/toonn)
2024-06-12 11:50:30 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 4.2.2)
2024-06-12 11:50:50 +0200rachelambda(~rachelamb@cust-95-80-25-71.csbnet.se)
2024-06-12 12:05:37 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
2024-06-12 12:06:53 +0200alexherbo2(~alexherbo@45.39.22.93.rev.sfr.net)
2024-06-12 12:12:01 +0200alexherbo2(~alexherbo@45.39.22.93.rev.sfr.net) (Remote host closed the connection)
2024-06-12 12:17:08 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 12:28:07 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 12:31:35 +0200alexherbo2(~alexherbo@45.39.22.93.rev.sfr.net)
2024-06-12 12:36:54 +0200dcoutts(~duncan@212.23.229.86)
2024-06-12 12:45:06 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128) (Read error: Connection reset by peer)
2024-06-12 12:45:36 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-06-12 12:46:06 +0200tt12310978(~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee)
2024-06-12 12:47:01 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128)
2024-06-12 12:47:59 +0200dcoutts(~duncan@212.23.229.86) (Ping timeout: 264 seconds)
2024-06-12 12:48:54 +0200tt1231097(~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Ping timeout: 255 seconds)
2024-06-12 12:48:54 +0200tt12310978tt1231097
2024-06-12 12:53:32 +0200Guest|68(~Guest|68@222-153-150-75-adsl.sparkbb.co.nz)
2024-06-12 12:56:26 +0200causal(~eric@50.35.88.207)
2024-06-12 13:11:00 +0200CiaoSen(~Jura@2a05:5800:2b1:db00:e6b9:7aff:fe80:3d03)
2024-06-12 13:12:13 +0200dcoutts(~duncan@212.23.229.86)
2024-06-12 13:19:43 +0200danse-nr3(~danse-nr3@rm-19-59-6.service.infuturo.it) (Ping timeout: 246 seconds)
2024-06-12 13:20:31 +0200divya(~user@202.170.201.94) (Read error: Connection reset by peer)
2024-06-12 13:28:30 +0200acidsys(~crameleon@openSUSE/member/crameleon) (Ping timeout: 268 seconds)
2024-06-12 13:29:36 +0200m1dnight(~christoph@82.146.125.185) (Quit: WeeChat 4.2.2)
2024-06-12 13:31:04 +0200m1dnight(~christoph@82.146.125.185)
2024-06-12 13:31:43 +0200m1dnight(~christoph@82.146.125.185) (Client Quit)
2024-06-12 13:32:09 +0200m1dnight(~christoph@82.146.125.185)
2024-06-12 13:42:45 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-12 13:43:47 +0200Guest|68(~Guest|68@222-153-150-75-adsl.sparkbb.co.nz) (Ping timeout: 256 seconds)
2024-06-12 13:44:41 +0200cfricke(~cfricke@user/cfricke)
2024-06-12 13:45:56 +0200acidsys(~crameleon@openSUSE/member/crameleon)
2024-06-12 13:49:07 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 246 seconds)
2024-06-12 13:54:11 +0200Guest91(~Guest91@ool-2f109624.dyn.optonline.net) (Quit: Client closed)
2024-06-12 13:54:35 +0200noctux(~noctux@user/noctux) (Ping timeout: 264 seconds)
2024-06-12 13:54:56 +0200noctux(~noctux@user/noctux)
2024-06-12 13:56:39 +0200cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 264 seconds)
2024-06-12 13:59:36 +0200cfricke(~cfricke@user/cfricke)
2024-06-12 14:06:13 +0200dev2(~dev@2405:201:c062:801d:74fb:a90f:fd55:89e8) (Quit: WeeChat 4.3.1)
2024-06-12 14:12:32 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2024-06-12 14:17:31 +0200danse-nr3(~danse-nr3@151.44.179.149)
2024-06-12 14:18:11 +0200danse-nr3(~danse-nr3@151.44.179.149) (Remote host closed the connection)
2024-06-12 14:18:52 +0200danse-nr3(~danse-nr3@151.44.179.149)
2024-06-12 14:34:37 +0200alexherbo2(~alexherbo@45.39.22.93.rev.sfr.net) (Remote host closed the connection)
2024-06-12 14:40:31 +0200califax(~califax@user/califx) (Remote host closed the connection)
2024-06-12 14:41:31 +0200andrei_n(~andrei_n@user/andrei-n:62396)
2024-06-12 14:42:14 +0200califax(~califax@user/califx)
2024-06-12 14:46:59 +0200danse-nr3(~danse-nr3@151.44.179.149) (Remote host closed the connection)
2024-06-12 14:47:11 +0200alexherbo2(~alexherbo@2a02-8440-3313-51a8-f0e2-1840-0dc8-1db7.rev.sfr.net)
2024-06-12 14:50:28 +0200danse-nr3(~danse-nr3@151.44.179.149)
2024-06-12 14:54:41 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 14:56:19 +0200ames(~amelia@offtopia/offtopian/amelia) (Ping timeout: 272 seconds)
2024-06-12 15:05:55 +0200bontaq(~user@ool-45779c03.dyn.optonline.net)
2024-06-12 15:09:28 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2024-06-12 15:10:19 +0200 <danse-nr3> what is the name for the alternative operator <|>?
2024-06-12 15:11:33 +0200 <ncf> <|>
2024-06-12 15:11:35 +0200 <cheater> alternative
2024-06-12 15:11:51 +0200 <cheater> or, alternatively, "bracket pipe"
2024-06-12 15:12:12 +0200 <danse-nr3> cheers cheater
2024-06-12 15:12:26 +0200 <cheater> haha, ncf gets nothing
2024-06-12 15:12:37 +0200 <cheater> :P
2024-06-12 15:12:58 +0200 <danse-nr3> err sorry but i don't know what to do with that answer if not ignoring it :P
2024-06-12 15:13:00 +0200Guest8(~Guest91@ool-2f109624.dyn.optonline.net)
2024-06-12 15:13:44 +0200 <ncf> https://en.wikipedia.org/wiki/Garbage_in,_garbage_out
2024-06-12 15:14:07 +0200 <cheater> now now, ncf, no need to be self-deprecating :P
2024-06-12 15:17:46 +0200califax(~califax@user/califx) (Remote host closed the connection)
2024-06-12 15:17:49 +0200 <danse-nr3> @hoogle (Foldable t, Alternative a) => t a -> a
2024-06-12 15:17:51 +0200 <lambdabot> Test.Extrapolate.TypeBinding argTy1of1 :: con a -> a
2024-06-12 15:17:51 +0200 <lambdabot> Prelude maximum :: forall a . (Foldable t, Ord a) => t a -> a
2024-06-12 15:17:51 +0200 <lambdabot> Prelude minimum :: forall a . (Foldable t, Ord a) => t a -> a
2024-06-12 15:18:46 +0200 <danse-nr3> foldr (<|>) i guess
2024-06-12 15:19:07 +0200 <ncf> :t asum
2024-06-12 15:19:09 +0200 <lambdabot> (Foldable t, Alternative f) => t (f a) -> f a
2024-06-12 15:19:20 +0200 <danse-nr3> facepalm
2024-06-12 15:19:22 +0200 <ncf> wait what
2024-06-12 15:19:24 +0200 <ncf> Alternative a?
2024-06-12 15:19:41 +0200 <ncf> i guess hoogle doesn't kind-check lol
2024-06-12 15:20:26 +0200 <danse-nr3> thanks ncf
2024-06-12 15:20:58 +0200califax(~califax@user/califx)
2024-06-12 15:28:10 +0200 <raehik> I call (<|>) "or" when I need a non-infix name am I weird
2024-06-12 15:28:35 +0200 <raehik> "choice" came across the mind but I just like "or" better
2024-06-12 15:29:31 +0200Midjak(~MarciZ@82.66.147.146)
2024-06-12 15:30:34 +0200 <__monty__> @hoogle choice
2024-06-12 15:30:35 +0200 <lambdabot> Text.ParserCombinators.ReadP choice :: [ReadP a] -> ReadP a
2024-06-12 15:30:35 +0200 <lambdabot> Text.ParserCombinators.ReadPrec choice :: [ReadPrec a] -> ReadPrec a
2024-06-12 15:30:35 +0200 <lambdabot> Text.Parsec choice :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a
2024-06-12 15:31:04 +0200 <__monty__> Already commonly means `foldr1 (<|>)`, no?
2024-06-12 15:33:34 +0200 <danse-nr3> not sure signatures do not mention alternative, seems more a different abstraction
2024-06-12 15:34:26 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
2024-06-12 15:34:36 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
2024-06-12 15:34:54 +0200 <danse-nr3> "or" makes sense but i would rather not overload existing concepts
2024-06-12 15:35:45 +0200 <danse-nr3> (also because "alt" isn't much longer)
2024-06-12 15:37:45 +0200 <ncf> so your question is how to read it out loud?
2024-06-12 15:37:50 +0200euleritian(~euleritia@dynamic-176-004-153-084.176.4.pool.telefonica.de)
2024-06-12 15:43:17 +0200Square(~Square4@user/square)
2024-06-12 15:44:08 +0200 <danse-nr3> well sure
2024-06-12 15:49:12 +0200Guest8(~Guest91@ool-2f109624.dyn.optonline.net) (Quit: Client closed)
2024-06-12 15:49:34 +0200dev2(~dev@2405:201:c062:801d:4d6f:d1e8:5a8c:26e3)
2024-06-12 15:50:09 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 256 seconds)
2024-06-12 16:00:39 +0200 <EvanR> is there an esoteric programming language which doesn't work unless you read the code aloud
2024-06-12 16:03:02 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 16:03:52 +0200 <danse-nr3> not sure but humans have generally benefited from being able to name things
2024-06-12 16:04:57 +0200alexherbo2(~alexherbo@2a02-8440-3313-51a8-f0e2-1840-0dc8-1db7.rev.sfr.net) (Remote host closed the connection)
2024-06-12 16:05:17 +0200 <EvanR> in programming there turns out to be a lot of opportunities to name things, too many. See single assignment form
2024-06-12 16:05:31 +0200 <EvanR> we skip ahead of the animals by eliding most of it and forming expressions
2024-06-12 16:05:45 +0200 <EvanR> similarly we can read faster by not reading aloud (now)
2024-06-12 16:06:47 +0200 <EvanR> of course it comes across as in haskell we're too good to name things!
2024-06-12 16:07:00 +0200andrei-n(~andrei_n@2a02:a03f:c091:a800:6208:726b:3655:52d8)
2024-06-12 16:07:06 +0200andrei-n(~andrei_n@2a02:a03f:c091:a800:6208:726b:3655:52d8) (Remote host closed the connection)
2024-06-12 16:07:35 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 16:07:50 +0200 <EvanR> also not having real names for most of the operators in haskell explains why it avoids success so well. Giant conferences fueled by keynotes and guest speakers can't pronounce anything xD
2024-06-12 16:11:03 +0200 <danse-nr3> yeah well makes sense not to name ephemeral entities, while more consolidated concepts have names since before getting into a language like haskell for instance. But names sometimes also remain segregated into small circles and have no chance to propagate, that's why i asked
2024-06-12 16:12:06 +0200 <EvanR> I do appreciate how most of the "operators" in lens are hitherto unused dictionary words
2024-06-12 16:12:32 +0200 <EvanR> words do be having power
2024-06-12 16:15:07 +0200 <haskellbridge> <sm> array-oriented languages, apl and family, famous for their obscure glyphs, do also have a word name for each one. That's useful for docs and also for data entry
2024-06-12 16:15:19 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2024-06-12 16:15:26 +0200 <haskellbridge> <sm> +standardised
2024-06-12 16:16:25 +0200 <haskellbridge> <sm> in haskell we don't have a standard name for everything
2024-06-12 16:17:04 +0200RedFlamingos(~RedFlamin@user/RedFlamingos)
2024-06-12 16:17:50 +0200rosco(~rosco@175.136.155.137) (Quit: Lost terminal)
2024-06-12 16:19:04 +0200 <EvanR> sometimes an operator has not a name per se but a long winded description. Like if you see xyzw in group theory, if asked, someone will say the operator (juxtaposition) is "group theoretic multiplication" or something. In category theory "composition of morphisms". Not something you would pronounce in line
2024-06-12 16:19:42 +0200 <EvanR> and yeah how do you document that
2024-06-12 16:21:11 +0200 <haskellbridge> <sm> is xyzw a real operator name ?
2024-06-12 16:21:27 +0200 <haskellbridge> <sm> I see it mentioned as "quaternions" in graphics programming
2024-06-12 16:21:39 +0200 <EvanR> that's four variables being operatored
2024-06-12 16:21:44 +0200 <EvanR> abcd
2024-06-12 16:21:45 +0200 <haskellbridge> <sm> ah
2024-06-12 16:21:55 +0200 <EvanR> fgh
2024-06-12 16:21:57 +0200 <haskellbridge> <sm> gotcha
2024-06-12 16:22:49 +0200 <EvanR> a <|> b <|> c <|> d ... Alternative's sequential failover... or something
2024-06-12 16:23:34 +0200Sgeo(~Sgeo@user/sgeo)
2024-06-12 16:28:52 +0200ystael(~ystael@user/ystael) (Read error: Connection reset by peer)
2024-06-12 16:29:19 +0200ystael(~ystael@user/ystael)
2024-06-12 16:31:29 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-06-12 16:39:40 +0200danse-nr3(~danse-nr3@151.44.179.149) (Ping timeout: 268 seconds)
2024-06-12 16:47:58 +0200scav(sid309693@user/scav) ()
2024-06-12 17:02:14 +0200greenflower(~greenflow@103.191.25.63)
2024-06-12 17:11:39 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128) (Ping timeout: 264 seconds)
2024-06-12 17:14:05 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds)
2024-06-12 17:14:13 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128)
2024-06-12 17:23:53 +0200dcoutts(~duncan@212.23.229.86) (Remote host closed the connection)
2024-06-12 17:24:16 +0200dcoutts(~duncan@212.23.229.86)
2024-06-12 17:30:35 +0200euleritian(~euleritia@dynamic-176-004-153-084.176.4.pool.telefonica.de) (Ping timeout: 264 seconds)
2024-06-12 17:30:51 +0200euleritian(~euleritia@dynamic-176-007-201-187.176.7.pool.telefonica.de)
2024-06-12 17:31:46 +0200dcoutts(~duncan@212.23.229.86) (Ping timeout: 268 seconds)
2024-06-12 17:32:44 +0200danse-nr3(~danse-nr3@151.44.179.149)
2024-06-12 17:33:17 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2024-06-12 17:36:19 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
2024-06-12 17:37:19 +0200mud(~mud@user/kadoban) (Ping timeout: 268 seconds)
2024-06-12 17:43:29 +0200Square(~Square4@user/square) (Ping timeout: 268 seconds)
2024-06-12 17:47:39 +0200euleritian(~euleritia@dynamic-176-007-201-187.176.7.pool.telefonica.de) (Ping timeout: 264 seconds)
2024-06-12 17:51:59 +0200euleritian(~euleritia@dynamic-176-001-140-054.176.1.pool.telefonica.de)
2024-06-12 17:54:24 +0200danse-nr3(~danse-nr3@151.44.179.149) (Remote host closed the connection)
2024-06-12 17:54:48 +0200danse-nr3(~danse-nr3@151.44.179.149)
2024-06-12 17:57:58 +0200chele(~chele@user/chele) (Remote host closed the connection)
2024-06-12 18:03:41 +0200danse-nr3(~danse-nr3@151.44.179.149) (Ping timeout: 240 seconds)
2024-06-12 18:04:08 +0200joeyadams(~joeyadams@2603:6010:5100:2ed:156b:aa72:70b8:c5f5)
2024-06-12 18:04:33 +0200danse-nr3(~danse-nr3@rm-19-3-15.service.infuturo.it)
2024-06-12 18:12:04 +0200dcoutts(~duncan@46-253-189-44.dynamic.monzoon.net)
2024-06-12 18:14:03 +0200euleritian(~euleritia@dynamic-176-001-140-054.176.1.pool.telefonica.de) (Ping timeout: 264 seconds)
2024-06-12 18:15:13 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2024-06-12 18:16:06 +0200gmg(~user@user/gehmehgeh) (Ping timeout: 260 seconds)
2024-06-12 18:17:35 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 18:18:48 +0200gmg(~user@user/gehmehgeh)
2024-06-12 18:19:13 +0200machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 255 seconds)
2024-06-12 18:20:38 +0200danse-nr3(~danse-nr3@rm-19-3-15.service.infuturo.it) (Ping timeout: 252 seconds)
2024-06-12 18:20:42 +0200euleritian(~euleritia@dynamic-176-001-140-054.176.1.pool.telefonica.de)
2024-06-12 18:20:48 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 18:32:36 +0200mei(~mei@user/mei) (Remote host closed the connection)
2024-06-12 18:35:01 +0200mei(~mei@user/mei)
2024-06-12 18:42:30 +0200Square(~Square@user/square)
2024-06-12 18:43:59 +0200greenflower(~greenflow@103.191.25.63) (Quit: Client closed)
2024-06-12 18:45:21 +0200 <lxsameer> hey friends, I'm overwhelmed by the number of packages that offer Expection/Error handling. Do you have any recommendation? my workload is async, And I use a simple ReaderT
2024-06-12 18:46:29 +0200dcoutts(~duncan@46-253-189-44.dynamic.monzoon.net) (Ping timeout: 252 seconds)
2024-06-12 18:49:56 +0200 <Rembane> lxsameer: Lets X/Y this. Why do you need that kind of error handling?
2024-06-12 18:50:49 +0200 <glguy> You probably don't need any package for it
2024-06-12 18:50:54 +0200erty(~user@user/aeroplane)
2024-06-12 18:52:20 +0200 <Rembane> Maybe transformers or mtl?
2024-06-12 18:55:12 +0200 <lxsameer> Rembane: let me ask you this, how do you handle async Errors in your mtl stack?
2024-06-12 18:55:54 +0200 <glguy> Do you mean exceptions from the async package, or asynchronous exceptions?
2024-06-12 18:56:20 +0200danse-nr3(~danse-nr3@rm-19-3-15.service.infuturo.it)
2024-06-12 18:56:32 +0200 <lxsameer> asynchronous exceptions
2024-06-12 18:56:48 +0200 <glguy> You don't handle those in an mtl context, you handle them in an IO context
2024-06-12 18:56:54 +0200 <Rembane> lxsameer: I'm using the async package to handle them.
2024-06-12 18:56:57 +0200 <glguy> or ideally you aren't using them
2024-06-12 18:57:54 +0200 <lxsameer> do you integrate them with your mtl transformer stack?
2024-06-12 18:59:29 +0200 <Rembane> lxsameer: Like this: https://github.com/dtekcth/mat-chalmers/blob/main/app/Main.hs#L79 but it struck me that this is needed because we run things concurrently in that project.
2024-06-12 18:59:39 +0200 <Rembane> lxsameer: No, they're not part of the stack.
2024-06-12 19:00:26 +0200 <Rembane> lxsameer: They're just outside of the stack.
2024-06-12 19:00:32 +0200 <lxsameer> cool cool
2024-06-12 19:00:46 +0200 <lxsameer> that makes things simpler
2024-06-12 19:00:51 +0200 <lxsameer> thank you
2024-06-12 19:01:56 +0200 <Rembane> No worries. I hope this didn't make you more confused than you were before. :)
2024-06-12 19:03:33 +0200 <lxsameer> no, it helped a lot.
2024-06-12 19:04:31 +0200econo_(uid147250@id-147250.tinside.irccloud.com)
2024-06-12 19:05:28 +0200 <Rembane> Cool!
2024-06-12 19:07:54 +0200gmg(~user@user/gehmehgeh) (Ping timeout: 260 seconds)
2024-06-12 19:08:04 +0200igghibu(~igghibu@178.249.211.102)
2024-06-12 19:08:58 +0200gmg(~user@user/gehmehgeh)
2024-06-12 19:10:26 +0200CiaoSen(~Jura@2a05:5800:2b1:db00:e6b9:7aff:fe80:3d03) (Ping timeout: 268 seconds)
2024-06-12 19:14:41 +0200igghibu_(~igghibu@146.70.225.113)
2024-06-12 19:15:05 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128) (Quit: ZNC 1.8.2 - https://znc.in)
2024-06-12 19:15:59 +0200CrunchyFlakes(~CrunchyFl@146.52.130.128)
2024-06-12 19:17:36 +0200igghibu(~igghibu@178.249.211.102) (Ping timeout: 256 seconds)
2024-06-12 19:17:39 +0200danse-nr3(~danse-nr3@rm-19-3-15.service.infuturo.it) (Ping timeout: 264 seconds)
2024-06-12 19:21:09 +0200alexherbo2(~alexherbo@2a02-8440-3313-51a8-b4f8-85c4-3803-196a.rev.sfr.net)
2024-06-12 19:21:41 +0200troydm(~troydm@user/troydm) (Ping timeout: 252 seconds)
2024-06-12 19:22:26 +0200 <EvanR> the point of exceptions is NOT handling them, usually xD
2024-06-12 19:23:00 +0200 <monochrom> Wait, then what is the point?
2024-06-12 19:23:09 +0200 <EvanR> not handling them
2024-06-12 19:23:24 +0200 <EvanR> being freed from the burden of handling them, all
2024-06-12 19:23:34 +0200 <monochrom> Oh heh I see how to parse that now.
2024-06-12 19:24:25 +0200 <Rembane> Let it crash!
2024-06-12 19:24:31 +0200uri39(~uri39@200.23.157.245)
2024-06-12 19:25:13 +0200 <monochrom> You know, that really ties in with the math. Plotkin was trying to use algebra to explain effects, and he found out that handling exceptions doesn't fit, only raising does.
2024-06-12 19:25:40 +0200 <dolio> Well, kind of.
2024-06-12 19:27:15 +0200 <glguy> monochrom: similarly if you only have handling but not raising, that'd be pretty easy to support, too
2024-06-12 19:27:16 +0200igghibu(~igghibu@146.70.225.113)
2024-06-12 19:28:43 +0200 <dolio> The type of internal catch can actually come from an algebraic effect.
2024-06-12 19:29:29 +0200 <dolio> `m a -> (e -> m a) -> m a` is the 'model' view of the effect `pick : Maybe e`
2024-06-12 19:29:51 +0200dcoutts(~duncan@46-253-189-44.dynamic.monzoon.net)
2024-06-12 19:30:04 +0200igghibu_(~igghibu@146.70.225.113) (Ping timeout: 256 seconds)
2024-06-12 19:30:13 +0200 <dolio> Like how `m a -> m a -> m a` corresponds to the effect `pick : Bool`.
2024-06-12 19:31:05 +0200y04nn(~username@2a03:1b20:8:f011::e10d)
2024-06-12 19:33:04 +0200 <dolio> Of course, if you have `throw` and `pick`, the handler can do whatever it wants with both, meaning `pick` doesn't necessarily have to have anything to do with `throw`. Unless you have equations.
2024-06-12 19:33:36 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 19:38:17 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 19:41:01 +0200totbwf(sid402332@id-402332.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2024-06-12 19:45:16 +0200joeyadams(~joeyadams@2603:6010:5100:2ed:156b:aa72:70b8:c5f5) (Quit: Leaving)
2024-06-12 19:49:36 +0200uri39(~uri39@200.23.157.245) (Quit: Client closed)
2024-06-12 19:55:45 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2024-06-12 19:56:30 +0200alexherbo2(~alexherbo@2a02-8440-3313-51a8-b4f8-85c4-3803-196a.rev.sfr.net) (Remote host closed the connection)
2024-06-12 19:59:03 +0200causal(~eric@50.35.88.207) (Quit: WeeChat 4.3.1)
2024-06-12 19:59:44 +0200causal(~eric@50.35.88.207)
2024-06-12 20:04:24 +0200erty(~user@user/aeroplane) (Remote host closed the connection)
2024-06-12 20:05:03 +0200y04nn(~username@2a03:1b20:8:f011::e10d) (Ping timeout: 264 seconds)
2024-06-12 20:05:37 +0200SethTisue(sid14912@id-14912.ilkley.irccloud.com) (Read error: Connection reset by peer)
2024-06-12 20:05:57 +0200ProofTechnique_(sid79547@id-79547.ilkley.irccloud.com) (Read error: Connection reset by peer)
2024-06-12 20:06:05 +0200SethTisue(sid14912@id-14912.ilkley.irccloud.com)
2024-06-12 20:06:08 +0200igghibu(~igghibu@146.70.225.113) (Quit: igghibu)
2024-06-12 20:06:19 +0200alanz(sid110616@id-110616.uxbridge.irccloud.com) (Read error: Connection reset by peer)
2024-06-12 20:06:20 +0200JSharp(sid4580@user/JSharp) (Ping timeout: 256 seconds)
2024-06-12 20:06:30 +0200alanz(sid110616@id-110616.uxbridge.irccloud.com)
2024-06-12 20:06:50 +0200JSharp(sid4580@user/JSharp)
2024-06-12 20:06:51 +0200ProofTechnique_(sid79547@id-79547.ilkley.irccloud.com)
2024-06-12 20:06:54 +0200sa(sid1055@id-1055.tinside.irccloud.com) (Ping timeout: 256 seconds)
2024-06-12 20:06:54 +0200lally(sid388228@id-388228.uxbridge.irccloud.com) (Ping timeout: 256 seconds)
2024-06-12 20:06:54 +0200aristid(sid1599@id-1599.uxbridge.irccloud.com) (Ping timeout: 256 seconds)
2024-06-12 20:08:57 +0200aristid(sid1599@id-1599.uxbridge.irccloud.com)
2024-06-12 20:09:02 +0200lally(sid388228@id-388228.uxbridge.irccloud.com)
2024-06-12 20:10:03 +0200sa(sid1055@id-1055.tinside.irccloud.com)
2024-06-12 20:10:46 +0200cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-12 20:13:08 +0200sclv(sid39734@haskell/developer/sclv) (Ping timeout: 256 seconds)
2024-06-12 20:13:42 +0200jackdk(sid373013@cssa/jackdk) (Ping timeout: 256 seconds)
2024-06-12 20:13:56 +0200jackdk(sid373013@cssa/jackdk)
2024-06-12 20:14:00 +0200sclv(sid39734@haskell/developer/sclv)
2024-06-12 20:19:28 +0200 <tomsmeding> I thought `vector`'s fusion framework was suppose to make things faster, but `sum (force (concat l))` is almost 4x as fast as `sum (concat l)`, undependently of `length l` (tested lengths: [0, 10, 100, 1000] with lengths of vectors so that there are 1e6 elements in total)
2024-06-12 20:19:40 +0200 <tomsmeding> *independently
2024-06-12 20:21:57 +0200causal(~eric@50.35.88.207) (Quit: WeeChat 4.3.1)
2024-06-12 20:22:40 +0200causal(~eric@50.35.88.207)
2024-06-12 20:26:40 +0200dcoutts(~duncan@46-253-189-44.dynamic.monzoon.net) (Remote host closed the connection)
2024-06-12 20:26:57 +0200dcoutts(~duncan@46-253-189-44.dynamic.monzoon.net)
2024-06-12 20:31:44 +0200 <int-e> I'd *guess* that `force` causes the code to actually materialize the intermediate vector, while without `force` the code fuses perfectly.
2024-06-12 20:31:51 +0200 <tomsmeding> indeed
2024-06-12 20:32:02 +0200 <tomsmeding> the intent of that 'force' there was to break fusion
2024-06-12 20:32:09 +0200 <tomsmeding> but then why is the one without fusion _faster_?
2024-06-12 20:32:33 +0200 <tomsmeding> and not a little bit too
2024-06-12 20:32:35 +0200 <int-e> Aha, I misread.
2024-06-12 20:32:39 +0200cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 264 seconds)
2024-06-12 20:33:59 +0200euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2024-06-12 20:34:10 +0200y04nn(~username@2a03:1b20:8:f011::e10d)
2024-06-12 20:36:14 +0200picnoir(~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.2.2)
2024-06-12 20:37:10 +0200Sciencentistguy(~sciencent@hacksoc/ordinary-member) (Quit: o/)
2024-06-12 20:38:03 +0200picnoir(~picnoir@about/aquilenet/vodoo/NinjaTrappeur)
2024-06-12 20:38:59 +0200euphores(~SASL_euph@user/euphores)
2024-06-12 20:40:55 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-06-12 20:41:19 +0200dmj`(uid72307@id-72307.hampstead.irccloud.com)
2024-06-12 20:41:26 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 20:42:26 +0200gmg(~user@user/gehmehgeh)
2024-06-12 20:44:08 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 20:44:18 +0200dcoutts(~duncan@46-253-189-44.dynamic.monzoon.net) (Ping timeout: 256 seconds)
2024-06-12 20:48:18 +0200 <c_wraith> tomsmeding: does it depend on how you generate l?
2024-06-12 20:49:40 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2024-06-12 20:50:13 +0200 <tomsmeding> c_wraith: the creation of `l` is intentionally separated from the consumption in `concat`; the `sum (concat l)` is inside Test.Tasty.Bench.nf and the creation of `l` is outside of it
2024-06-12 20:50:45 +0200 <tomsmeding> (it's `replicate n (VS.enumFromTo (1::Int) k)`, where n and k vary as above)
2024-06-12 20:51:08 +0200 <tomsmeding> I haven't tried other ways of generating l, but I would imagine it doesn't matter much because fusion cannot connect the two
2024-06-12 20:51:52 +0200 <c_wraith> Oh, putting it outside means it'll be reused, so definitely can't be fused.
2024-06-12 20:52:03 +0200 <int-e> Can't replicate that in isolation. Can confirm that the `force` version allocates more. This is with https://paste.tomsmeding.com/KZhEHgUI to prevent cross-optimization with generation of the vectors
2024-06-12 20:52:06 +0200 <tomsmeding> ah, also that
2024-06-12 20:53:01 +0200 <int-e> (the extra argument is there so I can evaluate that multiple times without GHC seeing any sharing)
2024-06-12 20:54:02 +0200 <tomsmeding> int-e: also not with Data.Vector.Storable?
2024-06-12 20:54:30 +0200 <tomsmeding> (perhaps I should've specified that I'm using storable vectors)
2024-06-12 20:54:51 +0200 <int-e> yeah, qualitatively the same with .Storable
2024-06-12 20:55:27 +0200 <int-e> For .Storable `foo` is 5x faster in my test; without boxed vectos it's only 2x faster.
2024-06-12 20:55:49 +0200 <tomsmeding> hm, let me see
2024-06-12 20:56:44 +0200 <int-e> compiling with -O2, I wonder whether -O changes anything... it does!
2024-06-12 20:57:12 +0200 <int-e> With -O the version without `force` *is* slower.
2024-06-12 20:57:17 +0200 <tomsmeding> aha!
2024-06-12 20:57:21 +0200 <int-e> That's... interesting.
2024-06-12 20:58:04 +0200 <int-e> I did not expect to see code for which -O2 is almost 20x faster than -O.
2024-06-12 20:58:41 +0200 <tomsmeding> int-e: which vector lengths are you using that you get 20x? :p
2024-06-12 20:58:52 +0200 <int-e> I used replicate 100 (V.fromList [1..10000])
2024-06-12 20:59:09 +0200 <int-e> so 1e6
2024-06-12 20:59:37 +0200 <int-e> tomsmeding: the 20x is for `foo`, compiled with -O vs -O2
2024-06-12 20:59:44 +0200 <tomsmeding> I see, I get the same
2024-06-12 21:00:29 +0200 <tomsmeding> fun!
2024-06-12 21:00:44 +0200 <int-e> with -O, foo is ~2x slower than bar; with -O2 foo is ~5x faster than bar. Insane.
2024-06-12 21:00:54 +0200 <dolio> vector's fusion is very complicated. I'm not exactly sure what would depend on -O2, but I guess with just -O there is some cruft left over.
2024-06-12 21:01:08 +0200 <tomsmeding> I tried this: https://paste.tomsmeding.com/spBJbnoo
2024-06-12 21:01:26 +0200 <tomsmeding> with -O1, foo / bar is ~4.2; with _O2, foo / bar is ~0.11
2024-06-12 21:01:32 +0200 <tomsmeding> *-O2
2024-06-12 21:01:41 +0200 <tomsmeding> dolio: evidently!
2024-06-12 21:01:54 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-12 21:02:26 +0200 <dolio> Like, it does things like building multiple ways for every expression to be evaluated, then expecting the compiler to throw most of them out.
2024-06-12 21:03:17 +0200 <tomsmeding> laziness would presumably throw them out anyway, but at an overhead cost
2024-06-12 21:04:43 +0200 <int-e> So this shows additional rules firing: (-ddump-rule-firings) https://paste.tomsmeding.com/3kUGXgp4
2024-06-12 21:06:20 +0200 <int-e> I'm not sure what those rules are.
2024-06-12 21:06:43 +0200Sciencentistguy(~sciencent@hacksoc/ordinary-member)
2024-06-12 21:07:00 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2024-06-12 21:07:43 +0200 <tomsmeding> that "Rule fired: +# (BUILTIN)" looks helpful
2024-06-12 21:07:50 +0200 <tomsmeding> just from the name
2024-06-12 21:10:13 +0200joeyadams(~joeyadams@2603:6010:5100:2ed:156b:aa72:70b8:c5f5)
2024-06-12 21:10:54 +0200 <dolio> I think some of those others are worker-wrapper.
2024-06-12 21:11:14 +0200cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-12 21:11:30 +0200 <int-e> tomsmeding: https://paste.tomsmeding.com/z6BIxayL
2024-06-12 21:12:30 +0200 <int-e> (that's for `foo`, the version without `force`)
2024-06-12 21:12:32 +0200ft(~ft@p3e9bcb39.dip0.t-ipconnect.de)
2024-06-12 21:12:39 +0200 <tomsmeding> it unpacked the Either as if it was a product type?
2024-06-12 21:12:57 +0200 <tomsmeding> wait, no it didn't
2024-06-12 21:13:22 +0200 <int-e> I /think/ it can split the function into two, one for Left and one for Right.
2024-06-12 21:13:28 +0200 <tomsmeding> int-e: is this inner loop for every scalar, or for every vector?
2024-06-12 21:13:47 +0200 <tomsmeding> s/scalar/int/
2024-06-12 21:13:49 +0200 <int-e> This /may/ come down to the (fragile) choice of loop breakers in recursive functions.
2024-06-12 21:14:02 +0200 <int-e> for every scalar
2024-06-12 21:14:06 +0200 <tomsmeding> oof okay
2024-06-12 21:14:33 +0200 <tomsmeding> oh I see, the Right case is "currently reducing this vector at this cursor, and this is the remaining work" probably
2024-06-12 21:15:31 +0200visilii_(~visilii@46.61.242.35)
2024-06-12 21:15:40 +0200 <tomsmeding> anyway, this is apparently not a bug in vector :)
2024-06-12 21:15:41 +0200 <int-e> yeah
2024-06-12 21:16:00 +0200 <int-e> I'm not agreeing that this is a bug
2024-06-12 21:16:00 +0200 <tomsmeding> luckily -- it would've been a bit embarrassing if it had been
2024-06-12 21:16:20 +0200 <tomsmeding> I said this is _not_ a bug in vector
2024-06-12 21:16:24 +0200 <tomsmeding> I thought originally that it might be
2024-06-12 21:16:40 +0200 <int-e> GHC is *supposed* to eliminate that Either, but it's tricky to make it do that reliably.
2024-06-12 21:16:41 +0200 <tomsmeding> but if the solution is "use -O2 if you want vector to be fast", that's fair
2024-06-12 21:16:50 +0200 <int-e> Oh I still can't read.
2024-06-12 21:16:51 +0200 <int-e> Sigh.
2024-06-12 21:16:53 +0200 <tomsmeding> :)
2024-06-12 21:17:19 +0200 <int-e> Anyway I hope my net contribution is still positive :)
2024-06-12 21:17:26 +0200 <tomsmeding> definitely
2024-06-12 21:17:29 +0200 <monochrom> yes, no worries
2024-06-12 21:17:42 +0200 <tomsmeding> I've been told too often that -O2 typically doesn't do much
2024-06-12 21:17:47 +0200visilii(~visilii@213.24.125.2) (Ping timeout: 268 seconds)
2024-06-12 21:17:56 +0200 <tomsmeding> but I forgot the part after that, which goes "then profile and check if -O2 does actually help in your case"
2024-06-12 21:18:04 +0200 <monochrom> Right, but I think bytestring, text, vector need it.
2024-06-12 21:18:30 +0200 <tomsmeding> text and vector have fusion frameworks which I can imagine need -O2 (given this discussion), but bytestring doesn't do anything special, right?
2024-06-12 21:18:32 +0200 <monochrom> Basically the only exceptions because they go ham with fusion.
2024-06-12 21:18:35 +0200 <int-e> Anyway, I can't explain why GHC does so terribly with -O here... picking the wrong loop breaker is my guess but I barely know what they are, never mind how GHC picks them.
2024-06-12 21:19:25 +0200 <tomsmeding> it's indeed probably a single missed optimisation somewhere that makes the carefully constructed castle collapse
2024-06-12 21:19:47 +0200 <monochrom> I think we would call that a house of cards. :)
2024-06-12 21:19:52 +0200 <tomsmeding> ah, we do
2024-06-12 21:20:31 +0200 <monochrom> jenga :)
2024-06-12 21:20:36 +0200 <int-e> I'd imagine that bytestring is in the same boat in principle. Maybe a bit simpler and more battle-proven (i.e. GHC and bytestring both have been tuned a bit more to work well together.)
2024-06-12 21:20:51 +0200 <tomsmeding> does bytestring have fusion stuff?
2024-06-12 21:20:57 +0200 <int-e> yes
2024-06-12 21:21:18 +0200 <int-e> it's where stream fusion was first implemented
2024-06-12 21:22:08 +0200 <tomsmeding> oh via RULES only
2024-06-12 21:22:14 +0200 <tomsmeding> vector does _much_ more than rules
2024-06-12 21:22:28 +0200Batzy(~quassel@user/batzy) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2024-06-12 21:22:47 +0200 <tomsmeding> which, incidentally, is profoundly annoying if you want to figure out how a particular vector operaetion is implemented :p
2024-06-12 21:22:52 +0200Batzy(~quassel@user/batzy)
2024-06-12 21:23:55 +0200 <tomsmeding> but I'm not seeing any interesting RULES either, actually, just specialisation
2024-06-12 21:23:57 +0200 <tomsmeding> s
2024-06-12 21:24:07 +0200 <tomsmeding> am I looking in the wrong place?
2024-06-12 21:24:15 +0200andrei_n(~andrei_n@user/andrei-n:62396) (Ping timeout: 264 seconds)
2024-06-12 21:25:39 +0200 <tomsmeding> according to its documentation, bytestring has been rewritten a bunch of times; perhaps you're referring to a past version
2024-06-12 21:25:58 +0200euleritian(~euleritia@dynamic-176-001-140-054.176.1.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-12 21:26:16 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-12 21:28:16 +0200Batzy(~quassel@user/batzy) (Ping timeout: 268 seconds)
2024-06-12 21:28:59 +0200zenex(~zenex@cpc157775-rdng31-2-0-cust836.15-3.cable.virginm.net)
2024-06-12 21:29:45 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-12 21:31:04 +0200 <int-e> tomsmeding: I /think/ I'm referring to 0.10 with this, but my memory is hazy; it may have been even earlier. https://hackage.haskell.org/package/bytestring-0.10.0.0/docs/src/Data-ByteString-Lazy-Builder-Inte…
2024-06-12 21:32:47 +0200alinab(sid468903@id-468903.helmsley.irccloud.com) (Read error: Connection reset by peer)
2024-06-12 21:32:53 +0200cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 268 seconds)
2024-06-12 21:32:55 +0200alinab(sid468903@id-468903.helmsley.irccloud.com)
2024-06-12 21:32:55 +0200zenex(~zenex@cpc157775-rdng31-2-0-cust836.15-3.cable.virginm.net) ()
2024-06-12 21:34:44 +0200rubin55(sid175221@id-175221.hampstead.irccloud.com) (Ping timeout: 256 seconds)
2024-06-12 21:35:31 +0200mei(~mei@user/mei) (Remote host closed the connection)
2024-06-12 21:36:23 +0200andrei_n(~andrei_n@user/andrei-n:62396)
2024-06-12 21:37:04 +0200lally(sid388228@id-388228.uxbridge.irccloud.com) (Ping timeout: 246 seconds)
2024-06-12 21:37:59 +0200mei(~mei@user/mei)
2024-06-12 21:38:03 +0200rubin55(sid175221@id-175221.hampstead.irccloud.com)
2024-06-12 21:38:52 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-12 21:39:05 +0200cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-12 21:39:50 +0200bontaq(~user@ool-45779c03.dyn.optonline.net) (Ping timeout: 256 seconds)
2024-06-12 21:40:15 +0200lally(sid388228@id-388228.uxbridge.irccloud.com)
2024-06-12 21:42:37 +0200 <tomsmeding> int-e: I see, for Builder; here it is for current bytestring: https://hackage.haskell.org/package/bytestring-0.12.1.0/docs/src/Data.ByteString.Builder.Internal.…
2024-06-12 21:43:14 +0200 <tomsmeding> it seems all the fusion is left to ghc, however; there are no relevant RULES
2024-06-12 21:43:30 +0200 <tomsmeding> only ones that reassociate operations to make it easier for ghc, presumably
2024-06-12 21:46:49 +0200ocra8(~ocra8@user/ocra8) (Read error: Connection reset by peer)
2024-06-12 21:49:05 +0200 <int-e> Yeah AFAIUI the hope in all of this is that GHC will find a lot of case analyses for the ChunkedIOStream type with a known constructor and use the opportunity to elide the construction of that value. That's how fusion actuall happens here.
2024-06-12 21:49:19 +0200 <tomsmeding> that sounds pretty robust
2024-06-12 21:49:30 +0200 <tomsmeding> if it's just inlining and cast-of-known-constructor
2024-06-12 21:49:36 +0200 <tomsmeding> *case
2024-06-12 21:51:40 +0200 <int-e> Anyway it's clearly much simpler than what vector is doing these days.
2024-06-12 21:52:45 +0200ocra8(~ocra8@user/ocra8)
2024-06-12 21:53:28 +0200 <int-e> The history is confusing because there's a 2007 paper on this, but the corresponding code never made it into the published bytestring package in that form; instead we have this: https://hackage.haskell.org/package/bytestring-0.9.1.0/docs/src/Data-ByteString-Fusion.html
2024-06-12 21:53:39 +0200 <tomsmeding> /urlselect
2024-06-12 21:53:54 +0200 <tomsmeding> (I'm good at typing precisely today, it seems)
2024-06-12 21:54:00 +0200 <tomsmeding> lol that file
2024-06-12 21:55:38 +0200Square(~Square@user/square) (Remote host closed the connection)
2024-06-12 22:02:52 +0200machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net)
2024-06-12 22:04:15 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2024-06-12 22:12:53 +0200son0p(~ff@186.121.8.17) (Ping timeout: 240 seconds)
2024-06-12 22:24:22 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds)
2024-06-12 22:30:05 +0200lxsameer(~lxsameer@Serene/lxsameer) (Ping timeout: 240 seconds)
2024-06-12 22:31:27 +0200machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds)
2024-06-12 22:31:42 +0200Batzy(~quassel@user/batzy)
2024-06-12 22:33:29 +0200motherfsck(~motherfsc@user/motherfsck) (Quit: quit)
2024-06-12 22:40:06 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
2024-06-12 22:53:25 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2024-06-12 22:59:07 +0200andrei_n(~andrei_n@user/andrei-n:62396) (Quit: Leaving)
2024-06-12 23:04:47 +0200tabemann(~tabemann@2600:1700:7990:24e0:7b2b:151c:4735:737f) (Ping timeout: 256 seconds)
2024-06-12 23:07:34 +0200Square(~Square@user/square)
2024-06-12 23:09:10 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2024-06-12 23:10:06 +0200dmj`(uid72307@id-72307.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2024-06-12 23:11:08 +0200dcoutts(~duncan@212.140.138.201)
2024-06-12 23:14:10 +0200cpressey(~weechat@33b62f0c.skybroadband.com) (Quit: WeeChat 4.3.0)
2024-06-12 23:15:13 +0200michalz(~michalz@185.246.207.201) (Quit: ZNC 1.9.0 - https://znc.in)
2024-06-12 23:19:00 +0200dcoutts(~duncan@212.140.138.201) (Ping timeout: 256 seconds)
2024-06-12 23:20:58 +0200dcoutts(~duncan@212.140.138.201)
2024-06-12 23:23:26 +0200EvanR(~EvanR@user/evanr) (Quit: Leaving)
2024-06-12 23:25:24 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2024-06-12 23:25:27 +0200dcoutts(~duncan@212.140.138.201) (Ping timeout: 264 seconds)
2024-06-12 23:25:44 +0200EvanR(~EvanR@user/evanr)
2024-06-12 23:26:05 +0200sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 240 seconds)
2024-06-12 23:41:53 +0200joeyadams(~joeyadams@2603:6010:5100:2ed:156b:aa72:70b8:c5f5) (Quit: Leaving)
2024-06-12 23:44:49 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2024-06-12 23:44:49 +0200gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2024-06-12 23:44:49 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2024-06-12 23:44:49 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2024-06-12 23:44:49 +0200ec(~ec@gateway/tor-sasl/ec) (Read error: Connection reset by peer)
2024-06-12 23:44:49 +0200califax(~califax@user/califx) (Read error: Connection reset by peer)
2024-06-12 23:44:49 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Read error: Connection reset by peer)
2024-06-12 23:45:25 +0200califax(~califax@user/califx)
2024-06-12 23:45:26 +0200sord937(~sord937@gateway/tor-sasl/sord937)
2024-06-12 23:45:28 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2024-06-12 23:45:43 +0200ec(~ec@gateway/tor-sasl/ec)
2024-06-12 23:45:54 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-06-12 23:46:06 +0200gmg(~user@user/gehmehgeh)
2024-06-12 23:46:52 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2024-06-12 23:47:15 +0200Square2(~Square4@user/square)
2024-06-12 23:49:36 +0200Square(~Square@user/square) (Ping timeout: 256 seconds)
2024-06-12 23:53:03 +0200acidjnk(~acidjnk@p200300d6e714dc68856d8905203ea039.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2024-06-12 23:59:10 +0200pavonia(~user@user/siracusa)