| 2022-10-28 00:00:40 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2022-10-28 00:01:58 +0000 | nilradical | (~nilradica@user/naso) |
| 2022-10-28 00:02:41 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 00:02:50 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 00:03:02 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2022-10-28 00:03:07 +0000 | ubert1 | (~Thunderbi@178.165.186.249.wireless.dyn.drei.com) |
| 2022-10-28 00:03:27 +0000 | ubert | (~Thunderbi@178.165.169.91.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 2022-10-28 00:03:27 +0000 | ubert1 | ubert |
| 2022-10-28 00:03:54 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 2022-10-28 00:05:16 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 00:05:39 +0000 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
| 2022-10-28 00:06:25 +0000 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 2022-10-28 00:06:38 +0000 | polo | (~polo@user/polo) (Ping timeout: 276 seconds) |
| 2022-10-28 00:06:44 +0000 | <EvanR> | one of the monad laws is μ∘Tμ = μ∘μT where wikipedia says the thing to the right is horizontal composition of natural transformations. But T is a functor. So does it mean upgrade T to a natural transformation in the dumbest most obvious way first? |
| 2022-10-28 00:07:03 +0000 | ft | (~ft@p3e9bc845.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 2022-10-28 00:08:09 +0000 | ft | (~ft@p508dbd59.dip0.t-ipconnect.de) |
| 2022-10-28 00:11:31 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 00:11:54 +0000 | redmp | (~redmp@mobile-166-170-43-64.mycingular.net) |
| 2022-10-28 00:12:03 +0000 | <monochrom> | No. Instead, μT is shorthand for μ :: T a -> T (T a). It is a natural transformation from T to Compose T T. |
| 2022-10-28 00:12:54 +0000 | <monochrom> | Wait, is μ retunr? is μ join? |
| 2022-10-28 00:12:58 +0000 | <EvanR> | join |
| 2022-10-28 00:13:10 +0000 | <monochrom> | Ah OK, I need a correction then. |
| 2022-10-28 00:13:20 +0000 | <geekosaur> | looked more like a comonad to me… |
| 2022-10-28 00:14:08 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds) |
| 2022-10-28 00:14:15 +0000 | <monochrom> | μT is shorthand for μ :: T (T (T a)) -> T (T a). It is a natural transformation from TTT to TT. |
| 2022-10-28 00:14:28 +0000 | <EvanR> | (either way I'm annoyed that the article is trying to pass this off as something else) |
| 2022-10-28 00:14:31 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds) |
| 2022-10-28 00:14:41 +0000 | <dolio> | But which one? |
| 2022-10-28 00:14:58 +0000 | <dolio> | The answer is, the one that isn't Tμ. |
| 2022-10-28 00:15:20 +0000 | <monochrom> | heh yeah |
| 2022-10-28 00:16:17 +0000 | <monochrom> | In Haskell you would write "join . fmap join = join . join", but this could be annoying in not explicating which join acts on which type, in particular how many T's. |
| 2022-10-28 00:17:12 +0000 | <monochrom> | The mathematicians' favourite notation can be derived this way. |
| 2022-10-28 00:17:14 +0000 | <EvanR> | nice use of overloading of μ there |
| 2022-10-28 00:17:21 +0000 | <EvanR> | I am quite confused |
| 2022-10-28 00:18:11 +0000 | <monochrom> | First we agree that mathematicians have a notation equivalent to Haskell's type application. The two are not very different, so I'll write in the Haskell notation. |
| 2022-10-28 00:18:46 +0000 | <monochrom> | Given for example reverse :: [a] -> [a], we can write "reverse @ Int" for the [Int]->[Int] version. |
| 2022-10-28 00:19:42 +0000 | <EvanR> | is horizontal composition going to be in at any point xD |
| 2022-10-28 00:20:02 +0000 | <EvanR> | or is that a red herring |
| 2022-10-28 00:20:39 +0000 | slack4673 | (~slack1256@191.125.99.208) |
| 2022-10-28 00:22:25 +0000 | <jackdk> | Lens question: I have `list :: [A]`, `p :: Prism' A B` and `f :: B -> m C` for some monad `m`. I want to construct an `m [C]` that is built up by applying `f` to every `B` in `list` that can be found with `p`. The best I have is to `traverse f $ list ^.. folded . p`, but is there something better that I'm missing? |
| 2022-10-28 00:22:31 +0000 | <EvanR> | ok natural transformations produce morphisms for each type, so I think I see where you're doing with that |
| 2022-10-28 00:22:49 +0000 | <monochrom> | With this, the monad law can be written μ . (T . μ) = μ . (μ @ T a), to just explicate the type instantiation of one of the μ's. |
| 2022-10-28 00:23:15 +0000 | <EvanR> | you just composed a functor with a natural transformation... |
| 2022-10-28 00:23:31 +0000 | slack1256 | (~slack1256@186.11.17.82) (Ping timeout: 272 seconds) |
| 2022-10-28 00:24:03 +0000 | <monochrom> | Actually μ . T . (μ @ a) = μ . (μ @ T a) so both sides end with some kind of @ to make my next sentence go nicer. |
| 2022-10-28 00:24:25 +0000 | <dolio> | Category theorists use the functor's name for its map operation. |
| 2022-10-28 00:24:46 +0000 | <geekosaur> | remember the Haskell version was `fmap ...` |
| 2022-10-28 00:24:48 +0000 | <EvanR> | yeah I get that, but functors map morphisms not N.T.s |
| 2022-10-28 00:24:53 +0000 | <monochrom> | Then we "eta-reduce" away the "a" on both sides. At this points mathematicians also notice that they can conflate "." with "@" with no loss of ambiguity. |
| 2022-10-28 00:25:07 +0000 | <dolio> | Also, I think μT is equivalent to horizontal composition with the identity transformation from T to T. |
| 2022-10-28 00:25:16 +0000 | <geekosaur> | "loss of ambiguity"? |
| 2022-10-28 00:25:24 +0000 | <EvanR> | hence the "dumbest most obvious way" |
| 2022-10-28 00:25:53 +0000 | <monochrom> | With "." and "@" unified, they replace both by juxtaposition, thus μ . Tμ = μ . μT |
| 2022-10-28 00:26:01 +0000 | <EvanR> | oh, monochrom is using haskell, right |
| 2022-10-28 00:26:05 +0000 | <monochrom> | Err loss of unambiguity! Heh. |
| 2022-10-28 00:26:25 +0000 | <monochrom> | I was starting with Haskell then showed the transition to math notation. |
| 2022-10-28 00:26:56 +0000 | <monochrom> | Lastly, horizontal composition of natural transformation is just Haskell composition of polymorphic functions. |
| 2022-10-28 00:27:25 +0000 | <monochrom> | If you have "reverse . reverse" it's a horizontal composition of natural transformations. |
| 2022-10-28 00:27:35 +0000 | <dolio> | No, that one's vertical. |
| 2022-10-28 00:28:20 +0000 | <monochrom> | OK I had a typo. That ruined everything didn't it? |
| 2022-10-28 00:28:24 +0000 | <dolio> | Horizontal is where you compose α with fmap β, and it doesn't matter which order. |
| 2022-10-28 00:28:38 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 00:28:50 +0000 | <monochrom> | μ . (T μ) = μ . (μ @ T a) is the right starting point. |
| 2022-10-28 00:30:10 +0000 | <monochrom> | It is also μ . (T (μ @ a)) = μ . (μ @ T a) |
| 2022-10-28 00:30:47 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 00:31:09 +0000 | <EvanR> | the thing is, μ is something already, and it's not polymorphic, so what are you doing |
| 2022-10-28 00:31:49 +0000 | hueso | (~root@user/hueso) (Quit: No Ping reply in 180 seconds.) |
| 2022-10-28 00:31:59 +0000 | <EvanR> | when reading the "math version" what does your polymorphism correspond to |
| 2022-10-28 00:32:29 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 00:32:38 +0000 | <monochrom> | I don't understand those questions and I don't know how to answer them. |
| 2022-10-28 00:32:42 +0000 | <EvanR> | μ : T² -> T |
| 2022-10-28 00:32:49 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 00:33:06 +0000 | <EvanR> | T : C -> C |
| 2022-10-28 00:33:09 +0000 | hueso | (~root@user/hueso) |
| 2022-10-28 00:33:28 +0000 | Batzy_ | Batzy |
| 2022-10-28 00:33:28 +0000 | <EvanR> | so wtf is μT and Tμ xD |
| 2022-10-28 00:33:59 +0000 | <dolio> | Natural transformations are families of arrows that commute with arrows. |
| 2022-10-28 00:34:01 +0000 | <geekosaur> | are you missing that Haskell's Monad is specialized to Hask (to the extent that it's a category) but CT monads aren't? |
| 2022-10-28 00:34:12 +0000 | mmhat | (~mmh@p200300f1c730768bee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1) |
| 2022-10-28 00:34:15 +0000 | <EvanR> | (dolio says it's horizontal composition after upgrading T to a N.T., which is what I guessed originally) |
| 2022-10-28 00:34:20 +0000 | <monochrom> | Tμ is fmap μ. μT is μ @ T a then eta away the "a". |
| 2022-10-28 00:34:21 +0000 | <dolio> | Polymorphic definitions are families of arrows that commute with relations. |
| 2022-10-28 00:35:26 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 2022-10-28 00:35:26 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 2022-10-28 00:35:26 +0000 | wroathe | (~wroathe@user/wroathe) |
| 2022-10-28 00:35:41 +0000 | mtjm | (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection) |
| 2022-10-28 00:36:11 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 244 seconds) |
| 2022-10-28 00:36:27 +0000 | <EvanR> | geekosaur, no but now I'm wondering what difference that makes, which I'll have to come back to |
| 2022-10-28 00:36:54 +0000 | mtjm | (~mutantmel@2604:a880:2:d0::208b:d001) |
| 2022-10-28 00:37:01 +0000 | <geekosaur> | I'm probably confused, but in CT terms the Haskell one isn't polymorphic |
| 2022-10-28 00:37:05 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 2022-10-28 00:37:13 +0000 | <geekosaur> | I think |
| 2022-10-28 00:37:30 +0000 | <monochrom> | Sure. But if you s/polymorphic/natural tranformation/ then you get the CT one. |
| 2022-10-28 00:37:36 +0000 | <geekosaur> | that said, when you wrote "μ : T² -> T", that looks to me polymorphic in T |
| 2022-10-28 00:37:37 +0000 | caryhartline | (~caryhartl@107.140.218.181) (Quit: caryhartline) |
| 2022-10-28 00:38:12 +0000 | <geekosaur> | unless the uppercase means a specific type/NT? |
| 2022-10-28 00:38:32 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 00:38:55 +0000 | <EvanR> | T is a constant xD |
| 2022-10-28 00:38:56 +0000 | <monochrom> | No. Instead, where Haskell writes "foo :: F a -> G a", CT writes "foo :: F => G". Then you find yourself going out of your way to write pointfree at the type level. |
| 2022-10-28 00:39:12 +0000 | <EvanR> | (functor) |
| 2022-10-28 00:39:13 +0000 | <monochrom> | T is the functor being declared as a monad. |
| 2022-10-28 00:39:41 +0000 | <geekosaur> | oh, but we're talking about join so the inner Functor must be the same as the outer? |
| 2022-10-28 00:40:40 +0000 | <EvanR> | monads are endofunctors so were only dealing in 1 category at a time |
| 2022-10-28 00:40:41 +0000 | <monochrom> | With join you have "T (T a) -> T a" but remember you have to write it pointfree i.e. without "a" so now you have to invent some kind of T². |
| 2022-10-28 00:41:15 +0000 | <EvanR> | yeah T . T |
| 2022-10-28 00:43:25 +0000 | jargon | (~jargon@184.101.208.112) |
| 2022-10-28 00:44:14 +0000 | <EvanR> | you're saying Tμ is fmap join, while T is defined to map morphisms in C, rather than natural transformations or the associated map that takes objects... |
| 2022-10-28 00:45:03 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 00:45:06 +0000 | <monochrom> | "T" is fmap, more precisely fmap@T, when used in the context of "T <morphism here>" |
| 2022-10-28 00:45:33 +0000 | <EvanR> | I get that fmap is involved, I'll do some more noodling with the definition of horizontal composition, and hopefully jackdk gets their lens question answered |
| 2022-10-28 00:45:41 +0000 | <monochrom> | Yes, whereas Haskell writes "fmap @ Maybe", math writes "Maybe". |
| 2022-10-28 00:47:49 +0000 | <monochrom> | μ is a natural transformation therefore is instantiatable to a morphism, in particular in this context μ@a. |
| 2022-10-28 00:47:49 +0000 | <EvanR> | maybe the missing link here is how you're going from μ the N.T. to a morphism join in the category |
| 2022-10-28 00:48:04 +0000 | <EvanR> | ooooh |
| 2022-10-28 00:48:13 +0000 | <EvanR> | that's the instantiation step |
| 2022-10-28 00:48:31 +0000 | Midjak | (~Midjak@82.66.147.146) |
| 2022-10-28 00:48:50 +0000 | <monochrom> | The whole equation begins as (μ @ a) . (T (μ @ a)) = (μ @ a) . (μ @ T a) |
| 2022-10-28 00:49:22 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Ping timeout: 250 seconds) |
| 2022-10-28 00:50:07 +0000 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 2022-10-28 00:51:04 +0000 | <EvanR> | so Tμ involves fmap and μT doesn't |
| 2022-10-28 00:51:05 +0000 | <monochrom> | I have given a not-so-good explanation of how to get to the usual math notation. Many CT books have good explanations. |
| 2022-10-28 00:51:53 +0000 | <EvanR> | in any case this text "here Tμ and μT are formed by 'horizontal composition'" didn't immediately explain it |
| 2022-10-28 00:51:56 +0000 | <monochrom> | Emily Riehl's has one. I think Fokkingga's "gentle introduction to category theory" has one too. |
| 2022-10-28 00:52:08 +0000 | <monochrom> | To be honest I hate this math notation though. |
| 2022-10-28 00:52:18 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 2022-10-28 00:52:29 +0000 | <monochrom> | Well yeah one has to learn "horizontal composition" first. |
| 2022-10-28 00:53:00 +0000 | <EvanR> | well that's what I was doing, and on THAT page, it says it's an operation between two natural transformations and doesn't seem to explain the functor notation |
| 2022-10-28 00:54:07 +0000 | <EvanR> | but now I gather it's like a functor preprocessor or postprocessor or something |
| 2022-10-28 00:55:24 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
| 2022-10-28 00:56:07 +0000 | <EvanR> | though in 1 of the 2 you didn't use fmap... |
| 2022-10-28 00:56:38 +0000 | <monochrom> | Right. |
| 2022-10-28 00:57:24 +0000 | <monochrom> | μT really comes from (μ @ T a) then dropping the a and the @ |
| 2022-10-28 00:57:51 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2022-10-28 00:58:10 +0000 | <monochrom> | In actual math notation it's μ<sub>T a</sub> then dropping the a and promoting the T from subscript to normal text. |
| 2022-10-28 00:58:17 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
| 2022-10-28 00:59:38 +0000 | <monochrom> | In Haskell it's "join . join = join . fmap join" so fmap happens on one side only. |
| 2022-10-28 00:59:45 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds) |
| 2022-10-28 00:59:48 +0000 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 2022-10-28 01:00:09 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 01:00:32 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 2022-10-28 01:01:26 +0000 | <monochrom> | You should also try to independently imagine how to write code for the type sig "T (T (T a)) -> T a", you will find two ways, and they are the two sides of the law. |
| 2022-10-28 01:02:15 +0000 | <EvanR> | and in a monad, the two ways are equivalent? |
| 2022-10-28 01:02:33 +0000 | <monochrom> | Yeah the monad law says we want them to do the same thing. |
| 2022-10-28 01:02:49 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 01:04:12 +0000 | cytokine_storm | (~cytokine_@user/cytokine-storm/x-1083107) |
| 2022-10-28 01:04:42 +0000 | crns | (~netcrns@user/crns) (Ping timeout: 260 seconds) |
| 2022-10-28 01:05:44 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 01:06:05 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 01:06:09 +0000 | crns | (~netcrns@p5dc33bf3.dip0.t-ipconnect.de) |
| 2022-10-28 01:06:09 +0000 | crns | (~netcrns@p5dc33bf3.dip0.t-ipconnect.de) (Changing host) |
| 2022-10-28 01:06:09 +0000 | crns | (~netcrns@user/crns) |
| 2022-10-28 01:06:39 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 01:07:11 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 244 seconds) |
| 2022-10-28 01:07:17 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
| 2022-10-28 01:07:36 +0000 | <EvanR> | alright wikipedia calls Fμ and μF whiskering, there it is explained |
| 2022-10-28 01:08:05 +0000 | codedmart | (codedmart@2600:3c01::f03c:92ff:fefe:8511) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 2022-10-28 01:08:20 +0000 | codedmart | (codedmart@2600:3c01::f03c:92ff:fefe:8511) |
| 2022-10-28 01:08:26 +0000 | <monochrom> | Yeah. I should have mentioned that name. I wasn't confident; I only saw it once (in Riehl's), wasn't sure it's the common name. |
| 2022-10-28 01:08:42 +0000 | <monochrom> | (Then again I didn't read many CT books. Just maybe 3.) |
| 2022-10-28 01:09:27 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 2022-10-28 01:09:59 +0000 | <EvanR> | I already knew this notation and what it meant, forget it, but never heard of whiskering before |
| 2022-10-28 01:10:04 +0000 | <EvanR> | forgot* |
| 2022-10-28 01:10:06 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 01:10:36 +0000 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 2022-10-28 01:12:33 +0000 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Quit: Lost terminal) |
| 2022-10-28 01:13:09 +0000 | <EvanR> | why do I care, well I was trying to follow this blog post which says 1. a monoid is a special case of a category 2. a category is special case of a monad and 3. a monad is a special case of a monoid |
| 2022-10-28 01:13:17 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 01:13:29 +0000 | <EvanR> | so I got stuck making sure I knew what a monad is before he goes off the deep end making a category a monad |
| 2022-10-28 01:14:07 +0000 | <EvanR> | https://graphicallinearalgebra.net/2017/04/16/a-monoid-is-a-category-a-category-is-a-monad-a-monad… |
| 2022-10-28 01:15:37 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 01:16:43 +0000 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 2022-10-28 01:18:04 +0000 | polo_ | (~polo@user/polo) |
| 2022-10-28 01:18:28 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 01:20:31 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds) |
| 2022-10-28 01:20:44 +0000 | polo | (~polo@user/polo) (Ping timeout: 276 seconds) |
| 2022-10-28 01:22:07 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 01:23:20 +0000 | polo_ | (~polo@user/polo) (Ping timeout: 276 seconds) |
| 2022-10-28 01:25:24 +0000 | cytokine_storm | (~cytokine_@user/cytokine-storm/x-1083107) (Quit: Quit) |
| 2022-10-28 01:26:13 +0000 | Natch | (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Ping timeout: 272 seconds) |
| 2022-10-28 01:26:56 +0000 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
| 2022-10-28 01:27:18 +0000 | xff0x | (~xff0x@2405:6580:b080:900:4ce0:8375:d2a4:aff0) (Ping timeout: 255 seconds) |
| 2022-10-28 01:28:05 +0000 | zaquest | (~notzaques@5.130.79.72) |
| 2022-10-28 01:29:23 +0000 | Natch | (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 2022-10-28 01:30:26 +0000 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 244 seconds) |
| 2022-10-28 01:32:42 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 2022-10-28 01:33:59 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
| 2022-10-28 01:39:13 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 244 seconds) |
| 2022-10-28 01:39:38 +0000 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
| 2022-10-28 01:40:50 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
| 2022-10-28 01:42:49 +0000 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 2022-10-28 01:43:26 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 2022-10-28 01:45:57 +0000 | boxscape | (~boxscape@81.191.27.107) |
| 2022-10-28 01:46:02 +0000 | boxscape | boxscape_1 |
| 2022-10-28 01:47:24 +0000 | ec | (~ec@gateway/tor-sasl/ec) |
| 2022-10-28 01:48:25 +0000 | nilradical | (~nilradica@user/naso) () |
| 2022-10-28 01:49:22 +0000 | boxscape_ | (~boxscape@81.191.27.107) (Ping timeout: 244 seconds) |
| 2022-10-28 01:50:04 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 01:51:25 +0000 | jargon | (~jargon@184.101.208.112) (Remote host closed the connection) |
| 2022-10-28 01:55:13 +0000 | hsw | (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Ping timeout: 246 seconds) |
| 2022-10-28 01:55:26 +0000 | gqplox | (~textual@2a02:c7c:941d:fd00:4102:e413:2c06:9bc1) (Quit: My MacBook Air has gone to sleep. ZZZzzz…) |
| 2022-10-28 01:55:52 +0000 | Kaipei | (~Kaiepi@108.175.84.104) |
| 2022-10-28 01:56:04 +0000 | gqplox | (~textual@2a02:c7c:941d:fd00:4102:e413:2c06:9bc1) |
| 2022-10-28 01:58:09 +0000 | nisstyre | (~wes@li798-187.members.linode.com) (Changing host) |
| 2022-10-28 01:58:09 +0000 | nisstyre | (~wes@user/nisstyre) |
| 2022-10-28 02:01:12 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
| 2022-10-28 02:07:10 +0000 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 2022-10-28 02:08:51 +0000 | td_ | (~td@83.135.9.51) (Ping timeout: 260 seconds) |
| 2022-10-28 02:09:10 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) |
| 2022-10-28 02:10:20 +0000 | td_ | (~td@83.135.9.42) |
| 2022-10-28 02:13:25 +0000 | hsw | (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) |
| 2022-10-28 02:16:25 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds) |
| 2022-10-28 02:16:39 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 02:17:00 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 02:18:47 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
| 2022-10-28 02:25:17 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 240 seconds) |
| 2022-10-28 02:26:34 +0000 | nate3 | (~nate@98.45.169.16) |
| 2022-10-28 02:28:58 +0000 | polo | (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 2022-10-28 02:30:29 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 02:31:27 +0000 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2022-10-28 02:36:12 +0000 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 2022-10-28 02:36:30 +0000 | ec | (~ec@gateway/tor-sasl/ec) |
| 2022-10-28 02:36:33 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 02:37:28 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 02:38:59 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 02:43:13 +0000 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
| 2022-10-28 02:44:07 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds) |
| 2022-10-28 02:44:32 +0000 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 2022-10-28 02:45:18 +0000 | mzan | (~quassel@mail.asterisell.com) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 2022-10-28 02:46:19 +0000 | mzan | (~quassel@mail.asterisell.com) |
| 2022-10-28 02:46:47 +0000 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 2022-10-28 02:46:50 +0000 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
| 2022-10-28 02:48:58 +0000 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 246 seconds) |
| 2022-10-28 02:49:23 +0000 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds) |
| 2022-10-28 02:49:33 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 02:51:23 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 02:52:26 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 02:52:27 +0000 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
| 2022-10-28 02:53:38 +0000 | ec | (~ec@gateway/tor-sasl/ec) |
| 2022-10-28 02:53:45 +0000 | <talismanick> | Is there a built-in function (context: using RIO) which is like `either` but auto-returns "mempty" on Right? |
| 2022-10-28 02:54:25 +0000 | <talismanick> | something like `\handleErr -> either handleErr mempty` |
| 2022-10-28 02:55:58 +0000 | <talismanick> | I wrote "flip either mempty <handle Left error case>" and now hlint won't shut up about "redundant flip" |
| 2022-10-28 02:58:03 +0000 | iteratee | (~kyle@162.218.222.107) (Ping timeout: 272 seconds) |
| 2022-10-28 02:59:30 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 03:00:36 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 03:01:39 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds) |
| 2022-10-28 03:03:35 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 03:03:42 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds) |
| 2022-10-28 03:08:19 +0000 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
| 2022-10-28 03:09:26 +0000 | polo | (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 2022-10-28 03:10:38 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 03:10:49 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Remote host closed the connection) |
| 2022-10-28 03:11:08 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) |
| 2022-10-28 03:11:37 +0000 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds) |
| 2022-10-28 03:12:09 +0000 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
| 2022-10-28 03:12:37 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 03:13:46 +0000 | vglfr | (~vglfr@145.224.100.164) (Ping timeout: 244 seconds) |
| 2022-10-28 03:16:18 +0000 | cyphase | (~cyphase@user/cyphase) (Ping timeout: 252 seconds) |
| 2022-10-28 03:17:36 +0000 | rembo10 | (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 2022-10-28 03:20:06 +0000 | cyphase | (~cyphase@user/cyphase) |
| 2022-10-28 03:20:10 +0000 | rembo10 | (~rembo10@main.remulis.com) |
| 2022-10-28 03:21:02 +0000 | nate3 | (~nate@98.45.169.16) (Ping timeout: 250 seconds) |
| 2022-10-28 03:23:09 +0000 | polo | (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 2022-10-28 03:23:24 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 2022-10-28 03:23:24 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 2022-10-28 03:23:24 +0000 | wroathe | (~wroathe@user/wroathe) |
| 2022-10-28 03:24:11 +0000 | AlexNoo | (~AlexNoo@178.34.162.124) (Read error: Connection reset by peer) |
| 2022-10-28 03:24:12 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 03:24:34 +0000 | AlexNoo | (~AlexNoo@178.34.162.124) |
| 2022-10-28 03:28:50 +0000 | polo | (~polo@user/polo) (Client Quit) |
| 2022-10-28 03:29:24 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 03:33:26 +0000 | slack4673 | (~slack1256@191.125.99.208) (Read error: Connection reset by peer) |
| 2022-10-28 03:34:38 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 252 seconds) |
| 2022-10-28 03:36:30 +0000 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 2022-10-28 03:38:30 +0000 | boxscape_1 | (~boxscape@81.191.27.107) (Remote host closed the connection) |
| 2022-10-28 03:44:37 +0000 | Vajb | (~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57) (Read error: Connection reset by peer) |
| 2022-10-28 03:44:49 +0000 | Vajb | (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) |
| 2022-10-28 03:47:18 +0000 | causal | (~user@50.35.83.177) |
| 2022-10-28 03:49:36 +0000 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 2022-10-28 03:53:57 +0000 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 240 seconds) |
| 2022-10-28 03:54:33 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 258 seconds) |
| 2022-10-28 03:57:39 +0000 | polo | (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 2022-10-28 04:00:25 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 04:03:13 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
| 2022-10-28 04:11:52 +0000 | polo | (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 2022-10-28 04:12:15 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 2022-10-28 04:14:42 +0000 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 2022-10-28 04:17:47 +0000 | arahael | (~arahael@14-202-55-135.tpgi.com.au) (Ping timeout: 260 seconds) |
| 2022-10-28 04:18:16 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in) |
| 2022-10-28 04:20:29 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 04:22:07 +0000 | mbuf | (~Shakthi@49.204.132.19) |
| 2022-10-28 04:22:42 +0000 | k8yun | (~k8yun@user/k8yun) |
| 2022-10-28 04:25:55 +0000 | gqplox | (~textual@2a02:c7c:941d:fd00:4102:e413:2c06:9bc1) (Quit: Textual IRC Client: www.textualapp.com) |
| 2022-10-28 04:30:48 +0000 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) |
| 2022-10-28 04:31:01 +0000 | arahael | (~arahael@14-200-56-241.tpgi.com.au) |
| 2022-10-28 04:31:09 +0000 | Vajb | (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 2022-10-28 04:31:23 +0000 | Vajb | (~Vajb@85-76-71-213-nat.elisa-mobile.fi) |
| 2022-10-28 04:33:18 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 04:33:58 +0000 | k8yun | (~k8yun@user/k8yun) (Quit: Leaving) |
| 2022-10-28 04:35:39 +0000 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
| 2022-10-28 04:37:16 +0000 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
| 2022-10-28 04:39:43 +0000 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
| 2022-10-28 04:40:20 +0000 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 250 seconds) |
| 2022-10-28 04:40:26 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 04:44:37 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Ping timeout: 240 seconds) |
| 2022-10-28 04:45:55 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds) |
| 2022-10-28 04:56:33 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
| 2022-10-28 04:59:50 +0000 | raym | (~ray@user/raym) (Ping timeout: 250 seconds) |
| 2022-10-28 05:01:21 +0000 | tjakway | (~tjakway@184.170.241.65) |
| 2022-10-28 05:07:53 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds) |
| 2022-10-28 05:11:56 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 05:13:10 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 05:14:00 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 2022-10-28 05:14:00 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 2022-10-28 05:14:00 +0000 | wroathe | (~wroathe@user/wroathe) |
| 2022-10-28 05:15:55 +0000 | tjakway | (~tjakway@184.170.241.65) (Quit: WeeChat 3.5) |
| 2022-10-28 05:17:43 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Ping timeout: 255 seconds) |
| 2022-10-28 05:18:45 +0000 | tjakway | (~tjakway@cpe-107-184-74-161.socal.res.rr.com) |
| 2022-10-28 05:27:41 +0000 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
| 2022-10-28 05:28:29 +0000 | jtomas | (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) |
| 2022-10-28 05:28:45 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 05:29:54 +0000 | polo | (~polo@user/polo) (Client Quit) |
| 2022-10-28 05:36:11 +0000 | tomku | (~tomku@user/tomku) (Ping timeout: 276 seconds) |
| 2022-10-28 05:36:46 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 05:40:40 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2022-10-28 05:42:02 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 05:43:16 +0000 | Maeda | (~Maeda@91-161-10-149.subs.proxad.net) (Quit: leaving) |
| 2022-10-28 05:44:22 +0000 | Maeda | (~Maeda@91-161-10-149.subs.proxad.net) |
| 2022-10-28 05:46:31 +0000 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 2022-10-28 05:47:01 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 2022-10-28 05:54:23 +0000 | nshepperd | (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (Quit: quit) |
| 2022-10-28 05:54:31 +0000 | nshepperd | (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) |
| 2022-10-28 05:56:55 +0000 | Maeda | (~Maeda@91-161-10-149.subs.proxad.net) (Quit: leaving) |
| 2022-10-28 05:57:34 +0000 | nate3 | (~nate@98.45.169.16) |
| 2022-10-28 05:58:30 +0000 | Maeda | (~Maeda@91-161-10-149.subs.proxad.net) |
| 2022-10-28 06:00:57 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2022-10-28 06:01:19 +0000 | Maeda | (~Maeda@91-161-10-149.subs.proxad.net) (Client Quit) |
| 2022-10-28 06:02:22 +0000 | Maeda | (~Maeda@91-161-10-149.subs.proxad.net) |
| 2022-10-28 06:02:40 +0000 | nate3 | (~nate@98.45.169.16) (Ping timeout: 250 seconds) |
| 2022-10-28 06:21:43 +0000 | hsw | (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Read error: Connection reset by peer) |
| 2022-10-28 06:21:49 +0000 | hsw_ | (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) |
| 2022-10-28 06:27:06 +0000 | mixfix41 | (~sdenynine@user/mixfix41) |
| 2022-10-28 06:27:48 +0000 | detuneattune | (~detuneatt@user/detuneattune) (Quit: The Lounge - https://thelounge.chat) |
| 2022-10-28 06:28:04 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 246 seconds) |
| 2022-10-28 06:28:50 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 2022-10-28 06:29:07 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 06:32:08 +0000 | mixfix41 | (~sdenynine@user/mixfix41) (Ping timeout: 250 seconds) |
| 2022-10-28 06:33:03 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 06:33:26 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 06:35:13 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Read error: Connection reset by peer) |
| 2022-10-28 06:35:33 +0000 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 2022-10-28 06:35:45 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) |
| 2022-10-28 06:37:46 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds) |
| 2022-10-28 06:41:25 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2022-10-28 06:42:06 +0000 | detuneattune | (~detuneatt@user/detuneattune) |
| 2022-10-28 06:43:08 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 06:43:10 +0000 | hsw_ | (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Read error: Connection reset by peer) |
| 2022-10-28 06:43:19 +0000 | hsw_ | (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) |
| 2022-10-28 06:45:37 +0000 | mixfix41 | (~sdenynine@user/mixfix41) |
| 2022-10-28 06:48:01 +0000 | raym | (~ray@user/raym) |
| 2022-10-28 06:52:14 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 276 seconds) |
| 2022-10-28 06:52:27 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 06:52:59 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 06:55:57 +0000 | echoreply | (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
| 2022-10-28 06:57:14 +0000 | echoreply | (~echoreply@45.32.163.16) |
| 2022-10-28 06:57:16 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 07:01:48 +0000 | lortabac | (~lortabac@2a01:e0a:541:b8f0:e14a:54e1:f555:fbc8) |
| 2022-10-28 07:04:55 +0000 | michalz | (~michalz@185.246.207.200) |
| 2022-10-28 07:06:14 +0000 | danza | (~francesco@151.82.113.246) |
| 2022-10-28 07:06:48 +0000 | gmg | (~user@user/gehmehgeh) |
| 2022-10-28 07:12:11 +0000 | jtomas | (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 260 seconds) |
| 2022-10-28 07:13:07 +0000 | acidjnk_new | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) |
| 2022-10-28 07:13:07 +0000 | acidjnk | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) |
| 2022-10-28 07:15:34 +0000 | m5zs7k | (aquares@web10.mydevil.net) (Ping timeout: 244 seconds) |
| 2022-10-28 07:16:32 +0000 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2022-10-28 07:16:38 +0000 | m5zs7k | (aquares@web10.mydevil.net) |
| 2022-10-28 07:17:22 +0000 | CiaoSen | (~Jura@p200300c95724d3002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 2022-10-28 07:18:43 +0000 | mncheck | (~mncheck@193.224.205.254) |
| 2022-10-28 07:20:15 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Ping timeout: 272 seconds) |
| 2022-10-28 07:22:37 +0000 | mixfix41 | (~sdenynine@user/mixfix41) (Remote host closed the connection) |
| 2022-10-28 07:25:48 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2022-10-28 07:25:59 +0000 | ft | (~ft@p508dbd59.dip0.t-ipconnect.de) (Quit: leaving) |
| 2022-10-28 07:26:14 +0000 | tjakway | (~tjakway@cpe-107-184-74-161.socal.res.rr.com) (Quit: WeeChat 3.5) |
| 2022-10-28 07:26:41 +0000 | kenran | (~user@user/kenran) |
| 2022-10-28 07:26:49 +0000 | kenran | (~user@user/kenran) (Remote host closed the connection) |
| 2022-10-28 07:28:37 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 07:28:58 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 2022-10-28 07:31:06 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 07:31:08 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds) |
| 2022-10-28 07:31:46 +0000 | mixfix41 | (~sdenynine@user/mixfix41) |
| 2022-10-28 07:34:44 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 07:36:24 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 07:39:15 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds) |
| 2022-10-28 07:45:48 +0000 | raym | (~ray@user/raym) (Ping timeout: 250 seconds) |
| 2022-10-28 07:46:09 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 07:46:21 +0000 | infinity0 | (~infinity0@pwned.gg) (Remote host closed the connection) |
| 2022-10-28 07:46:26 +0000 | infinity0_ | (~infinity0@pwned.gg) |
| 2022-10-28 07:46:29 +0000 | infinity0_ | infinity0 |
| 2022-10-28 07:46:40 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 07:46:40 +0000 | zeenk | (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) |
| 2022-10-28 07:46:52 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 07:48:07 +0000 | mixfix41 | (~sdenynine@user/mixfix41) (Ping timeout: 272 seconds) |
| 2022-10-28 07:50:16 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 07:51:32 +0000 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 2022-10-28 07:52:05 +0000 | fserucas|eod | (~fserucas|@2001:818:e376:a400:fb92:70c1:dd88:c7d7) |
| 2022-10-28 07:52:36 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 264 seconds) |
| 2022-10-28 07:56:57 +0000 | redmp | (~redmp@mobile-166-170-43-64.mycingular.net) (Ping timeout: 240 seconds) |
| 2022-10-28 07:58:09 +0000 | mmhat | (~mmh@p200300f1c730768bee086bfffe095315.dip0.t-ipconnect.de) |
| 2022-10-28 08:02:01 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 08:05:19 +0000 | mbuf | (~Shakthi@49.204.132.19) (Quit: Leaving) |
| 2022-10-28 08:12:15 +0000 | danza | (~francesco@151.82.113.246) (Read error: Connection reset by peer) |
| 2022-10-28 08:12:28 +0000 | cfricke | (~cfricke@user/cfricke) |
| 2022-10-28 08:18:10 +0000 | chele | (~chele@user/chele) |
| 2022-10-28 08:22:40 +0000 | chele | (~chele@user/chele) (Remote host closed the connection) |
| 2022-10-28 08:23:35 +0000 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds) |
| 2022-10-28 08:24:20 +0000 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
| 2022-10-28 08:29:27 +0000 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 2022-10-28 08:30:05 +0000 | nate3 | (~nate@98.45.169.16) |
| 2022-10-28 08:30:33 +0000 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 2022-10-28 08:32:53 +0000 | king_gs1 | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) |
| 2022-10-28 08:32:55 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Read error: Connection reset by peer) |
| 2022-10-28 08:32:55 +0000 | king_gs1 | king_gs |
| 2022-10-28 08:33:44 +0000 | shriekingnoise | (~shrieking@186.137.167.202) (Quit: Quit) |
| 2022-10-28 08:35:37 +0000 | nate3 | (~nate@98.45.169.16) (Ping timeout: 272 seconds) |
| 2022-10-28 08:38:02 +0000 | chele | (~chele@user/chele) |
| 2022-10-28 08:43:14 +0000 | erisco_ | (~erisco@d24-141-66-165.home.cgocable.net) |
| 2022-10-28 08:45:07 +0000 | erisco | (~erisco@d24-141-66-165.home.cgocable.net) (Ping timeout: 272 seconds) |
| 2022-10-28 08:45:07 +0000 | erisco_ | erisco |
| 2022-10-28 08:46:02 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 250 seconds) |
| 2022-10-28 08:47:43 +0000 | Kaipii | (~Kaiepi@108.175.84.104) |
| 2022-10-28 08:50:45 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 08:51:27 +0000 | Kaipei | (~Kaiepi@108.175.84.104) (Ping timeout: 272 seconds) |
| 2022-10-28 08:55:08 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Ping timeout: 250 seconds) |
| 2022-10-28 08:57:43 +0000 | __monty__ | (~toonn@user/toonn) |
| 2022-10-28 09:08:01 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) |
| 2022-10-28 09:08:32 +0000 | jonathanx_ | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) |
| 2022-10-28 09:11:59 +0000 | acidjnk | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 2022-10-28 09:13:00 +0000 | kenran | (~user@user/kenran) |
| 2022-10-28 09:13:07 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 09:17:54 +0000 | lortabac | (~lortabac@2a01:e0a:541:b8f0:e14a:54e1:f555:fbc8) (Quit: WeeChat 2.8) |
| 2022-10-28 09:20:15 +0000 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 2022-10-28 09:21:09 +0000 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds) |
| 2022-10-28 09:22:16 +0000 | ec | (~ec@gateway/tor-sasl/ec) |
| 2022-10-28 09:22:36 +0000 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds) |
| 2022-10-28 09:23:49 +0000 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
| 2022-10-28 09:27:28 +0000 | Kaipii | Kaiepi |
| 2022-10-28 09:28:43 +0000 | axeman | (~quassel@212.129.76.63) |
| 2022-10-28 09:29:27 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 2022-10-28 09:31:27 +0000 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2022-10-28 09:33:04 +0000 | <probie> | Is there a convenient way to recurse over type-level naturals, or am I stuck defining something like `data N = Z | S N` and `type family ToNat (n :: Nat) :: N where`? |
| 2022-10-28 09:34:50 +0000 | gmg | (~user@user/gehmehgeh) |
| 2022-10-28 09:35:12 +0000 | frost24 | (~frost@user/frost) |
| 2022-10-28 09:35:37 +0000 | <merijn> | There is a convenient way! It's called "writing your code in Idris" :D |
| 2022-10-28 09:35:42 +0000 | <probie> | I wrote iterated fmap (i.e `fmapn @2 (*2) [[1..4::Int],[2..7]] = [[2,4,6,8],[4,6,8,10,12,14]]`), but to use `Nat` I ended up needing a type like `fmapn :: forall n x y a b . FmapN (ToN n) x y a b => (a -> b) -> x -> y` |
| 2022-10-28 09:36:27 +0000 | <probie> | s/(*2)/(*2::Int)/ (type inference does not play nicely here) |
| 2022-10-28 09:38:57 +0000 | <probie> | merijn: and give up my laziness? |
| 2022-10-28 09:41:09 +0000 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
| 2022-10-28 09:41:26 +0000 | <tomsmeding> | some of us need to be strict and get some productive work done, once in a while, otherwise nothing would happen ;) |
| 2022-10-28 09:42:03 +0000 | <merijn> | There's a threshold past which writing type level stuff is more pain than gain, and this seems well past this threshold, unless your name is Oleg :p |
| 2022-10-28 09:42:59 +0000 | <tomsmeding> | but unless such a way has come into existence in the last two ghc versions or so, there is no way to conveniently recurse over ghc typelevel nats |
| 2022-10-28 09:43:01 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Read error: Connection reset by peer) |
| 2022-10-28 09:43:01 +0000 | king_gs1 | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) |
| 2022-10-28 09:43:21 +0000 | <tomsmeding> | but iirc there was a package that already had conversions back and forth to an actual inductive natural number type |
| 2022-10-28 09:45:20 +0000 | king_gs1 | king_gs |
| 2022-10-28 09:50:30 +0000 | raym | (~ray@user/raym) |
| 2022-10-28 09:50:50 +0000 | axeman | (~quassel@212.129.76.63) (Ping timeout: 252 seconds) |
| 2022-10-28 09:51:23 +0000 | axeman | (~quassel@212.129.77.169) |
| 2022-10-28 09:54:30 +0000 | stiell_ | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds) |
| 2022-10-28 09:55:52 +0000 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 2022-10-28 09:57:05 +0000 | eaxli | (~eax@user/eaxli) |
| 2022-10-28 09:58:06 +0000 | eaxli | (~eax@user/eaxli) (Quit: leaving) |
| 2022-10-28 09:58:09 +0000 | <tomsmeding> | talismanick: hlint not shutting up is easily solved by adding a .hlint.yaml file (if I remember the file name correctly) with some hints to ignore |
| 2022-10-28 09:58:35 +0000 | <merijn> | I have this one simpel trick for shutting up hlint (Neil Mitchell hates him!) |
| 2022-10-28 10:04:14 +0000 | <tomsmeding> | settings = { haskell = { plugin = { hlint = { globalOn = false } } } } |
| 2022-10-28 10:08:10 +0000 | <merijn> | tomsmeding: I was thinking "rm `which hlint`", but sure :p |
| 2022-10-28 10:08:52 +0000 | <tomsmeding> | merijn: I remember that at some point the path for that HLS setting changed, so I randomly got hlint notices again at some point |
| 2022-10-28 10:08:53 +0000 | frost24 | (~frost@user/frost) (Quit: Client closed) |
| 2022-10-28 10:09:07 +0000 | <tomsmeding> | I was like wait what no what changed |
| 2022-10-28 10:14:23 +0000 | CiaoSen | (~Jura@p200300c95724d3002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 2022-10-28 10:14:57 +0000 | axeman | (~quassel@212.129.77.169) (Ping timeout: 240 seconds) |
| 2022-10-28 10:15:02 +0000 | <Profpatsch> | newtype RevList a = RevList [a] |
| 2022-10-28 10:15:04 +0000 | <Profpatsch> | deriving (Semigroup) via (Dual [a]) |
| 2022-10-28 10:15:07 +0000 | <Profpatsch> | Can I make this work somehow? |
| 2022-10-28 10:16:43 +0000 | <tomsmeding> | > :set -XDerivingVia -XDerivingStrategies |
| 2022-10-28 10:16:45 +0000 | <lambdabot> | <hint>:1:1: error: parse error on input ‘:’ |
| 2022-10-28 10:16:52 +0000 | <tomsmeding> | % :set -XDerivingVia -XDerivingStrategies |
| 2022-10-28 10:16:52 +0000 | <yahb2> | <no output> |
| 2022-10-28 10:16:54 +0000 | <Profpatsch> | I guess I can add the Dual constructor to the RevList constructor |
| 2022-10-28 10:16:54 +0000 | <tomsmeding> | % import Data.Monoid |
| 2022-10-28 10:16:54 +0000 | <yahb2> | <no output> |
| 2022-10-28 10:17:00 +0000 | <tomsmeding> | % newtype RevList a = RevList [a] deriving (Semigroup) via (Dual [a]) deriving (Show) |
| 2022-10-28 10:17:00 +0000 | <yahb2> | <no output> |
| 2022-10-28 10:17:05 +0000 | <tomsmeding> | % RevList [1..4] <> RevList [5..8] |
| 2022-10-28 10:17:05 +0000 | <yahb2> | RevList [5,6,7,8,1,2,3,4] |
| 2022-10-28 10:17:09 +0000 | <tomsmeding> | Profpatsch: seems to work |
| 2022-10-28 10:17:18 +0000 | <Profpatsch> | tomsmeding: huuuh |
| 2022-10-28 10:17:29 +0000 | <Profpatsch> | maybe I’m missing an extension |
| 2022-10-28 10:17:54 +0000 | <tomsmeding> | both extensions that you need to enable are clearly indicated in the error you get |
| 2022-10-28 10:17:56 +0000 | <tomsmeding> | so unlikely |
| 2022-10-28 10:18:12 +0000 | <Profpatsch> | tomsmeding: one sec |
| 2022-10-28 10:18:26 +0000 | <Profpatsch> | tomsmeding: https://zerobin.verklagmichdo.ch/paste/oQbaRRFW#pMEIil63xvsyWeAlN1n0kd2MhmNBpfvG6z1bK+Uo2OV |
| 2022-10-28 10:18:37 +0000 | <Profpatsch> | Oh I should read the error message |
| 2022-10-28 10:18:41 +0000 | <Profpatsch> | I have to import the Dual constructor |
| 2022-10-28 10:18:46 +0000 | <tomsmeding> | :) |
| 2022-10-28 10:18:47 +0000 | <tomsmeding> | yes |
| 2022-10-28 10:18:55 +0000 | <Profpatsch> | lol |
| 2022-10-28 10:18:57 +0000 | <Profpatsch> | sorry |
| 2022-10-28 10:19:07 +0000 | <tomsmeding> | 'coerce' will try to not "use" stuff that you wouldn't be able to use normally |
| 2022-10-28 10:19:24 +0000 | <Profpatsch> | prime hls potential |
| 2022-10-28 10:19:36 +0000 | <Profpatsch> | but prob nontrivial to implement a suggestion to import Dual |
| 2022-10-28 10:19:48 +0000 | td_ | (~td@83.135.9.42) (Ping timeout: 252 seconds) |
| 2022-10-28 10:19:49 +0000 | <Profpatsch> | I really need to get into hls dev |
| 2022-10-28 10:20:02 +0000 | <merijn> | Sure, but do you wanna implement custom warnings for every newtype in hls? |
| 2022-10-28 10:20:27 +0000 | <merijn> | Would be more sensible to work on the machine interface for GHC errors and have that integrated in there |
| 2022-10-28 10:20:33 +0000 | <tomsmeding> | merijn: I guess it could recognise "The data constructor `bla' of newtype `bla' is not in scope", and suggest import |
| 2022-10-28 10:20:37 +0000 | <tomsmeding> | yes for sure |
| 2022-10-28 10:20:43 +0000 | <Profpatsch> | well the GHC error would have to be structured enough |
| 2022-10-28 10:21:00 +0000 | <Profpatsch> | to turn the part that says “you might not have imported Dual” into a hls suggestion |
| 2022-10-28 10:21:10 +0000 | <merijn> | Profpatsch: There's a running project for structured GHC errors |
| 2022-10-28 10:21:21 +0000 | <Profpatsch> | So I guess by extension I’d have to get into GHC development lol |
| 2022-10-28 10:21:27 +0000 | <Profpatsch> | neverending rabbit holes |
| 2022-10-28 10:21:44 +0000 | <merijn> | tbh, GHC is pretty easy to work on if you're not touching the scary parts (type checker) |
| 2022-10-28 10:21:54 +0000 | <Profpatsch> | every nix user is a nix developer |
| 2022-10-28 10:21:58 +0000 | <Profpatsch> | every haskell user is a ghc developer |
| 2022-10-28 10:22:01 +0000 | <merijn> | One of my first ever Haskell contributions was a GHC patch |
| 2022-10-28 10:22:28 +0000 | <merijn> | The problem is that not every Haskell user is a GHC developer :p |
| 2022-10-28 10:22:29 +0000 | <geekosaur> | I have yet to contrib a patch but I review RTS code |
| 2022-10-28 10:22:58 +0000 | <Profpatsch> | the structured errors would be exposed via the GHC lib? |
| 2022-10-28 10:23:22 +0000 | <merijn> | Actually my *two* first Haskell contributiosn where GHC and I'm kinda proud of both, despite being trivial :p |
| 2022-10-28 10:23:48 +0000 | <Profpatsch> | https://gitlab.haskell.org/ghc/ghc/-/issues/18516 |
| 2022-10-28 10:24:42 +0000 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) |
| 2022-10-28 10:26:02 +0000 | <Profpatsch> | I feel like this is too abstract tho |
| 2022-10-28 10:26:31 +0000 | <Profpatsch> | It would be better to just start with ideas for hls suggestions, and push them upstream by implementing the minimal amount of structure needed for these suggestions in GHC lib |
| 2022-10-28 10:27:05 +0000 | <Profpatsch> | (keeping that interface unstable between GHC versions until a nice interface is reached by experimentation) |
| 2022-10-28 10:27:55 +0000 | <tomsmeding> | I think programming against another unstable ghc interface is the absolute last thing that hls developers are looking for |
| 2022-10-28 10:27:57 +0000 | <Profpatsch> | then hls can add more and more stuff per GHC version without having to resort to dump string parsing |
| 2022-10-28 10:28:14 +0000 | <Profpatsch> | *dumb |
| 2022-10-28 10:28:30 +0000 | <Profpatsch> | tomsmeding: anything is more stable than parsing string output |
| 2022-10-28 10:28:41 +0000 | xff0x | (~xff0x@2405:6580:b080:900:2e5f:ef77:7c98:ca52) |
| 2022-10-28 10:29:19 +0000 | <Profpatsch> | well, string is the universal interface :P |
| 2022-10-28 10:29:26 +0000 | td_ | (~td@83.135.9.42) |
| 2022-10-28 10:29:37 +0000 | <Profpatsch> | as per the unix philosophy |
| 2022-10-28 10:29:40 +0000 | <merijn> | Profpatsch: hls is already ginormous |
| 2022-10-28 10:29:48 +0000 | <Profpatsch> | merijn: why? |
| 2022-10-28 10:29:53 +0000 | <merijn> | Profpatsch: Making it bigger with tons of custom code is undesirable |
| 2022-10-28 10:30:44 +0000 | axeman | (~quassel@212.129.78.247) |
| 2022-10-28 10:31:04 +0000 | <Profpatsch> | merijn: by that metric we should just outright delete 3 quarters of the Cabal codebase :) |
| 2022-10-28 10:31:54 +0000 | <Profpatsch> | which reminds me, I still have to finish the hoogle patches I submitted |
| 2022-10-28 10:32:20 +0000 | <merijn> | Except deleting that cabal could would break working things, I'm saying we shouldn't *add more* if possible |
| 2022-10-28 10:32:41 +0000 | <Profpatsch> | merijn: is anybody using backpack? :) |
| 2022-10-28 10:32:54 +0000 | mmhat | (~mmh@p200300f1c730768bee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1) |
| 2022-10-28 10:33:01 +0000 | <tomsmeding> | kmett is, I think |
| 2022-10-28 10:33:12 +0000 | <Franciman> | i am |
| 2022-10-28 10:33:14 +0000 | <Franciman> | in ocaml |
| 2022-10-28 10:33:16 +0000 | <Franciman> | way better |
| 2022-10-28 10:33:18 +0000 | <Profpatsch> | lol |
| 2022-10-28 10:33:22 +0000 | <Profpatsch> | touche |
| 2022-10-28 10:33:25 +0000 | <merijn> | backpack is kinda dead due to ezyang getting hired away from Haskell into writing pytorch stuff |
| 2022-10-28 10:33:26 +0000 | <Profpatsch> | éééé |
| 2022-10-28 10:33:38 +0000 | <merijn> | As he was the driving force behind its implementation |
| 2022-10-28 10:33:44 +0000 | perrierjouet | (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Ping timeout: 252 seconds) |
| 2022-10-28 10:34:14 +0000 | <Profpatsch> | Oh you can derive multiple things in the same clause super cool deriving (Semigroup, Monoid) via (Dual [a]) |
| 2022-10-28 10:41:36 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 2022-10-28 10:42:20 +0000 | acidjnk_new | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 2022-10-28 10:42:46 +0000 | kenran | (~user@user/kenran) (Remote host closed the connection) |
| 2022-10-28 10:47:46 +0000 | stiell_ | (~stiell@gateway/tor-sasl/stiell) |
| 2022-10-28 10:59:44 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) |
| 2022-10-28 10:59:44 +0000 | acidjnk_new | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) |
| 2022-10-28 11:00:20 +0000 | acidjnk_new | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) (Client Quit) |
| 2022-10-28 11:00:30 +0000 | axeman | (~quassel@212.129.78.247) (Ping timeout: 252 seconds) |
| 2022-10-28 11:05:01 +0000 | birdgoose | (~jesse@2406:e003:1d87:6601:e725:b6b4:ace8:4ebe) |
| 2022-10-28 11:13:45 +0000 | Kaiepi | (~Kaiepi@108.175.84.104) (Quit: Leaving) |
| 2022-10-28 11:15:18 +0000 | Kaiepi | (~Kaiepi@108.175.84.104) |
| 2022-10-28 11:29:13 +0000 | shriekingnoise | (~shrieking@186.137.167.202) |
| 2022-10-28 11:30:16 +0000 | frost53 | (~frost@user/frost) |
| 2022-10-28 11:32:21 +0000 | Midjak | (~Midjak@82.66.147.146) |
| 2022-10-28 11:42:50 +0000 | birdgoose | (~jesse@2406:e003:1d87:6601:e725:b6b4:ace8:4ebe) (Ping timeout: 250 seconds) |
| 2022-10-28 11:47:33 +0000 | jtomas | (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) |
| 2022-10-28 11:49:25 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
| 2022-10-28 11:53:05 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 2022-10-28 11:56:15 +0000 | frost53 | (~frost@user/frost) (Quit: Client closed) |
| 2022-10-28 11:57:43 +0000 | frost70 | (~frost@user/frost) |
| 2022-10-28 12:04:50 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds) |
| 2022-10-28 12:09:32 +0000 | yuzhao | (~yuzhao@36.112.45.73) |
| 2022-10-28 12:15:03 +0000 | geekosaur | (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
| 2022-10-28 12:15:37 +0000 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 2022-10-28 12:15:57 +0000 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 240 seconds) |
| 2022-10-28 12:16:36 +0000 | yuzhao | (~yuzhao@36.112.45.73) (Read error: Connection reset by peer) |
| 2022-10-28 12:17:36 +0000 | geekosaur | (~geekosaur@xmonad/geekosaur) |
| 2022-10-28 12:17:54 +0000 | <MangoIV[m]> | Does anybody here have know a good library to work with formal grammars? I mainly need cf. |
| 2022-10-28 12:19:48 +0000 | cheater | (~Username@user/cheater) (Quit: BitchX: fit to feel groovy) |
| 2022-10-28 12:19:53 +0000 | chomwitt | (~chomwitt@2a02:587:dc10:8200:1ac0:4dff:fedb:a3f1) |
| 2022-10-28 12:20:36 +0000 | cheater | (~Username@user/cheater) |
| 2022-10-28 12:21:44 +0000 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 2022-10-28 12:22:20 +0000 | <MangoIV[m]> | s/have// |
| 2022-10-28 12:22:39 +0000 | <merijn> | Work in what way? |
| 2022-10-28 12:23:44 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a04040206df7d69f9dc.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 2022-10-28 12:23:47 +0000 | <MangoIV[m]> | construct them in an eDSL, do algorithms on them, generate strings from them, stuff like that. |
| 2022-10-28 12:24:24 +0000 | leagueoflegends | (~leagueofl@user/leagueoflegends) |
| 2022-10-28 12:24:34 +0000 | raek | (raek@2a01:7e01::f03c:93ff:fedf:bffe) |
| 2022-10-28 12:24:37 +0000 | <leagueoflegends> | what is a monad and can you give a code example/ |
| 2022-10-28 12:24:50 +0000 | yuzhao | (~yuzhao@36.112.45.73) |
| 2022-10-28 12:26:41 +0000 | <geekosaur> | http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html |
| 2022-10-28 12:27:17 +0000 | <geekosaur> | you don't care about anything beyond that |
| 2022-10-28 12:27:58 +0000 | frost70 | (~frost@user/frost) (Ping timeout: 244 seconds) |
| 2022-10-28 12:28:59 +0000 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds) |
| 2022-10-28 12:31:22 +0000 | <leagueoflegends> | wait |
| 2022-10-28 12:31:22 +0000 | yuzhao | (~yuzhao@36.112.45.73) (Ping timeout: 250 seconds) |
| 2022-10-28 12:31:36 +0000 | nate3 | (~nate@98.45.169.16) |
| 2022-10-28 12:31:49 +0000 | <leagueoflegends> | leading up to a monad is a function that returns two separate times |
| 2022-10-28 12:31:56 +0000 | <leagueoflegends> | or at the same time |
| 2022-10-28 12:32:53 +0000 | <probie> | What is an iterable and can you give a code example? |
| 2022-10-28 12:34:10 +0000 | king_gs | (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 246 seconds) |
| 2022-10-28 12:34:27 +0000 | <leagueoflegends> | in what languge |
| 2022-10-28 12:34:29 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 12:34:29 +0000 | <leagueoflegends> | language |
| 2022-10-28 12:35:18 +0000 | <merijn> | leagueoflegends: Trying to understand the idea behind "monad" without first learning Haskell's type system and typeclasses is kinda futile, it won't make much sense. And once you understand how the types and typeclasses work then it's mostly obvious |
| 2022-10-28 12:36:05 +0000 | <geekosaur> | returning two things at the same time is just a tuple |
| 2022-10-28 12:36:13 +0000 | <probie> | leagueoflegends: In doesn't matter which language. The "joke" is that it defines an interface and many things satisfy that interface. |
| 2022-10-28 12:36:13 +0000 | <leagueoflegends> | oh |
| 2022-10-28 12:36:28 +0000 | nate3 | (~nate@98.45.169.16) (Ping timeout: 255 seconds) |
| 2022-10-28 12:38:05 +0000 | nilradical | (~nilradica@user/naso) |
| 2022-10-28 12:39:13 +0000 | <leagueoflegends> | what's the preferred way to install haskell on windows |
| 2022-10-28 12:39:17 +0000 | <probie> | For an example of a valid, but useless monad `data AMonad a = AMonad`, `instance Functor AMonad where fmap _ _ = AMonad` `instance Applicative AMonad where {pure _ = AMonad; (<*>) _ _ = AMonad}` `instance Monad AMonad where (>>=) _ _ = AMonad` |
| 2022-10-28 12:39:47 +0000 | <probie> | On all platforms, if you're not using nix, via ghcup |
| 2022-10-28 12:40:07 +0000 | <leagueoflegends> | why can't I just download an installer |
| 2022-10-28 12:41:46 +0000 | <geekosaur> | people use installers these days? |
| 2022-10-28 12:42:34 +0000 | <leagueoflegends> | never mind |
| 2022-10-28 12:42:37 +0000 | <leagueoflegends> | I'll use ghcip |
| 2022-10-28 12:42:40 +0000 | <leagueoflegends> | ghcup |
| 2022-10-28 12:44:11 +0000 | <leagueoflegends> | what is stack? |
| 2022-10-28 12:44:23 +0000 | CiaoSen | (~Jura@p200300c95724d3002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 2022-10-28 12:46:39 +0000 | <leagueoflegends> | should I install stack? |
| 2022-10-28 12:47:00 +0000 | <probie> | A build tool. It used to very popular, but it's less popular these days after many of the good ideas it introduced landed in cabal. Unless you're learning by following a tutorial that explicitly uses it, I wouldn't worry about it |
| 2022-10-28 12:47:09 +0000 | <probie> | s/used to very/used to be very/ |
| 2022-10-28 12:47:12 +0000 | lortabac | (~lortabac@2a01:e0a:541:b8f0:16c5:7e8f:5f7a:cef6) |
| 2022-10-28 12:47:48 +0000 | <leagueoflegends> | I said yes to the haskell language server as I want to use vscode or vim etc with haskell |
| 2022-10-28 12:48:03 +0000 | <leagueoflegends> | unless I'm doing something very wrong |
| 2022-10-28 12:48:39 +0000 | <probie> | Installing hls is probably a good idea |
| 2022-10-28 12:52:34 +0000 | <leagueoflegends> | is there any reason why GHC is so big say compared to a C compiler/ |
| 2022-10-28 12:52:42 +0000 | <leagueoflegends> | ?* |
| 2022-10-28 12:52:42 +0000 | <lambdabot> | Maybe you meant: v @ ? . |
| 2022-10-28 12:55:03 +0000 | <geekosaur> | it's doing a lot more than a C compiler |
| 2022-10-28 12:55:52 +0000 | <leagueoflegends> | ghc is .5gb while gcc is like .05gb |
| 2022-10-28 12:58:34 +0000 | <merijn> | leagueoflegends: A lot of gcc's install size is hidden inside your OS :p I have a user install of gcc in my homedir, it's 1.6 GB. Clang is well over 4-5 GB |
| 2022-10-28 12:58:34 +0000 | <leagueoflegends> | oops I accidentally install stack |
| 2022-10-28 12:58:43 +0000 | <leagueoflegends> | oh |
| 2022-10-28 12:58:55 +0000 | <leagueoflegends> | installed* |
| 2022-10-28 12:59:07 +0000 | <leagueoflegends> | will it conflict with cabal |
| 2022-10-28 12:59:20 +0000 | <probie> | The source for gcc is larger than the source for GHC thought :p |
| 2022-10-28 12:59:27 +0000 | <probie> | stack doesn't conflict with cabal |
| 2022-10-28 12:59:38 +0000 | <probie> | in fact, stack still needs cabal |
| 2022-10-28 12:59:49 +0000 | littlefinger | (~littlefin@pool-100-15-237-121.washdc.fios.verizon.net) |
| 2022-10-28 12:59:53 +0000 | <probie> | s/thought/though/ |
| 2022-10-28 12:59:58 +0000 | constxd | (~brad@47.55.121.233) |
| 2022-10-28 13:03:02 +0000 | <merijn> | probie: stack still needs Cabal it doesn't need cabal (the executable, aka cabal-install) |
| 2022-10-28 13:03:52 +0000 | <leagueoflegends> | do you recommend vim or neovim |
| 2022-10-28 13:04:10 +0000 | <leagueoflegends> | and ghcup installed haskell successfully |
| 2022-10-28 13:04:15 +0000 | <leagueoflegends> | I guess that's a start |
| 2022-10-28 13:05:10 +0000 | <probie> | merijn: does ghcup install them separately? I live in a nix world |
| 2022-10-28 13:06:17 +0000 | lortabac | (~lortabac@2a01:e0a:541:b8f0:16c5:7e8f:5f7a:cef6) (Ping timeout: 240 seconds) |
| 2022-10-28 13:07:38 +0000 | <geekosaur> | ghcup initially installs just ghc (9.2.4 currently) and HLS. `ghcup tui` lets you install stack and/or cabal |
| 2022-10-28 13:07:51 +0000 | <geekosaur> | (or `ghcup install stack`/`ghcup install cabal`) |
| 2022-10-28 13:07:57 +0000 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 272 seconds) |
| 2022-10-28 13:08:08 +0000 | <probie> | leagueoflegends: I think neovim with coc is gaining ground over regular vim, but I'm an emacs user and most of my coworkers use vscode, so take my opinion with a grain of salt |
| 2022-10-28 13:08:32 +0000 | <merijn> | probie: I dunno, I don't use ghcup, because I'm a grumpy old man |
| 2022-10-28 13:09:15 +0000 | <geekosaur> | <-- this grumpy old man uses ghcup. and even vscode for some things. but not nvim+coc |
| 2022-10-28 13:10:25 +0000 | <MangoIV[m]> | <MangoIV[m]> "Does anybody here have know a..." <- bumping this. Ideally it would also have an efficient representation for the grammars. |
| 2022-10-28 13:11:16 +0000 | <geekosaur> | might work better to ask on reddit or the discourse |
| 2022-10-28 13:11:24 +0000 | <merijn> | or haskell-cafe, yeah |
| 2022-10-28 13:11:29 +0000 | lortabac | (~lortabac@37.166.20.4) |
| 2022-10-28 13:14:30 +0000 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 2022-10-28 13:16:00 +0000 | lortabac | (~lortabac@37.166.20.4) (Ping timeout: 250 seconds) |
| 2022-10-28 13:17:41 +0000 | lortabac | (~lortabac@2a01:e0a:541:b8f0:a2d7:73b4:5d4c:1129) |
| 2022-10-28 13:20:54 +0000 | <leagueoflegends> | what is coc |
| 2022-10-28 13:23:17 +0000 | L29Ah | (~L29Ah@wikipedia/L29Ah) (Ping timeout: 240 seconds) |
| 2022-10-28 13:23:56 +0000 | <geekosaur> | language server protocol plugin for nvim |
| 2022-10-28 13:24:15 +0000 | <geekosaur> | lets it speak to HLS and other LSP engines (for C, JS, etc.) |
| 2022-10-28 13:24:24 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds) |
| 2022-10-28 13:26:09 +0000 | ec | (~ec@gateway/tor-sasl/ec) |
| 2022-10-28 13:26:13 +0000 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
| 2022-10-28 13:27:56 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 2022-10-28 13:32:57 +0000 | ft | (~ft@p508dbd59.dip0.t-ipconnect.de) |
| 2022-10-28 13:34:59 +0000 | littlefinger | (~littlefin@pool-100-15-237-121.washdc.fios.verizon.net) (Quit: Client closed) |
| 2022-10-28 13:36:06 +0000 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
| 2022-10-28 13:37:05 +0000 | nilradical | (~nilradica@user/naso) |
| 2022-10-28 13:38:56 +0000 | <leagueoflegends> | what's the preferred way to install haskell in ubuntu? |
| 2022-10-28 13:39:23 +0000 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1) |
| 2022-10-28 13:40:13 +0000 | vpan | (~0@212.117.1.172) |
| 2022-10-28 13:40:44 +0000 | jonathanx__ | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) |
| 2022-10-28 13:43:31 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Ping timeout: 255 seconds) |
| 2022-10-28 13:45:19 +0000 | jonathanx_ | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Ping timeout: 272 seconds) |
| 2022-10-28 13:45:26 +0000 | <geekosaur> | same way. most OS distros have very old versions of GHC |
| 2022-10-28 13:45:57 +0000 | jonathanx__ | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Ping timeout: 272 seconds) |
| 2022-10-28 13:52:04 +0000 | <leagueoflegends> | ok, thanks |
| 2022-10-28 13:55:02 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 2022-10-28 13:55:02 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 2022-10-28 13:55:02 +0000 | wroathe | (~wroathe@user/wroathe) |
| 2022-10-28 13:55:22 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 13:56:22 +0000 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
| 2022-10-28 13:57:34 +0000 | Tuplanolla | (~Tuplanoll@91-159-69-11.elisa-laajakaista.fi) |
| 2022-10-28 13:58:59 +0000 | slack1256 | (~slack1256@186.11.47.202) |
| 2022-10-28 13:59:48 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Ping timeout: 252 seconds) |
| 2022-10-28 14:00:39 +0000 | slac95907 | (~slack1256@191.125.99.208) |
| 2022-10-28 14:00:44 +0000 | nilradical | (~nilradica@user/naso) |
| 2022-10-28 14:02:17 +0000 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 240 seconds) |
| 2022-10-28 14:02:51 +0000 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 2022-10-28 14:03:28 +0000 | slack1256 | (~slack1256@186.11.47.202) (Ping timeout: 252 seconds) |
| 2022-10-28 14:04:15 +0000 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
| 2022-10-28 14:04:31 +0000 | nilradical | (~nilradica@user/naso) |
| 2022-10-28 14:05:07 +0000 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 2022-10-28 14:07:03 +0000 | mncheck | (~mncheck@193.224.205.254) (Quit: Leaving) |
| 2022-10-28 14:07:09 +0000 | mncheckm | (~mncheck@193.224.205.254) |
| 2022-10-28 14:07:22 +0000 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
| 2022-10-28 14:13:06 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 14:13:37 +0000 | Sgeo | (~Sgeo@user/sgeo) |
| 2022-10-28 14:15:37 +0000 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 2022-10-28 14:16:44 +0000 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 2022-10-28 14:18:15 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Ping timeout: 272 seconds) |
| 2022-10-28 14:27:16 +0000 | jonathanx | (~jonathan@94.234.119.48) |
| 2022-10-28 14:28:39 +0000 | mastarija | (~mastarija@188.252.199.190) |
| 2022-10-28 14:30:21 +0000 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
| 2022-10-28 14:30:39 +0000 | <mastarija> | If I have this function in a file `foo = id :: Ord a => a -> a`, and load it into ghci and say `:t x = foo []` I get `[] :: Ord a => [a]`. |
| 2022-10-28 14:31:38 +0000 | <mastarija> | However, if I write `x = foo []` alongside the `foo` in that same file I get an error saying "ambiguous type variable a0 prevents constraint Ord a0 from being solved" |
| 2022-10-28 14:31:44 +0000 | <mastarija> | If I don't add the type signature. |
| 2022-10-28 14:32:32 +0000 | king_gs | (~Thunderbi@187.201.83.115) |
| 2022-10-28 14:34:07 +0000 | king_gs | (~Thunderbi@187.201.83.115) (Client Quit) |
| 2022-10-28 14:36:42 +0000 | <dolio> | That's the monomorphism restriction. |
| 2022-10-28 14:37:14 +0000 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 2022-10-28 14:38:46 +0000 | <mastarija> | Ah.. I thought that too, and have added the MonomorphismRestriction extension instead of NoMonomorphismRestriction |
| 2022-10-28 14:38:49 +0000 | <mastarija> | x/ |
| 2022-10-28 14:39:54 +0000 | <mastarija> | thanks dolio |
| 2022-10-28 14:40:00 +0000 | <dolio> | No problem. |
| 2022-10-28 14:42:15 +0000 | tomku | (~tomku@user/tomku) |
| 2022-10-28 14:44:01 +0000 | burakcank | (burakcank@has.arrived.and.is.ready-to.party) (Killed (NickServ (GHOST command used by burakcank_!B438@free.znc.bg))) |
| 2022-10-28 14:44:15 +0000 | burakcank | (bnc4free@has.arrived.and.is.ready-to.party) |
| 2022-10-28 14:44:44 +0000 | mastarija | (~mastarija@188.252.199.190) (Quit: Leaving) |
| 2022-10-28 14:46:24 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 15:04:02 +0000 | chele | (~chele@user/chele) (Remote host closed the connection) |
| 2022-10-28 15:04:35 +0000 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 2022-10-28 15:04:37 +0000 | CiaoSen | (~Jura@p200300c95724d3002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 2022-10-28 15:05:38 +0000 | jonathanx | (~jonathan@94.234.119.48) (Ping timeout: 250 seconds) |
| 2022-10-28 15:06:14 +0000 | lortabac | (~lortabac@2a01:e0a:541:b8f0:a2d7:73b4:5d4c:1129) (Ping timeout: 276 seconds) |
| 2022-10-28 15:09:02 +0000 | boxscape | (~boxscape@81.191.27.107) |
| 2022-10-28 15:09:16 +0000 | econo | (uid147250@user/econo) |
| 2022-10-28 15:10:02 +0000 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
| 2022-10-28 15:12:22 +0000 | jonathanx | (~jonathan@c-5eea7730-74736162.cust.telenor.se) |
| 2022-10-28 15:13:10 +0000 | leagueoflegends | (~leagueofl@user/leagueoflegends) (Remote host closed the connection) |
| 2022-10-28 15:24:09 +0000 | jakalx | (~jakalx@base.jakalx.net) () |
| 2022-10-28 15:25:41 +0000 | jakalx | (~jakalx@base.jakalx.net) |
| 2022-10-28 15:26:07 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds) |
| 2022-10-28 15:28:22 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
| 2022-10-28 15:31:10 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 2022-10-28 15:32:28 +0000 | mrvdb | (~mrvdb@185.92.221.186) (Quit: ZNC 1.8.2 - https://znc.in) |
| 2022-10-28 15:34:34 +0000 | jonathanx | (~jonathan@c-5eea7730-74736162.cust.telenor.se) (Remote host closed the connection) |
| 2022-10-28 15:34:55 +0000 | mrvdb | (~mrvdb@185.92.221.186) |
| 2022-10-28 15:34:56 +0000 | jonathanx | (~jonathan@94.234.119.48) |
| 2022-10-28 15:36:36 +0000 | boxscape | boxscape_ |
| 2022-10-28 15:40:10 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 15:46:06 +0000 | jonathanx | (~jonathan@94.234.119.48) (Ping timeout: 260 seconds) |
| 2022-10-28 15:49:58 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a26d59898e5c9870d6b.dip0.t-ipconnect.de) |
| 2022-10-28 15:56:18 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 15:56:37 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 15:56:53 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 15:57:25 +0000 | zeenk | (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!) |
| 2022-10-28 16:00:04 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 16:00:22 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 16:04:22 +0000 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
| 2022-10-28 16:06:19 +0000 | <monochrom> | EvanR: I now wonder if wikiepedia had a typo. If it said instead "here T |
| 2022-10-28 16:06:21 +0000 | <monochrom> | err |
| 2022-10-28 16:06:53 +0000 | <monochrom> | EvanR: I now wonder if wikiepedia had a typo. If it said instead "here Tµ and µT are formed by whiskering", that would be perfect. |
| 2022-10-28 16:08:34 +0000 | mrvdb | (~mrvdb@185.92.221.186) (Quit: ZNC 1.8.2 - https://znc.in) |
| 2022-10-28 16:08:50 +0000 | mrvdb | (~mrvdb@2001:19f0:5000:8582:5400:ff:fe07:3df5) |
| 2022-10-28 16:08:56 +0000 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 2022-10-28 16:10:20 +0000 | jonathanx | (~jonathan@c-5eea738b-74736162.cust.telenor.se) |
| 2022-10-28 16:16:49 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 16:18:25 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) |
| 2022-10-28 16:20:37 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) (Remote host closed the connection) |
| 2022-10-28 16:20:57 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) |
| 2022-10-28 16:21:07 +0000 | jonathanx | (~jonathan@c-5eea738b-74736162.cust.telenor.se) (Ping timeout: 272 seconds) |
| 2022-10-28 16:21:54 +0000 | Kaiepi | (~Kaiepi@108.175.84.104) (Ping timeout: 255 seconds) |
| 2022-10-28 16:24:07 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) (Read error: Connection reset by peer) |
| 2022-10-28 16:25:00 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) |
| 2022-10-28 16:26:34 +0000 | phma | (~phma@host-67-44-208-88.hnremote.net) (Read error: Connection reset by peer) |
| 2022-10-28 16:27:21 +0000 | phma | (~phma@2001:5b0:212a:cc58:94b0:45f6:bc48:ff7d) |
| 2022-10-28 16:27:44 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 2022-10-28 16:28:43 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds) |
| 2022-10-28 16:31:15 +0000 | fserucas|eod | (~fserucas|@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Quit: Leaving) |
| 2022-10-28 16:31:29 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 2022-10-28 16:31:50 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) |
| 2022-10-28 16:33:06 +0000 | nate3 | (~nate@98.45.169.16) |
| 2022-10-28 16:33:46 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 16:35:05 +0000 | titibandit | (~titibandi@xdsl-87-78-36-34.nc.de) |
| 2022-10-28 16:37:37 +0000 | nate3 | (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 2022-10-28 16:40:15 +0000 | jonathanx | (~jonathan@94.234.102.75) |
| 2022-10-28 16:40:18 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) (Remote host closed the connection) |
| 2022-10-28 16:43:45 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 2022-10-28 16:43:45 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 2022-10-28 16:43:45 +0000 | wroathe | (~wroathe@user/wroathe) |
| 2022-10-28 16:44:58 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 16:47:48 +0000 | mixfix41 | (~sdeny9ee@user/mixfix41) |
| 2022-10-28 16:50:32 +0000 | nilradical | (~nilradica@user/naso) () |
| 2022-10-28 16:51:23 +0000 | redmp | (~redmp@eduroam-169-233-187-108.ucsc.edu) |
| 2022-10-28 16:51:55 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 16:54:06 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2022-10-28 16:55:57 +0000 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 2022-10-28 16:56:10 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 2022-10-28 16:56:48 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds) |
| 2022-10-28 16:57:36 +0000 | vpan | (~0@212.117.1.172) (Quit: Leaving.) |
| 2022-10-28 16:58:09 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) |
| 2022-10-28 16:58:43 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 16:58:53 +0000 | Guest2776 | (~Guest27@2001:448a:7028:49a2:c005:3fe8:2bc0:33bd) |
| 2022-10-28 16:59:25 +0000 | Guest2776 | (~Guest27@2001:448a:7028:49a2:c005:3fe8:2bc0:33bd) (Client Quit) |
| 2022-10-28 17:00:56 +0000 | wootehfoot | (~wootehfoo@user/wootehfoot) |
| 2022-10-28 17:01:57 +0000 | jonathanx | (~jonathan@94.234.102.75) (Ping timeout: 240 seconds) |
| 2022-10-28 17:02:42 +0000 | boxscape_ | (~boxscape@81.191.27.107) (Remote host closed the connection) |
| 2022-10-28 17:02:59 +0000 | boxscape | (~boxscape@81.191.27.107) |
| 2022-10-28 17:03:08 +0000 | boxscape | boxscape_ |
| 2022-10-28 17:03:24 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 17:05:09 +0000 | cross | (~cross@spitfire.i.gajendra.net) (Quit: leaving) |
| 2022-10-28 17:07:20 +0000 | johnw | (~johnw@2600:1700:cf00:db0:24dd:7cba:243c:c819) |
| 2022-10-28 17:10:09 +0000 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 2022-10-28 17:11:14 +0000 | <EvanR> | monochrom, ah. Feel free to change it xD |
| 2022-10-28 17:13:57 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 17:14:06 +0000 | <EvanR> | but also by a leap of logic, whiskering is horizontal composition where one of the natural transformations is identity |
| 2022-10-28 17:15:08 +0000 | <EvanR> | Tµ =desugar=> id_T * µ |
| 2022-10-28 17:15:14 +0000 | Kaiepi | (~Kaiepi@108.175.84.104) |
| 2022-10-28 17:15:31 +0000 | <EvanR> | µT =desugar=> µ * id_T |
| 2022-10-28 17:21:26 +0000 | slack1256 | (~slack1256@186.11.44.138) |
| 2022-10-28 17:23:31 +0000 | slac95907 | (~slack1256@191.125.99.208) (Ping timeout: 260 seconds) |
| 2022-10-28 17:28:06 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 2022-10-28 17:29:30 +0000 | jtomas | (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 250 seconds) |
| 2022-10-28 17:30:16 +0000 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 252 seconds) |
| 2022-10-28 17:31:25 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
| 2022-10-28 17:31:26 +0000 | jakalx | (~jakalx@base.jakalx.net) () |
| 2022-10-28 17:31:48 +0000 | jtomas | (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) |
| 2022-10-28 17:32:38 +0000 | sadmax2 | (~user@cpe-76-186-137-164.tx.res.rr.com) |
| 2022-10-28 17:33:24 +0000 | jakalx | (~jakalx@base.jakalx.net) |
| 2022-10-28 17:34:50 +0000 | sadmax2 | (~user@cpe-76-186-137-164.tx.res.rr.com) (Remote host closed the connection) |
| 2022-10-28 17:39:44 +0000 | jonathanx | (~jonathan@c-5eea74d9-74736162.cust.telenor.se) |
| 2022-10-28 17:40:31 +0000 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
| 2022-10-28 17:41:29 +0000 | sadmax | (~user@cpe-76-186-137-164.tx.res.rr.com) |
| 2022-10-28 17:42:11 +0000 | jonathanx_ | (~jonathan@c-5eea664b-74736162.cust.telenor.se) (Ping timeout: 260 seconds) |
| 2022-10-28 17:44:28 +0000 | titibandit | (~titibandi@xdsl-87-78-36-34.nc.de) (Quit: Leaving.) |
| 2022-10-28 17:46:18 +0000 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 2022-10-28 17:51:52 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 17:52:39 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 17:54:07 +0000 | <monochrom> | EvanR: Ah, thanks. |
| 2022-10-28 17:55:07 +0000 | slack3102 | (~slack1256@191.126.99.208) |
| 2022-10-28 17:57:18 +0000 | slack1256 | (~slack1256@186.11.44.138) (Ping timeout: 255 seconds) |
| 2022-10-28 17:58:00 +0000 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 2022-10-28 17:58:06 +0000 | berberman | (~berberman@user/berberman) (Ping timeout: 250 seconds) |
| 2022-10-28 17:58:44 +0000 | ec | (~ec@gateway/tor-sasl/ec) |
| 2022-10-28 18:03:11 +0000 | <monochrom> | EvanR: Riehl's textbook (Category Theory in Context) section 1.7 has a brief intro to 2-catgories. It may help you decode that blog. Her homepage has the book in PDF for free: https://math.jhu.edu/~eriehl/ |
| 2022-10-28 18:04:38 +0000 | <monochrom> | Actually https://emilyriehl.github.io/ may be a more active page, heh. |
| 2022-10-28 18:10:19 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 18:10:54 +0000 | jonathanx_ | (~jonathan@c-5eea63bf-74736162.cust.telenor.se) |
| 2022-10-28 18:12:24 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 18:13:36 +0000 | jonathanx | (~jonathan@c-5eea74d9-74736162.cust.telenor.se) (Ping timeout: 264 seconds) |
| 2022-10-28 18:15:34 +0000 | birdgoose | (~jesse@2406:e003:1d87:6601:e725:b6b4:ace8:4ebe) |
| 2022-10-28 18:18:17 +0000 | sadmax | (~user@cpe-76-186-137-164.tx.res.rr.com) (Ping timeout: 272 seconds) |
| 2022-10-28 18:18:47 +0000 | <EvanR> | cool |
| 2022-10-28 18:19:29 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 18:21:14 +0000 | jonathanx_ | (~jonathan@c-5eea63bf-74736162.cust.telenor.se) (Ping timeout: 276 seconds) |
| 2022-10-28 18:24:06 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 18:25:24 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds) |
| 2022-10-28 18:26:53 +0000 | <jean-paul[m]> | `CString` is just an alias for `Ptr CChar` so any function, like `newCString` or `withCString` that gives you a `CString` might be giving you null, right? |
| 2022-10-28 18:28:16 +0000 | <monochrom> | Actually I doubt it. |
| 2022-10-28 18:29:09 +0000 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 2022-10-28 18:30:37 +0000 | <jean-paul[m]> | That would be great. But do I have to read GHC source or something to know for sure? |
| 2022-10-28 18:30:58 +0000 | <jean-paul[m]> | (if so, easier to just assume they could give me NULL, I think) |
| 2022-10-28 18:31:13 +0000 | <monochrom> | The source code rabbit hole seems to go through a "failWhenNULL" so you get an exception or you get a non-null pointer. |
| 2022-10-28 18:34:04 +0000 | birdgoose | (~jesse@2406:e003:1d87:6601:e725:b6b4:ace8:4ebe) (Ping timeout: 250 seconds) |
| 2022-10-28 18:36:28 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a26d59898e5c9870d6b.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 2022-10-28 18:37:27 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a26d59898e5c9870d6b.dip0.t-ipconnect.de) |
| 2022-10-28 18:37:36 +0000 | birdgoose | (~jesse@151.210.175.160) |
| 2022-10-28 18:41:11 +0000 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 2022-10-28 18:43:03 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 18:43:35 +0000 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
| 2022-10-28 18:44:15 +0000 | birdgoose | (~jesse@151.210.175.160) (Ping timeout: 272 seconds) |
| 2022-10-28 18:45:14 +0000 | jakalx | (~jakalx@base.jakalx.net) |
| 2022-10-28 18:48:03 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds) |
| 2022-10-28 18:50:24 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds) |
| 2022-10-28 18:51:49 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 18:55:14 +0000 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
| 2022-10-28 18:56:17 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds) |
| 2022-10-28 19:05:48 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 19:12:49 +0000 | danza | (~francesco@151.68.150.173) |
| 2022-10-28 19:13:28 +0000 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) |
| 2022-10-28 19:18:01 +0000 | <gurkenglas> | Let Phi be some set of functions Reals->Reals. Their pointwise infimum is at each point their greatest lower bound. This acts like an optic that can turn "all f in Phi satisfy foo(f) <= bar(f)" into "their pointwise infimum g satisfies foo(g) <= bar(f)" whenever foo and bar are monotonic. Thus it can turn "all Phi are monotonic/1-lipschitz/concave" into "their pointwise infimum is |
| 2022-10-28 19:18:07 +0000 | <gurkenglas> | monotonic/1-lipschitz/concave". I thought I would mention that here since I was surprised to be reminded of optics. |
| 2022-10-28 19:19:16 +0000 | <gurkenglas> | s/foo(g) <= bar(f)/foo(g) <= bar(g)/ :( |
| 2022-10-28 19:23:18 +0000 | thyriaen | (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) |
| 2022-10-28 19:24:48 +0000 | gqplox | (~textual@2a02:c7c:941d:fd00:40a0:1c9d:7a12:f334) |
| 2022-10-28 19:25:33 +0000 | slack1256 | (~slack1256@181.42.52.169) |
| 2022-10-28 19:26:25 +0000 | jinsun__ | (~jinsun@user/jinsun) |
| 2022-10-28 19:26:25 +0000 | jinsun | Guest7738 |
| 2022-10-28 19:26:25 +0000 | Guest7738 | (~jinsun@user/jinsun) (Killed (iridium.libera.chat (Nickname regained by services))) |
| 2022-10-28 19:26:25 +0000 | jinsun__ | jinsun |
| 2022-10-28 19:26:37 +0000 | slack3102 | (~slack1256@191.126.99.208) (Ping timeout: 240 seconds) |
| 2022-10-28 19:28:17 +0000 | <gqplox> | Hello guys |
| 2022-10-28 19:28:37 +0000 | <gqplox> | I have made a project in pytohn I want to convert it to haskell to learn haskell |
| 2022-10-28 19:28:58 +0000 | <gqplox> | However, for it i need to read toml and csv files |
| 2022-10-28 19:29:05 +0000 | <gqplox> | what is the easiest way to do it |
| 2022-10-28 19:29:29 +0000 | <energizer> | <EvanR: so a transpose of a 0 x inf matrix> but why is the empty arglist in zip() a 0 x inf matrix instead of, say, a 0 x 0 matrix? |
| 2022-10-28 19:29:44 +0000 | <gqplox> | Basically i want to focus on actually transforming the data for now and later on i can learn the io and monad stuff |
| 2022-10-28 19:29:59 +0000 | <gqplox> | but for now i just want a simple way to get the data in so i can do haskell stuff on it |
| 2022-10-28 19:30:12 +0000 | <jean-paul[m]> | gqplox: Maybe set aside the idea of "easiest" and just learn some stuff. |
| 2022-10-28 19:30:29 +0000 | <EvanR> | jean-paul[m], withCString uses allocaArray, which uses ... ... allocaBytesAlignedAndUnchecked which newAlignedPinnedByteArray# which can't fail |
| 2022-10-28 19:30:47 +0000 | <geekosaur> | we generally use cassava to read csv. dunno about toml |
| 2022-10-28 19:30:48 +0000 | <EvanR> | except that it is IO so anything can fail if you try hard enough |
| 2022-10-28 19:31:04 +0000 | <monochrom> | Perhaps choose a project that doesn't read toml. |
| 2022-10-28 19:31:05 +0000 | <jean-paul[m]> | gqplox: You can type things like "toml" and "yaml" into the search box on https://hoogle.haskell.org/ if you want to use libraries for this. |
| 2022-10-28 19:31:12 +0000 | <EvanR> | energizer, it isn't |
| 2022-10-28 19:31:29 +0000 | <EvanR> | there's no way to know using only list rep |
| 2022-10-28 19:31:56 +0000 | <energizer> | EvanR: so why would zip() be an inf x 0 matrix? |
| 2022-10-28 19:32:02 +0000 | <EvanR> | my observations just highlight all the important missing information in a ill typed variadic zip |
| 2022-10-28 19:32:16 +0000 | <EvanR> | energizer, repeat () would represent inf x 0 matrix |
| 2022-10-28 19:32:53 +0000 | <EvanR> | someone else suggested that is what zip() should return |
| 2022-10-28 19:33:12 +0000 | <EvanR> | more like, zip( a 0 x inf matrix ) should return repeat () |
| 2022-10-28 19:33:12 +0000 | <energizer> | EvanR: but you think it's ambiguous? |
| 2022-10-28 19:33:29 +0000 | <energizer> | EvanR: *but you think zip() is ambiguous? |
| 2022-10-28 19:33:31 +0000 | <EvanR> | and zip ( 0 x 17 matrix ) should return 17 ()s |
| 2022-10-28 19:33:57 +0000 | <gqplox> | yeah okay fair enough |
| 2022-10-28 19:34:07 +0000 | <gqplox> | thx for the website btw, looks helpful |
| 2022-10-28 19:34:33 +0000 | <EvanR> | zip() with no other information is ambiguous, such as what size you want |
| 2022-10-28 19:34:50 +0000 | <jean-paul[m]> | monochrom, EvanR : thanks |
| 2022-10-28 19:35:11 +0000 | <monochrom> | I did nothing :) |
| 2022-10-28 19:35:22 +0000 | <jean-paul[m]> | gqplox: Personally I found https://www.cis.upenn.edu/~cis1940/fall16/ to be a good resource to work though. |
| 2022-10-28 19:35:32 +0000 | <EvanR> | if your name is on the paper you're good |
| 2022-10-28 19:35:35 +0000 | <jean-paul[m]> | Hmmm nope, that's not the right link at all (maybe it is good but I haven't done it yet) |
| 2022-10-28 19:35:43 +0000 | <gqplox> | oh haha |
| 2022-10-28 19:35:53 +0000 | <gqplox> | right now i am doing programming in haskell by Graham Hutton |
| 2022-10-28 19:35:56 +0000 | <geekosaur> | @where cis194 |
| 2022-10-28 19:35:57 +0000 | <lambdabot> | https://www.seas.upenn.edu/~cis194/spring13/lectures.html |
| 2022-10-28 19:36:06 +0000 | <geekosaur> | is the usually recommended one hereabouts |
| 2022-10-28 19:36:07 +0000 | <energizer> | EvanR: i am sorta persuaded that zip is fairly tho not exactly monoidal, in which case repeat () is right |
| 2022-10-28 19:36:11 +0000 | <geekosaur> | but hutton's good too |
| 2022-10-28 19:36:16 +0000 | <gqplox> | im not far through but im eager to build stuff now that's why i was asking |
| 2022-10-28 19:36:19 +0000 | <jean-paul[m]> | Yes, thanks, that's the one. |
| 2022-10-28 19:36:40 +0000 | mvk | (~mvk@2607:fea8:5ce3:8500::f30b) |
| 2022-10-28 19:36:48 +0000 | <gqplox> | i understand your point, best to just learn properly |
| 2022-10-28 19:37:02 +0000 | <monochrom> | Dive-in projects are more haste less speed. |
| 2022-10-28 19:37:33 +0000 | <monochrom> | (Oh it "worked" when you switched from python to javascript because the difference was too small.) |
| 2022-10-28 19:38:23 +0000 | <gqplox> | haha :) i understand your point |
| 2022-10-28 19:38:29 +0000 | <gqplox> | oh this website looks cool |
| 2022-10-28 19:38:40 +0000 | <gqplox> | the seas.upenn |
| 2022-10-28 19:38:52 +0000 | <monochrom> | "I already speak American English. I want to learn Australian English by the dive-in project of writing a review for an Australian-accent movie." This works. |
| 2022-10-28 19:39:17 +0000 | <monochrom> | "I already speak American English. I want to learn Japanese by the dive-in project of writing a review for a Japanese movie." This breaks. |
| 2022-10-28 19:39:28 +0000 | <c_wraith> | I learned Haskell starting with making changes to a production system. It's not impossible, but you do need to be motivated by things like "This is hard and I want to learn it all" |
| 2022-10-28 19:39:52 +0000 | <c_wraith> | That was 14 years ago and I have not yet learned it all |
| 2022-10-28 19:40:14 +0000 | <gqplox> | yep i understand |
| 2022-10-28 19:40:23 +0000 | <c_wraith> | But I have learned a whole lot! |
| 2022-10-28 19:40:47 +0000 | <gqplox> | in this case it was a very minor thing, if i can get the toml and csv files into variables i can do it |
| 2022-10-28 19:40:55 +0000 | <gqplox> | anyway ill look at the upenn |
| 2022-10-28 19:42:13 +0000 | <monochrom> | There is also the prospect of not porting a python code base to haskell, instead write in haskell from scratch and implement the same features. |
| 2022-10-28 19:42:39 +0000 | <monochrom> | Indeed you wouldn't even try to translate C++ to C. |
| 2022-10-28 19:43:49 +0000 | <gqplox> | Yep that's what I meant sorry |
| 2022-10-28 19:43:58 +0000 | <gqplox> | and its like a 200 lines script haha |
| 2022-10-28 19:44:03 +0000 | <gqplox> | woah the .lhs is so cool |
| 2022-10-28 19:44:24 +0000 | <monochrom> | OK that works better. |
| 2022-10-28 19:46:38 +0000 | <monochrom> | Alternatively, dive-in projects can work (even for arbitrarily large gaps) if you manage your expectations. (Tautology: All frustrations can be solved by managing expectations.) |
| 2022-10-28 19:48:06 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 2022-10-28 19:48:19 +0000 | <monochrom> | The first dive-in project alerts you to a million things you need to learn first. Learning them can take a long time. If you don't have a conflicting expectation, you will persevere. |
| 2022-10-28 19:48:46 +0000 | <monochrom> | This initial investment amortizes. The 2nd, 3rd, ... projects will be much faster. |
| 2022-10-28 19:50:10 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2022-10-28 19:50:34 +0000 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 2022-10-28 19:52:04 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 2022-10-28 19:52:44 +0000 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 2022-10-28 19:58:44 +0000 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Quit: leaving) |
| 2022-10-28 19:59:56 +0000 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 2022-10-28 20:02:11 +0000 | redmp | (~redmp@eduroam-169-233-187-108.ucsc.edu) (Ping timeout: 260 seconds) |
| 2022-10-28 20:02:28 +0000 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 2022-10-28 20:07:01 +0000 | <gurkenglas> | yeah i gave up on my 2nd and 3rd project much faster than on my 1st |
| 2022-10-28 20:07:21 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 20:10:23 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds) |
| 2022-10-28 20:11:10 +0000 | birdgoose | (~jesse@2406:e003:1d87:6601:e725:b6b4:ace8:4ebe) |
| 2022-10-28 20:11:12 +0000 | hpc | (~juzz@ip98-169-32-242.dc.dc.cox.net) (Ping timeout: 264 seconds) |
| 2022-10-28 20:11:49 +0000 | <c_wraith> | see how much faster you reached the natural conclusion? |
| 2022-10-28 20:12:36 +0000 | hpc | (~juzz@ip98-169-32-242.dc.dc.cox.net) |
| 2022-10-28 20:13:46 +0000 | <darkling> | If only I'd learned to give up programming 40 years ago. :) |
| 2022-10-28 20:15:09 +0000 | <gurkenglas> | noticing that training giving up allocates my skill ranks to Giving Up put such a pin into trying :D |
| 2022-10-28 20:16:46 +0000 | hpc | (~juzz@ip98-169-32-242.dc.dc.cox.net) (Ping timeout: 250 seconds) |
| 2022-10-28 20:23:28 +0000 | hpc | (~juzz@ip98-169-32-242.dc.dc.cox.net) |
| 2022-10-28 20:23:55 +0000 | kjak | (~kjak@pool-108-31-114-135.washdc.fios.verizon.net) (Quit: leaving) |
| 2022-10-28 20:24:19 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 20:26:57 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 20:28:25 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 246 seconds) |
| 2022-10-28 20:30:57 +0000 | irrgit__ | (~irrgit@176.113.74.74) |
| 2022-10-28 20:31:31 +0000 | iteratee | (~kyle@162.218.222.107) |
| 2022-10-28 20:33:49 +0000 | irrgit_ | (~irrgit@176.113.74.130) (Ping timeout: 244 seconds) |
| 2022-10-28 20:34:21 +0000 | slack1256 | (~slack1256@181.42.52.169) (Ping timeout: 255 seconds) |
| 2022-10-28 20:34:35 +0000 | nate3 | (~nate@98.45.169.16) |
| 2022-10-28 20:35:36 +0000 | irrgit_ | (~irrgit@176.113.74.74) |
| 2022-10-28 20:38:02 +0000 | gqplox | (~textual@2a02:c7c:941d:fd00:40a0:1c9d:7a12:f334) (Quit: Textual IRC Client: www.textualapp.com) |
| 2022-10-28 20:38:56 +0000 | irrgit__ | (~irrgit@176.113.74.74) (Ping timeout: 260 seconds) |
| 2022-10-28 20:39:17 +0000 | nate3 | (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 2022-10-28 20:45:51 +0000 | jtomas | (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 272 seconds) |
| 2022-10-28 20:46:15 +0000 | titibandit | (~titibandi@xdsl-87-78-36-34.nc.de) |
| 2022-10-28 20:47:24 +0000 | irrgit_ | (~irrgit@176.113.74.74) (Read error: Connection reset by peer) |
| 2022-10-28 20:48:29 +0000 | titibandit | (~titibandi@xdsl-87-78-36-34.nc.de) (Remote host closed the connection) |
| 2022-10-28 20:51:39 +0000 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 2022-10-28 20:52:10 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 20:52:25 +0000 | polo | (~polo@user/polo) (Client Quit) |
| 2022-10-28 20:52:31 +0000 | jmdaemon | (~jmdaemon@user/jmdaemon) |
| 2022-10-28 20:52:44 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 20:53:36 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 20:54:37 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 20:56:27 +0000 | nek0 | (~nek0@2a01:4f8:222:2b41::12) (Quit: The Lounge - https://thelounge.chat) |
| 2022-10-28 21:01:47 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 21:03:13 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) |
| 2022-10-28 21:03:14 +0000 | bilegeek | (~bilegeek@2600:1008:b027:7f32:a99b:c297:feda:8531) |
| 2022-10-28 21:03:16 +0000 | <cpli> | are there async `Chan`s? |
| 2022-10-28 21:03:26 +0000 | <cpli> | i.e. where one may await `readChan`? |
| 2022-10-28 21:03:35 +0000 | <monochrom> | You can just use TChan. |
| 2022-10-28 21:04:16 +0000 | <monochrom> | Or Chan, too. |
| 2022-10-28 21:04:49 +0000 | <EvanR> | isn't await readChan already what readChan does |
| 2022-10-28 21:06:07 +0000 | mncheckm | (~mncheck@193.224.205.254) (Ping timeout: 272 seconds) |
| 2022-10-28 21:10:01 +0000 | <cpli> | so if i race between readChan and anything else, it's cancel safe? |
| 2022-10-28 21:13:43 +0000 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 2022-10-28 21:15:03 +0000 | <dsal> | cpli: Not super clear what you mean. If you're waiting for a channel value in a transaction and get killed, it should be safe, but if you completed the transaction and were killed, it's not going to magically fix stuff. |
| 2022-10-28 21:19:05 +0000 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
| 2022-10-28 21:26:46 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds) |
| 2022-10-28 21:30:03 +0000 | raek | (raek@2a01:7e01::f03c:93ff:fedf:bffe) (WeeChat 3.0) |
| 2022-10-28 21:35:12 +0000 | mvk | (~mvk@2607:fea8:5ce3:8500::f30b) (Ping timeout: 250 seconds) |
| 2022-10-28 21:38:53 +0000 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2022-10-28 21:38:58 +0000 | <EvanR> | if you're thinking of cancelling something doing a readChan then it does sound like you're at least going to need TChan |
| 2022-10-28 21:39:29 +0000 | <EvanR> | either the entire atomically containing readTChan happens or it doesn't |
| 2022-10-28 21:39:50 +0000 | <EvanR> | (STM) |
| 2022-10-28 21:46:55 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 21:51:07 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) |
| 2022-10-28 21:51:12 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
| 2022-10-28 21:52:35 +0000 | <cpli> | perfect thank |
| 2022-10-28 21:54:25 +0000 | redmp | (~redmp@eduroam-169-233-187-108.ucsc.edu) |
| 2022-10-28 21:56:59 +0000 | mvk | (~mvk@2607:fea8:5ce3:8500::f30b) |
| 2022-10-28 21:57:03 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 2022-10-28 21:59:21 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
| 2022-10-28 21:59:33 +0000 | talismanick | (~talismani@76.133.152.122) (Remote host closed the connection) |
| 2022-10-28 22:00:13 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 2022-10-28 22:00:13 +0000 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 2022-10-28 22:00:13 +0000 | wroathe | (~wroathe@user/wroathe) |
| 2022-10-28 22:03:44 +0000 | michalz | (~michalz@185.246.207.200) (Remote host closed the connection) |
| 2022-10-28 22:03:48 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 22:04:24 +0000 | fjmorazan | (~quassel@user/fjmorazan) () |
| 2022-10-28 22:05:08 +0000 | fjmorazan | (~quassel@user/fjmorazan) |
| 2022-10-28 22:06:25 +0000 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
| 2022-10-28 22:06:26 +0000 | talismanick | (~talismani@76.133.152.122) |
| 2022-10-28 22:07:30 +0000 | axeman | (~quassel@ip-037-201-153-145.um10.pools.vodafone-ip.de) |
| 2022-10-28 22:08:24 +0000 | acidjnk_new3 | (~acidjnk@p200300d6e7137a26d59898e5c9870d6b.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 2022-10-28 22:09:44 +0000 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
| 2022-10-28 22:11:20 +0000 | pavonia | (~user@user/siracusa) |
| 2022-10-28 22:11:39 +0000 | polo | (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 2022-10-28 22:12:07 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 22:13:15 +0000 | <cpli> | is there some `TChan A -> TChan A -> TChan A` which fuses two channels? |
| 2022-10-28 22:13:28 +0000 | <cpli> | i.e. for writing purposes only |
| 2022-10-28 22:14:16 +0000 | <cpli> | dup and clone exist, would fusing require doing so on a seperate thread? |
| 2022-10-28 22:14:33 +0000 | caryhartline | (~caryhartl@2600:1700:2d0:8d30:41f8:4e00:54f7:b844) |
| 2022-10-28 22:15:41 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 22:15:42 +0000 | <EvanR> | what does fusing for writing purpose mean |
| 2022-10-28 22:15:53 +0000 | <dminuoso> | Or for reading purposes. |
| 2022-10-28 22:16:06 +0000 | <EvanR> | or append purpose |
| 2022-10-28 22:16:10 +0000 | <dminuoso> | That is, if both channels have multiple things, in what order should they read? |
| 2022-10-28 22:16:40 +0000 | <dminuoso> | Looking at the internals, I think you can construct an interleaving TChan without a thread |
| 2022-10-28 22:16:54 +0000 | <DigitalKiwi> | no append only prepend |
| 2022-10-28 22:17:08 +0000 | <EvanR> | this is haskell we can only prepend |
| 2022-10-28 22:17:17 +0000 | <DigitalKiwi> | :D |
| 2022-10-28 22:17:58 +0000 | <EvanR> | haskellOS |
| 2022-10-28 22:18:09 +0000 | <EvanR> | all the files are stored backwards |
| 2022-10-28 22:18:35 +0000 | <dminuoso> | Well anyway, an interleaving TChan could be constructed if the internals were exposed in Control.Concurrent.STM.TChan |
| 2022-10-28 22:18:44 +0000 | <dminuoso> | But they are not, so I guess you're out of luck either way |
| 2022-10-28 22:18:53 +0000 | <dminuoso> | I dont see a way without a separate thread doing what you want |
| 2022-10-28 22:19:08 +0000 | <DigitalKiwi> | https://mostlyabsurd.com/files/2022-10-28-171849_964x357_scrot.png |
| 2022-10-28 22:19:08 +0000 | polo | (~polo@user/polo) (Ping timeout: 276 seconds) |
| 2022-10-28 22:20:16 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 22:20:53 +0000 | <cpli> | re:dminuoso "..., in what order should they read?"; in order they were written |
| 2022-10-28 22:21:07 +0000 | <dminuoso> | cpli: What does that even mean in STM? |
| 2022-10-28 22:22:27 +0000 | <cpli> | i have a `[Backend]` where `data Backend = B1 B1State | B2 B2State | B3...` |
| 2022-10-28 22:22:50 +0000 | <cpli> | each `Backend` broadcasts its event to all other backends |
| 2022-10-28 22:23:16 +0000 | <dsal> | "order" over distinct things (e.g., two threads with two channels) is a coincidence when you observe it. |
| 2022-10-28 22:23:22 +0000 | <cpli> | in some wrapper `data Event = E1 FromB1 | E2 FromB2` |
| 2022-10-28 22:23:48 +0000 | <cpli> | all backends are concurrently executed |
| 2022-10-28 22:23:59 +0000 | <dminuoso> | cpli: STM works differently |
| 2022-10-28 22:24:07 +0000 | <dminuoso> | It's not just barriers. |
| 2022-10-28 22:25:01 +0000 | <cpli> | is there any <10min read on how to impl async broadcasting? |
| 2022-10-28 22:25:51 +0000 | <dsal> | The stm docs are pretty clear. You just dup a chan and write to it. |
| 2022-10-28 22:26:05 +0000 | <monochrom> | There is no need to "merge" two TChans. Instead, to read from both TChans with "whichever one has a message first, read it", use atomically (fmap Left readTChan c1 <|> fmap Right readTChan c2) or equivalent. |
| 2022-10-28 22:26:08 +0000 | <int-e> | DigitalKiwi: 4 centuries earlier: REPENT! REPENT! |
| 2022-10-28 22:26:11 +0000 | <cpli> | if i write to a chan and immediately read, do i read my own message? |
| 2022-10-28 22:26:26 +0000 | <dsal> | https://hackage.haskell.org/package/stm-2.5.1.0/docs/Control-Concurrent-STM-TChan.html#v:dupTChan |
| 2022-10-28 22:26:45 +0000 | <dminuoso> | monochrom: Im not sure "first" really applies. |
| 2022-10-28 22:26:49 +0000 | <DigitalKiwi> | https://twitter.com/ArchKiwi/status/1586120762544398336 |
| 2022-10-28 22:27:05 +0000 | <monochrom> | Sure, s/first/"first" |
| 2022-10-28 22:27:14 +0000 | <dminuoso> | monochrom: Consider the case where first `c2` has a message, the stm transaction proceeds, but gets retried. |
| 2022-10-28 22:27:43 +0000 | <dminuoso> | Is there any guarantee c2 will be picked again, even if after retrying c1 has a message? |
| 2022-10-28 22:28:00 +0000 | <dsal> | cpli: maybe? You've not shown enough code to say for sure. |
| 2022-10-28 22:28:56 +0000 | TonyStone | (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Remote host closed the connection) |
| 2022-10-28 22:29:29 +0000 | <dsal> | dminuoso: I'm pretty sure that code won't read from c2 until c1 is empty. To make that fairer, you could put the channels in a queue of some sort and make sure each time a channel is read from it goes to the end of the list. |
| 2022-10-28 22:29:41 +0000 | <dsal> | Doing the go thing of "randomly pick a ready channel" might be a little harder. |
| 2022-10-28 22:29:52 +0000 | <dminuoso> | dsal: well, if c1 is empty at the time the transaction is started |
| 2022-10-28 22:30:00 +0000 | <dminuoso> | but has data when its retried. |
| 2022-10-28 22:30:23 +0000 | <dminuoso> | The only way I can see fairness is if you put them into a single list with a tag |
| 2022-10-28 22:30:28 +0000 | <dminuoso> | Then you can preserve the original order. |
| 2022-10-28 22:30:50 +0000 | <monochrom> | Oh the beauty is that every observation can be explained away by a fictional sequence, and you have no way to refute it, right? |
| 2022-10-28 22:31:00 +0000 | <monochrom> | or fictional history. |
| 2022-10-28 22:32:48 +0000 | thyriaen_ | (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) |
| 2022-10-28 22:32:49 +0000 | buffet | (~buffet@buffet.sh) |
| 2022-10-28 22:32:52 +0000 | <dminuoso> | cpli: So yeah I guess thats the real answer. Keep a single TChan and have all write into that, and then each backend would have a dupTChan'ed or newBroadcastTChan'ed reader. |
| 2022-10-28 22:33:00 +0000 | <dsal> | I've never had to care about a particular ordering of channel ops, so I've not thought too much about avoiding having one get behind. One approach might be to atomically read from multiple and make a decision as to which one you want based on data inside. |
| 2022-10-28 22:33:23 +0000 | <dminuoso> | cpli: (so the merging happens by fact of just writing into a single TChan) |
| 2022-10-28 22:33:37 +0000 | <dsal> | Yeah, that's a lot easier. :) |
| 2022-10-28 22:33:41 +0000 | <monochrom> | Right? "Is c2 really ready earlier?" is just philosophy. The computer science question is "if empirically you get Right, can we restrospectively make up a story that says c2 is ready earlier?" and the answer is yes. |
| 2022-10-28 22:33:57 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 22:34:42 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 22:34:52 +0000 | <dsal> | I've got into a lot of arguments with people who just want to overwrite the state with "whatever happened last" and it's really hard to explain to people how that doesn't work. |
| 2022-10-28 22:34:59 +0000 | <dminuoso> | cpli: more to the point, set up that `TChan Event` with newBroadcastTChan (instead of newTChan) and then dupChan it for every backend. :) |
| 2022-10-28 22:35:25 +0000 | <dminuoso> | dsal: You can just fling an IORef around! |
| 2022-10-28 22:35:53 +0000 | <dminuoso> | And to silence any arguments, unsafeIOtoSTM all evil operations and do this in STM for maximum confusion. |
| 2022-10-28 22:36:01 +0000 | <dsal> | A guy on my team once made a model of our system that let someone single step through every decision with business folks nodding that it was doing what they want and then get to the last bit and it all falls apart and they just assume it's a bug that needs to be fixed. |
| 2022-10-28 22:37:01 +0000 | <dsal> | You could always have a PNRG in your STM state and change the ordering along the way. |
| 2022-10-28 22:37:24 +0000 | pyrex | (~pyrex@user/pyrex) |
| 2022-10-28 22:39:17 +0000 | <dminuoso> | Why settle for a PRNG? |
| 2022-10-28 22:39:31 +0000 | <dminuoso> | unsafeIOtoSTM that quantum RNG :) |
| 2022-10-28 22:39:38 +0000 | <monochrom> | Haha |
| 2022-10-28 22:39:48 +0000 | <cpli> | dsal: not enough code |
| 2022-10-28 22:39:49 +0000 | <cpli> | run :: [Backend] → IO () |
| 2022-10-28 22:39:50 +0000 | <cpli> | run bs = let |
| 2022-10-28 22:39:50 +0000 | <cpli> | withChannel :: [(Chan Event, Backend)] |
| 2022-10-28 22:39:50 +0000 | <cpli> | withChannel = (newChan,) <$> bs |
| 2022-10-28 22:39:50 +0000 | <cpli> | -- what would i do here, such that |
| 2022-10-28 22:39:50 +0000 | <cpli> | -- bn <- bm where N /= M |
| 2022-10-28 22:39:50 +0000 | <cpli> | in mapConcurrently_ (uncurry runBackend) withChannel |
| 2022-10-28 22:39:51 +0000 | <cpli> | runBackend :: Chan Event → Backend → IO () |
| 2022-10-28 22:39:51 +0000 | <cpli> | runBackend ch (B1 b) = runB1 ch b |
| 2022-10-28 22:39:52 +0000 | <cpli> | runBackend ch (B2 b) = runB2 ch b |
| 2022-10-28 22:39:52 +0000 | <cpli> | -- ... |
| 2022-10-28 22:40:48 +0000 | <cpli> | dminuoso: if i simply `dupChan` then every backend needs to take `N-1` reading channels from all the other backends |
| 2022-10-28 22:41:00 +0000 | <dminuoso> | cpli: No, you seem to misunderstand. |
| 2022-10-28 22:41:01 +0000 | <monochrom> | That may break the Copenhagen interpretation >:) |
| 2022-10-28 22:41:04 +0000 | TonyStone | (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) |
| 2022-10-28 22:41:33 +0000 | <dminuoso> | cpli: First you start with one writer TChan, set it up with newBroadcastTChan (this is important!), this will get passed along to every backend. |
| 2022-10-28 22:41:47 +0000 | <cpli> | understood. |
| 2022-10-28 22:41:54 +0000 | <dminuoso> | cpli: Then, for every backend, you provide a dupTChan of that original chan, which will - for each backend - be a reader. |
| 2022-10-28 22:42:23 +0000 | <dminuoso> | s/for each backend/for each respective backend/ |
| 2022-10-28 22:43:04 +0000 | <dminuoso> | So if you want to broadcast, you write to that first writer tchan, and to listen to events you just read from that local reader tchan |
| 2022-10-28 22:43:52 +0000 | <dminuoso> | so each backend has exactly one writer and one reader channel |
| 2022-10-28 22:48:35 +0000 | <cpli> | and if i `runBackend1 :: Chan Event → Backend1 → IO () |
| 2022-10-28 22:48:35 +0000 | <cpli> | runBackend1 ch b = race (async (readChan ch)) awaitBackendEvent |
| 2022-10-28 22:48:49 +0000 | <cpli> | sorry for formatting |
| 2022-10-28 22:49:07 +0000 | <cpli> | that code isn't really done |
| 2022-10-28 22:49:23 +0000 | <cpli> | the idea is that events from the backend are then written into the channel again |
| 2022-10-28 22:50:27 +0000 | <cpli> | more akin to: |
| 2022-10-28 22:50:27 +0000 | <cpli> | runBackend1 :: Chan Event → Backend1 → IO () |
| 2022-10-28 22:50:27 +0000 | <cpli> | runBackend1 ch b = forever $ race (readChan ch) |
| 2022-10-28 22:50:27 +0000 | <cpli> | (writeChan ch =<< awaitBackendEvent) |
| 2022-10-28 22:51:31 +0000 | <cpli> | or in your case dminuoso: |
| 2022-10-28 22:51:33 +0000 | <cpli> | runBackend1 :: Chan Event → Chan Event → Backend1 → IO () |
| 2022-10-28 22:51:33 +0000 | <cpli> | runBackend1 wch rch b = forever $ race (readChan rch) |
| 2022-10-28 22:51:33 +0000 | <cpli> | (writeChan wch =<< awaitBackendEvent) |
| 2022-10-28 22:52:04 +0000 | <dminuoso> | That looks a bit strange |
| 2022-10-28 22:52:17 +0000 | <dminuoso> | Is the `rch` another channel? |
| 2022-10-28 22:52:21 +0000 | <cpli> | don't `Event`s from `wch` don't simply end up back in `rch`? |
| 2022-10-28 22:52:35 +0000 | <dminuoso> | Sure, you need to filter them out. |
| 2022-10-28 22:52:42 +0000 | <cpli> | and `unGet` them? |
| 2022-10-28 22:53:19 +0000 | <dminuoso> | No, you just read them again. |
| 2022-10-28 22:53:36 +0000 | <cpli> | oh true |
| 2022-10-28 22:53:41 +0000 | <cpli> | sure |
| 2022-10-28 22:53:55 +0000 | <cpli> | kind of a hassle to have to |
| 2022-10-28 22:54:17 +0000 | <cpli> | but the events are sure to arrive at the other threads nonetheless |
| 2022-10-28 22:54:31 +0000 | <dminuoso> | Of course, that's what dupTChan is for |
| 2022-10-28 22:54:43 +0000 | <dminuoso> | It lets you set up broadcast semantics exactly like that |
| 2022-10-28 22:54:53 +0000 | polo | (~polo@user/polo) (Ping timeout: 276 seconds) |
| 2022-10-28 22:56:32 +0000 | <cpli> | the entire idea with "fuse" would've been to do what you meant, i.e. to `newBroadcastTChan` then `dupTChan` until you'd have a list of "RChan"s from all *other backends* and fuse those together to create a `Chan` for `bn` which would only recieve all events from `bm` where `n /= m` |
| 2022-10-28 22:56:54 +0000 | <cpli> | but i guess just filtering out your own events is simpler |
| 2022-10-28 22:57:12 +0000 | <dminuoso> | Yup, it doesnt need a n helper threads to set up |
| 2022-10-28 22:57:36 +0000 | <dminuoso> | or I guess just a singular dispatcher thread |
| 2022-10-28 22:57:38 +0000 | <cpli> | probably possible to solve in data, no? |
| 2022-10-28 22:58:15 +0000 | <dminuoso> | I would only pursue the dispatcher model if you had more unicast semantics |
| 2022-10-28 22:58:20 +0000 | <dminuoso> | but if everything is broadcast, this is the simpler way |
| 2022-10-28 22:58:37 +0000 | <dminuoso> | cpli: Also, this model preserves event order properly |
| 2022-10-28 22:58:47 +0000 | <dminuoso> | your other approach does not |
| 2022-10-28 22:59:03 +0000 | <cpli> | *would* not, since it doesn't seem to exist |
| 2022-10-28 22:59:14 +0000 | <dminuoso> | of course it does. |
| 2022-10-28 22:59:24 +0000 | nek0 | (~nek0@2a01:4f8:222:2b41::12) |
| 2022-10-28 22:59:25 +0000 | <dminuoso> | its preserved in the order of which elements are read out |
| 2022-10-28 23:00:05 +0000 | <dminuoso> | I mean yeah, ultimately you could still have write problems if there's any coordination/communication between the backends with retries going on |
| 2022-10-28 23:00:11 +0000 | <cpli> | would an optimization be to include the read in the write case? i.e. immediately read after writing to the `Chan- i don't have guarantees about my event being next ever.. |
| 2022-10-28 23:00:30 +0000 | <dminuoso> | What do you mean "to include the read in the write case"? |
| 2022-10-28 23:00:46 +0000 | <dsal> | No, if you want to ignore particular messages, you have to ignore the particular messages. You can't rely on timing. |
| 2022-10-28 23:01:34 +0000 | <dminuoso> | Oh you mean as a means to consume the element you have just written? |
| 2022-10-28 23:02:37 +0000 | <cpli> | `bn` writes to `wch` and read from `rch`, `bm` will recieve the event, but `bn` also *will* recieve its own message, `bn` wouldn't need to read its message in its "read thread" if it could immediately could remove the message from `rch` |
| 2022-10-28 23:02:42 +0000 | <cpli> | but there's no guarantee |
| 2022-10-28 23:03:00 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f81b:3b92:bbe7:93b6) (Remote host closed the connection) |
| 2022-10-28 23:03:33 +0000 | <cpli> | also `rch` could be clogged up anyway, with 15 events "in queue" in which case the event pushed to `wch` wouldn't be the next in line anyways |
| 2022-10-28 23:03:41 +0000 | <dminuoso> | cpli: https://gist.github.com/dminuoso/f42f92a27457088ce0d927175d7a21fc |
| 2022-10-28 23:03:43 +0000 | <dminuoso> | Something along these lines |
| 2022-10-28 23:03:55 +0000 | danza | (~francesco@151.68.150.173) (Ping timeout: 272 seconds) |
| 2022-10-28 23:04:34 +0000 | <dminuoso> | cpli: oh hold on by the way, we dont even need two separate TChans! |
| 2022-10-28 23:04:43 +0000 | <dminuoso> | Just the dupTChan'ed channel will serve both! |
| 2022-10-28 23:04:48 +0000 | <dminuoso> | simplifying things even further. |
| 2022-10-28 23:05:50 +0000 | <cpli> | `atomically` such that no events may be written to the channels whilst initializing them? |
| 2022-10-28 23:06:58 +0000 | <dminuoso> | cpli: No, its just that newBroadcastTChan must occur inside STM. |
| 2022-10-28 23:07:00 +0000 | <dminuoso> | And dupTChan |
| 2022-10-28 23:07:38 +0000 | <cpli> | what stops this from being non-STM, multithreading? |
| 2022-10-28 23:08:02 +0000 | <dminuoso> | cpli: Ive updated the gist, feel free to reload |
| 2022-10-28 23:08:35 +0000 | <dminuoso> | cpli: TChan is an STM data structure. |
| 2022-10-28 23:08:56 +0000 | <dminuoso> | You dont have to use STM everywhere, just in the few parts where you interact with it. |
| 2022-10-28 23:08:59 +0000 | redmp | (~redmp@eduroam-169-233-187-108.ucsc.edu) (Ping timeout: 272 seconds) |
| 2022-10-28 23:10:33 +0000 | j4cc3b | (~j4cc3b@pool-74-105-2-138.nwrknj.fios.verizon.net) |
| 2022-10-28 23:10:49 +0000 | <cpli> | "TChan", "STM.TChan". yes, and multithreading requires STM, I assume |
| 2022-10-28 23:11:00 +0000 | <dminuoso> | No, we have threads without STM just fine. |
| 2022-10-28 23:11:11 +0000 | <dminuoso> | STM is just the basis for most our synchronization tools. |
| 2022-10-28 23:11:23 +0000 | <dminuoso> | Think of STM as setting up transactions around critical sections. |
| 2022-10-28 23:11:55 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2022-10-28 23:12:00 +0000 | <dminuoso> | or well, avoiding the need for critical sections, even. |
| 2022-10-28 23:12:32 +0000 | <dminuoso> | cpli: Basically we have two things at our disposal: We have MVar and STM |
| 2022-10-28 23:12:34 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 23:13:46 +0000 | <dminuoso> | Both can help with synchronizing multiple threads. MVar is a really low level primitive that you can build higher primitives around (say like a semaphore), whereas STM is a potent high level framework (its not based on MVar, though) |
| 2022-10-28 23:13:54 +0000 | <cpli> | oh this is actually way cooler than i expected |
| 2022-10-28 23:14:18 +0000 | <cpli> | i require awaitEvent :: _ -> IO Event |
| 2022-10-28 23:14:29 +0000 | <cpli> | actually no |
| 2022-10-28 23:14:49 +0000 | <dminuoso> | Sure, just wrap the body in `atomically` then you can make it `IO Event` |
| 2022-10-28 23:14:57 +0000 | <cpli> | this may await an event from `b1` indefinitely |
| 2022-10-28 23:15:12 +0000 | <dminuoso> | Either would |
| 2022-10-28 23:15:12 +0000 | <cpli> | whilst `b2` is broadcasting |
| 2022-10-28 23:15:33 +0000 | <dminuoso> | Why would it?> |
| 2022-10-28 23:16:10 +0000 | <cpli> | if `b1` recieves an event `FromB1` it creates another `B1Event` |
| 2022-10-28 23:16:36 +0000 | <cpli> | otherwise `awaitEvent` return the event from `bn` |
| 2022-10-28 23:16:41 +0000 | Sgeo_ | (~Sgeo@user/sgeo) |
| 2022-10-28 23:16:41 +0000 | <dminuoso> | Well, each backend will likely have to run two separate threads, yes. |
| 2022-10-28 23:16:42 +0000 | danza | (~francesco@151.35.98.197) |
| 2022-10-28 23:16:58 +0000 | <cpli> | and `race` with Control.Concurrent |
| 2022-10-28 23:17:03 +0000 | <dminuoso> | Or you have some kind of event loop and use tryReadTChan instead |
| 2022-10-28 23:17:49 +0000 | <cpli> | i think for each backend to either be: |
| 2022-10-28 23:17:55 +0000 | <cpli> | 1. broadcasting its own event |
| 2022-10-28 23:18:07 +0000 | <cpli> | 2. processing an event it recieved |
| 2022-10-28 23:18:11 +0000 | <cpli> | is relatively elgant |
| 2022-10-28 23:18:39 +0000 | cpli | thinks their typos probably aren't exactly elegant |
| 2022-10-28 23:19:27 +0000 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) |
| 2022-10-28 23:19:53 +0000 | <dminuoso> | cpli: Updated gist |
| 2022-10-28 23:20:04 +0000 | Sgeo | (~Sgeo@user/sgeo) (Ping timeout: 250 seconds) |
| 2022-10-28 23:20:34 +0000 | <dminuoso> | Whether a simple `runBackend b = forever $ do r <- tryAwaitEvent ...` or STM variant instead makes more sense, depends on what you want to do exactly |
| 2022-10-28 23:20:49 +0000 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5147:575b:dd93:ff03) |
| 2022-10-28 23:21:09 +0000 | <dminuoso> | Also think ahead about things like termination |
| 2022-10-28 23:21:19 +0000 | <dminuoso> | Might want to include some kind of signaling layer in the event stream |
| 2022-10-28 23:21:38 +0000 | <dminuoso> | Such that the worker can just stop gracefully, perhaps release resources |
| 2022-10-28 23:21:59 +0000 | <cpli> | doesn't `TMChan` solve such a scenario? |
| 2022-10-28 23:22:35 +0000 | <dminuoso> | Sure, if you fancy that. |
| 2022-10-28 23:22:39 +0000 | <dminuoso> | I would probably just roll my own |
| 2022-10-28 23:23:01 +0000 | <cpli> | i have to admit i don't know why you're checking if eventTag e == backendTag (bwcBackend b) |
| 2022-10-28 23:23:11 +0000 | <dminuoso> | Writing such thing on the spot takes little effort and it helps keep dependency footprints small. And it lets you model your combinators the way you need to. |
| 2022-10-28 23:23:24 +0000 | <cpli> | if it recieves a message from itself it tries agai- |
| 2022-10-28 23:23:27 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
| 2022-10-28 23:23:28 +0000 | <cpli> | makes sense. |
| 2022-10-28 23:24:29 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 258 seconds) |
| 2022-10-28 23:24:43 +0000 | <dminuoso> | cpli: For elaborate things, you may have to spawn two thread for each backend, potentially with TQueues or things between them for coordinations. |
| 2022-10-28 23:25:00 +0000 | <dminuoso> | This is all just different options, without knowing what these backends really do its hard to tell |
| 2022-10-28 23:25:01 +0000 | <cpli> | dminuoso the backends both come from relatively large dependencies, i've come this far only by scouting stackage for package versions that don't clash on their version of `ByteString` and downgrading from ghc 9.4.2 to 9.0.2 |
| 2022-10-28 23:25:15 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds) |
| 2022-10-28 23:25:42 +0000 | <cpli> | they're xmpp and irc |
| 2022-10-28 23:25:47 +0000 | <cpli> | i'm writing a bridge. |
| 2022-10-28 23:25:53 +0000 | <cpli> | cat's out the bag |
| 2022-10-28 23:26:04 +0000 | <dminuoso> | So there's just two backends then? |
| 2022-10-28 23:26:11 +0000 | <cpli> | well, extensibility |
| 2022-10-28 23:26:21 +0000 | <dminuoso> | As a kind of star bridge? |
| 2022-10-28 23:26:36 +0000 | <cpli> | currently my dhall config only lets you specify bots for either backend, but yes, a star bridge |
| 2022-10-28 23:26:44 +0000 | <cpli> | plans for discord etc |
| 2022-10-28 23:27:11 +0000 | <cpli> | the thing i want to implement really is proper puppeteering for irc |
| 2022-10-28 23:27:13 +0000 | <dminuoso> | cpli: I think I would just spawn two threads for each backend. |
| 2022-10-28 23:27:20 +0000 | <cpli> | exaclty |
| 2022-10-28 23:27:27 +0000 | <cpli> | s/cl/lc/ |
| 2022-10-28 23:27:28 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
| 2022-10-28 23:27:38 +0000 | <dminuoso> | Haskell threads are really cheap, so go wild with them. |
| 2022-10-28 23:27:45 +0000 | <cpli> | they are? |
| 2022-10-28 23:27:53 +0000 | <dminuoso> | Yes, they are green threads. |
| 2022-10-28 23:28:32 +0000 | <cpli> | haskell knew of that color before go's implementation? |
| 2022-10-28 23:28:37 +0000 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds) |
| 2022-10-28 23:29:01 +0000 | <dminuoso> | Honestly I dont know of the ethymology. :) |
| 2022-10-28 23:29:18 +0000 | <dminuoso> | Sorry I should refine. *GHC threads cheap |
| 2022-10-28 23:29:46 +0000 | <cpli> | it has something to do with async, where threads are coloured red or blue, and state needs to stay in one color |
| 2022-10-28 23:29:55 +0000 | <cpli> | but green sits on top ignoring all of that |
| 2022-10-28 23:30:07 +0000 | <dminuoso> | Im almost confident that the name is older than go. |
| 2022-10-28 23:30:46 +0000 | <cpli> | yup 1997: "Green threads refers to the name of the original thread library for the programming language Java (that was released in version 1.1 and then Green threads were abandoned in version 1.3 to native threads). It was designed by The Green Team at Sun Microsystems." |
| 2022-10-28 23:30:56 +0000 | <cpli> | from wikipedia the *free* encyclopedia |
| 2022-10-28 23:31:00 +0000 | <dminuoso> | https://web.archive.org/web/20080530073139/http://java.sun.com/features/1998/05/birthday.html |
| 2022-10-28 23:31:06 +0000 | <dminuoso> | Well I prefer citing the primary source. :) |
| 2022-10-28 23:31:20 +0000 | mvk | (~mvk@2607:fea8:5ce3:8500::f30b) (Ping timeout: 250 seconds) |
| 2022-10-28 23:31:48 +0000 | <cpli> | find on page: "green threads" 0/0 results |
| 2022-10-28 23:31:52 +0000 | <dminuoso> | Heh its funny, isnt it. |
| 2022-10-28 23:32:01 +0000 | <dminuoso> | Quality control at its finest |
| 2022-10-28 23:32:37 +0000 | <dminuoso> | cpli: the cool thing about the way things are implemented in haskell, is that you get the best of all worlds combined. |
| 2022-10-28 23:32:59 +0000 | thyriaen | (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) (Remote host closed the connection) |
| 2022-10-28 23:32:59 +0000 | thyriaen_ | (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) (Remote host closed the connection) |
| 2022-10-28 23:33:29 +0000 | <dminuoso> | You can just use blocking IO in threads, and the RTS will be aware of that, use non-blockin IO behind the scenes, schedule threads when data is available again |
| 2022-10-28 23:33:44 +0000 | <dminuoso> | And you still get parallelism since GHC can use multiple capabilities |
| 2022-10-28 23:33:53 +0000 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 276 seconds) |
| 2022-10-28 23:33:55 +0000 | <jbggs[m]> | I thought red/blue functions was a different thing from green threads |
| 2022-10-28 23:34:16 +0000 | <dminuoso> | And when I say Haskell, I really mean GHC Haskell. |
| 2022-10-28 23:34:34 +0000 | <cpli> | systemFω here to save the day |
| 2022-10-28 23:35:03 +0000 | <jbggs[m]> | i.e. red functions are async functions, which in many languages are run on green threads |
| 2022-10-28 23:35:21 +0000 | <cpli> | jbggs[m]: i apologise, i relay uncited information. |
| 2022-10-28 23:35:35 +0000 | <jbggs[m]> | or at least can be |
| 2022-10-28 23:35:59 +0000 | <monochrom> | amd functions, intel functions, and nvidia threads? >:) |
| 2022-10-28 23:36:04 +0000 | <cpli> | dminuoso: this is the haskell irc, before i denounce things without thought |
| 2022-10-28 23:36:13 +0000 | <cpli> | do people here use compilers other than ghc? |
| 2022-10-28 23:36:21 +0000 | <dminuoso> | monochrom: If you want crazy terminology, look at ARINC 653. |
| 2022-10-28 23:36:55 +0000 | <jbggs[m]> | I think it's interesting that people are prone to thinking of these things with colors |
| 2022-10-28 23:36:56 +0000 | <jbggs[m]> | cpli: no harm no foul :D |
| 2022-10-28 23:37:11 +0000 | <dminuoso> | They contort established terminology to the point where they will sell you a "list" as an "OS process" (slightly exaggerating, but not by much) |
| 2022-10-28 23:37:25 +0000 | <monochrom> | Oh there are people who listen to music and see colours, too. |
| 2022-10-28 23:37:26 +0000 | mixfix41 | (~sdeny9ee@user/mixfix41) (Ping timeout: 260 seconds) |
| 2022-10-28 23:37:40 +0000 | <jbggs[m]> | I mean they're both functors right :V |
| 2022-10-28 23:37:50 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 250 seconds) |
| 2022-10-28 23:38:08 +0000 | <jbggs[m]> | lists and OS processes i mean |
| 2022-10-28 23:38:12 +0000 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 2022-10-28 23:38:18 +0000 | <cpli> | jbggs[m]: smells like 2-cats |
| 2022-10-28 23:38:45 +0000 | <cpli> | sorry, i meant 2d operads |
| 2022-10-28 23:38:49 +0000 | <jbggs[m]> | 2-cats? |
| 2022-10-28 23:39:11 +0000 | <EvanR> | cpli, within the atomically, it's like there are no other threads or they don't do anything that matters. So you read what you just wrote. If anything would have happened to change that, the atomically doesn't happen (retry) |
| 2022-10-28 23:39:54 +0000 | <dminuoso> | *semantically |
| 2022-10-28 23:39:56 +0000 | <jbggs[m]> | That's a new word for me, operad |
| 2022-10-28 23:39:58 +0000 | <cpli> | EvanR, if i remember anything correctly STM basically locks for any other thread trying to access the same memory region |
| 2022-10-28 23:40:05 +0000 | <dminuoso> | cpli: No. |
| 2022-10-28 23:40:08 +0000 | <cpli> | q-q |
| 2022-10-28 23:40:08 +0000 | <dminuoso> | cpli: its lock-free. |
| 2022-10-28 23:40:11 +0000 | <cpli> | q-q |
| 2022-10-28 23:40:16 +0000 | cpli | in awe |
| 2022-10-28 23:40:26 +0000 | <EvanR> | locking sounds like an implementation thing, which it doesn't use but really shouldn't matter to this story |
| 2022-10-28 23:40:29 +0000 | <cpli> | wait-free too? |
| 2022-10-28 23:40:38 +0000 | <monochrom> | Well, I'm fine with a suitable definition of "basically". |
| 2022-10-28 23:41:21 +0000 | <EvanR> | one slow implementation strategy is to run all STM actions sequentially, perhaps using a shared global lock |
| 2022-10-28 23:42:03 +0000 | <monochrom> | Basically, if you only notice final answers and don't notice speed, STM gives the same answer as locking. |
| 2022-10-28 23:42:18 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2022-10-28 23:42:28 +0000 | perrierjouet | (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) |
| 2022-10-28 23:42:39 +0000 | <monochrom> | If you pay attention to speed, STM is sometimes faster than locking, sometimes slower. |
| 2022-10-28 23:42:42 +0000 | <cpli> | jbggs[m]: "cats" or categories, 2-cats are cats with 0-cells (your normal objects) 1-cells (arrows between your objects) and arrows between your objects etc. operads are a way to represent cells, which is another matter |
| 2022-10-28 23:43:22 +0000 | <EvanR> | do operads have anything to do with monads |
| 2022-10-28 23:43:38 +0000 | <monochrom> | Although, the sad thing is that the very word "transactional" in the very name has already told you how it does it, but people have never learned transactions, they have only learned locking. |
| 2022-10-28 23:43:53 +0000 | <cpli> | not necessarily, but also yes, unless they don't EvanR |
| 2022-10-28 23:44:18 +0000 | <EvanR> | that's the worst bit of category theory ever |
| 2022-10-28 23:45:16 +0000 | <cpli> | operads are just shapes that give you some way of "glueing" them together to get new shapes |
| 2022-10-28 23:45:31 +0000 | <cpli> | i.e. composition if you think of the edges of your shapes as arrows |
| 2022-10-28 23:45:52 +0000 | <cpli> | i.e. glueing from topology if you get really weird |
| 2022-10-28 23:46:00 +0000 | polo | (~polo@user/polo) |
| 2022-10-28 23:46:06 +0000 | <cpli> | i.e. homotopies if you haven't slept for 2 weeks |
| 2022-10-28 23:46:45 +0000 | <talismanick> | monochrom: "If you want to write CS research today, look at what the database people were doing 2 decades ago" |
| 2022-10-28 23:46:56 +0000 | <cpli> | monochrom, what does transactional entail? |
| 2022-10-28 23:47:00 +0000 | <talismanick> | I forget who said that, but the more I read, the more it rings true... |
| 2022-10-28 23:47:12 +0000 | <EvanR> | what database people other than mysql was doing 2 decades ago |
| 2022-10-28 23:47:13 +0000 | <cpli> | i.e. "ownership" in rust terms is always handed along? |
| 2022-10-28 23:47:22 +0000 | <talismanick> | cpli: ACIDity |
| 2022-10-28 23:47:41 +0000 | <EvanR> | the I in ACID corresponds to transactional |
| 2022-10-28 23:47:50 +0000 | <cpli> | of course it does |
| 2022-10-28 23:47:56 +0000 | <monochrom> | Learn "database transactions". If you don't see "roll back" you aren't learning transactions. |
| 2022-10-28 23:48:01 +0000 | polo | (~polo@user/polo) (Client Quit) |
| 2022-10-28 23:48:02 +0000 | Tuplanolla | (~Tuplanoll@91-159-69-11.elisa-laajakaista.fi) (Quit: Leaving.) |
| 2022-10-28 23:48:16 +0000 | <dminuoso> | Gosh, did Microsoft really remove SPJs papers website? :( |
| 2022-10-28 23:48:18 +0000 | <talismanick> | Or, at least, the A and I parts - C is up to the programmer, and D is outside the scope of STM |
| 2022-10-28 23:48:28 +0000 | <dminuoso> | I wish hyperlinks would just stay alive... |
| 2022-10-28 23:48:38 +0000 | <EvanR> | i was downloading spj papers from microsoft a couple weeks ago |
| 2022-10-28 23:48:56 +0000 | <cpli> | oh |
| 2022-10-28 23:49:22 +0000 | <monochrom> | I think https://simon.peytonjones.org/publications/ helps. |
| 2022-10-28 23:49:41 +0000 | <cpli> | start doing x, do x in y, if x fails, restore y |
| 2022-10-28 23:50:02 +0000 | <EvanR> | begin transaction; do whatever, do whatever, do whatever, commit |
| 2022-10-28 23:50:31 +0000 | <cpli> | or record y, do f, if f fails, restore y and override g's operation on y |
| 2022-10-28 23:50:32 +0000 | <EvanR> | let the database figure out how to interleave it all |
| 2022-10-28 23:50:55 +0000 | <EvanR> | while maintaining the invariants |
| 2022-10-28 23:51:24 +0000 | <cpli> | i guess `I` ruins my joke |
| 2022-10-28 23:51:44 +0000 | <dminuoso> | cpli: Anyway, the way GHC implements STM, is by just running the transactional code without any lock, along the way it records a transaction log of what it has does, and if at the end the log is consistent it will commit that to memory. |
| 2022-10-28 23:51:49 +0000 | <cpli> | how do you guarantee `I` on non-hardware-atomics? |
| 2022-10-28 23:51:55 +0000 | <cpli> | i.e. entire memory regions? |
| 2022-10-28 23:52:30 +0000 | <dminuoso> | And if it doesnt, it can retry that block. Given that it has a transactional log, it can then block until it *knows* that a dependent variable has changed (no need to retry if none of the read variables havent changed) |
| 2022-10-28 23:53:03 +0000 | <cpli> | dminuoso, oh, it's the weird "transform any algorithm into a wait-free algorithm vm" |
| 2022-10-28 23:53:21 +0000 | <dminuoso> | I do not know that transformation |
| 2022-10-28 23:53:30 +0000 | <cpli> | no? |
| 2022-10-28 23:53:34 +0000 | <cpli> | one-moment |
| 2022-10-28 23:53:48 +0000 | <EvanR> | what would wait free mean in this context |
| 2022-10-28 23:54:06 +0000 | <monochrom> | I know lock-free, I don't know wait-free. |
| 2022-10-28 23:54:08 +0000 | <cpli> | http://cs.technion.ac.il/~erez/Papers/wf-simulation-full.pdf |
| 2022-10-28 23:54:16 +0000 | <cpli> | wait, this turns lock-free into wait-free |
| 2022-10-28 23:54:22 +0000 | <cpli> | dammit |
| 2022-10-28 23:54:25 +0000 | <monochrom> | Wouldn't it be nice if vaccination clinics were wait-free >:) |
| 2022-10-28 23:54:41 +0000 | chomwitt | (~chomwitt@2a02:587:dc10:8200:1ac0:4dff:fedb:a3f1) (Ping timeout: 276 seconds) |
| 2022-10-28 23:55:14 +0000 | <dminuoso> | monochrom: They can be, just start coughing enough and ask loudly-but-not-too-loudly for the vaccination against your hot COVID infection. |
| 2022-10-28 23:55:22 +0000 | <talismanick> | cpli: so, wait-free means no live locks... ? |
| 2022-10-28 23:56:15 +0000 | <cpli> | wait-free is pseudo termination-guarantees |
| 2022-10-28 23:56:32 +0000 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
| 2022-10-28 23:56:32 +0000 | <monochrom> | I think they would immediately send you home instead. But hey, "abort early, abort often" is more wait-free than "wait then abort anyway". |
| 2022-10-28 23:56:32 +0000 | <dminuoso> | cpli: Im not sure this really compares. One of the crucial things is that if the view of memory is not consistent (which it might be), it will retry. |
| 2022-10-28 23:57:09 +0000 | <cpli> | talismanick: `push` **will succeed** in n cpu-cycles |
| 2022-10-28 23:57:50 +0000 | <cpli> | dminuoso: how do you ensure termination? i.e. stop the vm from retrying indefinitely? |
| 2022-10-28 23:58:05 +0000 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
| 2022-10-28 23:58:29 +0000 | <dminuoso> | cpli: two things: a) since a transaction log is kept, you can only retry when there's a possibility of obtaining a different result |
| 2022-10-28 23:58:42 +0000 | <monochrom> | In usage of STM we just ask for fairness, I think. |
| 2022-10-28 23:58:50 +0000 | <cpli> | dminuoso: interesting. |
| 2022-10-28 23:58:52 +0000 | <dminuoso> | b) just some optimism that concurrency is not crazy wild I suppose? |
| 2022-10-28 23:59:00 +0000 | euandreh | (~euandreh@179.214.113.107) |
| 2022-10-28 23:59:05 +0000 | <cpli> | B) |
| 2022-10-28 23:59:13 +0000 | <talismanick> | aaaaah, so it's the opposite of what I said - no deadlocks , but can have livelocks (each part succeeds in allotted time without being starved externally, but end up ping-pong'ing each other and cause the system to make no progress) |
| 2022-10-28 23:59:13 +0000 | <dminuoso> | I mean yeah, if you keep extremely large transactions, retrying will get more expensive |
| 2022-10-28 23:59:22 +0000 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds) |
| 2022-10-28 23:59:46 +0000 | <talismanick> | interesting |