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.