Home liberachat/#haskell: Logs Calendar

Logs on 2022-08-18 (liberachat/#haskell)

00:00:01 <geekosaur> modulo producing an empty list if the team isn't found in the Map
00:00:41 <geekosaur> initL builds the empty Map of that type
00:01:26 <geekosaur> hm, actually I'm not sure you';re allowed to use a Map here
00:01:33 <Zmijson> I thought initial score would be initL t = []
00:01:45 <geekosaur> the problem set says you have Eq, but says nothing about Ord which you need for a Map
00:01:50 <geekosaur> so you'd have to use a list
00:02:33 <qrpnxz> i'm surprised Ord isn't a superclass of Enum
00:03:36 × haskl quits (~haskl@user/haskl) (Ping timeout: 268 seconds)
00:04:20 <geekosaur> Zmijson, it's a bit more complex than that since `initL :: LeagueL t`, but `type LeagueL t = t -> [t]`, that is, the result of `initL` is a function. (Are you sure you copied that down correctly?)
00:04:40 <Zmijson> yes
00:04:58 × tryme13f quits (~Thunderbi@2001:8a0:7d92:3b01:34e5:5642:a1e2:df48) (Quit: tryme13f)
00:05:32 <Zmijson> so initL t = [(t, [])]?
00:05:56 <geekosaur> that's not a function
00:06:16 <geekosaur> this still doesn't make sense, I don't think you can have an initial value of a function in this context
00:06:59 × hippoid quits (~idris@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 248 seconds)
00:07:23 <geekosaur> it *ought* to be a list. but the type you gave for LeagueL is a function
00:07:39 vysn joins (~vysn@user/vysn)
00:07:57 beteigeuze joins (~Thunderbi@2001:8a0:7d92:3b01:34e5:5642:a1e2:df48)
00:08:01 <geekosaur> unless they have you writing lambda calculus in Haskell, this doesn't actually make a lot of sense
00:08:50 <geekosaur> it's even worse for part two, where it's clearly supposed to be a function form a list to a list, not a function from a function to a function
00:09:07 <geekosaur> doublecheck your `LeagueL` and `LeagueM`
00:09:15 <geekosaur> *from a
00:09:19 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
00:10:01 <Zmijson> I even quadruple checked it
00:10:13 <Zmijson> I just copied them as they were given
00:10:50 <geekosaur> uh, someone else sanity check this please?
00:11:03 <geekosaur> am I misreading this completely?
00:14:48 <Guest67> which part are you working on?
00:16:22 <Zmijson> a start lol
00:16:42 <Zmijson> https://paste.tomsmeding.com/uVQcgeYm for ease
00:19:05 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
00:21:33 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 244 seconds)
00:22:23 [_] is now known as [itchyjunk]
00:24:24 <Guest67> not sure where you're at with this, but I think you're right that initL t = [] for a start. the type of LeagueL is a function, but type of LeagueL t is a list I think
00:24:52 <Zmijson> what would you say for LeagueM?
00:25:04 <Guest67> initM or LeagueM?
00:26:01 <Guest67> LeagueM is a function, and LeagueM t is a Maybe t
00:27:31 <geekosaur[m]> Where did this problem set come from?
00:28:11 <Zmijson> I meant initM
00:29:08 <Guest67> since initM is of type LeagueM t, you can refer above to see that initM is of type Maybe t
00:29:41 <Guest67> which I guess I'd say should be Nothing right?
00:31:31 × chomwitt quits (~chomwitt@2a02:587:dc16:4100:1289:3f0b:2a03:948d) (Ping timeout: 248 seconds)
00:31:40 tomgus1 joins (~tomgus1@2a02:c7e:4229:d900:dea6:32ff:fe3d:d1a3)
00:31:51 <Guest67> if I'm reading this correctly you're dealing with this kind of abstract "scores record" but you're not actually implementing the scores record yet, just these small parts first
00:33:29 <Guest67> it says "Give the value representing the initial state of the scores record" but it almost seems like it means "Give the value representing the initial state of a team on the scores record". Could totally be misunderstanding though
00:33:34 <Zmijson> yeah that's what I thought
00:33:49 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
00:33:50 <Zmijson> hence I thought it'd be just = Nothing and = []
00:34:24 <Guest67> I think start with that for now and come back if down the line it doesn't make sense
00:34:34 <Guest67> *come back to it
00:35:21 <Zmijson> but that is the thing
00:35:30 <Zmijson> it stopped making sense as soon as I read pt 2
00:35:52 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
00:37:56 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
00:38:27 × mvk quits (~mvk@2607:fea8:5ce3:8500::a1ec) (Ping timeout: 248 seconds)
00:38:50 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
00:39:17 matthewmosior joins (~matthewmo@173.170.253.91)
00:39:27 <arahael> What does 'Control.Monad.Fix.fix' do? I'm trying to find an explaination of it.
00:40:53 <arahael> I mean, it's *obviously* not the usual definition of finding a fixed point of a function, least defined or not.
00:41:07 <arahael> (Otherwise, it would mean that 'fix (1/)' would give the answer 1)
00:43:21 x77686d joins (~x77686d@c-76-18-124-133.hsd1.al.comcast.net)
00:47:37 <jackdk> I don't have a solid handle on it, but I read it as letting you build a monadic action that lets you refer to the result being built. With `mdo`, this lets you refer to bound variables that are "after" the current line in the do-expression; I have seen a blog post about using it to implement forward jumps to labels in an assembly DSL (I cannot find it, sorry)
00:49:26 <arahael> Unfortunate you can't find that blog post. :(
00:49:30 <jackdk> reflex uses it a lot, where you have circular references between your values (usually `Dynamic`s), but because of laziness and the programmer care, you avoid infinite loops at runtime
00:49:57 <arahael> I'd love to see an article that explains that.
00:50:52 <dsal> I've used fix (and mfix) once or twice.
00:51:39 <arahael> I'll never use it unless I know this. :/
00:51:50 <jackdk> It is a super niche thing
00:52:32 <dsal> Coworker wrote this one: https://rebeccaskinner.net/posts/2021-06-09-getting-to-the-fixed-point.html
00:52:39 <dsal> But that's not blog post I was just thinking about.
00:52:51 <jackdk> https://git.sr.ht/~jack/reflex-libtelnet/tree/ffea5fa8b372ee57d85220a5c8bc5785b9bcaf92/item/reflex-libtelnet-example/src/Main.hs#L56 for an example: `eRemoves` is used in the construction of `dClients`, which is used in the construction of `dClientCloses`, which is used in the construction of `eRemoves`
00:53:12 <arahael> dsal: I'll check that one later today - thanks. :)
00:53:28 <dsal> Oh, I think I was thinking about this one which isn't about `fix` but recursion schemes: https://blog.sumtypeofway.com/posts/introduction-to-recursion-schemes.html
00:53:30 <dsal> Kind of related.
00:55:14 <Guest67> Zmijson i take it back, based on the typing i think they were right that initM and initL are supposed to be functions, not just a list or Maybe t, but now I'm not sure how this is supposed to work
00:56:09 <jackdk> https://elvishjerricco.github.io/2017/08/22/monadfix-is-time-travel.html
00:56:28 <geekosaur> https://downloads.haskell.org/ghc/9.2.4/docs/html/users_guide/exts/recursive_do.html has some things to say about it, I think
00:56:55 <elvishjerricco1> jackdk: Glad people are still referencing that one :P
00:58:08 <jackdk> ohai elvishjerricco1 , how goes?
00:58:44 <elvishjerricco1> Goes well. Been quite a while since I've written on that blog... I should really post something
01:00:46 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
01:03:12 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
01:03:22 adanwan_ joins (~adanwan@gateway/tor-sasl/adanwan)
01:04:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
01:05:34 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
01:10:25 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:13:02 snak joins (~snak@221x252x204x99.ap221.ftth.ucom.ne.jp)
01:15:03 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds)
01:15:50 × Zmijson quits (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79) (Ping timeout: 252 seconds)
01:15:54 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Read error: Connection reset by peer)
01:16:33 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:16:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds)
01:17:18 × xff0x quits (~xff0x@ap007189.d.east.v6connect.net) (Ping timeout: 256 seconds)
01:17:41 kimjetwav joins (~user@2607:fea8:235e:b600:e431:ef6a:50a6:3d1a)
01:17:47 <arahael> Thankks, I'll read those too. :)
01:18:04 × berberman quits (~berberman@user/berberman) (Quit: ZNC 1.8.2 - https://znc.in)
01:18:24 berberman joins (~berberman@user/berberman)
01:19:34 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
01:20:04 hippoid joins (~idris@c-98-220-13-8.hsd1.il.comcast.net)
01:22:53 × x77686d quits (~x77686d@c-76-18-124-133.hsd1.al.comcast.net) (Quit: Connection closed)
01:25:40 king_gs joins (~Thunderbi@187.201.216.244)
01:28:29 zxx7529 joins (~Thunderbi@user/zxx7529)
01:30:59 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:33:45 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 256 seconds)
01:34:19 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
01:34:51 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
01:34:57 Zmijson joins (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79)
01:39:15 × vysn quits (~vysn@user/vysn) (Ping timeout: 248 seconds)
01:42:17 <Guest67> Zmijson i *think* i have a better idea of how your stuff is supposed to work
01:43:41 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
01:44:10 matthewmosior joins (~matthewmo@173.170.253.91)
01:45:05 × beteigeuze quits (~Thunderbi@2001:8a0:7d92:3b01:34e5:5642:a1e2:df48) (Ping timeout: 256 seconds)
01:46:17 haskl joins (~haskl@user/haskl)
01:47:04 <Zmijson> ooh do tell
01:47:08 <Zmijson> I am at a loss
01:49:37 × zxx7529 quits (~Thunderbi@user/zxx7529) (Remote host closed the connection)
01:49:52 zxx7529 joins (~Thunderbi@user/zxx7529)
01:50:12 × zxx7529 quits (~Thunderbi@user/zxx7529) (Remote host closed the connection)
01:50:27 zxx7529 joins (~Thunderbi@user/zxx7529)
01:50:59 <Guest67> okay, so starting with p1, initM is of type (t,t) -> Maybe t. This means the way you're gonna return different things based on what initM's input is. Say we have two teams, x and y. a tuple (x,y) means x played against y and won, so initM (x,y) = Maybe x, and initM (x,x) = Nothing
01:53:13 <Zmijson> wouldn't the initial value always be Nothing though?
01:54:33 <dsal> I've not been paying attention here, but why is there a tuple?
01:55:11 <Guest67> okay right yeah, I agree. we can just say that the initial value for any two teams is Nothing
01:55:13 <Guest67> https://paste.tomsmeding.com/uVQcgeYm
01:55:48 <Guest67> initM :: (t,t) -> Maybe t
01:56:02 <Guest67> so initM x y = Nothing
01:56:09 <Guest67> err
01:56:14 <Guest67> initM (x,y) = Nothing
01:56:15 <Guest67> sorry
01:59:54 <Axman6> How do I tell cabal to put the compiled executables of a package in a specific location? setting --prefix to ./dist causes cabal install to still copy the executables to ~/.cabal/bin
02:00:05 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:00:45 <Zmijson> yeah, that's more or less what I thought
02:00:55 <Zmijson> I'd also just do = [] for LeagueL
02:01:14 <Axman6> (worth noting I'm using a custom Setup.hs
02:01:43 <Guest67> Zmijson yep that sounds good to me
02:01:46 nate4 joins (~nate@98.45.169.16)
02:02:48 <Zmijson> still no idea on pt 2
02:03:10 <Zmijson> like do i make empty lists and store stuff there or whut
02:04:14 <Guest67> so yeah p2 is interesting because initially it seems like you'd want to make a list or something and store and retrieve values, but I think the point of this part is to show that you can make a data structure just by composing functions and values
02:04:23 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
02:06:00 <Guest67> so for instance you could say: WinnerM (x,y) initM (x,y) and that would return Maybe x I believe
02:06:58 <Axman6> Ah, looks like I need cabal install --install-method=copy --installdir=$DIST (https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-install)
02:07:24 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
02:08:05 <Zmijson> Wouldn't you have to specify initM (x,y) to return Just x?
02:08:24 <Guest67> oh yes my bad, Just x not Maybe x lol
02:09:54 <Guest67> but the idea is that you can not put in the third parameter of WinnerM and pass that in as the second parameter to other WinnerM calls to build out a data structure
02:11:17 <Zmijson> so how do you then check if a result already exists and update it
02:13:18 <Guest67> first, note at the top of your instructions, you're told each team only goes against each other once. But checking to see if the current score is nothing and updating it is what you have to build out in your function
02:14:37 <Zmijson> on an unrelated note - cause ive tried something else in the meantime - is there a way to clear a lisT?
02:14:42 nate4 joins (~nate@98.45.169.16)
02:14:49 <Zmijson> aka remove everything from it
02:15:52 <Guest67> well if you have a function that takes in a list, i would say just return []
02:16:18 <Zmijson> building a calculator of sorts
02:16:46 <Zmijson> so i have a list of ints to keep its state and an input list to perform operations/change the state
02:17:50 <Zmijson> and want to be able to clear the state i.e. wipe everything
02:19:09 <Guest67> when you say you're keeping its state, what does that look like?
02:19:13 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
02:21:51 <dsal> Zmijson: you can't change a list.
02:23:30 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
02:23:37 × td_ quits (~td@94.134.91.250) (Ping timeout: 252 seconds)
02:23:49 <Zmijson> i opted for a list of ints
02:25:24 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
02:25:31 td_ joins (~td@muedsl-82-207-238-008.citykom.de)
02:27:52 <Zmijson> hmmmm
02:27:53 <Zmijson> actually
02:28:26 <Zmijson> can you change a record entry?
02:28:35 <Zmijson> or is that also pemanent
02:28:40 <Zmijson> permanent
02:28:46 <dsal> You can't really change anything (you can, but let's not go there now).
02:28:52 <dsal> You mostly just make new things that represent the new state you want.
02:29:41 <dsal> So you can take a record and derive a new record from it such that the new one has a different value for a particular field, e.g. `r' = r{someField=2}`, but you haven't modified `r` there, you just have `r` and `r'`
02:32:54 <dsal> There are a variety of ways to do the thing. It depends on what you're comfortable with.
02:33:12 <dsal> The easiest way to do something like that is to have a function that takes your list and an operation and returns a new list.
02:33:28 <dsal> (Assuming something like RPN)
02:34:26 <dsal> `add :: [Int] -> [Int]` -- though the only failure mode that makes sense there is to drop the stack and return `[]`. You could also do `Maybe [Int]` as the return, but that's a different kind of problem.
02:34:26 × king_gs quits (~Thunderbi@187.201.216.244) (Read error: Connection reset by peer)
02:34:48 <dsal> add (x:y:xs) = (x+y):xs
02:35:03 <dsal> add _ = []
02:35:46 × zxx7529 quits (~Thunderbi@user/zxx7529) (Quit: zxx7529)
02:35:46 × hippoid quits (~idris@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 268 seconds)
02:35:47 king_gs joins (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
02:36:22 <dsal> In this model, `clear = const []`
02:36:33 <dsal> (or `clear _ = []` if you prefer)
02:37:48 <Guest67> yeah, I think a good perspective to have is you're not really gonna make some sort of state and update it, it's more so that you're gonna take some sort of input in, and process it by composing lots of functions together and sending each one's output to the next
02:39:17 <dsal> > let add (x:y:xs) = (x+y):xs; add _ = [] in (add [1, 2, 4], add [1], add (100:add [5, 11]))
02:39:19 <lambdabot> ([3,4],[],[116])
02:40:30 <dsal> It can feel a bit more mutatey if you're using StateT, but if you're just coming in, that's going to be kind of weird.
02:40:40 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
02:40:46 matthewmosior joins (~matthewmo@173.170.253.91)
02:42:03 × [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
02:42:30 L29Ah joins (~L29Ah@wikipedia/L29Ah)
02:42:47 <L29Ah> i want a `data Foo a b = Foo !a`
02:43:00 <L29Ah> should i write one myself, or there's some idiomatic leftpad to import?
02:43:11 <monochrom> Write your own.
02:43:14 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
02:43:33 <L29Ah> what about Void, should i write my own or import the leftpad?
02:43:44 matthewmosior joins (~matthewmo@173.170.253.91)
02:43:52 <monochrom> I think Void is already in base.
02:44:02 <monochrom> wtf is leftpad?
02:44:22 <dolio> Isn't Const in base, too?
02:44:33 <dsal> Yeah, that's just Const, but not as a newtype.
02:44:39 <monochrom> But Const lacks the !
02:44:42 <dsal> monochrom: bad npm joke
02:44:45 <dsal> Isn't newtype the ! ?
02:44:53 <L29Ah> https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Functor-Const.html ok thanks
02:44:56 <jackdk> monochrom: L29Ah is making a joke about how JS programmers import all these tiny libraries that define single functions, and one day someone deleted a package called `left-pad` and broke the internet.
02:44:58 <L29Ah> dsal: i believe it is
02:46:24 <monochrom> OK newtype is close enough to ! . I forgot that Const is a newtype.
02:46:36 nate4 joins (~nate@98.45.169.16)
02:46:54 <monochrom> I have been teaching a course in which I didn't bother to teach newtype, so my state monad is "data State s a = ..." for example.
02:47:31 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
02:49:40 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
02:49:41 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
02:50:56 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
02:51:51 × raym quits (~raym@user/raym) (Remote host closed the connection)
02:53:41 × hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
02:54:01 <dsal> Yeah, for the most part, newtype seems like an unnecessary detail I shouldn't have to think about.
02:54:03 <qrpnxz> i wish newtype wasn't a thing personally
02:54:15 <qrpnxz> right
02:55:14 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
02:55:58 <qrpnxz> though because of how laziness works, it makes sense to be explicit
02:56:41 raym joins (~raym@user/raym)
02:59:34 <monochrom> What if the language is defined to special-case "if just one data constructor, and just one field, and the field is !ed, then it gets newtype semantics"?
03:00:05 <L29Ah> isn't newtype a ! already?
03:00:18 <monochrom> No, there is a fringe difference.
03:00:30 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
03:00:33 <monochrom> The Haskell Report has an example.
03:00:41 <qrpnxz> monochrom: i like that rule
03:02:27 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 248 seconds)
03:02:47 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
03:03:53 <qrpnxz> data NotNew a = NotNew {-# UNPACK #-} !a
03:04:32 cheater1__ joins (~Username@user/cheater)
03:04:35 <jackdk> monochrom: aren't there instances where you want the extra laziness? can't think of any off the top of my head
03:04:45 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
03:04:46 cheater1__ is now known as cheater
03:05:03 <qrpnxz> that's why the rule that it's a newtype if you bang it makes sense
03:06:03 <monochrom> (case New bottom of New _ -> ()) ≠ (case Data bottom of Data _ -> ())
03:06:32 <monochrom> However, I'm going out on a limb to propose that maybe no one needs that fringe difference.
03:06:32 × raym quits (~raym@user/raym) (Read error: Connection reset by peer)
03:07:01 <qrpnxz> Maybe should be free too. Just have null pointer be Nothing. Every Word8 should point to the same object. These optimization would be amazing, but not done afaik
03:07:03 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:08:46 <monochrom> However at level 2, that kind of thinking is exactly how we got Perl and PHP. >:)
03:09:46 <monochrom> GHC effectively already does "Nothing is null pointer" and "most Char values point to shared objects".
03:10:59 <qrpnxz> idk, every time i try to stream Words i get memory explosion. The only new object i could possibly be generating is Word, but i admit to not have technically confirmed this.
03:11:21 <monochrom> GHC uses the flyweight pattern for most characters, notably the ASCII ones. You can generate a list of a million English letters, and you won't have a million Char objects, just a million pointers to the same 26 objects.
03:11:34 raym joins (~raym@user/raym)
03:12:13 <qrpnxz> maybe ghc optimize char better than word
03:12:15 <qrpnxz> ironically
03:12:42 <monochrom> There is only one object for Nothing. It's shared. Every use site points to the same Nothing. You may as well regard its address as the null address.
03:12:47 × Zmijson quits (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79) (Quit: Client closed)
03:13:18 <qrpnxz> neat
03:13:19 <monochrom> It is possible that GHC does something similar to Word8, Int, and small Integer values. I haven't checked. I probably heard.
03:14:31 <monochrom> Who says the gang-of-4 design patterns are bad? GHC uses all of them. >:)
03:14:32 <Guest67> huh i had no idea, that's pretty cool
03:15:38 <qrpnxz> maybe more recent ghc version is better? I noted that it wasn't until kind of recently that Word8 and friend were actually word8 and friend underneath, rather than a whole int for all of them
03:15:46 <qrpnxz> for example
03:16:28 <qrpnxz> man, it getting late. Good night :)
03:16:40 tomboy64 joins (~tomboy64@user/tomboy64)
03:18:50 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
03:19:05 × _________ quits (~nobody@user/noodly) (Ping timeout: 268 seconds)
03:19:12 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:20:16 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds)
03:20:50 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds)
03:21:58 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
03:23:04 matthewmosior joins (~matthewmo@173.170.253.91)
03:23:46 hughjfchen joins (~hughjfche@vmi556545.contaboserver.net)
03:27:38 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
03:29:07 × vglfr quits (~vglfr@145.224.94.221) (Ping timeout: 248 seconds)
03:29:53 × king_gs quits (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Ping timeout: 255 seconds)
03:30:07 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
03:31:05 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
03:35:35 × Vajb quits (~Vajb@2001:999:705:3c86:e7ea:442b:1e01:22d8) (Read error: Connection reset by peer)
03:36:13 Vajb joins (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi)
03:42:25 fserucas_|eod joins (~fserucas|@46.50.4.9)
03:43:25 nilradical joins (~nilradica@user/naso)
03:44:39 × fserucas|eod quits (~fserucas|@46.50.4.9) (Ping timeout: 252 seconds)
03:50:18 vglfr joins (~vglfr@145.224.94.248)
03:56:32 matthewmosior joins (~matthewmo@173.170.253.91)
04:00:15 Everything joins (~Everythin@37.115.210.35)
04:01:04 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
04:05:23 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
04:08:38 × Henson quits (~kvirc@207.136.101.195) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
04:11:55 gio123 joins (~gio123@94.137.173.75)
04:17:02 nate4 joins (~nate@98.45.169.16)
04:18:46 × Vajb quits (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) (Read error: Connection reset by peer)
04:19:29 Vajb joins (~Vajb@2001:999:705:3c86:e7ea:442b:1e01:22d8)
04:21:37 _________ joins (~nobody@user/noodly)
04:21:55 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
04:22:53 × adanwan_ quits (~adanwan@gateway/tor-sasl/adanwan) (Quit: _)
04:23:20 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
04:23:35 Axman6 ponders Char having an optimisation where the address for a character encodes its value
04:23:40 drlkf_ joins (~drlkf@466z.l.time4vps.cloud)
04:24:38 <c_wraith> that... isn't compatible with them being lifted
04:25:08 <c_wraith> since a Char can be unevaluated in memory
04:26:16 <Axman6> sure, you'd need to tag them
04:26:18 × drlkf_ quits (~drlkf@466z.l.time4vps.cloud) (Client Quit)
04:26:39 drlkf_ joins (~drlkf@466z.l.time4vps.cloud)
04:26:59 <c_wraith> but what I mean is you'd need to change the address of the reference
04:27:01 × drlkf_ quits (~drlkf@466z.l.time4vps.cloud) (Client Quit)
04:27:14 <c_wraith> Which would interact *really* weirdly with sharing
04:27:49 <Axman6> pointerFor :: Char -> Ptr; pointerFor (Char c#) = 0xFFFF + c `unsafeShiftL` 4 + evaluatedChar tag
04:28:39 <c_wraith> to maintain call-by-need with sharing, you'd need to both rewrite the thunk and rewrite the pointer
04:28:51 <c_wraith> I'm not sure that's going to be a win on average
04:29:47 <Axman6> the pointer already does get rewritten when a thunk is evaluated right? ghc already tags pointers to objects if it's known they have been evaluated
04:30:23 matthewmosior joins (~matthewmo@173.170.253.91)
04:31:46 <monochrom> Oh we already have pointer tagging!
04:32:25 <monochrom> A GHC pointer encodes both "am I in WHNF?" and "if yes, my value!"
04:33:05 <c_wraith> well. it encodes "am I known to be in WHNF?", which is slightly different
04:33:24 <monochrom> OK, I mean that.
04:33:46 <monochrom> GHC also request 1TB of address space.
04:34:26 <c_wraith> Axman6: I think the biggest problem is that it requires an extra "this is a Char" tag. There's only so much tag space available...
04:34:37 <monochrom> This means there is easily a huge range of address we can choose so that, for some starting point S, address S+c means the unicode code point is c!
04:34:37 <c_wraith> and only so many extra checks that are worth running
04:34:43 razetime joins (~quassel@117.193.3.40)
04:34:43 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
04:35:10 × nilradical quits (~nilradica@user/naso) ()
04:35:13 <monochrom> OK it has to be S+c*8 or something, pointer tagging and all that :)
04:36:10 <c_wraith> that's still an extra test on every single pointer dereference
04:36:21 × inversed quits (~inversed@90.209.137.56) (Ping timeout: 252 seconds)
04:36:21 <c_wraith> (or a trap on every Char dereference)
04:37:53 <monochrom> This would be great for April 1st. :)
04:38:18 <c_wraith> uniform runtime representation strikes again! the runtime doesn't know if something is a Char or not!
04:38:55 × gio123 quits (~gio123@94.137.173.75) (Quit: Client closed)
04:38:56 <monochrom> "RTS is an equal opportunity evaluator."
04:41:11 <Axman6> c_wraith: see my encoding above, take advantage of the bits which are outside of the usable address space
04:41:31 inversed joins (~inversed@90.209.137.56)
04:41:37 <Axman6> uh, 0xFFFF should have been something like 0xFFFF000000000000
04:41:50 <c_wraith> Axman6: you're missing my point. That would require the runtime to check for the pointer being in that address space on every single dereference of every single pointer. not just Chars
04:43:10 SixDuce joins (~SixDuce@92.40.184.0.threembb.co.uk)
04:45:58 <c_wraith> types have been erased. it doesn't know what type a pointer is to.
04:46:29 <Axman6> sure, but the places where that would need to happen are probably exactly the places where we already need to check for tagging
04:47:02 <c_wraith> yes. but it's *one more* test.
04:47:08 <c_wraith> on every single dereference
04:48:27 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) ()
04:48:46 drlkf_ joins (~drlkf@chat.drlkf.net)
04:48:46 <Axman6> I reckon there's likely to be a very cheap test, something like x & 0xFFFF000000007 == 0 for the fast case
04:48:54 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
04:49:02 <SixDuce> where is everyone from
04:49:11 <SixDuce> English boy here :P
04:49:31 <Axman6> The internet
04:49:33 × drlkf_ quits (~drlkf@chat.drlkf.net) (Client Quit)
04:49:44 <c_wraith> I mean, this obviously would need benchmarking across a variety of programs. But I suspect Char use isn't in the hot path the way other pointers are
04:50:08 <Axman6> except perhaps in GHC :P
04:50:23 <jackdk> Axman6: Me too!
04:50:25 <Axman6> ghc -Oghc
04:51:29 <Axman6> I'm pretty sure we're neighbours jackdk
04:51:49 <jackdk> How do you know that Axman6? I'm behind like seven proxies
04:52:00 <c_wraith> everyone here is neighbors
04:53:10 <jackdk> Makes sense
04:54:13 <Axman6> Nah we just cancelled Neighbours
04:54:20 nilradical joins (~nilradica@user/naso)
04:55:18 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
04:55:54 nilradical joins (~nilradica@user/naso)
05:01:42 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 256 seconds)
05:04:58 matthewmosior joins (~matthewmo@173.170.253.91)
05:09:20 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
05:12:58 drlkf_ joins (~drlkf@chat.drlkf.net)
05:17:57 × mikoto-chan quits (~mikoto-ch@164.5.249.78) (Ping timeout: 268 seconds)
05:18:20 × snak quits (~snak@221x252x204x99.ap221.ftth.ucom.ne.jp) (Quit: Client closed)
05:19:08 nate4 joins (~nate@98.45.169.16)
05:20:37 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
05:21:40 ec joins (~ec@gateway/tor-sasl/ec)
05:23:48 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds)
05:26:53 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
05:28:20 <hololeap> anyone have a guess why my cabal project is trying to download Cabal-3.8? I want to build this using only packages from my linux package manager (trying to test/maintain). I would like to know why Cabal-3.8 is being chosen as opposed to the installed Cabal-3.4. are there any options that will display this?
05:29:56 mikoto-chan joins (~mikoto-ch@164.5.249.78)
05:31:26 Zmijson joins (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79)
05:32:39 <Zmijson> https://paste.tomsmeding.com/vveBk2BH
05:32:48 <Zmijson> could anyone tell me why I am getting a parse error
05:32:50 <Zmijson> on the last line?
05:33:32 <jackdk> Zmijson: probably need to indent L8 so it's not in the same column as the declarations of the instance methods
05:33:54 <hololeap> you have a type declaration function with no function definition
05:34:01 <hololeap> *type declaration for a function
05:34:14 <Zmijson> its further on
05:34:24 <Zmijson> its just I was getting a parse error that I couldn't figure out
05:34:42 × Guest67 quits (~Guest67@128-193-154-141.ptpg.oregonstate.edu) (Ping timeout: 252 seconds)
05:34:44 <Zmijson> jackdk was completely right
05:34:53 <Zmijson> I still can't figure out haskell whitespaces...
05:36:54 <hololeap> to the compiler, it looks like (rf <*> ra) is perhaps another case for (pure :: BTree) where you forgot to include the " = ..." part
05:36:57 <dsal> There aren't a lot of languages where it makes sense to put a continuation of something on the same column.
05:37:38 <hololeap> but if you indent it, it knows it's an argument to Node
05:37:43 <hololeap> (on line 7)
05:37:51 <jackdk> Zmijson: I've only just started skimming this, but it seems to be quite a good video about the Haskell whitespace rules: https://www.youtube.com/watch?v=uKpPJV0hhCY
05:37:54 coot joins (~coot@213.134.176.158)
05:37:57 <dsal> Zmijson: That `pure` looks kind of weird. Do you mean for the structure to recurse onto itself?
05:37:57 chaseleif joins (~chaseleif@user/chaseleif)
05:38:25 <Zmijson> weird as a whole or in terms of spacing
05:38:27 matthewmosior joins (~matthewmo@173.170.253.91)
05:38:35 <dsal> Just conceptually weird.
05:39:00 <hololeap> aren't trees usually recursive?
05:39:02 <Zmijson> oh so you know my second name
05:39:17 <dsal> hololeap: not cyclical
05:40:04 <chaseleif> hallo. I just received my book "Learn You a Haskell for Great Good" and I am pretty excited about it. I haven't normally used like a book as a resource for a new language, but this one seems fun
05:40:11 <hololeap> oh the let statement at the top...
05:40:23 <hololeap> yeah that is strange
05:40:30 <jackdk> Does it matter? Looks like it's the zippy applicative for tree. Compare instance Applicative ZipList that goes on forever?
05:40:38 <jackdk> chaseleif: welcome, have fun with it!
05:40:51 <hololeap> hm, fair enough
05:40:53 <dsal> jackdk: Sure, it *can* make sense. I'm just not sure if it does make sense.
05:41:08 <chaseleif> thx jackdk. I think I will like it a lot
05:41:20 <dsal> I usually don't think of Trees cycling back on themselves.
05:41:54 <hololeap> Zmijson: the answer to your question is to move (rf <*> ra) over an indentation
05:42:13 <hololeap> now, prepare for nitpicks
05:42:55 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
05:43:31 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 248 seconds)
05:43:42 <dsal> Also, note you can write that: `Node lf f rf <*> Node la a ra = Node (lf <*> la) (f a) (rf <*> ra)
05:44:11 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
05:44:56 <hololeap> I petition using fix from Data.Function, like so: pure x = fix $ \t -> Node t x t
05:45:13 <monochrom> Hey I should put that on my exam!
05:45:34 <monochrom> But I've already chosen zippy lists and a cool application.
05:46:22 king_gs joins (~Thunderbi@187.201.216.244)
05:48:05 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
05:52:15 × king_gs quits (~Thunderbi@187.201.216.244) (Quit: king_gs)
05:54:25 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds)
05:54:25 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 268 seconds)
05:55:02 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 268 seconds)
05:55:58 ChaiTRex joins (~ChaiTRex@user/chaitrex)
05:56:09 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
05:56:17 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
05:56:55 ec joins (~ec@gateway/tor-sasl/ec)
05:57:45 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
05:58:53 acidjnk_new joins (~acidjnk@p200300d6e7137a57b921241ade470604.dip0.t-ipconnect.de)
05:59:45 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
06:00:04 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
06:00:30 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
06:00:38 × SixDuce quits (~SixDuce@92.40.184.0.threembb.co.uk) (Ping timeout: 256 seconds)
06:02:53 × luffy quits (~chenqisu1@183.217.201.23) (Ping timeout: 252 seconds)
06:07:03 <chaseleif> I should be able to make a compiler for a subset of the C language in Haskell right?
06:07:05 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:08:28 <chaseleif> Maybe I can convince our compiler instructor to switch from C to Haskell ... force students to use a new language and do some functional programming (?)
06:08:34 <chaseleif> Does this sound like a good idea?
06:08:36 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 268 seconds)
06:09:02 <chaseleif> C / Lex/Flex / Bison/Yacc
06:10:09 <tdammers> writing compilers in Haskell is a good idea, especially for educative purposes; the C/lex/yacc toolchain is kludgy AF, and you can get much cleaner compiler code in Haskell without resorting to code generators and such
06:10:53 <chaseleif> Nice
06:10:55 stiell joins (~stiell@gateway/tor-sasl/stiell)
06:11:01 <tdammers> but I would fully expect your attempts to fail, because most teachers won't throw out their entire curriculum for the year just because one student thinks you should be using a different language
06:11:28 <chaseleif> not this semester, but for future semesters
06:11:54 <tdammers> oh, OK. worth a shot then, you never know
06:12:20 <chaseleif> The compiler course goes hard into regexes and FSM / etc in the beginning ... that time could probably be spent talking about how to do those same things in Haskell
06:12:42 <Zmijson> I know a few people who have or had haskell at uni and they said it was by far the most failed module
06:12:51 matthewmosior joins (~matthewmo@173.170.253.91)
06:13:06 <chaseleif> people already have a hard time doing it in C ...
06:13:10 <Zmijson> there are also fewer people who can teach it and can teach it well
06:15:35 <chaseleif> We have a Principles of Programming Languages course that requires using lambda calculus .. making a lambda calculus calculator. Maybe that should be a prerequisite
06:17:17 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
06:17:32 <tdammers> Compilers are easier in Haskell, but if you have to learn Haskell first, it might not be worth it (apart from how learning Haskell makes you a better programmer in general)
06:18:16 <chaseleif> That is the thing I am thinking. If you are a programmer then you can do a new language.
06:18:26 <Franciman> what about interpreters?
06:18:32 <Franciman> are they easier in haskell or standardml?
06:19:57 ralu19 joins (~ralu@static.211.245.203.116.clients.your-server.de)
06:20:17 <dsal> I've only done interpreters in Haskell, but that's the less interesting part.
06:21:57 × ralu1 quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 252 seconds)
06:21:57 ralu19 is now known as ralu1
06:22:05 × madnight quits (~madnight@static.59.103.201.195.clients.your-server.de) (Ping timeout: 268 seconds)
06:22:07 × yahb2 quits (~yahb2@static.56.27.47.78.clients.your-server.de) (Ping timeout: 268 seconds)
06:22:11 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Ping timeout: 256 seconds)
06:22:11 × bcoppens_ quits (~bartcopp@vpn2.bartcoppens.be) (Ping timeout: 244 seconds)
06:22:29 yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2)
06:22:54 × Zmijson quits (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79) (Quit: Ping timeout (120 seconds))
06:23:34 <chaseleif> So. I will probably just need to make my own solutions in Haskell for all projects and give them to the professor.
06:23:37 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
06:23:56 bcoppens joins (~bartcopp@vpn2.bartcoppens.be)
06:23:57 × MajorBiscuit quits (~MajorBisc@46-229-126.internethome.cytanet.com.cy) (Ping timeout: 268 seconds)
06:24:18 Zmijson joins (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79)
06:24:37 waldo joins (~waldo@user/waldo)
06:25:10 madnight joins (~madnight@static.59.103.201.195.clients.your-server.de)
06:25:43 MajorBiscuit joins (~MajorBisc@c-001-019-012.client.tudelft.eduvpn.nl)
06:29:56 alternateved joins (~user@staticline-31-183-146-203.toya.net.pl)
06:32:28 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
06:32:52 stiell joins (~stiell@gateway/tor-sasl/stiell)
06:35:03 lortabac joins (~lortabac@2a01:e0a:541:b8f0:d8c8:b9a1:a839:9254)
06:37:17 <tdammers> interpreter, compiler, almost the same thing
06:37:59 <Franciman> oh i see you refer to futamura projections
06:38:14 <c_wraith> nah, those are much more complex.
06:38:43 <tdammers> it's just that between an interpreter and a compiler, only the last few stages are different, the rest is the same
06:38:43 <c_wraith> a naive compiler and a naive interpreter are relatively similar amounts of work
06:38:48 WzC joins (~Frank@77-162-168-71.fixed.kpn.net)
06:38:51 <tdammers> and those last stages are relatively boring
06:39:19 <tdammers> of course if we're talking "industry strength", then you get optimization concerns that cut through those layers, and things get messy
06:39:46 <hololeap> chaseleif: in my experience, it won't work. they'll ask you to rewrite it or just give you a 0%
06:40:35 × Noinia quits (~Frank@77-162-168-71.fixed.kpn.net) (Ping timeout: 268 seconds)
06:41:07 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
06:41:39 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 248 seconds)
06:42:11 × mikoto-chan quits (~mikoto-ch@164.5.249.78) (Ping timeout: 248 seconds)
06:42:35 <hololeap> that said, try it out in haskell if you want to, but don't expect to change the status quo
06:43:50 Lord_of_Life_ is now known as Lord_of_Life
06:44:50 <tomsmeding> I'd say a naive compiler is harder than a naive interpreter: an interpreter should implement the semantics of your language, whereas a compiler should tell some other system (i.e. the compilation target machine) to implement the semantics of your language
06:45:14 <tomsmeding> but both can be made as hard as you like
06:45:35 <tomsmeding> in particular, the limit of making an interpreter more performant is a JIT compiler :p
06:45:45 <tomsmeding> hence, they converge in the end
06:45:47 × razetime quits (~quassel@117.193.3.40) (Ping timeout: 252 seconds)
06:46:06 matthewmosior joins (~matthewmo@173.170.253.91)
06:46:09 <hololeap> a interpreter just has loosened expectations
06:46:40 razetime joins (~quassel@117.193.3.40)
06:46:42 × alternateved quits (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
06:47:51 × coot quits (~coot@213.134.176.158) (Quit: coot)
06:47:56 <chaseleif> so sad o_O
06:47:58 <sm> how would you appendFile strictly, ie, pause until that file write has finished
06:48:28 × razetime quits (~quassel@117.193.3.40) (Client Quit)
06:48:29 <chaseleif> is there a haskell fflush() :)
06:48:37 <tomsmeding> sm: is appendFile not strict?
06:48:38 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
06:49:07 <hololeap> use a streaming lib?
06:49:09 <tomsmeding> seeing as its implementation is `withFile f AppendMode (\ hdl -> hPutStr hdl txt)`, and withFile closes the file upon exit from the callback
06:49:09 <sm> I'm not sure, I am calling appendFile in several places for debug logging, and getting "withFile: resource busy (file is locked)" exceptions
06:49:11 alternateved joins (~user@staticline-31-183-146-203.toya.net.pl)
06:49:45 coot joins (~coot@213.134.176.158)
06:50:04 <tomsmeding> (oh that's not quite its posix implementation)
06:50:30 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
06:50:54 <hololeap> perhaps you could use a TVar to store the contents?
06:51:12 × coot quits (~coot@213.134.176.158) (Remote host closed the connection)
06:51:17 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
06:51:25 <tomsmeding> (but the posix implementation -- while more complicated -- seems to also close the file upon exit of withFile)
06:52:10 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Client Quit)
06:52:36 coot joins (~coot@213.134.176.158)
06:52:37 <hololeap> sorry, misread...
06:53:34 <tomsmeding> sm: I would be more concerned about the atomicity (or not) of appendFile, than its strictness, if you're concurrently calling it on the same file from multiple places
06:54:08 <tomsmeding> chaseleif: yes, System.IO.hFlush :p
06:54:14 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 268 seconds)
06:54:26 <tomsmeding> but not relevant here because appendFile uses withFile
06:55:27 <hololeap> isn't there some low-level mechanism for forcing this, sort of like waitForProcess?
06:55:41 <tomsmeding> fsync()? :')
06:56:02 <sm> I'm calling it from a few places in single-threaded code. Ie, sequentially. It works with small strings but not if I log anything large. I assume lazy IO is to blame
06:56:06 <tomsmeding> but the semantics of withFile _should_ be that it's done when it finishes, and hPutStr shouldn't be lazy
06:56:11 ChaiTRex joins (~ChaiTRex@user/chaitrex)
06:56:16 <tomsmeding> I'd hope _output_ is not lazy IO?
06:56:25 <tomsmeding> that would make zero sense
06:59:10 off^ joins (~off@50.236.139.178)
06:59:37 yvan-sraka joins (~yvan-srak@2a0d:e487:112f:fdaa:e3d5:4252:a236:fa84)
06:59:45 <hololeap> the question remains how one makes appendFile strict
07:00:42 <hololeap> you could have the function run readContents on the same file afterwards, and `seq` the contents
07:00:55 <hololeap> *readFile
07:01:21 <tomsmeding> under the hopefully false assumption that appendFile is _not_ strict, you mean?
07:01:47 <tomsmeding> reading the file in another IO operation wouldn't be connected to the presumably finished write action coming before it in the RTS, so I guess that would change little about appendFil
07:01:58 <tomsmeding> hence my statement that lazy IO in output makes zero sense :p
07:02:51 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:03:47 <hololeap> I thought *all* IO in base haskell was lazy
07:04:14 mmhat joins (~mmh@p200300f1c7086062ee086bfffe095315.dip0.t-ipconnect.de)
07:04:20 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:04:36 <tomsmeding> hololeap: quote from Prelude docs: > Encoding and decoding errors are always detected and reported, except during lazy I/O (hGetContents, getContents, and readFile), where a decoding error merely results in termination of the character stream, as with other I/O errors.
07:04:56 <hololeap> ok, so that's wrong, then
07:05:07 <hololeap> (what I said)
07:06:45 <tomsmeding> also if you click on the source for e.g. hGetContents, the lazy IO is easy to spot: if uses lazyRead, which starts with the word unsafeInterleaveIO
07:07:09 <tomsmeding> *it uses
07:09:13 <hololeap> \s -> appendFile /tmp/foo.txt s *> putStrLn "this runs after foo.txt is written"
07:09:37 <hololeap> so putStrLn is guaranteed to run after appendFile finishes writing to the file?
07:09:48 <tomsmeding> if my understanding is correct, yes
07:09:58 <hololeap> I trust your understanding
07:10:10 <tomsmeding> not necessarily persisted to disk (that's what fsync(2) and sync(1) are for), but the write(2) call should have finished
07:10:49 <hololeap> TIL
07:11:27 <tomsmeding> and I think the reason for that is precisely the above: you can't really force a write action, in contrast to a read actioni
07:11:42 <tomsmeding> so if you do that lazily, the programmer is helpless
07:13:48 <sm> so I'm wondering what's actually going on here. I know from experience that "just trying stuff" will fail to fix it..
07:14:19 <hololeap> have you seen 1000 monkeys on typewriters?
07:14:22 <tomsmeding> how intractable is copying your project and trying to reduce to a minimal reproducing example
07:16:27 ddellacosta joins (~ddellacos@89.45.224.21)
07:16:29 <sm> it should be easy to reproduce.. on the other hand it's a bit off task and I should be elsewhere.. perhaps later if no other ideas show up.. thanks
07:16:31 cfricke joins (~cfricke@user/cfricke)
07:17:32 <sm> (one other data point: sticking in a threadDelay 500000 between appends had no effect)
07:19:33 × off^ quits (~off@50.236.139.178) (Remote host closed the connection)
07:19:41 <sm> oh. And I am calling it from unsafePerformIO.
07:20:15 <int-e> ugh
07:20:58 <int-e> so are you sure you're not nesting those calls by accident? force a -> call the logging function with a string that depends on b -> force b -> call logging function while the first one is running?
07:21:17 × ddellacosta quits (~ddellacos@89.45.224.21) (Ping timeout: 268 seconds)
07:21:17 matthewmosior joins (~matthewmo@173.170.253.91)
07:21:39 <chaseleif> Did you try the System.IO.hFlush mentioned by tomsmeding ? There should be some mechanism for flushing buffers and it should work
07:21:58 <sm> I'll look into that int-e, thanks
07:22:53 ddellacosta joins (~ddellacos@143.244.47.84)
07:23:27 <sm> and flush, sensibly or not
07:23:36 <tdammers> heads up: given infinite time, the number of monkeys is irrelevant (as long as it's greater than zero)
07:25:08 <chaseleif> was wenn es 400000 Affen gibt
07:25:20 zeenk joins (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
07:25:44 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
07:25:56 hololeap votes for that one 1/10 monkey
07:25:58 <int-e> Meh, "monkey on a keyboard" isn't giving me the results that I wanted... apparently there's a Piano piece called "Dance Monkey"
07:26:32 <hololeap> is it like that scene from Big?
07:26:42 <chaseleif> lmao
07:26:59 × ddellacosta quits (~ddellacos@143.244.47.84) (Ping timeout: 248 seconds)
07:27:28 <int-e> Well, https://www.youtube.com/watch?v=-J9O5Yj3-I4 is fun at least.
07:27:51 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:28:09 <int-e> ("typewriter" works better)
07:28:51 <chaseleif> he's not very good but he sure is happy about it
07:29:13 ddellacosta joins (~ddellacos@static-198-44-136-47.cust.tzulo.com)
07:31:23 × Zmijson quits (~Zmijson@2a00:23c8:7a00:8701:8dd3:3925:ba94:9c79) (Quit: Client closed)
07:32:18 <sm> things will get clearer, but I think int-e is right - nested functions all unsafe-io-logging to the same file
07:32:37 Axman6 adds 1/2^t new monkeys every new time instant t
07:34:06 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
07:34:20 <tomsmeding> oof
07:34:22 <jackdk> Axman6: make sure to do it with proper FRP so you get continuous time
07:34:41 <tomsmeding> yeah the unsafePerformIO was the missing bit of info :p
07:34:48 nilradical joins (~nilradica@user/naso)
07:34:51 <sm> more precisely: multiple points in a function call tree unsafe-io-logging to the same file.. effectively doing concurrent IO I guess
07:34:58 <sm> sorry for leaving out that detail tomsmeding
07:35:16 <tomsmeding> yeah not precisely concurrent, but basically what int-e said
07:35:33 <tomsmeding> sm: you only know a detail is relevant to solving a problem once you've used it to solve said problem :)
07:36:08 <tomsmeding> sm: fix could be: deepseq'ing the string to log before you enter appendFile
07:36:41 <tomsmeding> \s -> unsafePerformIO $ evaluate (length (show s)) >> appendFile "log.txt" s
07:36:43 <sm> I'll try later and report back. Thanks all!
07:37:41 × gdown quits (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
07:37:55 <int-e> Heh, forcing the spine may not be enough. (Though the chance that it works it pretty good.)
07:38:01 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 268 seconds)
07:38:02 <tomsmeding> int-e: mind the 'show'
07:38:16 <tomsmeding> length (show 'a') /= length (show '\NUL')
07:38:44 <tomsmeding> I've thought about this :p
07:38:53 <int-e> tomsmeding: I did. Which is why it's *probably* fine. But you can still write `Show` instances for which it won't be enough.
07:39:11 <tomsmeding> and note also that I'm using s as an argument to appendFile, hence it's a String, hence it works in this case :p
07:39:14 <tomsmeding> but yes, in general it can fail
07:39:48 ChaiTRex joins (~ChaiTRex@user/chaitrex)
07:40:03 × nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds)
07:40:39 <sm> ..or now, since you make it so easy.. yes! That has fixed it, for now at least
07:41:15 <tomsmeding> yay
07:41:36 <int-e> tomsmeding: You're right, this will work for String.
07:42:42 <sm> the working function, FWIW:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/d31c138afa74625256cc7011c5a0cec31f913afa)
07:43:21 <tomsmeding> sm: neater way to write the same thing is `evaluate (Control.DeepSeq.force s)` :p
07:43:27 nilradical joins (~nilradica@user/naso)
07:43:39 <sm> nice
07:43:41 ccntrq joins (~Thunderbi@172.209.94.92.rev.sfr.net)
07:43:47 <tomsmeding> intent is clearer and is slightly faster, but perhaps incurs an extra dependency
07:43:48 <int-e> > let s = iterate (\s -> s <> s) (S.singleton ()) !! 64 in (S.null s, S.length s)
07:43:50 <lambdabot> error:
07:43:50 <lambdabot> Not in scope: ‘S.length’
07:43:50 <lambdabot> Perhaps you meant one of these:
07:44:06 × ddellacosta quits (~ddellacos@static-198-44-136-47.cust.tzulo.com) (Ping timeout: 268 seconds)
07:44:28 <int-e> > let s = iterate (\s -> s <> s) (Seq.singleton ()) !! 64 in (Seq.null s, Seq.length s)
07:44:28 <tomsmeding> > let s = iterate (\s -> s <> s) (S.singleton ()) !! 64 in (S.null s, S.size s)
07:44:29 <lambdabot> (False,1)
07:44:29 <lambdabot> (False,0)
07:44:34 <tomsmeding> lol
07:44:37 <tomsmeding> quiz: which is which
07:45:33 ddellacosta joins (~ddellacos@143.244.47.84)
07:45:47 <sm> this is great.. reliable logging from a brick app at last
07:47:47 × nilradical quits (~nilradica@user/naso) (Ping timeout: 248 seconds)
07:49:11 Pickchea joins (~private@user/pickchea)
07:51:47 × ddellacosta quits (~ddellacos@143.244.47.84) (Ping timeout: 252 seconds)
07:52:16 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
07:53:15 × coot quits (~coot@213.134.176.158) (Quit: coot)
07:53:29 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
07:53:35 matthewmosior joins (~matthewmo@173.170.253.91)
07:53:51 chaseleif sleeps
07:53:52 ddellacosta joins (~ddellacos@89.45.224.60)
07:55:03 <chaseleif> I'd say False applied to 1 is false and False applied to 0 is maybe true
07:56:17 <chaseleif> @lambdabot ... but it has been a couple years since I did the lambda programming and I haven't actually done any Haskell yet
07:56:17 <lambdabot> Unknown command, try @list
07:56:31 <chaseleif> @list
07:56:31 <lambdabot> What module? Try @listmodules for some ideas.
07:56:38 <chaseleif> @list ideas
07:56:38 <lambdabot> No module "ideas" loaded
07:56:44 <chaseleif> @list clues
07:56:45 <lambdabot> No module "clues" loaded
07:57:17 <chaseleif> @list chances
07:57:17 <lambdabot> No module "chances" loaded
07:57:30 <tomsmeding> @botsnack
07:57:30 <lambdabot> :)
07:57:35 <chaseleif> o_O
07:57:56 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
07:58:06 <chaseleif> nighty night
07:58:10 <tomsmeding> @pl \a b c d -> a d b c a
07:58:10 <lambdabot> flip =<< ((flip . (flip .) . flip) .) . flip
07:58:54 × ddellacosta quits (~ddellacos@89.45.224.60) (Ping timeout: 268 seconds)
07:59:50 <int-e> As I like saying, you can usually recognize pointless style by the abundance of dots.
08:00:12 ddellacosta joins (~ddellacos@143.244.47.100)
08:02:20 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
08:03:34 nate4 joins (~nate@98.45.169.16)
08:05:47 cheater joins (~Username@user/cheater)
08:06:09 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
08:08:09 coot joins (~coot@213.134.176.158)
08:08:35 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
08:09:15 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.6)
08:10:22 × yvan-sraka quits (~yvan-srak@2a0d:e487:112f:fdaa:e3d5:4252:a236:fa84) (Remote host closed the connection)
08:10:24 × ddellacosta quits (~ddellacos@143.244.47.100) (Ping timeout: 256 seconds)
08:11:01 × fserucas_|eod quits (~fserucas|@46.50.4.9) (Quit: Leaving)
08:11:16 fserucas|eod joins (~fserucas|@46.50.4.9)
08:11:23 jgeerds joins (~jgeerds@55d46bad.access.ecotel.net)
08:12:19 chele joins (~chele@user/chele)
08:12:28 × johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 268 seconds)
08:12:39 ddellacosta joins (~ddellacos@143.244.47.84)
08:14:18 akegalj joins (~akegalj@109.60.125.78)
08:15:28 nattiestnate joins (~nate@180.243.14.130)
08:15:31 × raym quits (~raym@user/raym) (Ping timeout: 248 seconds)
08:17:24 raym joins (~raym@user/raym)
08:21:06 × waldo quits (~waldo@user/waldo) (Ping timeout: 268 seconds)
08:25:23 × akegalj quits (~akegalj@109.60.125.78) (Quit: leaving)
08:26:21 matthewmosior joins (~matthewmo@173.170.253.91)
08:30:50 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
08:30:53 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
08:30:56 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
08:31:31 jpds joins (~jpds@gateway/tor-sasl/jpds)
08:31:39 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
08:39:27 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:40:34 Midjak joins (~Midjak@82.66.147.146)
08:41:41 vysn joins (~vysn@user/vysn)
08:42:36 zachel joins (~zachel@user/zachel)
08:43:11 dsrt^ joins (~dsrt@50.236.139.178)
08:43:39 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:49:37 benin0 joins (~benin@183.82.27.55)
08:50:26 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
08:54:18 × Midjak quits (~Midjak@82.66.147.146) (Quit: Leaving)
08:55:41 waldo joins (~waldo@user/waldo)
08:57:54 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
08:58:11 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 268 seconds)
08:59:49 ec joins (~ec@gateway/tor-sasl/ec)
08:59:56 matthewmosior joins (~matthewmo@173.170.253.91)
09:00:23 __monty__ joins (~toonn@user/toonn)
09:02:21 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
09:03:31 × ddellacosta quits (~ddellacos@143.244.47.84) (Ping timeout: 248 seconds)
09:04:04 akegalj joins (~akegalj@141-136-174-63.dsl.iskon.hr)
09:04:14 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
09:05:16 ddellacosta joins (~ddellacos@89.45.224.164)
09:08:05 nilradical joins (~nilradica@user/naso)
09:12:10 Midjak joins (~Midjak@82.66.147.146)
09:18:38 cfricke joins (~cfricke@user/cfricke)
09:22:31 kuribas joins (~user@silversquare.silversquare.eu)
09:24:02 hmw[at] parts (~hmw@84-113-100-7.cable.dynamic.surfer.at) ()
09:24:49 spacenautx joins (~spacenaut@user/spacenautx)
09:25:47 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:27:10 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 268 seconds)
09:29:14 ChaiTRex joins (~ChaiTRex@user/chaitrex)
09:32:51 × acidjnk_new quits (~acidjnk@p200300d6e7137a57b921241ade470604.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
09:33:00 matthewmosior joins (~matthewmo@173.170.253.91)
09:34:13 ubert joins (~Thunderbi@178.115.63.14.wireless.dyn.drei.com)
09:34:29 × Pickchea quits (~private@user/pickchea) (Ping timeout: 268 seconds)
09:37:32 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
09:37:32 snak joins (~snak@221x252x204x99.ap221.ftth.ucom.ne.jp)
09:38:15 × snak quits (~snak@221x252x204x99.ap221.ftth.ucom.ne.jp) (Client Quit)
09:40:05 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
09:43:54 × polyphem quits (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) (Ping timeout: 256 seconds)
09:44:21 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
09:48:33 luffy joins (~chenqisu1@183.217.201.23)
09:49:09 king_gs joins (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
09:49:11 × king_gs quits (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Client Quit)
09:52:07 matthewmosior joins (~matthewmo@173.170.253.91)
09:54:14 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
09:54:51 nilradical joins (~nilradica@user/naso)
09:55:59 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:00:23 × nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds)
10:00:41 yvan-sraka joins (~yvan-srak@2a0d:e487:39f:d228:4908:8fff:f815:671e)
10:01:25 mvk joins (~mvk@2607:fea8:5ce3:8500::a1ec)
10:03:11 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
10:13:01 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
10:16:57 polyphem joins (~rod@2a02:810d:840:8754:b8df:14dd:e983:6c04)
10:19:31 × luffy quits (~chenqisu1@183.217.201.23) (Ping timeout: 268 seconds)
10:24:08 × mvk quits (~mvk@2607:fea8:5ce3:8500::a1ec) (Ping timeout: 256 seconds)
10:24:42 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 256 seconds)
10:29:14 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
10:31:13 matthewmosior joins (~matthewmo@173.170.253.91)
10:33:20 nate4 joins (~nate@98.45.169.16)
10:35:21 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
10:36:13 matthewmosior joins (~matthewmo@173.170.253.91)
10:37:55 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
10:39:43 acidjnk_new joins (~acidjnk@p200300d6e7137a57f55b7c3ed0139901.dip0.t-ipconnect.de)
10:40:15 nilradical joins (~nilradica@user/naso)
10:40:34 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
10:44:19 × nilradical quits (~nilradica@user/naso) (Ping timeout: 248 seconds)
10:45:29 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 268 seconds)
10:46:04 ChaiTRex joins (~ChaiTRex@user/chaitrex)
10:54:01 × waldo quits (~waldo@user/waldo) (Ping timeout: 252 seconds)
10:56:18 × mrkajetanp quits (~mrkajetan@2a01:4b00:ea36:6c00:7994:941c:3f5d:2b88) (Ping timeout: 240 seconds)
10:56:48 <dminuoso> Hi. I want to implement a limited case-folding on short bytestrings as this is the primary bottleneck in my current project.
10:57:33 <dminuoso> Until now I did a naive `foldCase (Label l) = Label (BS.map foldCase_ l) where foldCase_ x = case x of 0x41 -> c2w 'a' ...`
10:59:49 matthewmosior joins (~matthewmo@173.170.253.91)
11:01:16 <dminuoso> Should I rather look into streaming bytes akin to what `text` has?
11:02:48 nilradical joins (~nilradica@user/naso)
11:02:59 × acidjnk_new quits (~acidjnk@p200300d6e7137a57f55b7c3ed0139901.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
11:04:22 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
11:08:51 × kuribas quits (~user@silversquare.silversquare.eu) (Ping timeout: 248 seconds)
11:10:09 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
11:10:32 jpds joins (~jpds@gateway/tor-sasl/jpds)
11:10:39 <tomsmeding> dminuoso: ascii only?
11:11:00 <dminuoso> tomsmeding: yeah
11:11:12 <dminuoso> Ah it turns out I just had to do some inlining, now it performs
11:11:17 <tomsmeding> ah :)
11:19:15 <tomsmeding> with some vector intrinsics you might be able to do a whole bunch of characters at the same time :p
11:23:30 waldo joins (~waldo@user/waldo)
11:27:37 xff0x joins (~xff0x@ap007189.d.east.v6connect.net)
11:29:39 × waldo quits (~waldo@user/waldo) (Ping timeout: 248 seconds)
11:31:02 × akegalj quits (~akegalj@141-136-174-63.dsl.iskon.hr) (Ping timeout: 268 seconds)
11:33:15 matthewmosior joins (~matthewmo@173.170.253.91)
11:34:27 × dsrt^ quits (~dsrt@50.236.139.178) (Ping timeout: 248 seconds)
11:37:32 <dminuoso> tomsmeding: Yeah, I dont think its worth the effort
11:37:41 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
11:37:41 <dminuoso> I got a different bottlneck now in the serialization direction.
11:40:04 × ddellacosta quits (~ddellacos@89.45.224.164) (Ping timeout: 256 seconds)
11:41:58 waldo joins (~waldo@user/waldo)
11:42:04 ddellacosta joins (~ddellacos@143.244.47.100)
11:42:10 acidjnk_new joins (~acidjnk@p200300d6e7137a5770c6fecd35188867.dip0.t-ipconnect.de)
11:42:22 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
11:42:40 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
11:43:33 × yvan-sraka quits (~yvan-srak@2a0d:e487:39f:d228:4908:8fff:f815:671e) (Remote host closed the connection)
11:45:06 × polyphem quits (~rod@2a02:810d:840:8754:b8df:14dd:e983:6c04) (Ping timeout: 244 seconds)
11:45:50 <dminuoso> Given an bytestring containing ascii text, is there a way to unsafely build a text out of this?
11:46:17 polyphem joins (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17)
11:46:19 × xstill_ quits (xstill@fimu/xstill) (Quit: Ping timeout (120 seconds))
11:46:19 × xsarnik quits (xsarnik@lounge.fi.muni.cz) (Quit: Ping timeout (120 seconds))
11:46:27 × waldo quits (~waldo@user/waldo) (Ping timeout: 252 seconds)
11:47:00 xsarnik joins (xsarnik@lounge.fi.muni.cz)
11:47:06 xstill_ joins (xstill@fimu/xstill)
11:48:04 dsrt^ joins (~dsrt@50.236.139.178)
11:50:01 <dminuoso> Presumably I can just copy the bytestring to a byte array, and use `text ba 0 0` from Data.Text.Internal?
11:50:21 Cale joins (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com)
11:52:51 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
11:57:51 yvan-sraka joins (~yvan-srak@37.171.140.201)
11:58:14 waldo joins (~waldo@user/waldo)
12:00:01 SixDuce joins (~SixDuce@92.40.185.179.threembb.co.uk)
12:00:35 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:02:06 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
12:02:35 × waldo quits (~waldo@user/waldo) (Ping timeout: 252 seconds)
12:04:46 × coot quits (~coot@213.134.176.158) (Quit: coot)
12:10:37 × nilradical quits (~nilradica@user/naso) ()
12:12:55 × ubert quits (~Thunderbi@178.115.63.14.wireless.dyn.drei.com) (Remote host closed the connection)
12:17:08 waldo joins (~waldo@user/waldo)
12:21:04 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
12:22:50 × waldo quits (~waldo@user/waldo) (Ping timeout: 268 seconds)
12:24:22 matthewmosior joins (~matthewmo@173.170.253.91)
12:25:23 <qrpnxz> dminuoso: yep, you can do that. That really your bottleneck tho? That ascii should validate super fast
12:25:52 kuribas joins (~user@silversquare.silversquare.eu)
12:26:26 <qrpnxz> and do you really even need it to be Text
12:26:58 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:28:30 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
12:33:55 × yaroot quits (~yaroot@p2550227-ipngn11101souka.saitama.ocn.ne.jp) (Remote host closed the connection)
12:34:33 yaroot joins (~yaroot@p2550227-ipngn11101souka.saitama.ocn.ne.jp)
12:40:49 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
12:41:23 jpds joins (~jpds@gateway/tor-sasl/jpds)
12:45:15 × dsrt^ quits (~dsrt@50.236.139.178) (Ping timeout: 256 seconds)
12:47:30 × ddellacosta quits (~ddellacos@143.244.47.100) (Ping timeout: 256 seconds)
12:49:34 ddellacosta joins (~ddellacos@143.244.47.71)
12:51:24 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
12:57:52 matthewmosior joins (~matthewmo@173.170.253.91)
12:58:19 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
13:01:38 × yvan-sraka quits (~yvan-srak@37.171.140.201) (Remote host closed the connection)
13:02:17 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
13:02:44 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
13:03:31 × xff0x quits (~xff0x@ap007189.d.east.v6connect.net) (Ping timeout: 248 seconds)
13:03:53 dsrt^ joins (~dsrt@50.236.139.178)
13:03:59 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
13:05:22 nate4 joins (~nate@98.45.169.16)
13:06:18 matthewmosior joins (~matthewmo@173.170.253.91)
13:10:27 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
13:13:59 × Alex_test quits (~al_test@94.233.241.197) (Quit: ;-)
13:16:22 × AlexZenon quits (~alzenon@94.233.241.197) (Quit: ;-)
13:17:11 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
13:17:27 × AlexNoo quits (~AlexNoo@94.233.241.197) (Quit: Leaving)
13:19:18 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:21:58 mikoto-chan joins (~mikoto-ch@164.5.249.78)
13:25:04 Everything parts (~Everythin@37.115.210.35) ()
13:25:05 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:25:20 jakalx parts (~jakalx@base.jakalx.net) ()
13:26:31 xff0x joins (~xff0x@2405:6580:b080:900:1c9b:f65e:b2b1:c205)
13:27:34 hippoid joins (~idris@c-98-220-13-8.hsd1.il.comcast.net)
13:28:12 × ddellacosta quits (~ddellacos@143.244.47.71) (Ping timeout: 268 seconds)
13:28:45 AlexNoo joins (~AlexNoo@94.233.241.197)
13:28:53 AlexZenon joins (~alzenon@94.233.241.197)
13:30:01 ddellacosta joins (~ddellacos@143.244.47.84)
13:31:37 Alex_test joins (~al_test@94.233.241.197)
13:32:47 × dsrt^ quits (~dsrt@50.236.139.178) (Ping timeout: 252 seconds)
13:32:53 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
13:33:13 <dminuoso> qrpnxz: Yes its my bottleneck.
13:33:52 <dminuoso> I think Ill go the road of unsafely constructing a bytearray
13:34:34 <dminuoso> THat might be a good reason to go to text-2.0, as I can simply reuse the buffer since its UTF8 now
13:34:49 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:38:24 × SixDuce quits (~SixDuce@92.40.185.179.threembb.co.uk) (Remote host closed the connection)
13:38:29 coot joins (~coot@213.134.176.158)
13:40:00 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
13:41:10 <dminuoso> For a few reasons it would be wonderful to have the text Stream mechanism for ByteString :(
13:41:49 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:47:05 dsrt^ joins (~dsrt@50.236.139.178)
13:47:15 × dsrt^ quits (~dsrt@50.236.139.178) (Remote host closed the connection)
13:49:37 <tomsmeding> dminuoso: that validation is slower than the case mapping?
13:50:06 <tomsmeding> I guess it's possible -- case mapping can be vectorised -- but I would be (positively) surprised if GHC manages to do that vectorisation in a useful manner
13:52:03 × xff0x quits (~xff0x@2405:6580:b080:900:1c9b:f65e:b2b1:c205) (Ping timeout: 248 seconds)
13:52:27 xff0x joins (~xff0x@ap007189.d.east.v6connect.net)
13:52:40 jakalx joins (~jakalx@base.jakalx.net)
13:56:27 <dminuoso> tomsmeding: The thing is, right now Im using text builders to construct chunks together from bytestring
13:56:28 ystael joins (~ystael@user/ystael)
13:56:42 <dminuoso> Background is, I have lists of bytestrings that represent domain names, and Im rewriting a pretty printer for these domains
13:57:02 <dminuoso> (that is, each list is a domain, where an item represents an individual domain label)
13:57:13 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
13:57:21 <dminuoso> Im trying to find the fastest possible way to turn them into Text for presentation
13:58:32 <dminuoso> In that process there's a bit of escaping going on, so ideally I would want to stream all bytes, mapping them into one or multiple other bytes
13:58:46 <dminuoso> Very much similar to how `caseConvert` works in `text`
13:59:17 <dminuoso> Roughly 40% of my entire program time is spent in pprDomain
13:59:22 <tomsmeding> ._.
14:00:14 <tomsmeding> if this process really takes 40% of your entire program time, I would drop down into the lowest level loop possible
14:00:46 <tomsmeding> interesting problem to have though!
14:01:21 <tomsmeding> might even try to write it in C, but I'm never sure about the overhead of a C FFI call in haskell
14:01:51 <dminuoso> Just slap `unsafe` on it without giving it a thought. Most FFI users on hackage do this too!
14:01:54 <geekosaur> very low if it's "unsafe"
14:01:57 <tomsmeding> :p
14:02:31 <dminuoso> To me the word `unsafe` always suggested that it improved safety, a kind of "this ffi is unsafe, please be extra careful" :)
14:02:46 <geekosaur> yeh, that confused me at first as well
14:03:17 mastarija joins (~mastarija@2a05:4f46:e03:6000:d321:6dad:692e:8acc)
14:03:24 <dminuoso> tomsmeding: I think an alternate solution might be using `bytebuild` (which happens to be in my transitive dependency tree already)
14:03:52 <dminuoso> Or maybe I should just directly build a byte array!
14:04:00 <dminuoso> Huh. That might actually be the smartest thing to do.
14:04:24 <tomsmeding> not sure what it entails, but "directly building a byte array" sounds like a good thing to do :p
14:04:48 <tomsmeding> if you end up wanting to try the FFI approach, I'd be interested in writing some SIMD code for it
14:04:49 <dminuoso> I would just foldM over the bytes in the bytestring, and manipulate the bytearray inside ST?
14:05:12 <tomsmeding> I tried mutably updating vectors in ST before and it was very slow, multiple times slower than a tight C loop
14:05:16 <tomsmeding> but maybe I did it the wrong way
14:05:22 <tomsmeding> (I probably did)
14:06:18 <raehik> What's the recommended CPP way to determine if the target arch is Windows? I have an `#if mingw32_HOST_OS` floating around, but I feel that might not be best
14:06:42 <tomsmeding> isn't there just a WINDOWS define? perhaps __WINDOWS__?
14:06:57 <tomsmeding> ah no, _WIN32
14:07:00 <mastarija> does anyone know if there's some servant proxying library? Basically, I want to define a raw endpoint e.g. newserver.com/old/api/under/new/url/xxxxx and have servant pass the request to the oldserver.com/xxxxx
14:07:40 <raehik> tomsmeding: yesss I think I've seen _WIN32 before. going to try that and use it if it works. thanks!
14:08:23 <tomsmeding> raehik: in case some time in the future you forget and want to ask again: https://duckduckgo.com/?q=cpp+detect+windows
14:08:24 <tomsmeding> ;)
14:09:07 <raehik> Oh! you got me I was thinking too narrowly, assuming it might be Haskell-specific
14:09:14 <tomsmeding> nah cpp is cpp
14:09:24 <raehik> googled "haskell CPP windows" and got nothing xd
14:09:49 <tomsmeding> that's also the annoying part of it -- cpp doesn't understand haskell syntax, so certain things go wrong subtly if you enable -XCPP :D
14:10:00 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:10:18 <geekosaur> and it's worse on os x because it understands ANSI C syntax instead
14:10:18 <tomsmeding> also the reason why ghc calls the preprocessor with -traditional, apparently that reduces the amount of shenanigans
14:11:55 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
14:12:29 ChaiTRex joins (~ChaiTRex@user/chaitrex)
14:13:26 × Furor quits (~colere@about/linux/staff/sauvin) (Remote host closed the connection)
14:14:17 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
14:14:42 Furor joins (~colere@about/linux/staff/sauvin)
14:16:04 yvan-sraka joins (~yvan-srak@37.166.167.112)
14:17:32 Furor is now known as Colere
14:17:34 × marquis_andras quits (~marquis_a@27-32-245-27.tpgi.com.au) (Ping timeout: 268 seconds)
14:17:46 <merijn> the problem is that CPP is fundamentally incompatible with haskell code
14:18:12 <merijn> To the point that GHC resorts to using non-standard legacy CPP modes to get behaviour that somewhat resembles "working"
14:18:25 <tomsmeding> the -traditional that I mentioned
14:18:27 <c_wraith> the thing that seems to cause the most problems is '
14:18:41 <merijn> raehik: Hold on, I think I can dramatically simplify your problem
14:18:44 <c_wraith> CPP assumes it only appears inside quoted strings or as char literals
14:19:00 <merijn> raehik: You can have cabal detect windows and define your own CPP value and check that
14:19:03 <merijn> Much simpler
14:19:45 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
14:20:03 <raehik> hm! cool. I want to be lazy for this occassion because it's a testing bug not a program one
14:20:06 <merijn> raehik: Just have a conditional on the OS in the cabal file that does "ghc-options: -DWINDOWS=1" (or whatever)
14:20:35 <merijn> Since option fields are monoidal you can just use cabal to conditionally append that based on the OS
14:20:36 <tomsmeding> isn't the syntax `if os(windows):` or something?
14:20:42 <merijn> tomsmeding: Something like that, yeah
14:20:50 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
14:20:51 <merijn> Consult cabal docs for exact details
14:20:55 <tomsmeding> ah without the :
14:21:09 <tomsmeding> search for "OS Specific" here https://hackage.haskell.org/package/base-4.17.0.0/base.cabal
14:23:05 shriekingnoise joins (~shrieking@186.137.167.202)
14:23:11 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:d8c8:b9a1:a839:9254) (Quit: WeeChat 2.8)
14:24:11 marquis_andras joins (~marquis_a@27-33-131-201.tpgi.com.au)
14:25:15 <raehik> fab, bookmarked
14:26:04 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
14:26:53 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:32:17 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
14:33:34 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 268 seconds)
14:40:16 zebrag joins (~chris@user/zebrag)
14:41:38 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
14:43:05 × yvan-sraka quits (~yvan-srak@37.166.167.112) (Remote host closed the connection)
14:44:29 zaquest joins (~notzaques@5.130.79.72)
14:44:38 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
14:45:36 × alternateved quits (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
14:49:03 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
14:49:06 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
14:50:00 matthewmosior joins (~matthewmo@173.170.253.91)
14:54:26 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
15:02:01 ec joins (~ec@gateway/tor-sasl/ec)
15:06:57 matthewmosior joins (~matthewmo@173.170.253.91)
15:06:59 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.6)
15:07:43 jakalx parts (~jakalx@base.jakalx.net) ()
15:09:16 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
15:09:23 matthewmosior joins (~matthewmo@173.170.253.91)
15:09:55 × acidjnk_new quits (~acidjnk@p200300d6e7137a5770c6fecd35188867.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
15:10:09 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:23:21 × Vajb quits (~Vajb@2001:999:705:3c86:e7ea:442b:1e01:22d8) (Read error: Connection reset by peer)
15:23:29 Vajb joins (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi)
15:24:19 × ddellacosta quits (~ddellacos@143.244.47.84) (Ping timeout: 248 seconds)
15:25:58 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:26:10 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
15:26:11 ddellacosta joins (~ddellacos@89.45.224.125)
15:26:40 Topsi joins (~Topsi@dyndsl-095-033-089-069.ewe-ip-backbone.de)
15:28:00 jakalx joins (~jakalx@base.jakalx.net)
15:28:13 johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
15:31:25 × CiaoSen quits (~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
15:33:03 matthewmosior joins (~matthewmo@173.170.253.91)
15:38:38 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
15:42:36 × ddellacosta quits (~ddellacos@89.45.224.125) (Ping timeout: 256 seconds)
15:44:33 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:44:38 ddellacosta joins (~ddellacos@143.244.47.84)
15:45:19 matthewmosior joins (~matthewmo@173.170.253.91)
15:46:39 × kuribas quits (~user@silversquare.silversquare.eu) (Read error: Connection reset by peer)
15:46:50 <tomsmeding> geekosaur: I may well remember incorrectly, but I think it was you who asked for less clicks for saving files on the playground; there's less clicks now! https://play-haskell.tomsmeding.com
15:46:53 kuribas joins (~user@silversquare.silversquare.eu)
15:47:13 <geekosaur> I did, yes.
15:47:40 <tomsmeding> funny how posting a link here on irc gets you a bunch of Lounge requests :p https://tomsmeding.com/ss/get/tomsmeding/nFdP7v
15:47:41 × chele quits (~chele@user/chele) (Quit: Leaving)
15:47:56 <tomsmeding> geekosaur: the alert() is kinda clunky, was too lazy to make it do something nicer
15:48:11 <tomsmeding> the whole backend has been rewritten as well, but the user sees little of that :)
15:48:35 <tomsmeding> it's now horizontally scalable, i.e. I can spin up another worker server and attach it to this thing at will
15:52:14 × ddellacosta quits (~ddellacos@143.244.47.84) (Ping timeout: 256 seconds)
15:53:58 ddellacosta joins (~ddellacos@89.45.224.177)
15:57:59 <tomsmeding> other misc improvement: GHC output is now shown also if the program successfully compiled, so {-# OPTIONS -Wall #-} actually does something now
15:59:29 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:00:06 × coltenwebb[m] quits (~coltenweb@2001:470:69fc:105::2:17c7) (Quit: You have been kicked for being idle)
16:10:47 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:12:27 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
16:12:53 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
16:14:42 nate4 joins (~nate@98.45.169.16)
16:19:47 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
16:19:47 × ryantrinkle quits (~ryan@209.91.209.121) (Read error: Connection reset by peer)
16:22:37 acidjnk_new joins (~acidjnk@p200300d6e7137a5105821a742c1d7cd6.dip0.t-ipconnect.de)
16:25:29 × jgeerds quits (~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 252 seconds)
16:25:38 × mmhat quits (~mmh@p200300f1c7086062ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.6)
16:27:50 × FragByte quits (~christian@user/fragbyte) (Quit: Quit)
16:29:49 FragByte joins (~christian@user/fragbyte)
16:30:52 × kuribas quits (~user@silversquare.silversquare.eu) (Remote host closed the connection)
16:33:22 <qrpnxz> looks like zero-copy utf-8 stream parser working now :D
16:33:32 _xor joins (~xor@74.215.182.83)
16:33:40 × vglfr quits (~vglfr@145.224.94.248) (Read error: Connection reset by peer)
16:33:44 <qrpnxz> takes about 80% the time as the copying one
16:34:33 vglfr joins (~vglfr@145.224.94.248)
16:35:06 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
16:35:08 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
16:39:13 ryantrinkle joins (~ryan@2607:f00:3:14c0:7c6b:7160:d1ff:3f7)
16:41:19 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:41:20 ChaiTRex joins (~ChaiTRex@user/chaitrex)
16:46:25 stef204 joins (~stef204@user/stef204)
16:48:10 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
16:48:40 ChaiTRex joins (~ChaiTRex@user/chaitrex)
16:50:36 × vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.5)
16:52:43 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
16:56:51 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
16:57:28 zxx7529 joins (~Thunderbi@user/zxx7529)
16:57:47 × benin0 quits (~benin@183.82.27.55) (Quit: The Lounge - https://thelounge.chat)
16:58:45 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
17:02:51 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
17:05:13 econo joins (uid147250@user/econo)
17:06:37 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
17:07:06 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:07:42 × Vajb quits (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) (Read error: Connection reset by peer)
17:07:53 Vajb joins (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi)
17:09:01 × MajorBiscuit quits (~MajorBisc@c-001-019-012.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.5)
17:11:25 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:11:40 freemint joins (~freemint@2001:638:904:ffe8:339b:2f0c:7daf:5607)
17:14:49 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:15:47 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds)
17:16:01 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
17:18:58 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:20:09 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
17:20:54 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:23:57 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
17:26:18 biberu joins (~biberu@user/biberu)
17:27:12 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:28:36 yvan-sraka joins (~yvan-srak@2a0d:e487:43f:ef01:360:ba9b:e406:79e4)
17:35:21 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
17:35:22 × yvan-sraka quits (~yvan-srak@2a0d:e487:43f:ef01:360:ba9b:e406:79e4) (Remote host closed the connection)
17:35:57 × zxx7529 quits (~Thunderbi@user/zxx7529) (Ping timeout: 256 seconds)
17:38:20 Pickchea joins (~private@user/pickchea)
17:38:50 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
17:39:47 × ryantrinkle quits (~ryan@2607:f00:3:14c0:7c6b:7160:d1ff:3f7) (Ping timeout: 248 seconds)
17:40:37 ryantrinkle joins (~ryan@2607:f00:3:14c0:7c6b:7160:d1ff:3f7)
17:40:50 causal joins (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e)
17:41:04 × causal quits (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e) (Client Quit)
17:41:46 gmg joins (~user@user/gehmehgeh)
17:44:42 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
17:44:43 × vglfr quits (~vglfr@145.224.94.248) (Read error: Connection reset by peer)
17:44:49 etra0 joins (~quassel@186-78-151-203.baf.movistar.cl)
17:45:33 vglfr joins (~vglfr@145.224.94.248)
17:51:23 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
17:52:08 ec joins (~ec@gateway/tor-sasl/ec)
17:57:28 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
18:01:59 × mastarija quits (~mastarija@2a05:4f46:e03:6000:d321:6dad:692e:8acc) (Quit: WeeChat 3.5)
18:04:38 × Vajb quits (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) (Read error: Connection reset by peer)
18:05:59 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
18:06:21 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:06:25 ec joins (~ec@gateway/tor-sasl/ec)
18:06:39 Vajb joins (~Vajb@2001:999:705:3c86:e7ea:442b:1e01:22d8)
18:07:37 jgeerds joins (~jgeerds@55d46bad.access.ecotel.net)
18:13:03 Solid joins (~slot@xmonad/slotThe)
18:16:18 <zzz> tomsmeding: what's a Lounge request?
18:17:50 <dminuoso> Mmm, Im experience some weird bugs with pattern synonyms breaking interference,.
18:18:43 × malte quits (~malte@mal.tc) (Ping timeout: 248 seconds)
18:19:42 <Solid> When defining e.g. an IsString instance for some type function, why do I have to write `instance x ~ Text => IsString (F x)` instead of `instance IsString (F Text)`? To my mind, the latter is just a reformulation of the former
18:20:01 malte joins (~malte@mal.tc)
18:21:03 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
18:21:06 <geekosaur> zzz, TheLoungs is another front-end for IRC (like Matrix)
18:21:10 <geekosaur> *TheLounge
18:21:24 <geekosaur> among other things clients fetch url previews automatically
18:21:40 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
18:21:44 × hippoid quits (~idris@c-98-220-13-8.hsd1.il.comcast.net) (Quit: WeeChat 3.5)
18:21:45 <geekosaur> Solid, did you enable FlexibleInstances?
18:21:50 <dminuoso> This is the code in question, along with the diagnostic, and the result of adding :: _ to two separate places: https://gist.github.com/dminuoso/411af42513c3c97cdbd772de63fff805
18:22:23 <geekosaur> technically a type variable is required, not a concrete type, in instance declarations
18:22:32 <dminuoso> Before BS used the pattern synonym this would infer just fine. Adding an explicit type ascription helps
18:22:36 <Solid> geekosaur: yes; it compiles but then complains about an ambiguous type variable (despite giving me only one possible instance)
18:22:40 <geekosaur> that said, there are some ramifications that make the two not quite identical
18:23:00 <dminuoso> Im utterly confused how GHC can correctly infer `ptr :: Ptr Word8` but not `plusPtr ptr off`
18:23:12 × nattiestnate quits (~nate@180.243.14.130) (Quit: WeeChat 3.6)
18:24:15 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
18:26:21 <dminuoso> Solid: It can greatly improve inferred types in some situations
18:27:49 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.6)
18:28:51 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
18:29:58 <dminuoso> Solid: https://gist.github.com/dminuoso/411af42513c3c97cdbd772de63fff805 is a nice and brief example of how this might work out.
18:30:14 <dminuoso> Is F, by any chance, a type family?
18:32:03 <Solid> no it's just a normal Type -> Type data type
18:32:17 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
18:32:24 <dminuoso> Just wondering because you said "for some type function" :)
18:33:00 <Solid> Type -> Type is a type function, isn't it? :>
18:33:07 <dminuoso> Hold on now.
18:33:45 <dminuoso> I guess it is *shrugs*
18:35:50 matthewmosior joins (~matthewmo@173.170.253.91)
18:38:11 × Inst quits (~Inst@2601:6c4:4080:3f80:e0a9:7049:576:28ef) (Read error: Connection reset by peer)
18:38:31 Inst joins (~Inst@2601:6c4:4080:3f80:8497:52c0:a7ea:bbfa)
18:39:59 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
18:44:35 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 268 seconds)
18:48:31 <[Leary]> dminuoso: Just looking at the types of `plusPtr` and `copyPtrToMutableByteArray`, it seems pretty clear why the type is ambiguous. If it were inferred, that would suggest some kind of defaulting for `Prim` (which may or may not exist, I don't know).
18:51:41 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:53:01 matthewmosior joins (~matthewmo@173.170.253.91)
18:56:24 × alphabeta quits (~kilolympu@90.206.106.191) (Ping timeout: 256 seconds)
18:56:26 lortabac joins (~lortabac@2a01:e0a:541:b8f0:be19:499e:afb3:a829)
18:56:56 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:00:34 kilolympus joins (~kilolympu@90.206.106.191)
19:01:50 beteigeuze joins (~Thunderbi@168.182.177.239)
19:04:52 <zzz> can i have data declarations inside where clauses?
19:05:59 <zzz> i was under the impression we could but maybe i'm mistaken?
19:06:44 <int-e> We can't. There may be a language proposal for that somewhere.
19:06:46 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
19:07:05 <int-e> well, except for type classes, which technically have where clauses
19:07:48 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
19:07:55 ChaiTRex joins (~ChaiTRex@user/chaitrex)
19:08:01 <int-e> (but of a different kind then the ones for bindings)
19:08:36 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
19:09:00 <zzz> yeah...
19:10:09 <tomsmeding> zzz: what geekosaur said
19:12:11 <geekosaur> I noticed Matrix only downloaded it once and sent it to all clients (see "Synapse")
19:14:11 × kilolympus quits (~kilolympu@90.206.106.191) (Ping timeout: 248 seconds)
19:15:16 kilolympus joins (~kilolympu@90.206.106.191)
19:17:55 <tomsmeding> geekosaur: I guess it might be every client, but then why are the top two hits ( https://tomsmeding.com/ss/get/tomsmeding/nFdP7v ) from the same IP?
19:17:59 <tomsmeding> two clients in the same subnet?
19:18:37 <geekosaur> huh, that's odd
19:19:08 pavonia joins (~user@user/siracusa)
19:20:43 <geekosaur> it might be two from the same IP, at that, considering how I use matrix
19:21:05 <geekosaur> (so right now I'll appear as two clients from the same IP, one being my phone on wifi)
19:21:15 <tomsmeding> geekosaur: my reverse proxy (caddy) logs more info, and it seems the two requests are identical apart from the Accept-Language headers
19:21:32 <geekosaur> (but one is hexchat and the other Element)
19:21:48 <tomsmeding> one (the first) has 'cs-CZ,cs;q=0.9', while the other has 'en-US,en;q=0.9,cs;q=0.8'
19:22:17 <tomsmeding> perhaps phone (in czech) and desktop (in english) of the same person?
19:22:27 <geekosaur> maybe
19:22:41 <tomsmeding> it almost feels like this is too much info to store about people even
19:22:55 <geekosaur> looks like the other lounge hits all have distinct IPs from a quick look
19:23:01 <tomsmeding> seems so
19:29:07 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
19:30:08 toby is now known as Guest7711
19:30:08 × Guest7711 quits (~toby@137.220.84.171) (Killed (calcium.libera.chat (Nickname regained by services)))
19:30:21 toby_ joins (~toby@137.220.84.171)
19:31:24 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:33:29 × Topsi quits (~Topsi@dyndsl-095-033-089-069.ewe-ip-backbone.de) (Read error: Connection reset by peer)
19:33:50 × beteigeuze quits (~Thunderbi@168.182.177.239) (Quit: beteigeuze)
19:33:55 × hellwolf quits (~hellwolf@7-41-50-84.sta.estpak.ee) (Ping timeout: 268 seconds)
19:34:05 beteigeuze joins (~Thunderbi@168.182.177.239)
19:34:08 <qrpnxz> i change a data structure to see if i can make it better, it benches a little slower. Okay, but i made a few changes so i revert them one by one to see which is the slow one. I end up reverting to exactly the same data structure, but now benches slower than the original (identical) structure. Me: 😐. Clearly changing the name tells ghc to compile worse code?
19:34:32 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
19:34:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
19:35:06 <qrpnxz> and the original structure is in another module, so if anything *that* should be slower :/
19:35:19 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:be19:499e:afb3:a829) (Quit: WeeChat 2.8)
19:36:26 stef204 joins (~stef204@user/stef204)
19:39:43 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:46:16 × beteigeuze quits (~Thunderbi@168.182.177.239) (Ping timeout: 256 seconds)
19:52:13 hippoid joins (~idris@c-98-220-13-8.hsd1.il.comcast.net)
19:53:41 × fserucas|eod quits (~fserucas|@46.50.4.9) (Quit: Leaving)
19:56:21 × coot quits (~coot@213.134.176.158) (Quit: coot)
19:58:00 alternateved joins (~user@staticline-31-183-146-203.toya.net.pl)
20:01:49 × alternateved quits (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
20:07:14 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
20:08:22 × mikoto-chan quits (~mikoto-ch@164.5.249.78) (Ping timeout: 256 seconds)
20:10:38 × ddellacosta quits (~ddellacos@89.45.224.177) (Ping timeout: 256 seconds)
20:10:46 × ccntrq quits (~Thunderbi@172.209.94.92.rev.sfr.net) (Read error: Connection reset by peer)
20:15:50 × zeenk quits (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
20:16:04 matthewmosior joins (~matthewmo@173.170.253.91)
20:16:11 nate4 joins (~nate@98.45.169.16)
20:17:39 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
20:21:15 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
20:21:16 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 244 seconds)
20:21:22 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
20:25:11 MajorBiscuit joins (~MajorBisc@46-229-126.internethome.cytanet.com.cy)
20:25:36 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.6)
20:31:22 × etra0 quits (~quassel@186-78-151-203.baf.movistar.cl) (Remote host closed the connection)
20:31:51 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
20:33:24 stef204 joins (~stef204@user/stef204)
20:33:47 matthewmosior joins (~matthewmo@173.170.253.91)
20:34:34 <zzz> i'm going to state the obvious, but something changed
20:35:56 geekosaur wonders about alignment and/or what's in the info table
20:36:53 coot joins (~coot@213.134.176.158)
20:37:11 ddellacosta joins (~ddellacos@86.106.143.177)
20:37:54 king_gs joins (~Thunderbi@2806:103e:29:da7a:dcd8:4aff:49f5:5eec)
20:40:04 <darkling> Or the benchmarking fixture is more variable than expected.
20:40:23 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:41:47 × ddellacosta quits (~ddellacos@86.106.143.177) (Ping timeout: 252 seconds)
20:43:30 ddellacosta joins (~ddellacos@143.244.47.84)
20:44:51 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds)
20:46:25 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.6)
20:46:54 × bgamari quits (~bgamari@64.223.226.174) (Ping timeout: 256 seconds)
20:48:18 bgamari joins (~bgamari@64.223.169.142)
20:49:07 × ddellacosta quits (~ddellacos@143.244.47.84) (Ping timeout: 268 seconds)
20:50:52 ddellacosta joins (~ddellacos@89.45.224.86)
20:51:14 alternateved joins (~user@staticline-31-183-146-203.toya.net.pl)
20:53:32 zeenk joins (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
20:56:31 × drlkf quits (~drlkf@drlkf.net) (Quit: drlkf)
20:57:59 <NemesisD> in `foo = Foo { foo_name = ??? }` is there something i could fill in for `???` that would get the name of the binding its in, `foo`?
20:58:58 × coot quits (~coot@213.134.176.158) (Quit: coot)
20:59:06 <geekosaur> bindings are usually recursive, so if you're careful `foo` should work
20:59:32 mikoto-chan joins (~mikoto-ch@mobile-access-bceefe-131.dhcp.inet.fi)
20:59:47 × alternateved quits (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
21:00:00 <geekosaur> there's no generic thing like `this` in some OO languages though
21:01:23 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
21:01:46 alternateved joins (~user@staticline-31-183-146-203.toya.net.pl)
21:02:29 <NemesisD> yeah i figured this would need TH or somehting. in other words how could i write the function `myName` such that i could do `foo = let name = $(myName) in Foo { foo_name = name, ... }` and reuse it
21:03:27 <geekosaur> I think TH would stop you because of binding groups?
21:03:40 <geekosaur> maybe not
21:04:02 <NemesisD> i don't even know what that is lol
21:04:02 × alternateved quits (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
21:04:21 <geekosaur> oh, you want the binding name as a String, don't you? not sure how you'd do that in TH
21:04:35 <geekosaur> I suspect you'd have only an internal identifier at that point
21:05:17 <NemesisD> yeah exactly. ok. i'm not committed to using TH for it specifically but i assume there isn't another way either?
21:05:54 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
21:06:00 <geekosaur> I don't think there is
21:06:12 <geekosaur> unless there's some hack involving quasiquoters
21:06:35 <NemesisD> fair enough. i can just type it manually.
21:07:29 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
21:08:04 ec joins (~ec@gateway/tor-sasl/ec)
21:08:35 × MajorBiscuit quits (~MajorBisc@46-229-126.internethome.cytanet.com.cy) (Quit: WeeChat 3.5)
21:08:38 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:12:12 × drlkf_ quits (~drlkf@chat.drlkf.net) (Quit: drlkf_)
21:12:31 drlkf joins (~drlkf@chat.drlkf.net)
21:12:37 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
21:13:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:13:29 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
21:16:49 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
21:17:23 × ddellacosta quits (~ddellacos@89.45.224.86) (Ping timeout: 248 seconds)
21:17:48 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
21:19:34 ddellacosta joins (~ddellacos@143.244.47.100)
21:20:44 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:20:53 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
21:21:23 ec joins (~ec@gateway/tor-sasl/ec)
21:22:43 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
21:22:49 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
21:23:13 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
21:23:31 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
21:23:41 × drlkf quits (~drlkf@chat.drlkf.net) (Quit: drlkf)
21:23:59 drlkf joins (~drlkf@chat.drlkf.net)
21:24:09 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
21:24:20 × kilolympus quits (~kilolympu@90.206.106.191) (Quit: See you later! :))
21:32:46 × zeenk quits (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
21:35:19 × king_gs quits (~Thunderbi@2806:103e:29:da7a:dcd8:4aff:49f5:5eec) (Quit: king_gs)
21:37:05 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
21:41:20 kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net)
21:41:57 king_gs joins (~Thunderbi@2806:103e:29:da7a:dcd8:4aff:49f5:5eec)
21:41:57 × king_gs quits (~Thunderbi@2806:103e:29:da7a:dcd8:4aff:49f5:5eec) (Client Quit)
21:44:29 matthewmosior joins (~matthewmo@173.170.253.91)
21:45:28 × kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
21:46:20 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
21:46:46 ec joins (~ec@gateway/tor-sasl/ec)
21:47:45 jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
21:50:59 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:53:34 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
21:53:41 matthewmosior joins (~matthewmo@173.170.253.91)
21:54:20 takuan joins (~takuan@178-116-218-225.access.telenet.be)
21:57:13 kenaryn joins (~aurele@89-88-44-27.abo.bbox.fr)
21:58:23 k8yun joins (~k8yun@user/k8yun)
22:08:22 × gawen quits (~gawen@user/gawen) (Quit: cya)
22:08:51 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:09:43 gawen joins (~gawen@user/gawen)
22:09:58 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:10:08 × kenaryn quits (~aurele@89-88-44-27.abo.bbox.fr) (Quit: leaving)
22:11:07 mimmy joins (~mimmy@104.165.250.116)
22:11:41 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
22:12:16 ec joins (~ec@gateway/tor-sasl/ec)
22:12:27 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
22:17:14 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:17:22 alternateved joins (~user@staticline-31-183-146-203.toya.net.pl)
22:23:34 × alternateved quits (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
22:23:48 × acidjnk_new quits (~acidjnk@p200300d6e7137a5105821a742c1d7cd6.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
22:27:31 × PiDelport quits (uid25146@id-25146.lymington.irccloud.com) (Quit: Connection closed for inactivity)
22:27:52 <zzz> dsal: a couple of days ago you shared this https://www.youtube.com/watch?v=R04l7DfyMq4 with me. may i ask which package did you use? vty/brick/..?
22:29:34 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
22:29:57 <dsal> zzz: Oh wow, I just looked that code. I didn't use any package at all.
22:30:14 <dsal> putStr $ mconcat ["\ESC[", show (y + 2), ";", show (x + 1), "H", "\ESC[41;1m", show c, "\ESC[0m"]) carts
22:31:17 <dsal> I've used ansi-terminal since.
22:31:55 geekosaur still has a tendency to write escapes directly, having done it since the 80s
22:32:48 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
22:33:25 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
22:34:38 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
22:37:16 matthewmosior joins (~matthewmo@173.170.253.91)
22:38:38 <qrpnxz> lol
22:40:01 <monochrom> I write those escape codes when defining shell prompts.
22:41:00 <monochrom> Hutton's book also has those escape codes in the terminal I/O chapter.
22:42:17 <monochrom> Yes! The state of Haskell textbooks has finally progressed to rudimentary terminal operations "let's put an x at row 10 column 5 because tic-tac-toe"
22:42:41 mimmy joins (~mimmy@104.165.250.116)
22:44:53 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
22:46:29 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
22:46:30 Moyst__ joins (~moyst@user/moyst)
22:47:11 × Moyst_ quits (~moyst@user/moyst) (Ping timeout: 252 seconds)
22:50:56 stef204 joins (~stef204@user/stef204)
22:53:57 mimmy joins (~mimmy@104.165.250.116)
22:57:07 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
22:57:32 mimmy joins (~mimmy@104.165.250.116)
22:57:44 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
22:58:34 <qrpnxz> this thing? https://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695
22:59:33 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
22:59:51 matthewmosior joins (~matthewmo@173.170.253.91)
22:59:56 mimmy joins (~mimmy@104.165.250.116)
23:00:42 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
23:01:15 mimmy joins (~mimmy@104.165.250.116)
23:01:33 <monochrom> Yeah
23:01:42 <qrpnxz> good book?
23:01:46 <monochrom> I think yes.
23:01:52 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
23:01:54 Rumham joins (~Rumham@128-193-154-141.ptpg.oregonstate.edu)
23:01:55 <qrpnxz> neat
23:02:06 × Rumham quits (~Rumham@128-193-154-141.ptpg.oregonstate.edu) (Client Quit)
23:02:13 <zzz> graham is a good teacher
23:02:19 mimmy joins (~mimmy@104.165.250.116)
23:02:19 Rumham347 joins (~Rumham347@128-193-154-141.ptpg.oregonstate.edu)
23:02:43 × mimmy quits (~mimmy@104.165.250.116) (Client Quit)
23:06:47 × qrpnxz quits (~qrpnxz@fsf/member/qrpnxz) (Ping timeout: 268 seconds)
23:08:09 qrpnxz joins (~qrpnxz@fsf/member/qrpnxz)
23:10:14 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.6)
23:16:24 luffy joins (~chenqisu1@183.217.201.23)
23:16:31 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection)
23:17:36 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
23:19:23 mimmy joins (~mimmy@104.165.250.121)
23:19:27 × mikoto-chan quits (~mikoto-ch@mobile-access-bceefe-131.dhcp.inet.fi) (Ping timeout: 252 seconds)
23:20:20 × mimmy quits (~mimmy@104.165.250.121) (Client Quit)
23:21:19 beteigeuze joins (~Thunderbi@168.182.177.239)
23:21:37 mikoto-chan joins (~mikoto-ch@mobile-access-2e8419-147.dhcp.inet.fi)
23:22:16 Sgeo joins (~Sgeo@user/sgeo)
23:23:08 mimmy_ joins (~mimmy@2604:a880:cad:d0::3e:1001)
23:23:47 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 248 seconds)
23:25:37 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
23:30:52 × Rumham347 quits (~Rumham347@128-193-154-141.ptpg.oregonstate.edu) (Ping timeout: 252 seconds)
23:32:19 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
23:34:15 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
23:45:04 <qrpnxz> just realized an effect i've been using is actually just a good ol' object in disguise LOL. Delightful! Time to refactor i think
23:45:34 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 268 seconds)
23:46:59 mvk joins (~mvk@2607:fea8:5ce3:8500::a1ec)
23:47:04 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
23:48:05 × spacenautx quits (~spacenaut@user/spacenautx) (Quit: WeeChat 3.0)
23:58:27 mimmy_ is now known as mimmy

All times are in UTC on 2022-08-18.