2024/11/07

Newest at the top

2024-11-07 23:03:51 +0100 <monochrom> Oh there is the variadic liftAn my students are looking for!
2024-11-07 23:03:44 +0100 <tomsmeding> then it's also clear how this "just" normalises out the (<*>) association order
2024-11-07 23:03:13 +0100 <tomsmeding> and that makes more sense: it's just liftAn!
2024-11-07 23:02:53 +0100 <tomsmeding> (when carefully expanding the data type)
2024-11-07 23:02:53 +0100 <monochrom> Oh oops, yeah.
2024-11-07 23:02:32 +0100 <tomsmeding> monochrom: that list is not quite what's happening though. It's rather Ap f z ~= [f a, f b, f c, c -> b -> a -> z]
2024-11-07 22:58:45 +0100 <tomsmeding> yes
2024-11-07 22:58:43 +0100 <tomsmeding> :D
2024-11-07 22:58:38 +0100 <monochrom> Like f x = x f ? >:)
2024-11-07 22:58:12 +0100 <tomsmeding> can't "apply" be commutative -.-
2024-11-07 22:57:56 +0100 <tomsmeding> s/which is already applied to/to which is already applied/
2024-11-07 22:57:23 +0100 <tomsmeding> where the top-level `f` computation computes a result, which is already applied to its continuation to produce the computation to run next
2024-11-07 22:56:53 +0100 <monochrom> which is just waiting to be interpreted/collapsed by a custom-made join :: f (f a) -> f a
2024-11-07 22:55:51 +0100 <monochrom> Yeah, free monad tries to have f (f (f ... (f (Pure x)...)
2024-11-07 22:55:15 +0100tomsmeding. o O ( this module actually has an informative Portability metadata field )
2024-11-07 22:54:54 +0100Everything(~Everythin@178-133-1-121.mobile.vf-ua.net) Everything
2024-11-07 22:54:25 +0100 <tomsmeding> and that makes sense: a free monad also normalises out the association order of binds, so analogously, a free applicative should also normalise out the association order of (<*>)
2024-11-07 22:54:22 +0100 <monochrom> Your question inspired me to actually think about it. :)
2024-11-07 22:53:39 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-07 22:53:24 +0100 <tomsmeding> monochrom: the remark about the "list" is quite apt
2024-11-07 22:52:29 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-07 22:52:26 +0100 <monochrom> I thought up my own field names "Ap f_secret cont", where f_secret :: f s, cont :: Ap f (s -> a).
2024-11-07 22:51:47 +0100 <tomsmeding> it's just that juxtaposing the two makes it kind of funny
2024-11-07 22:51:37 +0100 <tomsmeding> I mean, I kind of get it -- we have a value in a functor (call it f), and we have a value of our data type (call it x)
2024-11-07 22:51:20 +0100 <tomsmeding> :D
2024-11-07 22:51:13 +0100rvalue-rvalue
2024-11-07 22:51:08 +0100 <monochrom> Haha. "Let e be a group, H be its identity element, phi be a subgroup of e, G be a group homomorphism from e to f"
2024-11-07 22:50:15 +0100 <monochrom> Oh I think I see it. It is trying to have a list like [x0 :: f A0, x1 :: f (A0 -> A1), x2 :: f (A1 -> A2)].
2024-11-07 22:50:08 +0100 <tomsmeding> f :: f a ; x :: Ap f (a -> b)
2024-11-07 22:49:33 +0100 <tomsmeding> monochrom: if you wanna laugh, look at the implementation of runAp -- and in particular the naming of the fields of Ap
2024-11-07 22:48:30 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-07 22:48:00 +0100 <monochrom> and it can't be in Pure so it may as well be in the recursive case.
2024-11-07 22:47:39 +0100 <monochrom> Supposedly f has to be actually relevant somewhere rather than being a phantom type.
2024-11-07 22:47:00 +0100 <monochrom> I don't know! I'm just learning. :)
2024-11-07 22:46:36 +0100rvalue(~rvalue@user/rvalue) (Ping timeout: 276 seconds)
2024-11-07 22:46:21 +0100 <tomsmeding> monochrom: is there a good reason the first field of that Ap doesn't have an Ap around it?
2024-11-07 22:45:21 +0100rvalue-(~rvalue@user/rvalue) rvalue
2024-11-07 22:44:10 +0100infinity0(~infinity0@pwned.gg) (Ping timeout: 272 seconds)
2024-11-07 22:44:06 +0100lxsameer(~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds)
2024-11-07 22:43:34 +0100 <monochrom> Derp. I am taking a look at free applicative functors (e.g. https://hackage.haskell.org/package/free-5.2/docs/Control-Applicative-Free.html), I try to implement <*> myself, get stuck, look at the answer, it is obvious (it is the same trick as fmap, and I could do fmap).
2024-11-07 22:37:12 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
2024-11-07 22:28:31 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-07 22:21:21 +0100famubu(~famubu@14.139.174.50) (Ping timeout: 248 seconds)
2024-11-07 22:21:09 +0100son0p(~ff@186.121.30.70) (Ping timeout: 260 seconds)
2024-11-07 22:20:52 +0100tremon(~tremon@83.80.159.219) (Quit: getting boxed in)
2024-11-07 22:18:39 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds)
2024-11-07 22:18:00 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
2024-11-07 22:13:08 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-07 22:12:59 +0100son0p(~ff@186.121.30.70) son0p
2024-11-07 22:12:32 +0100sprotte24(~sprotte24@p200300d16f05e000c862cdd7b290d75c.dip0.t-ipconnect.de)