Home liberachat/#haskell: Logs Calendar

Logs on 2021-10-22 (liberachat/#haskell)

00:00:02 <awpr> just wait until Python 6 lands with `-XDependentHaskell`
00:00:07 Guest372 joins (~xxx@47.245.54.240)
00:00:29 <aegon> i'd never heard of Machines
00:00:34 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
00:00:52 <aegon> gripe to share that i can't fix and don't think is super unreasonable but a perfect example of the hardest part of haskell to me...
00:01:00 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:01:05 <geekosaur> can't be outdone by perl now, can they? }:>
00:01:23 <Axman6> dolio: https://www.youtube.com/watch?v=BvECNQRrjCY
00:01:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:01:35 <aegon> i needed to to matrix math recently and ended up on linear which i was super happy with, until i started using it and realizing everything was mathy. I'm still happy with it but trying to find out how to get an inverse of a quaternion was a journey
00:02:04 <dolio> Oh, I see. :þ
00:02:07 Guest372 joins (~xxx@47.245.54.240)
00:02:14 <geekosaur> you were doing matrix math and expecting it to not be mathy?
00:03:01 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:04:03 <aegon> i didn't expect to have to dig into an instance class called RealFrac on quaternion to find that given a unit quaterion i can use recip to get the inverse normally given in math libs
00:04:04 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
00:04:07 Guest372 joins (~xxx@47.245.54.240)
00:04:42 <aegon> like i ended up cross referencing and digging into what Hamiltonian was to find out how to do some basic stuff. which is fair, it is a mathy thing, but i do wish the docs had some practicality / notes
00:04:54 wrengr is now known as wrengr_away
00:05:01 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:05:02 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
00:06:07 Guest372 joins (~xxx@47.245.54.240)
00:07:01 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:08:07 Guest372 joins (~xxx@47.245.54.240)
00:09:01 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:09:53 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:10:08 Guest372 joins (~xxx@47.245.54.240)
00:10:12 <aegon> i guess i don't know how it could be done better and still use the right classes for the things it does but mapping from the type classes to normal use cases was a journey. Hopefully in a month or so on theo ther end of this i'll remember to try a pr with a overview doc or something
00:11:02 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:11:03 <aegon> but it feels like that happens a lot in hask land compared to other langauges where theres this awesome library that does something really slick and well but good luck using it if you aren't the author and know what some very high level concepts mean
00:12:08 Guest372 joins (~xxx@47.245.54.240)
00:13:02 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:13:13 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 252 seconds)
00:13:40 <aegon> imo learning them and digging into it is a better path to understanding what your working with but since we were talkign about haskells marketablility. Seemed relevant. Scotty / Spock are awesome, but it took me like 3 days to understand how to use either
00:14:08 Guest372 joins (~xxx@47.245.54.240)
00:14:34 <dsal> jackdk: I'm doing a type application to type the proxy, but I'm not sure how to name a function that uses a type internally, but doesn't have any parameters that reference the type.
00:14:56 × jaitoon quits (~Jaitoon@2a02:c7f:a5f:1d00:3901:d03b:2d77:c4b6) (Quit: Leaving)
00:15:02 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:15:28 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
00:15:59 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds)
00:16:09 Guest372 joins (~xxx@47.245.54.240)
00:16:45 Lord_of_Life_ is now known as Lord_of_Life
00:17:03 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:17:18 lavaman joins (~lavaman@98.38.249.169)
00:18:09 Guest372 joins (~xxx@47.245.54.240)
00:19:00 <aegon> geekosaur: yeah, keep math out of my math libs, and don't start talking about science and facts please :P
00:19:03 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:19:27 <jackdk> dsal: Here is an example. You need `-XTypeApplications` to select the type to `fromEnum`, `-XScopedTypeVariables` to be able to reference the type var `a` inside the body, and `-XAllowAmbiguousTypes` to defer the ambiguity check to the use site. https://www.irccloud.com/pastebin/SJhDUCgy/EnumIndices.hs
00:20:09 <jackdk> dsal: you then call it like `enumIndices @Bool`, which evaluates to `[0, 1]`
00:20:09 Guest372 joins (~xxx@47.245.54.240)
00:20:29 <monochrom> Heh I wrote a similar example. whee = fromEnum (minBound :: a) == 1
00:20:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Remote host closed the connection)
00:21:03 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:21:42 <jackdk> oh yeah right you don't need to use a type application enumIndices; a type annotation suffices there
00:22:02 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
00:22:09 Guest372 joins (~xxx@47.245.54.240)
00:22:10 × acidjnk_new quits (~acidjnk@p200300d0c703cb932154b917507392a6.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
00:23:03 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:23:23 <aegon> its a dumb criticism to bring up, obvously if your using haskell you should be comfortable navigating all that stuff as part of the language. And i certainly oculdn't write a linear library to match linear. But on top of the functional part being rough for newcomers navigating the libraries is also often rough until you grok it.
00:24:00 <monochrom> I still like the proxy approach though.
00:24:10 Guest372 joins (~xxx@47.245.54.240)
00:24:37 aegon goes back to working on this 14000 line pile of hask with little to no comments and 3 letter vars all over the place. <_< >_>
00:25:04 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:25:09 <monochrom> You can ellide all 3 extensions, especially when you also use "whee p = ... (minBound `asProxyTypeOf` p) ..."
00:26:10 Guest372 joins (~xxx@47.245.54.240)
00:27:04 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:28:10 Guest372 joins (~xxx@47.245.54.240)
00:29:04 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:29:54 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
00:30:11 Guest372 joins (~xxx@47.245.54.240)
00:30:24 <Inst> bingo
00:30:27 <Inst> let's see how it goes
00:30:34 <Inst> i talked my champion influencer friend into learning haskell
00:31:04 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:31:11 × mestre quits (~mestre@191.177.175.57) (Quit: Lost terminal)
00:31:29 <Inst> only a matter of time before i talk her into trying to bribe randumbs into learning haskell so they can get a hold of korean comics before they're officially released stateside
00:32:11 Guest372 joins (~xxx@47.245.54.240)
00:32:50 <aegon> Inst: i'm very curous how this scheme plays out. Its very hustler-ey
00:33:05 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:33:34 <Inst> well, main thing is that she's a bit ADHD-ish
00:33:38 <Inst> she's studying to be an accountant
00:33:44 <Inst> any way I can keep her away from Python, she's at CUNY
00:33:45 <Inst> ?
00:34:11 Guest372 joins (~xxx@47.245.54.240)
00:35:05 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:36:00 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
00:36:01 Guest87 joins (~Guest87@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
00:36:12 Guest372 joins (~xxx@47.245.54.240)
00:36:14 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
00:36:16 <Guest87> can I have a -fno-warn-incomplete-patterns for exactly one case of
00:36:27 <dsal> jackdk: Thanks. I'm not sure which version I like more. The one without the proxy is slightly easier on the user, I guess.
00:36:33 <Guest87> without disabling the warning in all of the file
00:36:46 burnsidesLlama joins (~burnsides@client-8-91.eduroam.oxuni.org.uk)
00:36:55 <aegon> Guest87: not that I know of, why not complete the patterns?
00:37:05 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:37:25 <Inst> ah crap, this sucks
00:37:30 <Inst> CUNY -> City University of New York
00:37:31 <monochrom> Yeah, easier to write the one single missing pattern.
00:37:37 <Inst> they have like 20 different colleges spread throughout the city
00:37:44 <Guest87> because it doesn't make sense in my case, I have a oneOf parser and if I don't get the value I expect the parser failed anyway
00:37:55 <Inst> google it: not a single college offers a haskell-based intro course, the only Haskell course I see is graduate level
00:38:10 <Guest87> well I'll just use some "default" value and call it a day
00:38:12 Guest372 joins (~xxx@47.245.54.240)
00:38:30 <monochrom> a oneOf parser doesn't need incomplete patterns.
00:38:40 <dsal> Guest87: You can define your own error or let the compiler make one up that you may or may not recognize.
00:38:53 <aegon> Guest87: but without the rest of the patterns it will fail in a way you cant control, if it can fail shouldn't you handle the error case instead of undefined behavior land
00:39:06 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:39:35 <aegon> you wont care about it till that case happens and you don't know why the program crashes
00:39:35 <Guest87> monochrom: then how do I match against its result ?
00:40:12 Guest372 joins (~xxx@47.245.54.240)
00:40:46 <Guest87> aegon: yeah but *in theory" it should never crash because I matched against all the inputs in oneOf
00:40:55 <monochrom> oneOf s = anyChar >>= \c -> if c `elem` s then pure c else empty --- where is the incomplete pattern?
00:41:06 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:41:11 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
00:41:15 × burnsidesLlama quits (~burnsides@client-8-91.eduroam.oxuni.org.uk) (Ping timeout: 260 seconds)
00:41:43 <monochrom> And anyChar doesn't need incomplete pattern either, if that's what you mean.
00:42:12 Guest372 joins (~xxx@47.245.54.240)
00:42:35 <Guest87> monochrom: I apparently wasn't clear, I'm something like `s <- oneOf "abc"` and then `case s of 'a' -> ...`
00:42:56 <Guest87> s,something,doing something
00:43:06 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:43:17 <monochrom> Then it is not a lot of work to add: _ -> error "doesn't happen"
00:43:28 <awpr> `choice [char 'a' *> ..., char 'b' *> ..., char 'c' *> ...]`
00:44:09 <awpr> (or just add the error and mention "impossible" in the message)
00:44:13 Guest372 joins (~xxx@47.245.54.240)
00:44:31 <monochrom> I mean, suppose in the file there are like 20 places where you have to do that, sure, that's annoying.
00:44:37 <monochrom> But you said just one place.
00:44:46 <aegon> awpr: neat
00:44:53 <monochrom> In fact, if there are 20 places, I turn off the warning altogether.
00:45:03 <monochrom> In fact, I turn off the warning altogether, always.
00:45:06 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:45:30 <Guest87> thank you very much, both solutions are perfect
00:46:13 Guest372 joins (~xxx@47.245.54.240)
00:47:07 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:47:14 × ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 260 seconds)
00:48:13 Guest372 joins (~xxx@47.245.54.240)
00:48:18 <aegon> :t *>
00:48:19 <lambdabot> error: parse error on input ‘*>’
00:48:24 <aegon> :t (*>)
00:48:25 <lambdabot> Applicative f => f a -> f b -> f b
00:49:07 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:50:15 Guest372 joins (~xxx@47.245.54.240)
00:51:07 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:52:14 Guest372 joins (~xxx@47.245.54.240)
00:52:46 <dsal> I don't appreciate the judgment of warnings.
00:53:08 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:54:15 Guest372 joins (~xxx@47.245.54.240)
00:55:08 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:55:52 skreli joins (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
00:56:05 <skreli> ?src ($)
00:56:06 <lambdabot> f $ x = f x
00:56:15 Guest372 joins (~xxx@47.245.54.240)
00:57:08 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:57:25 <aegon> ?src (&)
00:57:25 <lambdabot> Source not found. My pet ferret can type better than you!
00:57:32 <geekosaur> pity @src tells half the story there
00:57:33 <aegon> rude
00:57:35 <aegon> lol
00:58:15 Guest372 joins (~xxx@47.245.54.240)
00:58:41 <dsal> Yeah, there's kind of an important feature missing from that src thing.
00:59:08 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
00:59:15 <geekosaur> hm, intended to say less than half
00:59:27 <geekosaur> since the fixity's the whole point of it
00:59:49 <dsal> Oh. Is there another important piece missing?
01:00:16 Guest372 joins (~xxx@47.245.54.240)
01:00:20 <geekosaur> I was thinking of its response to ($)
01:00:35 <geekosaur> where the whole point is `infixr 9`
01:00:46 <geekosaur> sorry, 0
01:00:53 <geekosaur> kee reversing the fixity levels
01:01:09 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:02:07 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
01:02:15 Guest372 joins (~xxx@47.245.54.240)
01:02:49 <skreli> True, but you can get that half in ghci
01:02:50 <dsal> % :i (&)
01:02:50 <yahb> dsal: (&) :: a -> (a -> b) -> b -- Defined in `Data.Function'; infixl 1 &
01:03:01 <skreli> :i ($)
01:03:09 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:03:17 <skreli> % :i ($)
01:03:17 <yahb> skreli: ($) :: (a -> b) -> a -> b -- Defined in `GHC.Base'; infixr 0 $
01:04:15 Guest372 joins (~xxx@47.245.54.240)
01:04:19 <geekosaur> yes, but it'd be nice if @src reported it since what it does report is kinda useless
01:05:07 <dsal> Where does @src come from?
01:05:09 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:05:29 × mmhat quits (~mmh@55d45d75.access.ecotel.net) (Ping timeout: 258 seconds)
01:06:08 <geekosaur> hardcoded database in the lambdabot repo
01:06:17 Guest372 joins (~xxx@47.245.54.240)
01:07:10 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:07:57 skreli parts (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (WeeChat 3.3)
01:08:11 skreli joins (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
01:08:16 Guest372 joins (~xxx@47.245.54.240)
01:09:10 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:10:17 Guest372 joins (~xxx@47.245.54.240)
01:10:57 <aegon> is there a way to turn on warnings for shadowing vars?
01:11:10 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:11:52 skreli is now known as Clark
01:12:14 <geekosaur> -Wname-shadowing ?
01:12:16 Guest372 joins (~xxx@47.245.54.240)
01:13:10 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:14:11 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 264 seconds)
01:14:17 Guest372 joins (~xxx@47.245.54.240)
01:14:36 Clark is now known as Hayek
01:15:11 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:15:46 × Inst quits (~Inst@2601:6c4:4080:3f80:e12b:5f61:be92:9101) (Remote host closed the connection)
01:16:02 <aegon> geekosaur: thanks
01:16:03 Inst joins (~Inst@2601:6c4:4080:3f80:e12b:5f61:be92:9101)
01:16:17 Guest372 joins (~xxx@47.245.54.240)
01:17:11 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:18:17 Guest372 joins (~xxx@47.245.54.240)
01:19:11 × lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
01:19:11 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:19:18 mmhat joins (~mmh@55d456b5.access.ecotel.net)
01:19:45 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 260 seconds)
01:20:17 Guest372 joins (~xxx@47.245.54.240)
01:21:11 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:22:18 Guest372 joins (~xxx@47.245.54.240)
01:23:12 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:23:20 Hayek parts (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (WeeChat 3.3)
01:24:18 Guest372 joins (~xxx@47.245.54.240)
01:24:55 <dsal> :t (>=>)
01:24:56 <lambdabot> Monad m => (a -> m b) -> (b -> m c) -> a -> m c
01:25:12 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:25:16 <dsal> It's only ever occurred to me that I should use that once. But I've used it more than once. I should probably understand it at some point.
01:25:35 <dsal> I guess it reads pretty clearly.
01:26:18 Guest372 joins (~xxx@47.245.54.240)
01:27:12 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:27:46 × hendursaga quits (~weechat@user/hendursaga) (Remote host closed the connection)
01:28:19 Guest372 joins (~xxx@47.245.54.240)
01:28:30 mud joins (~mud@user/kadoban)
01:28:57 hendursaga joins (~weechat@user/hendursaga)
01:29:12 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:30:19 Guest372 joins (~xxx@47.245.54.240)
01:31:12 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:32:19 Guest372 joins (~xxx@47.245.54.240)
01:33:13 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:34:20 Guest372 joins (~xxx@47.245.54.240)
01:35:13 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:36:20 Guest372 joins (~xxx@47.245.54.240)
01:37:13 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:38:20 Guest372 joins (~xxx@47.245.54.240)
01:38:25 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
01:39:01 × jespada quits (~jespada@2803:9800:9842:7a62:9560:3718:bb2f:f5ee) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:39:14 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:39:54 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 265 seconds)
01:40:20 Guest372 joins (~xxx@47.245.54.240)
01:40:57 mvk joins (~mvk@2607:fea8:5cc1:300::4b63)
01:41:14 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:41:27 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
01:42:20 Guest372 joins (~xxx@47.245.54.240)
01:43:14 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:43:19 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Read error: Connection reset by peer)
01:44:20 Guest372 joins (~xxx@47.245.54.240)
01:44:55 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
01:45:14 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:46:21 Guest372 joins (~xxx@47.245.54.240)
01:47:14 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:48:21 Guest372 joins (~xxx@47.245.54.240)
01:49:15 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:50:21 Guest372 joins (~xxx@47.245.54.240)
01:51:15 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:52:21 Guest372 joins (~xxx@47.245.54.240)
01:52:46 × xff0x quits (~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92) (Ping timeout: 252 seconds)
01:53:15 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:53:49 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
01:53:54 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
01:54:21 Guest372 joins (~xxx@47.245.54.240)
01:54:25 xff0x joins (~xff0x@2001:1a81:5287:aa00:5b1b:a88f:ea9:b216)
01:54:46 guydb89 joins (~guy@98.40.140.117)
01:55:15 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:56:22 Guest372 joins (~xxx@47.245.54.240)
01:57:15 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
01:58:22 Guest372 joins (~xxx@47.245.54.240)
01:59:16 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:00:22 Guest372 joins (~xxx@47.245.54.240)
02:01:16 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:02:23 Guest372 joins (~xxx@47.245.54.240)
02:02:36 × mmhat quits (~mmh@55d456b5.access.ecotel.net) (Ping timeout: 258 seconds)
02:03:16 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:04:23 Guest372 joins (~xxx@47.245.54.240)
02:05:17 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:06:23 Guest372 joins (~xxx@47.245.54.240)
02:07:17 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:07:17 Hayek joins (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
02:08:23 Guest372 joins (~xxx@47.245.54.240)
02:09:05 Hayek parts (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) ()
02:09:17 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:09:19 Hayek joins (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
02:09:35 Hayek parts (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) ()
02:09:38 Hayek joins (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
02:10:01 × Guest87 quits (~Guest87@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
02:10:24 Guest372 joins (~xxx@47.245.54.240)
02:10:24 × Hayek quits (~skreli@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Client Quit)
02:10:41 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
02:11:17 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:12:24 Guest372 joins (~xxx@47.245.54.240)
02:12:25 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
02:13:18 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:13:18 MQ-17J joins (~MQ-17J@8.21.10.17)
02:14:09 <sm> how do I make an IOException, so I can throwIO it ?
02:14:24 Guest372 joins (~xxx@47.245.54.240)
02:15:18 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:16:22 <sm> call ioError or userError msg, I guess - IOError seems to be a synonym
02:16:25 Guest372 joins (~xxx@47.245.54.240)
02:16:27 ente1 joins (~ente@p200300dc5f17790014214a4427ad1af6.dip0.t-ipconnect.de)
02:16:40 mmhat joins (~mmh@55d497bf.access.ecotel.net)
02:16:57 <ente1> what would you use for wring a json rest api in haskell?
02:17:02 ente1 is now known as ente_
02:17:04 <monochrom> Yeah, ioError (userError msg)
02:17:18 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:18:25 Guest372 joins (~xxx@47.245.54.240)
02:19:19 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:19:21 <monochrom> or s/ioError/throwIO/ if you like. Doesn't matter which.
02:19:49 <aegon> ente_: Scotty
02:19:50 <Hayek> ?src zipWith
02:19:50 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
02:19:50 <lambdabot> zipWith _ _ _ = []
02:20:18 <aegon> ente_: Scotty + Aeson
02:20:25 Guest372 joins (~xxx@47.245.54.240)
02:21:13 <aegon> theres a real world scotty example app but its kinda over the top in class seperation imo
02:21:19 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:22:23 <aegon> ente_: what kind of storage are you communicating with
02:22:25 Guest372 joins (~xxx@47.245.54.240)
02:23:19 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:24:27 Guest372 joins (~xxx@47.245.54.240)
02:25:19 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:26:01 <ente_> aegon: do you mean database? I honestly have no idea; before I just always used postgres (in conjunction with Go)
02:26:26 Guest372 joins (~xxx@47.245.54.240)
02:26:30 <shapr> I wrote a scotty app if you want to see something that works.
02:26:50 × mrianbloom quits (sid350277@id-350277.ilkley.irccloud.com) (Ping timeout: 260 seconds)
02:26:50 × mcfilib quits (sid302703@user/mcfilib) (Ping timeout: 260 seconds)
02:26:50 × teehemkay quits (sid14792@id-14792.lymington.irccloud.com) (Ping timeout: 260 seconds)
02:26:50 × td_ quits (~td@94.134.91.188) (Ping timeout: 260 seconds)
02:26:52 × kristjansson_ quits (sid126207@id-126207.tinside.irccloud.com) (Ping timeout: 252 seconds)
02:26:52 × hubvu quits (sid495858@user/hubvu) (Ping timeout: 252 seconds)
02:26:53 <aegon> ente_: depending on how comfy you are with haskell persistent then postgresql-simple and resource-pool are good
02:27:03 td_ joins (~td@94.134.91.188)
02:27:08 × grfn quits (sid449115@id-449115.helmsley.irccloud.com) (Ping timeout: 258 seconds)
02:27:10 <aegon> persistent is more black boxey than postgresql-simple
02:27:19 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:27:25 × gaze___ quits (sid387101@id-387101.helmsley.irccloud.com) (Ping timeout: 260 seconds)
02:27:27 <ente_> aegon: I have never used anything
02:27:44 <ente_> aegon: but postgresql-simple sounds ... simple
02:28:00 × rune quits (sid21167@id-21167.ilkley.irccloud.com) (Ping timeout: 260 seconds)
02:28:00 × sclv quits (sid39734@haskell/developer/sclv) (Ping timeout: 260 seconds)
02:28:26 Guest372 joins (~xxx@47.245.54.240)
02:28:31 × econo quits (uid147250@user/econo) (Ping timeout: 252 seconds)
02:28:31 × sa quits (sid1055@id-1055.tinside.irccloud.com) (Ping timeout: 252 seconds)
02:28:35 × hook54321 quits (sid149355@user/hook54321) (Ping timeout: 260 seconds)
02:28:35 × Adeon quits (sid418992@id-418992.lymington.irccloud.com) (Ping timeout: 260 seconds)
02:28:35 × whez quits (sid470288@id-470288.lymington.irccloud.com) (Ping timeout: 260 seconds)
02:28:40 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Ping timeout: 258 seconds)
02:28:56 <ente_> aegon: bruh https://imgur.com/a/kj0TE7p
02:28:59 gaze___ joins (sid387101@helmsley.irccloud.com)
02:29:03 whez joins (sid470288@lymington.irccloud.com)
02:29:03 <aegon> it is, i used it and was happy, now that i'm more familiar with haskell stuff though I wish i'd gone with persistent for all the magic it provides.
02:29:04 mcfilib joins (sid302703@user/mcfilib)
02:29:04 bitmapper joins (uid464869@lymington.irccloud.com)
02:29:05 teehemkay joins (sid14792@lymington.irccloud.com)
02:29:06 grfn joins (sid449115@helmsley.irccloud.com)
02:29:20 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:29:21 <ente_> aegon: hmm... I'll have a look at both ig
02:29:21 rune joins (sid21167@ilkley.irccloud.com)
02:29:24 mrianbloom joins (sid350277@ilkley.irccloud.com)
02:29:30 hubvu joins (sid495858@user/hubvu)
02:29:36 econo joins (uid147250@user/econo)
02:29:42 sa joins (sid1055@tinside.irccloud.com)
02:29:45 <aegon> if shapr has code thats public that'd be a huge time saver, i ended up with something like this https://github.com/scotty-web/scotty/blob/master/examples/reader.hs in the reader i threw a resource-pool of postgresql-simple connections
02:29:47 kristjansson_ joins (sid126207@tinside.irccloud.com)
02:30:04 <ente_> btw - how do you install libraries in haskell
02:30:09 sclv joins (sid39734@haskell/developer/sclv)
02:30:19 <aegon> and took some of the monad transformer / effect composition stuff from this https://github.com/eckyputrady/haskell-scotty-realworld-example-app
02:30:22 <ente_> I have seen stack and ghc-pkg but am still a bit coonfused
02:30:26 Guest372 joins (~xxx@47.245.54.240)
02:30:29 hook54321 joins (sid149355@user/hook54321)
02:30:38 <ente_> (sorry if that's a *very* noob question)
02:31:20 × Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection)
02:31:50 Adeon joins (sid418992@lymington.irccloud.com)
02:31:53 <aegon> ente_: stack or cabal i think but i'm old and don't do nix stuff. imo if your new stack is the easiest way to get rollin but i think an equal number would say cabal has caught up in features
02:32:05 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:34:10 <shapr> Yeah, either one is fine.
02:35:20 <c_wraith> Is there any fancy number theory trick to efficiently distinguish a prime from the square of a prime?
02:36:15 <shapr> here's something I wrote three years ago that uses spock: https://github.com/shapr/sporkle/blob/master/app/Main.hs
02:36:19 <shapr> it was a demo for teaching others.
02:36:59 <shapr> here's a different thing I wrote using Scotty: https://github.com/shapr/fermatslastmargin
02:39:16 <byorgey> c_wraith: I don't know of any way to do better than e.g. testing if the number is a square (by computing the square of its integer square root) or testing for primality.
02:40:12 <aegon> ente_: and heres the bits i can share of the scotty thing i did https://paste.tomsmeding.com/SOgubUXf
02:40:26 lavaman joins (~lavaman@98.38.249.169)
02:40:38 × td_ quits (~td@94.134.91.188) (Ping timeout: 260 seconds)
02:41:28 <byorgey> c_wraith: hmm, I guess you can get a tiny bit of mileage out of the fact that odd squares in base 10 must end in 1, 5, or 9
02:42:17 <byorgey> and maybe you can quickly rule out some other cases by considering the remainder modulo some other divisors
02:42:24 td_ joins (~td@94.134.91.189)
02:42:57 <Inst> yeah, here's the problem with getting drunk and BS-ing, no one will answer your haskell questions
02:43:03 <Inst> okay, I have something weird
02:43:15 <Inst> or maybe not
02:43:54 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds)
02:43:59 <Inst> yup, debugged it, it's weird
02:44:42 <Inst> i tried a simple recursive function, it's probably a syntax error on VSCode GHCi somewhere
02:44:55 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
02:45:35 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
02:47:17 <c_wraith> byorgey: hmm. all odd squares have remainder 1 mod 8. That's probably good enough of a first pass that testing the integer square root is ok as the next pass.
02:48:13 <byorgey> c_wraith: ah, nice
02:48:49 <byorgey> and you don't even have to do any division, just look at the last 3 bits
02:48:53 <c_wraith> yeah
02:49:08 <byorgey> also, how big are these numbers?
02:49:32 <c_wraith> in all honesty, probably small enough that just doing a floating point square root would work. But I don't want to count on it
02:50:04 <byorgey> fair enough
02:51:07 × mmhat quits (~mmh@55d497bf.access.ecotel.net) (Quit: WeeChat 3.3)
02:54:55 × infinity0 quits (~infinity0@occupy.ecodis.net) (Remote host closed the connection)
02:55:02 <aegon> ente_: if this is like your first whack at haskell monad transformers were super scary for me and every web framework has em at the base, this is long but good https://www.fpcomplete.com/haskell/tutorial/monad-transformers/
02:55:25 × MQ-17J quits (~MQ-17J@8.21.10.17) (Ping timeout: 260 seconds)
02:56:24 <dsal> I'm fairly anti-persistent after having gone through that debate recently.
02:56:33 <aegon> ente_: and i think the thing that really tripped me up is that the runReaderT etc create the context
02:56:53 <dsal> It's probably cool if you don't care about databases, but there were too many things I couldn't figure out how to do in persistent even before I got to the stuff it wouldn't do at all.
02:57:08 <aegon> dsal: yeah i had to ad postGIS types to postgresql-simple and i don't think i would have been able to figure out how to do that with all the complexitiy of persistent
02:57:15 <aegon> *add
02:57:16 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
02:57:28 <dsal> Right. enums and postgis both look nightmarish.
02:58:12 <dsal> PG enums are why I was asking about proxies/type applications earlier. I realized I've never actually looked at how type applications worked, just sort of cargo culted them around. Made life easier.
02:58:36 <dsal> Now I have a test thing that's like `pgEnumsMatch @HaskellType "postgres_type"` and it does all the fancy tests.
02:59:07 infinity0 joins (~infinity0@occupy.ecodis.net)
03:00:14 <aegon> dsal: did any blog post or docs get you to an aha moment? I used type applications in HaskTorch's gradually typed stuff and thought I knew them, then went to use em in a new project and chased my tail around for a day before reforming the problem to not need them
03:01:01 <aegon> (type applications that is)
03:01:22 <dsal> I just read this: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/type_applications.html
03:01:34 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
03:02:37 <dsal> I usually don't need them, but my problem here was basically the above. I want to test that of this haskell type occupants are the same as the postgres enum values. I'm going to have a few of these, so I just wanted to do the thing once.
03:05:22 × InstX1 quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 260 seconds)
03:06:15 meinside joins (uid24933@id-24933.helmsley.irccloud.com)
03:06:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
03:06:47 <dsal> Turns out reading documentation can really shave some time off of understanding things. I also hadn't looked up AllowAmbiguousTypes. That sounds scary, but it's for exactly this type of thing.
03:07:30 <awpr> yeah, a lot of GHC extensions suffer from people being needlessly scared of them
03:07:47 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
03:07:47 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
03:07:47 wroathe joins (~wroathe@user/wroathe)
03:08:26 <dsal> It's kind of a scary sounding name.
03:08:57 <aegon> for whatever reason it seems impossible for me to find the ghc users guide when i want it. I'll get tons of monday morning haskell / fp complete posts but never a link to the actual docs. need to up my google / duckduckgo game
03:09:15 <awpr> exactly, that's what I mean. `UndecidableInstances` is also really scary sounding, but it just means to turn off the guard rails that stop you from writing infinite loops in your types
03:10:29 <dsal> Heh, I just went off to read about UndecidableInstances and came back and you were talking about it.
03:11:23 <aegon> i thought there was a vote around default enabling some extensions
03:11:39 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
03:11:42 <dsal> It's really helpful to read these things, but I like to wait until I'm maximally dumb. I remember reading about `FunctionalDependencies` and kind of glazed over a bit and couldn't imagine a case where I needed that. A couple of days later…
03:14:40 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 258 seconds)
03:15:58 mbuf joins (~Shakthi@136.185.83.238)
03:18:54 × guydb89 quits (~guy@98.40.140.117) (Ping timeout: 260 seconds)
03:18:59 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 264 seconds)
03:19:16 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 258 seconds)
03:19:24 cheater joins (~Username@user/cheater)
03:24:25 <davean> aegon: How about IncoherentInstances?
03:35:37 dut joins (~dut@user/dut)
03:37:16 <Axman6> @djinn (b -> c) -> (d -> e -> b) -> d -> e -> c
03:37:16 <lambdabot> f a b c d = a (b c d)
03:42:36 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
03:44:17 × dut quits (~dut@user/dut) (Quit: Leaving)
03:45:06 <aegon> davean: not familiar with it, it seems Incoherent
03:50:47 <davean> aegon: you'll take the instance we give you, and don't expect us to be consistent about it!
03:51:23 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
03:54:54 <davean> aegon: never wanted to instances of Ord for one type?
03:56:27 coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
03:59:35 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
04:00:42 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
04:04:48 fawful joins (~guy@c-76-104-217-93.hsd1.wa.comcast.net)
04:04:56 <aegon> how would it choose? that sounds like a recipe for disaster
04:06:47 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:07:57 × fawful quits (~guy@c-76-104-217-93.hsd1.wa.comcast.net) (Client Quit)
04:08:57 fawful joins (~guy@c-76-104-217-93.hsd1.wa.comcast.net)
04:09:08 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:15:24 <davean> aegon: It would choose whichever it wanted at any given moment of course
04:16:10 × fawful quits (~guy@c-76-104-217-93.hsd1.wa.comcast.net) (Quit: WeeChat 3.2)
04:17:10 <davean> Look, we promise you'll only be given one of them in a given case - isn't that good enough for you?
04:20:02 <aegon> well, the compiler knows best, i'll run with it
04:27:39 <davean> aegon: its the scariest language extension I think a sane programemr will have to use at some point
04:28:07 <davean> or put another way, that its the scariest langauge extension that there might not be a better way to do it
04:29:30 × bitmapper quits (uid464869@lymington.irccloud.com) (Quit: Connection closed for inactivity)
04:34:20 reumeth joins (~reumeth@user/reumeth)
04:36:34 mikoto-chan joins (~mikoto-ch@185.237.102.125)
04:39:23 × danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 258 seconds)
04:40:31 × reumeth quits (~reumeth@user/reumeth) (Ping timeout: 252 seconds)
04:41:05 danso joins (~danso@23-233-111-52.cpe.pppoe.ca)
04:41:29 <aegon> davean: looks like it was changed to OverlappingInstances
04:46:52 ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
04:48:42 × ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Read error: Connection reset by peer)
04:48:55 ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
04:51:12 takuan joins (~takuan@178-116-218-225.access.telenet.be)
04:53:10 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
04:53:11 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
04:56:19 betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be)
04:59:01 <davean> aegon: no - there was a change but it was to make it specific to a given instance istead of a general language extension
05:00:59 × mvk quits (~mvk@2607:fea8:5cc1:300::4b63) (Ping timeout: 264 seconds)
05:02:24 schuelermine joins (~anselmsch@user/schuelermine)
05:02:25 <davean> aegon: and incoherent is far worse than overlapping
05:02:38 <schuelermine> what even is the use for -XIncoherentInstances?!
05:02:42 <davean> See https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/instances.html#overlapping-instances
05:02:44 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:03:36 <davean> schuelermine: If you have to ask, I don't want to put ideas into your head ...
05:04:39 <schuelermine> I feel like the advantages of coherence could be done by simply allowing types to carry instances, i.e. a dumbed down dependent typing system, then type classes could be handled as ?implicit parameters
05:04:52 <aegon> overlapping sounds like sfinae
05:04:56 <schuelermine> I guess ‘simply’ is a big word here
05:05:06 <schuelermine> aegon: what the hell do you mean by that?
05:05:07 <dsal> -XSurpriseInstances
05:05:56 <aegon> whoa, that was a strong reaction :P I mean in template substitution where in c++ it will choose the most specific match
05:06:04 <aegon> https://en.cppreference.com/w/cpp/language/sfinae
05:06:11 <schuelermine> aegon: the reaction was not meant negatively, I was merely confused
05:06:19 <schuelermine> sorry if that came accross the wrong way
05:06:19 <davean> aegon: most specific match is what overlapping instances does
05:06:42 <aegon> oh sorry i mistook it, i wasn't offended just poking fun
05:07:08 <c_wraith> however... sometimes the most specific match can become... hidden.
05:07:13 <aegon> and most specific isn't really related to sfinae, :X i just heard it in the same video from cpp weekly where he was going over function resolution
05:07:28 <davean> c_wraith: yah, I mean it doesn't work in a sane manner
05:07:35 <davean> there can be ... incoherence
05:07:44 <schuelermine> I guess people find “what the hell” strong? idk, but I think I’ve had one other instance of people reacting negatively to that…
05:07:46 <davean> but its not the same as incoherent instances
05:07:53 <aegon> c_wraith: so ghc could stop searching for a "most specific" in some cases?
05:08:11 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
05:08:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
05:09:14 <c_wraith> aegon: it sometimes can't see that there's something more specific due to calling patterns. I don't actually know how to trigger the behavior, I just know I've seen it before.
05:09:23 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
05:09:53 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:09:53 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
05:09:53 wroathe joins (~wroathe@user/wroathe)
05:09:56 <c_wraith> aegon: like when working in a polymorphic context, sometimes the instance selection gets deferred to a location that no longer has the necessary information
05:10:54 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
05:12:51 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
05:13:40 Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
05:14:03 <davean> aegon: out of curiosity what made you think incoherent instances was replaced by overlapping?
05:14:10 <davean> That might be a documentation weakness somewhere?
05:14:38 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
05:14:47 × emf_ quits (~emf@2620:10d:c090:400::5:70ff) (Ping timeout: 264 seconds)
05:14:51 <aegon> no its a bad reading by me, I read the section title as Overlapping Instances then processed taht IncoherentInstances was a "deprecated extension" so i assumed it was replaced
05:15:06 <aegon> reading the whole section clarifies though, they both exist but they are more specific now / tied to an instance
05:15:18 <aegon> i'm still digging into it, it does sound scary
05:15:26 <aegon> i cant think of a time I'd want the Incoherent behavior
05:17:42 <davean> Its not the behavior you'd want
05:17:51 <davean> Its that its the only way you could encode what you *did* want in Haskell
05:17:57 <davean> Its the removal of the restriction
05:20:40 × schuelermine quits (~anselmsch@user/schuelermine) (Ping timeout: 252 seconds)
05:21:24 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
05:27:21 <aegon> i see, hmm, well, maybe not. I don't see what you'd have to encode this way. It seems to add more flexibility for instance resolution, i've used FlexibleContexts before but I don't see what would *require* Incoherent instances, is it a side effect of the intermidiate stage thats needed by the compiler before it determines the overlapping resolution?
05:29:26 <c_wraith> Incoherent instances are for when you have overlapping instances where options are tied in specificity
05:29:37 <c_wraith> That is in no way required by FlexibleContexts
05:30:21 <c_wraith> The only way incoherent instances would get involved is if you have *multiple* instances that differ only on constraints, or something like that
05:33:41 <aegon> is there a sane example of where you need that? I'm trying to contrive up something and coming up blank
05:34:15 <aegon> if i'm understanding correctly your talking aobut something like instanse Show (Int, b) and instance Show (b, Int)
05:35:07 Guest27 joins (~Guest27@2601:281:d480:2ce0:28de:914f:fac6:10b7)
05:35:25 <c_wraith> that's an example, yes
05:35:37 <c_wraith> there's no most-specific option to match (Int, Int)
05:36:44 <aegon> but like, why would a lib dev want such a thing :?
05:37:30 <aegon> or i guess need to be able to allow for such a thing
05:37:30 mei joins (~mei@user/mei)
05:37:35 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 264 seconds)
05:38:36 <c_wraith> The cases I've seen where it actually is *helpful* is when you happen to know that for whatever reason, every instance it might select is equivalent
05:39:08 <c_wraith> And you have other requirements that prevent expressing it as a single constraint
05:39:27 <c_wraith> It's not a common thing. Most people never need it.
05:45:30 × mikoto-chan quits (~mikoto-ch@185.237.102.125) (Quit: mikoto-chan)
05:45:57 <aegon> theres some cool info in the users guide i glossed over. this stuf is neat. I've kinda just accepted FlexibleInstances, FlexibleContexts etc as hand wavy things some libs need in order to be used
05:49:54 × Guest27 quits (~Guest27@2601:281:d480:2ce0:28de:914f:fac6:10b7) (Ping timeout: 256 seconds)
05:58:18 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
06:05:00 × segfaultfizzbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 260 seconds)
06:05:23 <davean> aegon: more people should RTFM
06:06:30 <davean> aegon: Honestly it wouldn't take that long to get a basic idea of every extension by reading the manual - if you're bored some day ...
06:06:57 <aegon> i'll definitely do it, for some reason i read all of real world haskell and learn you a haskell then skimped on the manual
06:07:00 <aegon> derp
06:07:16 <aegon> i gotta read the inside of my eye lids for a couple hours though :)
06:07:44 × aegon quits (~mike@174.127.249.180) (Remote host closed the connection)
06:14:05 benin joins (~benin@183.82.207.116)
06:15:36 chele joins (~chele@user/chele)
06:18:42 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
06:21:02 lortabac joins (~lortabac@2a01:e0a:541:b8f0:70bb:31e2:9b65:43)
06:22:27 jakalx parts (~jakalx@base.jakalx.net) ()
06:23:05 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 260 seconds)
06:27:35 jakalx joins (~jakalx@base.jakalx.net)
06:30:38 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
06:31:01 ArctVaulMarsHMPJ joins (~pjetcetal@128-71-225-36.broadband.corbina.ru)
06:31:22 × ArctVaulMarsHMPJ quits (~pjetcetal@128-71-225-36.broadband.corbina.ru) (Read error: Connection reset by peer)
06:33:12 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
06:34:02 × connrs quits (~connrs@conners.plus.com) (Read error: Connection reset by peer)
06:34:20 connrs joins (~connrs@conners.plus.com)
06:34:35 × timCF quits (~timCF@m91-129-111-87.cust.tele2.ee) (Ping timeout: 264 seconds)
06:42:06 lavaman joins (~lavaman@98.38.249.169)
06:44:47 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 264 seconds)
06:45:11 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Quit: Reconnecting)
06:45:34 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
06:46:35 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
06:48:22 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
06:49:01 × Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection)
06:52:21 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
06:53:04 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 252 seconds)
06:54:00 pfurla joins (~pfurla@216.151.180.27)
07:00:50 × hueso_ quits (~root@user/hueso) (Ping timeout: 246 seconds)
07:01:26 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
07:06:39 Guest27 joins (~Guest27@2601:281:d480:2ce0:28de:914f:fac6:10b7)
07:07:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:08:11 × Inst quits (~Inst@2601:6c4:4080:3f80:e12b:5f61:be92:9101) (Ping timeout: 264 seconds)
07:08:16 michalz joins (~michalz@185.246.204.41)
07:11:41 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
07:12:07 ubert joins (~Thunderbi@178.165.203.151.wireless.dyn.drei.com)
07:13:37 × brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving)
07:14:29 vpan joins (~0@212.117.1.172)
07:15:52 hueso joins (~root@user/hueso)
07:16:10 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 258 seconds)
07:19:08 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
07:20:26 × Guest27 quits (~Guest27@2601:281:d480:2ce0:28de:914f:fac6:10b7) (Quit: Client closed)
07:20:50 × xff0x quits (~xff0x@2001:1a81:5287:aa00:5b1b:a88f:ea9:b216) (Ping timeout: 260 seconds)
07:22:20 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:24:40 × dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
07:25:03 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:25:03 dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
07:27:28 mc47 joins (~mc47@xmonad/TheMC47)
07:31:17 × alx741 quits (~alx741@186.178.108.23) (Quit: alx741)
07:33:07 xff0x joins (~xff0x@2001:1a81:5287:aa00:5b1b:a88f:ea9:b216)
07:34:43 <dminuoso> 08:54:08 davean | [06:05:23] aegon: more people should RTFM
07:34:46 <dminuoso> This channel would be so quiet.
07:34:49 <dminuoso> :>
07:35:17 <dminuoso> Something like half questions in here are covered in GHC or cabal manuals..
07:37:25 <Profpatsch> Just because it’s written down doesn’t mean it’s discoverable
07:37:52 <davean> Profpatsch: I mean its basicly the definition of discoverable to be in the manual
07:38:06 <davean> If you haven't read the manual for tools you use, are you even trying to understand?
07:39:53 <tomsmeding> TBH the ghc user's guide amounts to a huge amount of pages. Now actually the user's guide is actually structured quite well (and indexed in search engines) so you can actually find what you want, but in general "it's in the manual = discoverable" is untrue: "it's in a 300 page scanned PDF" is _not_ discoverable.
07:40:27 <davean> the GHC manual was never in a PDF during the time I've been in Haskell which is over a decade
07:40:42 <davean> but even then - don't you read the manuals of your tools when you start using them?
07:40:50 <tomsmeding> not if they're hundreds of pages long, no
07:41:03 <Rembane_> Knowing what to google to find the right thing in the manual is a skill in itself, a skill many here have, but probably not the people who ask the RTM-worthy questions.
07:41:05 <tomsmeding> but I agree the GHC manual has discoverable materual :)
07:41:08 <tomsmeding> *material
07:41:09 <davean> The GHC manual was a tiny fraction of what I read getting started with Haskell
07:41:12 <tomsmeding> Was just responding to the general remark
07:41:51 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
07:42:00 <tomsmeding> maybe I'm one of those stupid young people that can't bother to spend days reading a manual before getting started, but no, I don't :p
07:42:20 × son0p quits (~ff@181.136.122.143) (Read error: Connection reset by peer)
07:42:23 <davean> tomsmeding: Saved me a lot more than the day it took to read - and it was an interesting day
07:42:28 <davean> a day worth it all on its own
07:43:01 <davean> Honestly a large portion of the problems I've had with GHC were not keeping up
07:43:13 <Profpatsch> davean: are you saying you have read the manual of every tool you use?
07:43:18 <Profpatsch> *doubt*
07:43:22 cfricke joins (~cfricke@user/cfricke)
07:43:25 <[exa]> #haskell the best hackage indexing service
07:43:30 <davean> Profpatsch: I read the manual for every tool thats a major part of what I do
07:43:43 <davean> I mean the gcc one was pretty bad
07:43:59 <Profpatsch> I mean, good on you
07:44:15 <dminuoso> tomsmeding: Honestly I think over the past decades, the velocity of things have trained people to refuse consulting or reading long documents.
07:44:21 <Profpatsch> But like, can’t expect everybody to do that (esp if neurodivergent)
07:44:22 <dminuoso> Webpages like stackoverflow did great damage in that regard.
07:44:35 <Profpatsch> It’s called lazy evaluation
07:44:45 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
07:44:57 <Profpatsch> Plus, UX research has somewhat progressed
07:45:10 <davean> Profpatsch: UX has nothing to do with understanding
07:45:14 <davean> UX can't think for you
07:45:18 <Profpatsch> (although a single greppable html page is somehow still the pinnacle of discoverability …)
07:45:47 <davean> You need a library of knowlege to build on
07:46:00 <Rembane_> davean: Have you ever considered making a podcast where you review manuals?
07:46:01 <davean> if you don't have the basic ideas you can't think the thoughts
07:46:23 <Profpatsch> davean: I have the library of all possible books, and I tend to lazily recurse into what seems useful at the time
07:46:31 <davean> Rembane_: People would get bored on episode 30 of "I wonder why people wanted this" about the emacs manual
07:46:36 <Profpatsch> https://libgen.is/
07:46:55 <Rembane_> davean: I would listen! So you would have an audience of > 0 :D
07:47:32 <davean> (actually the emacs manual wasn't that long, its just cut up into tiny pieces)
07:47:41 <davean> (Theres a lot of non-manual stuff)
07:47:47 <Profpatsch> imho the change in how people consume information hasn’t so much to do with stackoverflow
07:47:51 <Profpatsch> as it has with the hyperlink
07:48:06 <Profpatsch> You don’t *have* to study Tomes front-to-back, so people tend not to
07:48:06 <davean> BTW Profpatsch I use to act like you do
07:48:28 <davean> But it was after a decade of slowly realizing it had caused a rotten foundation and I was fundimentally worse at the things I did for it that I changed
07:48:38 <davean> it was a very slow change
07:48:59 <davean> Of realizing having expediently answered a question didn't teach me the principals behind it
07:51:17 <davean> Well sorta. I mean thats more broad
07:51:44 <davean> eh, the details and nuance are a long discussion and I want to go to bed
07:52:04 <tomsmeding> just getting started with the day :)
07:53:11 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Remote host closed the connection)
07:53:26 <maerwald> the best thing is writing tutorials for others, because then you see all the things you can't explain
07:53:31 <Profpatsch> davean: I feel like it’s a complementary approach
07:53:48 <Profpatsch> e.g. having to study the whole manual before writing your first line of code is not a good approach
07:54:16 <Profpatsch> cause you usually want to evaluate quickly in the beginning before you invest a bunch of time
07:54:46 <Profpatsch> but once you decide it’s the way to go and have some initial experience, it makes sense to sit your ass down and actually study the manual
07:54:46 <maerwald> depends on the person
07:54:49 <davean> more than slightly but less than significantly agree
07:55:12 <tomsmeding> ("sort of"?)
07:55:35 <Profpatsch> with nix I agree it would have been best to just study the manual
07:55:52 <maerwald> there's no right way to learn nix, because it's not a structured ecosystem
07:55:59 <Profpatsch> Would have saved me a lot of wtf and being annoyed at how arbitrary it all seemed
07:56:10 <maerwald> well, it is arbitrary, that's the point...
07:56:18 <maerwald> it grew into all directions
07:56:21 <Profpatsch> maerwald: the manuals are rather good, but also poorly structured so it’s hard to see why you want to read them and in what order
07:56:23 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
07:56:32 <davean> maerwald: I think its the truth, and I try not to accept its the point
07:56:34 <Profpatsch> But that’s a UX thing again
07:56:40 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
07:56:49 <Profpatsch> GHC also has a User manual and the Haskell standard, and multiple other things
07:57:11 <Profpatsch> e.g. knowing the GHC runtime flags is not super useful when you are learning how to HAskell
07:57:23 <Profpatsch> esp since you are going to forget them as soon as yo uread them
07:57:43 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
07:58:54 <davean> I'd thought I forgot them
07:59:02 jumper149 joins (~jumper149@80.240.31.34)
07:59:03 <davean> until years later I had a problem and had an idea how to fix it
07:59:51 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
08:00:30 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:00:57 <davean> anyway this would be a fun seriously long off topic discussion
08:01:03 <davean> but not now and not in #haskell
08:03:28 <maerwald> you only need remember one: -fspecialise-aggressively
08:03:30 <maerwald> :D
08:03:39 <davean> maerwald: :<
08:04:35 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 260 seconds)
08:04:40 × dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
08:05:00 dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
08:07:22 <davean> maerwald: So I take it your code doesn't have a lot of loops?
08:07:35 <davean> (specificly that reuse class methods in multiple points in the loop)
08:07:58 <maerwald> it safed my ass yesterday, optimizing streamly code
08:08:24 <davean> Interesting - why wasn't the relivent functions marked INLINABLE?
08:08:34 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
08:09:27 × xff0x quits (~xff0x@2001:1a81:5287:aa00:5b1b:a88f:ea9:b216) (Ping timeout: 258 seconds)
08:10:18 xff0x joins (~xff0x@2001:1a81:5287:aa00:b3ce:25bf:d052:b94e)
08:14:04 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:16:29 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
08:16:55 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Read error: Connection reset by peer)
08:17:54 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:18:35 MoC joins (~moc@user/moc)
08:25:46 <dminuoso> Im using servant to accept a multi-form request, my wai application has a simple logger middleware around it. When I do simple `curl https://url -XPOST -F "data=@./sample.csv"` the logger middleware properly logs some `Content-Disposition: form-data; name="data"; filename="sample.csv"` followed by the blob of that file
08:25:57 acidjnk_new joins (~acidjnk@p200300d0c703cb932154b917507392a6.dip0.t-ipconnect.de)
08:26:14 <dminuoso> However, when our client sends a request to that same endpoint, the servant multiform part works properly, but the logger middleware acts as if this was no multiform post without any content disposition.
08:26:50 <dminuoso> The request happens too rarely that I can simply sniff it the next time
08:26:59 <maerwald> davean: there's INLINE everywhere, but if I remove this flag, performance drops from 7.5s to 8.5
08:27:52 <dminuoso> Sorry I should have elaborated, servant expects `MultipartForm Mem (MultipartData Mem)`
08:27:56 <c_wraith> dminuoso: the middleware would need to read the body to see that info. If something else has already read it, it would only see an empty body
08:28:05 <c_wraith> mutability!
08:29:32 ub joins (~Thunderbi@178.165.203.151.wireless.dyn.drei.com)
08:29:53 <dminuoso> c_wraith: Sure, but that would apply to my request as well as theirs.
08:29:55 <dminuoso> It's the same server
08:30:10 <dminuoso> Thing Im wondering is, are there multiple styles of multipart form-data that I dont know about?
08:30:38 <c_wraith> oh, I missed that. I see.
08:31:05 <dminuoso> The confusing thing is, to the logger this is just http and headers.
08:31:16 jgeerds joins (~jgeerds@55d40de2.access.ecotel.net)
08:31:31 × xff0x quits (~xff0x@2001:1a81:5287:aa00:b3ce:25bf:d052:b94e) (Ping timeout: 252 seconds)
08:31:32 <c_wraith> is it logging request size?
08:32:31 xff0x joins (~xff0x@2001:1a81:5287:aa00:fcfc:7af3:e2b:ab16)
08:32:51 <dminuoso> Ohhh hold on.
08:33:05 <dminuoso> c_wraith: I think you gave me an idea.
08:34:23 <dminuoso> c_wraith: Perfect thanks! The logger middleware in wai-extras seems to only log request bodies if they are smaller than 2KiB.
08:34:42 <c_wraith> huh. that makes sense, but I wouldn't have thought of it. Nice find.
08:34:50 <tomsmeding> that's really obscure
08:35:06 Inst joins (~Inst@2601:6c4:4080:3f80:709e:32b8:8140:3ed0)
08:35:12 <tomsmeding> oh _smaller_. I guess that makes sense in a way
08:35:27 <c_wraith> it definitely makes sense. it has to buffer anything it reads
08:35:30 <dminuoso> It should be configurable.
08:35:40 <dminuoso> I dont mind it defaulting to that limit, but I should be able to say "log everything"
08:35:45 <c_wraith> and there's no limit on upload size.
08:35:51 <dminuoso> Mmm
08:35:59 <dminuoso> Well, at least I wanna be able to raise the threshold to something reasonable.
08:36:00 <c_wraith> You really don't want someone to be able to make your server buffer multi-gigabyte files
08:36:17 <dminuoso> c_wraith: You have to authenticate to that API anyway
08:36:17 <c_wraith> yeah, even 100k wouldn't be an issue
08:36:37 <dminuoso> I think this is a small fix to wai-extras
08:36:42 <c_wraith> I'm less worried about attacks and more worried about bugs. :)
08:36:44 <dminuoso> For now Ill simply log the data in the servant handler instead.
08:37:12 <dminuoso> c_wraith: This is an API for just a single customer. If they DoS is it, it's their service that is degraded.
08:37:20 <dminuoso> It's very simple for us to point fingers then.
08:37:31 <c_wraith> heh. With a single user, ok. Once you get a second user....
08:37:37 <dminuoso> We wont
08:37:42 <dminuoso> This is a dedicated API that only this customer will ever see.
08:37:53 <c_wraith> But in any case, you can certainly make it bigger than 2k without risk
08:38:25 <dminuoso> Yeah, I can safely just add another field to https://hackage.haskell.org/package/wai-extra-3.1.7/docs/Network-Wai-Middleware-RequestLogger.html#t:RequestLoggerSettings
08:38:40 <dminuoso> Some `Maybe Int` should be fine
08:40:52 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Remote host closed the connection)
08:41:36 desantra joins (~skykanin@user/skykanin)
08:42:25 × coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
08:42:41 × desantra quits (~skykanin@user/skykanin) (Client Quit)
08:45:44 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
08:46:06 acidjnk_new3 joins (~acidjnk@p200300d0c703cb93c8c758eae23fe552.dip0.t-ipconnect.de)
08:47:10 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
08:48:02 gehmehgeh joins (~user@user/gehmehgeh)
08:49:31 nehsou^ joins (~nehsou@wsip-68-227-92-38.mc.at.cox.net)
08:49:42 × acidjnk_new quits (~acidjnk@p200300d0c703cb932154b917507392a6.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
08:52:35 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
08:57:42 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 260 seconds)
09:04:58 coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
09:05:03 alzgh joins (~alzgh@user/alzgh)
09:07:23 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
09:08:12 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
09:16:28 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
09:19:38 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
09:22:58 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
09:27:25 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 260 seconds)
09:30:49 acidjnk_new joins (~acidjnk@p200300d0c703cb93c8c758eae23fe552.dip0.t-ipconnect.de)
09:34:10 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb93c8c758eae23fe552.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
09:41:17 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
09:45:46 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Ping timeout: 252 seconds)
09:55:11 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
09:56:55 stiell joins (~stiell@gateway/tor-sasl/stiell)
09:57:45 × michalz quits (~michalz@185.246.204.41) (Ping timeout: 260 seconds)
10:03:17 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Quit: leaving)
10:07:36 <Profpatsch> Word64 please :)
10:15:29 × hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
10:27:45 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
10:30:15 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:30:15 <dminuoso> Sounds reasonable actually
10:31:58 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 252 seconds)
10:43:13 fendor joins (~fendor@91.141.35.79.wireless.dyn.drei.com)
10:43:54 lavaman joins (~lavaman@98.38.249.169)
10:48:29 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
10:49:08 neurocyte0132889 joins (~neurocyte@213.188.113.91)
10:49:08 × neurocyte0132889 quits (~neurocyte@213.188.113.91) (Changing host)
10:49:08 neurocyte0132889 joins (~neurocyte@user/neurocyte)
10:55:30 fusion86 joins (~fusion@2a02-a44c-e6e5-1-309e-d6f5-67ba-dda3.fixed6.kpn.net)
10:57:17 michalz joins (~michalz@185.246.204.41)
10:57:42 mmhat joins (~mmh@55d497bf.access.ecotel.net)
11:00:52 alx741 joins (~alx741@186.178.108.23)
11:03:34 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
11:06:58 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 260 seconds)
11:15:56 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
11:16:06 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:16:29 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
11:19:07 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
11:19:17 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
11:20:58 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
11:23:47 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
11:24:22 <fusion86> Hey all. I have a small question about the record syntax and pattern matching. Pattern matching on your record usually results in less code to do the same thing, but when having nested records it can get clusterfucky. In the first snippet the code is small enough so that it doesn't really matter, but for the second snippet it really makes a difference. Which solution would be better? https://paste.tomsmeding.com/ohEg
11:24:22 <fusion86> shI4
11:24:47 <fusion86> Unfortunate max text size, link -> https://paste.tomsmeding.com/ohEgshI4
11:25:37 <Rembane_> fusion86: I'm quite fond of composing the accessor functions, as in the second example
11:26:13 <Cajun> this seems like something lens and optics are meant to solve, right?
11:27:28 <Rembane_> They do, but they also might be absolutely overwhelming depending on the developer
11:28:12 <fusion86> Yeah I am trying to keep it a bit simple because it's also a group project
11:28:38 <Rembane_> That seems like a good approach
11:28:46 <fusion86> I've already caused enough feature creep :) Though I'll make a mental note to look at those two sometimes later.
11:28:53 <Rembane_> :D
11:28:54 × shapr quits (~user@pool-108-28-144-11.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
11:29:02 <dminuoso> fusion86: lens/optics provide a language to do this pattern matching.
11:29:25 <dminuoso> They are designed precisely for operating on deeply nested data structures.
11:30:09 <dminuoso> I dont know the surrounding code, but perhaps they might be worth a lok into
11:39:40 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:43:18 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
11:46:00 ec_ joins (~ec@gateway/tor-sasl/ec)
11:47:43 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
11:47:47 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Ping timeout: 264 seconds)
11:48:48 <Profpatsch> fusion86: For records I’m quite fond of (&) a f = f a
11:49:02 <Profpatsch> foo & barfield & bazfield
11:49:30 <Profpatsch> Which is fine as long as you don’t need to update nested records a lot, in that case (micro)lens is a good solution
11:49:31 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:49:32 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
11:50:57 dminuoso thinks `optics` should always be mentioned alongside lens.
11:51:42 <dminuoso> Their problem domain would already include Prisms, so microlens is not even an option
11:52:53 <Cajun> optics (at least the library with the name) is a lot more friendly, good errors and very good documentation
11:53:08 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
11:53:09 <Cajun> though isnt it possible to just make your own lenses with zero dependencies by just following the format?
11:53:10 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
11:55:25 <dminuoso> sure, and optics can consume VL style optics too
11:55:36 <dminuoso> There's helpers to build the profunctor representation for all (?) of them
11:57:23 <Inst> [exa]
11:57:26 Guest4208 joins (~neo3@cpe-292712.ip.primehome.com)
11:57:33 <Inst> I have a friend, she's apparently a champion influencer and she's at CUNY
11:57:50 <Inst> I'm selling her Haskell as her first language, with some lies about how Haskell is so incredibly remunerated when it's hard to get a job in Haskell
11:57:51 <Franciman> Columbia University of New Yowk?
11:57:57 <Inst> City University of New York
11:58:29 <Inst> It used to be like UC system, then CUNY had some mandate to accept everyone and they jumped the shark
11:58:37 <dminuoso> What is a champion influencer?
11:58:49 <Franciman> somebody with a lot of instagram followers?
11:58:58 <maerwald> is this still about evangelizing haskell?
11:59:01 Guest4208 is now known as neo
11:59:03 <Inst> dminuoso: on social media she can get people to listen to what she says, she's notorious for recruiting 1000 people to some webgame
11:59:06 neo is now known as Guest9859
11:59:12 Guest9859 is now known as neo3
11:59:15 <unit73e> what's the haskell religion called?
11:59:21 <unit73e> haskellism?
11:59:44 <Inst> I'm wondering if you know anyone at CUNY, who might be able to guide her through independent study, although CUNY is so bad they have Haskell in graduate courses
11:59:46 <dminuoso> Inst: Oh so champion is just a qualifier?
11:59:53 <Inst> yeah
11:59:55 <dminuoso> Inst: For a moment I wasnt sure whether that was a reference to some platform.
11:59:56 <Hecate> unit73e: there is a sect called the Church of 𝛈-reduction
12:00:03 <maerwald> coding is awful, I always tell people to pick a different career
12:00:18 <Inst> it's money
12:00:19 <unit73e> Hecate, lol there's always a religion about something
12:00:28 <Hecate> unit73e: it's not a real one :P
12:00:29 <Inst> alternatives might be to work 72 hours a day at minimum or near minimum wage for 40k a year incomes
12:00:33 <dminuoso> maerwald: You generally sound very frustrated. Have you considered carpentry? :>
12:00:44 <maerwald> dminuoso: I am an actual brick layer.
12:00:49 <unit73e> wait, cuny? seriously?
12:00:54 <Inst> also, in theory, if people are fine with adding to the list of people looking and waiting for Haskell jobs
12:01:01 <dminuoso> maerwald: By actual, do you mean trained?
12:01:04 <maerwald> yes
12:01:07 <Inst> we could just deploy her to drag people into an online course
12:01:09 <Inst> for haskell
12:01:13 <Inst> as a first language / intro level, etc
12:01:21 <dminuoso> maerwald: Interesting, how do go from masonry to software development?
12:01:22 <Inst> might be able to get 100 students if you're interested in such
12:01:30 <maerwald> dminuoso: it felt like the natural thing to do... LOL
12:01:31 <unit73e> that's an unfortunate short name for a university
12:01:40 <Inst> why?
12:01:47 <Inst> I'm an ex-New Yorker. CUNY is perfectly natural.
12:01:58 <maerwald> dminuoso: building crap and cheating your customers... it's kinda the same
12:02:07 <unit73e> Inst, because cunny also means another thing
12:02:09 <Inst> Oh, I think in American slang CUNY -> female genitalia is not a natural association.
12:02:20 <dminuoso> maerwald: Except its not. Software development is better because there's absolutely no liability ever.
12:02:24 <dminuoso> ;)
12:02:26 <maerwald> true
12:02:38 <Inst> Female genitalia is a common profanity in British slang, far less so in American English.
12:02:42 <maerwald> for mixing concrete wrong you can get into prison in certain circumstances
12:02:43 <unit73e> I laught at companies losing millions
12:02:50 <unit73e> it's funny
12:03:07 <Inst> CUNY happens to be a massive system, though, it's NYC
12:03:17 <dminuoso> maerwald: Yeah I bet you can. There's tons of regulations on construction from what I hear.
12:03:50 × MoC quits (~moc@user/moc) (Quit: Konversation terminated!)
12:03:58 <unit73e> tbf if you cared about bugs involving lots of money you wouldn't sleep at night
12:04:03 <dminuoso> Apparently you cant even use cement when its over an hour old?
12:04:12 <dminuoso> *concrete
12:04:45 <maerwald> "this function was written 4 years ago, can we still use it"
12:04:46 <maerwald> xD
12:04:46 <unit73e> huh yeah because it will dry
12:05:03 <unit73e> that's not common knowledge?
12:05:06 <maerwald> I only use frest functions
12:05:09 <maerwald> *fresh
12:05:19 <dminuoso> unit73e: No it's mostly just arbitrary regulation. After an hour it will not be dried out.
12:05:31 <dminuoso> And it's a very conservative threshold
12:05:36 <maerwald> dminuoso: there's concrete that hardens in 15 minutes
12:05:42 <maerwald> with lots of chemicals
12:05:45 <Profpatsch> maerwald: funny thing but I think “this JS framework was written 4 years ago can we still use it”
12:05:56 <Profpatsch> is being said thousands if not millions of times per day
12:06:00 <dminuoso> maerwald: Interesting, Im guessing there's little to no water involved?
12:06:09 <maerwald> it's fun to get those chemicals on your skin
12:06:13 <maerwald> (not)
12:06:21 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 258 seconds)
12:06:47 <maerwald> at least while coding I can chill inside without getting burned by chemicals, crushed by cranes and stones etc
12:06:52 <dminuoso> Profpatsch: Even in Haskell we started developing these common transitive dependencies that have been unmaintained for a long while.
12:07:06 <dminuoso> Some of them are well written to the point it doesnt really matter, but others.. *shrugs*
12:07:22 <maerwald> dminuoso: some statistics suggest the likelihood of dying is higher when working in construction compared to going to war
12:07:44 <dminuoso> maerwald: and apparently agriculture has one of the highest injury rates ever.
12:07:53 <maerwald> in software, it's more about suicide (it's amongst the top 10 suicidal jobs)
12:07:59 <dminuoso> But that makes a lot of sense considering that farmers have to handle very large and dangerous equipment on their own every day..
12:08:12 <zincy> maerwald: Where is the source for that stat?
12:08:23 <maerwald> I read it on the internet lol
12:08:28 <zincy> 4chan?
12:08:34 <maerwald> not sure if it's a study
12:09:30 <zincy> Suicidal jobs sounds like a curious way of raising the unemployment rate
12:10:06 <dminuoso> *lowering you mean
12:10:12 <dminuoso> people keep freeing up those jobs.
12:10:35 <zincy> Suicidal jobs I read as the "job" is suicidal
12:10:37 <maerwald> if you must code, avoid fintech and you'll be fine
12:10:48 <zincy> Why avoid fintech?
12:10:58 <unit73e> dminuoso, it has to be a paste or it will end up being clumps. I do get it that it's convervative
12:11:04 <maerwald> I've never been in a more stressful environment than fintech in my entire life
12:11:12 <zincy> Really? Tell more
12:11:34 <maerwald> well, try it
12:11:36 <maerwald> :D
12:11:39 <dminuoso> I guess fintech has that extreme wall street mentality of "giving 170% on 22 hours a day"?
12:11:40 <zincy> I am :D
12:11:45 <dminuoso> With extreme pressure?
12:11:55 × peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Ping timeout: 260 seconds)
12:12:20 <zincy> Yeah I can imagina some fintechs try and emulate goldman sachs culture
12:12:45 <zincy> Most good coders have the luxury of just witching jobs no?
12:12:49 <zincy> *switching
12:12:51 <unit73e> maerwald, according to urban dictionary "Wall Street will be replaced by fintech some day in the near future."
12:13:42 <maerwald> do it when you're young
12:13:47 <maerwald> :D
12:13:55 <dminuoso> zincy: Yes, no, perhaps.
12:14:10 <dminuoso> It depends on your flexibility and what you want.
12:14:11 <maerwald> sadly, Haskell is much more prominent in fintech
12:14:22 <zincy> Something Something Cardano
12:14:25 <dminuoso> I could probably switch a job in a pinch if I dont give a damn about what language or environment I'd work in.
12:14:50 <zincy> dminuoso: Yes finding a good job is really hard
12:14:52 <dminuoso> Got a couple outstanding offers that Im simply not interested in for one reason or another.
12:14:57 <maerwald> zincy: well, Cardano at least has extremly high engineering standards
12:15:02 <zincy> If you want to choose the language / culture/ good colleagues
12:15:17 <maerwald> I much rather have quality than time pressure
12:15:23 <unit73e> usually you don't get perfect everything
12:15:23 <zincy> But do they?
12:15:29 <maerwald> zincy: yes
12:15:56 <zincy> Ok Ill take your word for it
12:16:05 × coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
12:16:21 <zincy> Have you read Stephen Diehl's blog
12:16:23 <unit73e> in my anedoctal experience if you prioritize language in your job you end up having zellot nerds as colleagues
12:16:35 <zincy> hahaha ^
12:16:36 <maerwald> zincy: pff... I sold my sould to the devil long ago
12:17:01 <dminuoso> unit73e: Or more likely, you wont find a job that is close by nearby or has the payment you want.
12:17:11 <dminuoso> Or the flexibility you need.
12:17:31 <unit73e> that's true as well
12:17:45 <dminuoso> I wouldn't want a full presence vacation, for instance. Right now I work 5 days a week from home with a fully flexible time schedule.
12:17:49 <zincy> Yeah, hence why I am looking at typescript jobs - bigger pool
12:17:50 <dminuoso> To me this is very valuable.
12:17:53 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
12:18:09 <maerwald> zincy: I know a haskeller who switched to typescript and never looked back
12:18:12 <maerwald> a good haskeller
12:18:33 <unit73e> I have mostly worked with Java. It's not a great language but at least you have a lot of offer.
12:18:36 <zincy> Tons of jobs in Typescript and you can use some of your knowledge from Haskell. :)
12:18:40 <maerwald> yes
12:18:43 <maerwald> it's a good choice
12:18:59 <maerwald> and it's quite pragmatic
12:19:10 <maerwald> you won't be staring at Generics code for 3 hours
12:19:26 <maerwald> until you realize you have no idea what's going on
12:19:51 <unit73e> clients love typescript programmers because you actually see the results. I work mostly backend so the client is never impressed.
12:20:14 <unit73e> except when I spit some 5min frontend code, then the client is impressed :\
12:20:23 <janus> unit73e: so clients are super impressed by purescript?
12:20:28 <dminuoso> unit73e: So we offload some our tasks to another shop, they do mostly just invisible backend stuff. Im generally impressed with their results.
12:20:40 <maerwald> unit73e: managers kinda understand frontend development these days. But they don't understand that you can't apply the same mindset/workflow/practices to backend.
12:20:40 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
12:20:51 <dminuoso> But then again, their work is submitted as a PR that I approve... :)
12:20:57 <unit73e> janus, if the end result is pretty yes lol
12:21:38 <maerwald> deploy often, iterate quickly: yes, for frontend. For backend, I'll go with the opposite: deploy only if you absolutely must, iterate slowly, wait before you understand the data.
12:22:35 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
12:23:37 <maerwald> but hey, frontend is more stress
12:23:48 <maerwald> talking to actual users etc.? Oh god.
12:24:17 <maerwald> "do you like this?"
12:24:24 <maerwald> "can we make the button green?"
12:25:09 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 265 seconds)
12:25:11 <maerwald> or make it perpendicular
12:25:45 <zincy> The good thing about backend is your project manager probably doesn't have an opinion on cache invalidation
12:26:23 <maerwald> having a project manager being tech-savy is usually worse... you'll have to explain every single decision and everything becomes an argument
12:27:14 <zincy> That sounds awful
12:28:02 <maerwald> there are only two options: 1. a team with natural synergy or 2. a team with clear hierarchy
12:28:32 <maerwald> and 3. open source anarchy
12:28:32 <dminuoso> maerwald: tech savvy managing can work perfectly as long as they understand that they are no longer in the process of making technical decisions.
12:29:06 <maerwald> dminuoso: right
12:29:29 <maerwald> that's the same with parenting
12:29:33 trainlag1602 joins (~saroa@user/trainlag1602)
12:29:51 <dminuoso> In what way?
12:29:52 slowButPresent joins (~slowButPr@user/slowbutpresent)
12:29:54 <maerwald> tends to work with a delay of 2 decades
12:29:58 × alzgh quits (~alzgh@user/alzgh) (Ping timeout: 256 seconds)
12:30:30 <dminuoso> Oh yes, as a parent you make pedagogical decisions, irrespective of having a childhood experience your own.
12:30:38 <dminuoso> Well some do.
12:30:50 mei6 joins (~mei@user/mei)
12:30:54 <maerwald> tech is about emotions
12:31:05 <dminuoso> My current emotion is extremely negative.
12:31:09 <maerwald> although we pretend we're all scientist nerds
12:31:10 × mei quits (~mei@user/mei) (Ping timeout: 260 seconds)
12:31:11 mei6 is now known as mei
12:31:14 <dminuoso> Something-something-django-something-something
12:31:25 <zincy> Pythonic!
12:31:52 <maerwald> dminuoso: I actually picked python over haskell for a microservice :D
12:31:56 <zincy> Duplication is better than abstraction
12:32:46 <maerwald> like, the input data was absolute trash... I needed something that's good with xml and that I can code up in 4 hours
12:32:47 × neo3 quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 264 seconds)
12:32:48 <maerwald> -> python
12:33:13 <maerwald> no point in desinging anything when the input is trash
12:34:20 <maerwald> Also, I think django swallows every 200 requests or so
12:34:37 <maerwald> sometimes a request just fails and the next one works
12:34:51 <maerwald> close enough, lets ship
12:34:57 <dminuoso> maerwald: Ive not been impressed with the django ecosystem. The websockets stuff is horrendously bad.
12:35:17 <zincy> Concurrency in python is so odd
12:35:25 <maerwald> I found it lovely... my test suited ended up 5 times as big as the actual implementatiooon
12:35:30 <dminuoso> Perhaps
12:35:56 <maerwald> but if it's low-maintenance, I don't see a point for Haskell
12:36:02 <maerwald> where I OCD over details
12:36:15 <dminuoso> maerwald: Right now Ive been spending 2 hours on some "oh there's an N+1 query. add prefetch_related..." and that worsened the N+1 by 2 orders of magnitude.
12:36:26 <dminuoso> So yeah..
12:36:31 <dminuoso> This is very high maintenance. :P
12:36:38 <dminuoso> But then again, the entire project is of non-trivial size
12:37:02 <maerwald> another good reason to pick python over haskell: selenium
12:37:24 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:37:27 <dminuoso> maerwald: honestly you can also simply do a mixing of both.
12:37:48 <dminuoso> But for web development things are not particularly pretty in haskell yeah
12:37:56 <dminuoso> Yesod hasnt convinced me, and there's nothing else
12:38:03 <maerwald> 1. relying on undermaintained haskell bindings, why? 2. why would I need strong types for a procedural/imperative test configuration
12:38:11 <dminuoso> For APIs you can get away with some basic libraries just fine
12:38:37 <zincy> dimunoso: Why are web programs in Haskell not pretty?
12:38:37 <maerwald> I have the same opinion about propellor... there even is a Debian type
12:38:50 <maerwald> and I never figured out why I need types for that sort of configuration
12:38:54 <maerwald> it never prevented real bugs
12:39:39 <maerwald> if then else combined with ++ can give you real bugs :)
12:40:06 <zincy> Haskell is great for web dev because most of it is concurency and de/serialisation
12:40:16 <zincy> But it isnt "pretty" haskell
12:40:35 <zincy> In the same way a compiler for lambda calculus is pretty
12:41:05 lavaman joins (~lavaman@98.38.249.169)
12:41:37 <maerwald> > if False then [1] else [2] ++ [4]
12:41:39 <lambdabot> [2,4]
12:41:45 <maerwald> now imagine the ++ is on the next line
12:41:51 <maerwald> carefully aligned
12:41:52 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
12:41:54 <maerwald> will you realise it?
12:42:33 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
12:42:54 <dminuoso> 14:38:37 zincy | dimunoso: Why are web programs in Haskell not pretty?
12:43:06 <dminuoso> There's only yesod, and that's all very opinionated.
12:43:14 peterhil joins (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi)
12:43:25 <dminuoso> If you dont like shakespear, I dont know whether there are any reasonable alternatives
12:43:27 <maerwald> this is where a linter would actually help... not these nonsensical hlint rules, but here telling me "do you understand the precedence here? Do you really mean that?"
12:43:37 <zincy> dminuoso: Servant?
12:43:54 <dminuoso> servant is okayish for APIs
12:43:58 alzgh joins (~alzgh@user/alzgh)
12:44:05 <dminuoso> But it doesnt have much else for web development
12:44:15 <zincy> Yeah barebones
12:44:25 <dminuoso> And in fact if you treat HTTP seriously, servant is very cumbersome because its very poor on the semantic side
12:44:28 <dminuoso> like cache control
12:44:29 <zincy> So you mean Haskell lacks a killer web framework
12:44:46 <dminuoso> I dont think a "killer <anything> framework" really exists in any language
12:44:48 <zincy> As in Elixir has Phoenix (which seems very good)
12:45:05 <dminuoso> I actually wrote some elixir stuff in phoenix, incidentally that was my gateway drug to Haskell
12:45:30 <dminuoso> At the end I got so annoyed by the lack of any static analysis (dialyzr has awful gibberish output)...
12:45:37 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
12:45:50 <zincy> Yeah
12:46:01 <dminuoso> Combined with very magical things like |> being implemented as a macro, which means it "magically" doesnt work in all the places you'd expect it to, and generate awful diagnostics when it doesnt...
12:46:13 <dminuoso> To me it caused a lot of frustrationg
12:46:18 <dminuoso> But I can see how people might enjoy elixir
12:46:27 <dminuoso> It just wasn't the right fit for me
12:46:42 <zincy> Yeah the dynamic typing is annoying
12:46:47 <vaibhavsagar[m]> what do you mean about servant being poor on the semantic side?
12:46:52 <zincy> But seems like they have a ton of well maintained libaries for web
12:46:55 <dminuoso> zincy: also, much of phoenix - in particular ecto - is just tons of tons of macros piled ontop of each other.
12:46:57 <vaibhavsagar[m]> it's a DSL for APIs
12:47:01 trainlag1602 parts (~saroa@user/trainlag1602) ()
12:47:05 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:47:06 <dminuoso> zincy: which generally makes for a horrible user experience
12:47:21 <dminuoso> vaibhavsagar[m]: HTTP is a deeply semantic protocol.
12:47:37 <maerwald> vaibhavsagar[m]: it's also an actual server
12:47:49 <maerwald> and uses wai under the hood
12:47:59 <vaibhavsagar[m]> yes, I know that
12:48:01 <jumper149> vaibhavsagar[m]: Some parts of the HTTP protocol don't translate nicely to a servant API. For example returning a different status like 400, can't be represented in the API.
12:48:01 <zincy> dminuoso: I was wondering about when is the right time to create a DSL, seems like coders like to implement them a lot just because they are fun)
12:48:04 <dminuoso> vaibhavsagar[m]: So say if you have a servant client, and the server sets a cache control header, do you imagine the servant client will respect that? :-)
12:48:07 trainlag1602 joins (~saroa@user/trainlag1602)
12:48:08 <maerwald> so it's NOT just a DSL
12:48:18 <jumper149> Not trivially at least.
12:48:46 <dminuoso> vaibhavsagar[m]: Mind you, I use servant heavily in some of our projects. I like what its good at, but I can definitely see its problems.
12:49:14 <vaibhavsagar[m]> sure, I'm not trying to defend Servant, I haven't used it at all in a while
12:49:17 <zincy> dminuoso: What is your favourite alternative to servant?
12:49:21 <vaibhavsagar[m]> but I was curious about what you meant
12:49:31 <dminuoso> zincy: the swagger ecosystem is mostly similar
12:49:51 <dminuoso> And you get more guaranteed interop from it
12:50:06 <zincy> Sorry similar to ... ?
12:50:08 <dminuoso> Since swagger generators/tools are available for a plethora of langauges
12:50:12 <dminuoso> zincy: to servant.
12:50:17 <maerwald> jumper149: but there's UVerb now
12:50:23 <zincy> Oh yeah
12:50:28 <dminuoso> You can think of servant as simply being code generics
12:50:37 <dminuoso> It just generates some boilerplate code around some API
12:50:56 <maerwald> jumper149: https://github.com/haskell-servant/servant/pull/1314
12:51:19 <dminuoso> vaibhavsagar[m]: I think HTTP being a semantic protocol is part in why I dislike it being used for APIs so much
12:51:28 <dminuoso> It's a wild abuse for the purpose of re-using tooling and authentication
12:51:33 <maerwald> https://github.com/haskell-servant/servant/blob/master/doc/cookbook/uverb/UVerb.lhs
12:51:46 bartavelle joins (~bartavell@2001:41d0:1:744c::1)
12:51:58 <vaibhavsagar[m]> yeah, that's fair
12:52:06 <vaibhavsagar[m]> I've used servant a bit at previous jobs
12:52:23 <vaibhavsagar[m]> it seemed like it choked when I wanted a JSON body in a non-200 response
12:52:42 <vaibhavsagar[m]> which AFAICT is definitely possible according to HTTP semantics
12:53:04 <vaibhavsagar[m]> but you had to contort servant into a pretzel to get it to do that
12:53:16 <jumper149> maerwald: Nice, that's pretty cool!
12:53:54 <zincy> I remember auth headers being a pain in Servant
12:54:06 <zincy> When trying to generate swagger docs
12:54:18 bartavelle parts (~bartavell@2001:41d0:1:744c::1) ()
12:54:34 reumeth joins (~reumeth@user/reumeth)
12:55:05 <zincy> Are there any good articles about the design space of building a web framework?
12:55:13 <zincy> As in what tradeoffs are at play
12:55:48 × jgeerds quits (~jgeerds@55d40de2.access.ecotel.net) (Ping timeout: 258 seconds)
12:56:12 <maerwald> yes
12:57:12 <maerwald> https://haskell-servant.github.io/posts/2018-07-12-servant-dsl-typelevel.html
12:57:32 <maerwald> the alternative would have been TH
12:57:46 <maerwald> the motivation was to *generate* clients
12:58:02 <maerwald> something many people forget when they pick servant, thinking it's the only choice
12:58:30 <maerwald> if you don't generate clients or do other stuff like auto-generating swagger from the types
12:58:34 <maerwald> what's the point even
12:59:03 <maerwald> I think for internal API, this matters very little
12:59:16 <maerwald> the types are an interface for tools
12:59:55 × acidjnk_new quits (~acidjnk@p200300d0c703cb93c8c758eae23fe552.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:00:40 python476 joins (~user@88.160.31.174)
13:01:24 × hendursaga quits (~weechat@user/hendursaga) (Remote host closed the connection)
13:01:44 coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
13:02:36 hendursaga joins (~weechat@user/hendursaga)
13:02:47 <adamCS> Anyone using emacs with hls and the autocomplete suggestion list thing gets very (very) slow? Is there a way to turn it off or somehow shorten the list of suggestions (if that's the issue)?
13:03:41 python476 is now known as agumonkey
13:07:07 shriekingnoise joins (~shrieking@186.137.144.80)
13:08:03 <Profpatsch> I’m in the camp of generating source from swagger/openapi definitions in a typed language, and using that in your client code.
13:08:23 <jumper149> maerwald: I just looked at UVerb. One could argue that is glued on top of servant and isn't nicely integrated (yet?). Also I'm not saying that servant can't be extended to someday represent all of the HTTP protocol nicely on the type level.
13:10:21 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
13:10:31 <zincy> maerwald: I found the generation to be a bit lacking for reasonml at least.
13:11:57 burakcank joins (burakcank@has.arrived.and.is.ready-to.party)
13:13:21 jespada joins (~jespada@2803:9800:9842:7a62:c904:aff:1e1a:fc0a)
13:14:46 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 252 seconds)
13:16:00 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:16:36 lavaman joins (~lavaman@98.38.249.169)
13:17:43 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
13:21:11 <Franciman> is there any material about using LinearTypes extension?
13:24:16 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
13:24:49 delipickle joins (~delipickl@097-086-022-157.res.spectrum.com)
13:25:22 <xerox> this is a start I guess https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0111-linear-types.rst
13:25:55 <Franciman> I want to understand if lineartypes can allow me to stop using the garbage collector
13:25:57 <Franciman> thanks xerox
13:26:53 <adamCS> Another Pipes question: is there a way to do "joinProducer :: m (Producer a m ()) -> Producer a m ()"?
13:27:43 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
13:27:55 lavaman joins (~lavaman@98.38.249.169)
13:27:56 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
13:28:34 __monty__ joins (~toonn@user/toonn)
13:28:35 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 264 seconds)
13:29:39 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
13:29:39 × lavaman quits (~lavaman@98.38.249.169) (Read error: Connection reset by peer)
13:30:01 lavaman joins (~lavaman@98.38.249.169)
13:30:32 <vaibhavsagar[m]> Franciman: they can't, AFAICT linear types haven't been integrated with the garbage collector at all
13:30:48 hughjfchen joins (~hughjfche@vmi556545.contaboserver.net)
13:30:52 <Franciman> thanks vaibhavsagar[m]
13:31:00 <Franciman> this makes me relieved
13:31:22 <Franciman> I was afraid there was something cool I could not achieve
13:31:26 <Franciman> but now I know I just need to wait
13:32:32 max22- joins (~maxime@2a01cb0883359800a17b4351977e7c2e.ipv6.abo.wanadoo.fr)
13:35:47 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 264 seconds)
13:36:47 <vaibhavsagar[m]> AFAIK the current status is "look at this cool thing we can make the type system do" instead of "here's how you can actually use this to manage resources"
13:37:14 × peterhil quits (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi) (Ping timeout: 260 seconds)
13:37:18 <Franciman> getting the same vibe, tbf
13:37:58 × fusion86 quits (~fusion@2a02-a44c-e6e5-1-309e-d6f5-67ba-dda3.fixed6.kpn.net) (Quit: Leaving)
13:38:12 CiaoSen joins (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
13:38:53 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
13:42:43 Inst_ joins (~Inst@2601:6c4:4080:3f80:e9cf:d82f:5daa:fcc1)
13:44:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
13:47:11 × Inst quits (~Inst@2601:6c4:4080:3f80:709e:32b8:8140:3ed0) (Ping timeout: 264 seconds)
13:47:42 <maerwald> are you saying it's all marketing for a company? :p
13:48:20 <Franciman> V lang made us learn a lot of things
13:48:56 Sgeo joins (~Sgeo@user/sgeo)
13:49:20 <vaibhavsagar[m]> society if V lang actually delivered even 50% of what it promised
13:49:35 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Ping timeout: 264 seconds)
13:50:03 <Hecate> vaibhavsagar[m]: hahahahaha
13:50:07 <Hecate> clearly
13:50:14 <Franciman> ahahahahah
13:50:47 <Hecate> https://joannakarpowicz.pl/ I love the Anubis
13:51:55 <vaibhavsagar[m]> does anyone else remember how they sold it as "fully statically linked" and when it was revealed they had a dependency on glibc the project owner said "well i meant statically linked except for system libraries"
13:52:12 <vaibhavsagar[m]> yeah, nice work, that's totally what those words mean
13:52:46 <vaibhavsagar[m]> i would be less annoyed if they hadn't called it V lang, since I go by V in most places
13:52:54 <maerwald> vaibhavsagar[m]: he meant you can go through hoops and link with musl. Clearly
13:52:56 <merijn> I don't blame him, who the fuck wants to fight with linking glibc statically :p
13:53:47 <gehmehgeh> V lang?
13:53:49 <maerwald> technically not a lie
13:53:56 <vaibhavsagar[m]> > compiles to native binaries without any dependencies
13:53:56 <vaibhavsagar[m]> https://vlang.io/
13:53:58 <lambdabot> error:
13:53:58 <lambdabot> Variable not in scope:
13:53:58 <lambdabot> compiles
13:54:01 <vaibhavsagar[m]> nonsense
13:54:37 <merijn> Just blame your decision to support OpenBSD if you need an excuse to not link libc dynamically >.>
13:54:58 <Franciman> oh i love the new v webpage
13:55:11 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
13:55:45 peterhil joins (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi)
13:55:49 <merijn> I mean, if your website looks that sleek, you're spending to much time on the marketing and not enough on the implementation ;)
13:56:02 <vaibhavsagar[m]> > This tool already supports C and will soon support the latest standard of notoriously complex C++. It does full automatic conversion to human readable code.
13:56:16 <merijn> lol
13:56:21 <vaibhavsagar[m]> this is literally impossible
13:56:27 <maerwald> looks like it was meant as competition to C++
13:56:31 <merijn> Tell me you don't know C++, without telling me you don't know C++
13:56:39 <vaibhavsagar[m]> I guess on a long enough timescale everything is "soon"
13:57:15 <vaibhavsagar[m]> or maybe what they mean by "human readable code" is assembly, which is technically human readable I guess
13:57:18 <Franciman> so now I want to add a -XVmode extension to haskell
13:57:24 <Franciman> with all the features coming SOON
13:57:38 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
13:58:11 <vaibhavsagar[m]> Nim, Zig, and Rust are all players in that space
13:58:18 <vaibhavsagar[m]> and none of the devs involved there make grandiose promises they can't keep
13:58:26 <maerwald> I like Jai language better (from Jonathan Blow), which is ONLY marketing. None of the code is published xD
13:58:39 <vaibhavsagar[m]> call it -XLinearDependentTypes
13:58:50 <maerwald> Supposedly, he's been working on Jai since 2014
13:58:59 <maerwald> held several talks about it over the years
13:59:03 <maerwald> but there's no *CODE*
13:59:23 <lortabac> ahah roc is a good competitor too, zero published code, plenty of conferences with amazing benchmarks
13:59:41 <merijn> I mean, Jonathan Blow isn't an engineer, he's an "artiste", why would you expect a serious general language from him?
13:59:44 <vaibhavsagar[m]> hah fair, Roc is pretty new though
14:00:21 <lortabac> I'm always amazed by the marketing skills of these people
14:00:21 Guest22 joins (~Guest22@wificampus-098210.grenet.fr)
14:00:59 <merijn> lortabac: Well, they have time, 'cause not programming :p
14:01:38 <lortabac> in the case of Roc it seems the product is for real, we'll see in a couple of years
14:02:01 <vaibhavsagar[m]> all you have to do is convince one foolish CS grad student that your ideas contain at least one PhD
14:02:11 <vaibhavsagar[m]> and they'll do the implementation for you
14:02:11 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
14:02:17 bontaq` joins (~user@ool-45779fe5.dyn.optonline.net)
14:02:17 <merijn> I mean, anyone doing a phd is foolish by definition...
14:02:29 <Franciman> phoolish doctor
14:02:33 <vaibhavsagar[m]> good point
14:02:37 <Guest22> if I have a parser p in Parsec/Megaparsec, is there a helper function to simply do something like `Text -> Parser a -> Bool` telling me if the parser matches the given string? without having the pull the full runParser?
14:03:10 <Franciman> Guest22: I think you want isRight . runParser ?
14:03:12 <Guest22> parseTest looks like a good fit but that still involves exceptions
14:03:21 × chele quits (~chele@user/chele) (Remote host closed the connection)
14:03:54 <Guest22> but if I get a Left I will still have an exception to handle
14:04:10 <merijn> how so?
14:04:19 <merijn> :t either (const False) (const True)
14:04:20 <lambdabot> Either b1 b2 -> Bool
14:04:22 <merijn> Solved
14:04:37 <Franciman> :t runParser
14:04:39 <lambdabot> error: Variable not in scope: runParser
14:04:40 <Franciman> sad
14:04:56 <vaibhavsagar[m]> isRight . runParser "-"
14:05:50 <vaibhavsagar[m]> since runParser takes the name of the source file as its first argument
14:06:25 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
14:06:50 × ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 260 seconds)
14:07:17 <Guest22> :t isRight
14:07:19 <lambdabot> Either a b -> Bool
14:07:32 <Guest22> oh oh nevermind! thanks
14:07:33 <vaibhavsagar[m]> oh actually \parser string -> isRight $ runParser parse "-" string
14:07:35 × peterhil quits (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi) (Ping timeout: 264 seconds)
14:08:37 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:08:37 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:08:37 wroathe joins (~wroathe@user/wroathe)
14:09:01 stiell joins (~stiell@gateway/tor-sasl/stiell)
14:10:31 <merijn> hah, I think I just Fairbairned isRight. I'm proud of myself :p
14:11:02 × Guest22 quits (~Guest22@wificampus-098210.grenet.fr) (Quit: Client closed)
14:13:44 <Franciman> you what
14:15:11 <merijn> Franciman: "The Fairbairn threshold is the point at which the effort of looking up or keeping track of the definition is outweighed by the effort of rederiving it or inlining it."
14:15:21 <maerwald> merijn: I use `either` and `maybe` much more than fromMaybe etc
14:15:48 <Franciman> lolz
14:15:49 <Franciman> takk
14:16:16 <merijn> maerwald: I use fromMaybe sometimes still, when I don't directly do anything with the result, but probably at least 50/50 for Maybe
14:16:30 <maerwald> maybe foo id
14:16:32 <merijn> I don't use the fromLeft/fromRight...ever, I think?
14:16:39 bontaq` is now known as bontaq
14:17:10 <maerwald> because here the naming is crystal clear
14:17:16 <maerwald> `fromMaybe` already confuses me
14:18:14 <maerwald> > :t listToMaybe
14:18:15 × xsperry quits (~xs@user/xsperry) (Ping timeout: 265 seconds)
14:18:16 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
14:18:20 <maerwald> :t listToMaybe
14:18:21 <lambdabot> [a] -> Maybe a
14:18:22 <maerwald> even worse
14:18:43 <Franciman> natural transformation, i reckon
14:18:45 xsperry joins (~xs@user/xsperry)
14:18:46 <merijn> Entirely unrelatedly
14:18:54 <merijn> Is it two's complement or twos' complement?
14:19:06 <Franciman> first
14:19:40 <merijn> Franciman: That's my instinct to, but the internet also says my instinct for one's complement is wrong and that it is ones' complement
14:20:28 <Franciman> we say
14:20:35 <Franciman> complemento a due
14:20:38 <Franciman> ah
14:20:54 <Franciman> i just recongized the the plural of due is due
14:21:02 <Franciman> so no clu anymore :O
14:24:02 dyeplexer joins (~dyeplexer@user/dyeplexer)
14:24:53 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
14:26:06 × ubert quits (~Thunderbi@178.165.203.151.wireless.dyn.drei.com) (Remote host closed the connection)
14:26:06 ub is now known as ubert
14:26:40 × trainlag1602 quits (~saroa@user/trainlag1602) (Ping timeout: 260 seconds)
14:29:00 zebrag joins (~chris@user/zebrag)
14:35:17 <janus> % :m +Data.Time.Clock Data.Time.Calendar Data.Time
14:35:18 <yahb> janus:
14:35:27 trainlag1602 joins (~saroa@user/trainlag1602)
14:35:28 <janus> % toEnum minBound :: Day
14:35:28 <yahb> janus: -25252734927764696-04-22
14:35:57 <janus> why was it chosen to provide an Enum instance for Day when it can construct invalid values?
14:36:19 jstolarek joins (~jstolarek@137.220.120.162)
14:37:24 <kritzefitz> Why would that day be invalid?
14:39:14 <janus> ooh maybe it isn't. i had assumed that because zero is 1858-11-17. hadn't considered the concept of negative julian dates, this date seems a weird choice if negative values are also allowed. it could just have been 0000-00-00
14:41:15 <janus> or Jan 1st :P oh well
14:41:25 <janus> ok, good to know it can be negative. thanks!
14:46:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
14:47:15 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
14:48:44 segfaultfizzbuzz joins (~segfaultf@135-180-0-138.static.sonic.net)
14:48:48 peterhil joins (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi)
14:49:40 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
14:49:56 lavaman joins (~lavaman@98.38.249.169)
14:50:04 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
14:50:30 × trainlag1602 quits (~saroa@user/trainlag1602) (Ping timeout: 260 seconds)
14:50:47 × ubert quits (~Thunderbi@178.165.203.151.wireless.dyn.drei.com) (Remote host closed the connection)
14:51:34 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 252 seconds)
14:52:39 <davean> janus: no theres good reason its that date
14:53:22 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
15:00:46 × pooryorick quits (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 258 seconds)
15:07:33 × peterhil quits (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi) (Ping timeout: 265 seconds)
15:08:37 × mud quits (~mud@user/kadoban) (Quit: quit)
15:10:51 trainlag1602 joins (~saroa@user/trainlag1602)
15:12:49 mud joins (~mud@user/kadoban)
15:14:16 × trainlag1602 quits (~saroa@user/trainlag1602) (Remote host closed the connection)
15:20:34 lavaman joins (~lavaman@98.38.249.169)
15:21:57 delipickle_ joins (~delipickl@gateway/vpn/pia/delipickle)
15:22:45 × delipickle_ quits (~delipickl@gateway/vpn/pia/delipickle) (Client Quit)
15:24:34 × delipickle quits (~delipickl@097-086-022-157.res.spectrum.com) (Ping timeout: 260 seconds)
15:25:35 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
15:25:42 × NotIndonesian quits (znc@Indonesians.are.sick.bnc.HUNTERS.thats.bad.mn) (Remote host closed the connection)
15:29:13 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
15:29:38 zmt00 joins (~zmt00@user/zmt00)
15:32:58 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
15:33:35 stiell joins (~stiell@gateway/tor-sasl/stiell)
15:34:23 <maerwald> https://github.com/composewell/streamly/blob/master/docs/streamly-vs-async.md
15:34:29 <maerwald> hmm, I never tried to use streamly for async
15:34:52 <maerwald> apparently it's equipped for that
15:34:52 Guest81 joins (~Guest81@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
15:35:13 <shapr> davean: what is that good reason?
15:35:23 <Guest81> what is an idiomatic way to write a one-to-one map using only base?
15:35:25 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
15:36:08 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
15:36:18 <Guest81> a function (or whatever really) that can be ran on its inputs as well as its outputs
15:36:51 <Rembane_> Guest81: Data.Map twice, and swap keys and values for the second one
15:36:57 <Guest81> like an f and f^-1, somehow running my case/of in reverse ... I hope I'm making sense
15:37:58 <merijn> Guest81: Sounds like you mean an isomorphism?
15:38:08 Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
15:38:39 <merijn> Guest81: And isomorphism is a pair of functions 'f' and 'g where "f(g(x)) = x" and "g(f(x)) = x" for all 'x'
15:38:40 <Guest81> yes! an isomorphism, objective function you name it. But I really don't want to add unecessary dependencies to my little project
15:38:56 <Guest81> bijective*
15:39:32 <merijn> I mean, you can just do "newtype Isomorphism a b = Isomorphism (a -> b, b -> a)"?
15:40:31 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 252 seconds)
15:40:36 <Guest81> I totally agree .. except it's overkill for me if I'm only using it for one function
15:41:03 <merijn> What's overkill?
15:41:11 <Guest81> how would swap keys and values on a Data.Map though? https://hackage.haskell.org/package/containers-0.6.5.1/docs/Data-Map.html
15:41:25 <merijn> You don't, and also, that's not in base :p
15:42:07 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:70bb:31e2:9b65:43) (Quit: WeeChat 2.8)
15:42:25 <Guest81> oh so I must've misunderstood what Rembane_ said
15:42:36 son0p joins (~ff@181.136.122.143)
15:43:08 <merijn> I mean, you can write a bunch of code that converts the Map to a list of tuples, swap the tuples and build a new map
15:46:55 <davean> shapr: thats 2400000 days from the Julian Day
15:47:02 <davean> er
15:47:07 <davean> shapr: thats 2400000.5 days from the Julian Day
15:47:36 <davean> It aligns it with the standard UTC day edge, and rescales it to the standard day magnitude
15:50:11 <geekosaur> janus, I'd also point out that the year starting on 1 Jan is actually fairly recent. like England used 25 Mar for a long time, and other places used other dates
15:50:25 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
15:50:46 <davean> geekosaur: well the Julian Day is actually Jan 1st
15:50:57 <merijn> And in some places it still doesn't start on 1 January :p
15:51:12 <geekosaur> the calendar came from rome, I'd not be surprised if 1 Jan did too
15:51:13 <merijn> Hell, it doesn't even start on the same gregorian date every year in some places
15:51:16 <davean> So the Julian calendar *is* Jan 1st aligned
15:51:31 <davean> and we're talking Julian days here
15:51:34 <Rembane_> Guest81: It's my fault, I hoped that Data.Map was in base, but it itsn't. :)
15:51:57 peterhil joins (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi)
15:52:57 <janus> % addUTCTime (-1) (UTCTime (toEnum minBound) 0)
15:52:57 <yahb> janus: -25252734927764696-04-21 23:59:59 UTC
15:53:55 <janus> i wonder if that is also valid given that it contains a day that can't be constructed from an enum.. hmm
15:54:22 <merijn> I mean the best solution is to just forget Enum exists >.>
15:54:29 <merijn> It's a deeply problematic and bad class >.>
15:54:44 <merijn> Just, like, never assume that toEnum does anything remotely sensible
15:54:52 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Remote host closed the connection)
15:54:53 <janus> but what is the better way to construct Day then?
15:55:08 <davean> Day?
15:55:25 <merijn> For what purpose?
15:55:44 <davean> pattern YearDay :: Year -> DayOfYear -> Day
15:56:03 <merijn> There's a number of function for constructing Days, yeah
15:56:27 <janus> how is YearDay used? not too familiar with patterns
15:56:47 <merijn> janus: Pattern synonyms are basically "fake" constructors
15:56:54 econo joins (uid147250@user/econo)
15:56:56 <janus> % :t YearDay
15:56:57 <yahb> janus: ; <interactive>:1:1: error: Data constructor not in scope: YearDay
15:57:01 <merijn> Allowing you to expose custom patterns you can match on
15:57:10 <merijn> janus: So you use it like a constructor
15:57:32 <merijn> "foo (YearDay year day) = .." "foo :: Day -> ..."
15:57:45 <merijn> Of "YearDay 2021 156"
15:58:09 <janus> but then that's deconstructing? why can't yahb see it?
15:58:52 <janus> davean: seems to me like the Day constructor isn't exposed. if that is what you suggested when you said "Day?"
15:59:07 <davean> janus: it is exposed via the pattern I offered
15:59:18 <davean> yahb is dumb?
16:00:22 <janus> ok, let's assume i have a local ghci session (much smarter than yahb, right? ;). how do i make a Day using YearDay?
16:00:51 lavaman joins (~lavaman@98.38.249.169)
16:01:33 <merijn> "YearDay 2021 156" done
16:02:13 <merijn> % import Data.Time.Calendar.OrdinalDate
16:02:13 <yahb> merijn:
16:02:20 <merijn> % YearDay 2021 156
16:02:20 <yahb> merijn: ; <interactive>:74:1: error: Data constructor not in scope: YearDay :: t0 -> t1 -> t
16:02:30 <merijn> Ah, I guess it doesn't work for constructing
16:02:33 pavonia joins (~user@user/siracusa)
16:02:49 <merijn> I mean, there's also just:
16:03:00 <merijn> % fromOrdinalDate 2021 156
16:03:00 <yahb> merijn: 2021-06-05
16:03:17 <janus> but it says "bidirectional abstract consturctor". so i thought bidirectionality means construction/destruction
16:03:32 <merijn> janus: I mean, yahb might just have an old version of time
16:03:58 lbseale joins (~lbseale@user/ep1ctetus)
16:04:18 <Hecate> hi lbseale :)
16:04:24 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 258 seconds)
16:05:15 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
16:06:38 <merijn> Once I become a millionair I'll just pay someone to document my code so I don't have to do it myself >.>
16:06:47 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
16:07:01 hyiltiz joins (~quassel@31.220.5.250)
16:07:13 <janus> ooh ok. this works: cabal repl -b time==1.11; :m +Data.Time.Calendar.OrdinalDate; :t case undefined of YearDay a b -> a
16:07:49 <lbseale> Hecate: salut
16:07:50 <janus> and 1.11 is from October 2020, so pretty new
16:08:18 <janus> i had somehow assumed that the feature would be available with the stock time on GHC 9, but that is not the case
16:08:36 <davean> ... a year old is new?
16:08:44 <merijn> davean: I mean, sure
16:09:12 <janus> if we call GHC 9 new, we must also call time 1.11 new ;)
16:09:15 <davean> But yes, YearDay is bidirectional
16:09:21 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
16:09:21 <davean> I wouldn't call GHC 9 new
16:09:25 <merijn> I would
16:09:35 <merijn> I'm not using it yet :p
16:09:38 <dolio> I'm still using 8. :þ
16:09:39 <davean> I'm working on moving to 9.2
16:10:01 <merijn> dolio: Nothing wrong with 8.10 :p
16:11:50 <davean> If you haven't updated to 9.0 at this point, I'd think you'd just skip it
16:11:56 × max22- quits (~maxime@2a01cb0883359800a17b4351977e7c2e.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
16:11:59 <merijn> davean: I probably will
16:12:11 <dolio> I have it installed. I just don't think I've used it.
16:12:17 <davean> GHC 9 wasn't a glorious release IMO
16:12:47 <merijn> I haven't installed it yet, because I haven't had time to update my personal projects yet (still need to migrate most of them away from Travis CI >.>)
16:12:52 <dolio> Skipping X.0 versions isn't such a bad idea in general. :)
16:13:16 <davean> dolio: I agree and 9.0 is quite skippable
16:13:17 <merijn> And the only "work" project I have will probably never get 9.x support, tbh
16:13:29 <merijn> Unless it happens to "Just Work (TM)" with minor bounds fiddling
16:13:57 <davean> EOL?
16:14:59 <merijn> davean: Well, assuming minimal procrastination from me tonight/this weekend, the thesis goes to the committee on Tuesday and seeing as no one's paying my, I've running a severe "fucks" deficit :p
16:15:21 <davean> so yes, EOL :-p
16:15:33 <merijn> Arguably it's been EOL since it started :p
16:16:46 <davean> There was still stuff to prove with it then
16:18:46 <lbseale> I have a ByteString that I am trying to pipe to a little shell program that takes input on stdin, and puts its output to stdout. When I call it with `createProcess`, it hangs and never finishes. How do I get it to finish?
16:18:48 <davean> merijn: what is the thesis?
16:18:51 <merijn> Actually, it's only fairly recently reached the point I can *start* proving stuff ;)
16:19:03 <merijn> davean: But in classic phd fashion, that happened after money ran out
16:19:21 wonko joins (~wjc@62.115.229.50)
16:19:21 <lbseale> I don't understand unix pipes well enough to know what is going on with it
16:19:46 <geekosaur> lbseals, do you ever close the pipe handle?
16:19:47 <merijn> davean: Ostensibly graph processing on GPUs, in practice it's more about "jesus, everyone in empirical computer science is shite at science, so let me figure out how to do that first" :p
16:19:55 <geekosaur> lbseale ^^
16:20:18 <merijn> geekosaur: 10 dollar says you're right ;)
16:20:38 <geekosaur> programs fed through pipes buffer their output so it's just waiting for more data, probably
16:20:38 <lbseale> geekosaur: I have tried that, but it seems like it never gets past the line where it's reading from stdOut
16:21:10 <lbseale> I'm not sure which ByteString function to use to read it
16:21:11 <merijn> lbseale: code?
16:21:25 × mei quits (~mei@user/mei) (Read error: Connection reset by peer)
16:21:33 <geekosaur> oh, you're trying to do open3-type stuff. you need either the writer or the reader in a thread if either the input or the output is larger than the system pipe buffer, because it'll hang otherwise
16:21:47 <geekosaur> you need to read and write at the same time to avoid deadlock
16:22:13 <lbseale> https://paste.tomsmeding.com/0Ko5iJuT
16:22:23 <lbseale> this represents every hack I tried at the end of the day yesterday
16:22:57 <lbseale> I can't remember what I did, but I also got it to do something where it ran out of memory
16:23:04 <merijn> And the shell script?
16:23:46 <merijn> I mean, if the output is huge, it might be blocked on writing output
16:23:47 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
16:23:52 <lbseale> it's this thing: https://metacpan.org/dist/JSON-PP/view/bin/json_pp
16:24:11 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
16:24:31 × reumeth quits (~reumeth@user/reumeth) (Ping timeout: 252 seconds)
16:24:44 <merijn> oh
16:24:45 <lbseale> I know that I could probably use aeson-pretty but it will be a hassle for me to get it installed and I'm curious to figure this out now
16:24:53 <merijn> You should close stdIn before reading from stdOut
16:24:59 <lbseale> aha!
16:25:04 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
16:25:07 <merijn> Fat chance the process won't produce output until it finishes reading
16:25:20 <merijn> If you're blocked reading the process blocks indefinitely for more input
16:25:37 <merijn> So, effectively, you're not close stdin :p
16:25:42 <merijn> *closing
16:25:44 <lbseale> makes sense
16:26:44 geekosaur joins (~geekosaur@xmonad/geekosaur)
16:27:37 <lbseale> heyyy that worked! Thanks merijn !
16:31:16 <lbseale> merijn: do I need to close stdOut after? Or do some other cleanup action?
16:31:35 × peterhil quits (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi) (Ping timeout: 264 seconds)
16:32:23 <Guest81> I'm not too sure how class instances work but can I override them?
16:32:33 <Guest81> something like Pretty here:
16:32:33 <geekosaur> Guest81, no
16:32:34 <Guest81> https://hackage.haskell.org/package/prettyprinter-1.7.1/docs/Prettyprinter.html
16:32:41 <merijn> Guest81: You can't
16:33:22 <Guest81> So if pretty Bool is already defined, how could I "customize" it for my formatter?
16:33:35 <Guest81> suppose I want pretty True == "true"
16:33:48 <Guest81> I may be missing something
16:35:30 <merijn> Use a newtype of write your own function to serialise it that doesn't use the Pretty instance
16:35:56 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
16:36:08 <Guest81> but how do I lift whatever I end up with into Doc ann ?
16:36:15 <merijn> Like, you don't *have* to use the Pretty instance, you can also do 'case myBool of True -> "true"; False -> "false"'
16:36:16 alzgh joins (~alzgh@user/alzgh)
16:36:57 <merijn> Doc has an OverloadedStrings instance
16:38:02 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
16:38:38 <Guest81> that works, could I also use viaShow? As that uses Strings, I think it would hurt prettyprinter as it was made to only use Text
16:39:12 <merijn> But viaShow will to the same thing as just "pretty" for Bool?
16:39:17 <merijn> > show True
16:39:20 <lambdabot> "True"
16:39:40 <Guest81> oh .. I can't override Show for Bool either, yikes!
16:40:34 <Guest81> um using OverloadedStrings only works if I write literals, is that right?
16:41:06 zer0bitz joins (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi)
16:41:07 <Guest81> I can't just convert a Text to Doc ...
16:41:29 <merijn> I mean, you can just do "pretty" on Text
16:41:40 <merijn> Which will just take it "as-is"
16:43:20 <Guest81> so I could just do `case boolean of True -> pretty "true" ...`
16:43:27 <merijn> yeah
16:43:46 <Guest81> that's enough flexibility for me :^)
16:44:29 <Guest81> I can finally scrap my crappy Show instances
16:45:25 × CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
16:45:59 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
16:47:04 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
16:48:49 geekosaur joins (~geekosaur@xmonad/geekosaur)
16:49:44 emf joins (~emf@2620:10d:c090:400::5:bb17)
16:50:45 × aa quits (~douglasco@200.146.85.128.static.gvt.net.br) (Quit: Leaving)
16:53:26 ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
16:53:46 <janus> Guest81: you can also make newtypes and then make your instances on them
16:53:59 <janus> ah right, merijn said that at 18:35
16:54:00 × mbuf quits (~Shakthi@136.185.83.238) (Quit: Leaving)
16:54:29 <Guest81> janus: oh I haven't thought of that, and I guess I didn't understand what merijn meant by it
16:54:34 <Guest81> very sneaky
16:55:10 <janus> Guest81: consider why there are Sum and Product newtypes
16:55:21 peterhil joins (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi)
16:56:53 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
16:57:11 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
17:04:22 <shapr> Does anyone have a good way to handle haddock errors for an automated hoogle rebuild?
17:06:08 jkaye joins (~jkaye@2601:281:8300:7530:8275:c2bd:871b:678c)
17:06:57 <c_wraith> another day, another wish b -> (a -> [a] -> b) -> [a] -> b was in base
17:10:56 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 245 seconds)
17:17:47 × peterhil quits (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi) (Ping timeout: 264 seconds)
17:18:58 spopooi joins (~spopooi@2804:431:cfea:8190:1e39:18d9:9d9e:69d4)
17:24:09 pfurla_ joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
17:24:37 lavaman joins (~lavaman@98.38.249.169)
17:26:45 × turlando quits (~turlando@user/turlando) (Ping timeout: 265 seconds)
17:26:55 × pfurla quits (~pfurla@216.151.180.27) (Ping timeout: 260 seconds)
17:26:57 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
17:26:57 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
17:26:57 turlando joins (~turlando@user/turlando)
17:27:13 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 252 seconds)
17:27:55 <dsal> Is there an easy way to see what all amazing things I'm missing in ghc by being on an older version?
17:28:43 <dsal> I generally dislike smaller numbers but I feel like quantifying that might be good. :)
17:29:03 × turlando quits (~turlando@user/turlando) (Read error: Connection reset by peer)
17:29:07 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
17:29:34 heath1 is now known as heath
17:30:37 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
17:30:37 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
17:30:37 turlando joins (~turlando@user/turlando)
17:31:20 <jkaye> What version are you using?
17:31:24 peterhil joins (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi)
17:33:22 <dsal> 8.4.4
17:33:37 <dsal> Some older nix snapshot
17:36:05 piele_ is now known as piele
17:37:49 <jkaye> Lots of changes from there to current, but the biggest will be in the release note highlights for 9.0.1, which you can find here: https://downloads.haskell.org/ghc/9.0.1-rc1/docs/html/users_guide/9.0.1-notes.html
17:40:03 <c_wraith> and I'd recommend not using 9.0.1. 8.10.7 is in better shape. 9.0 has a lot of bugs that we're apparently just waiting on 9.2 to get fixed
17:40:31 × coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
17:41:18 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
17:41:58 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
17:44:06 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
17:45:35 Psybur joins (~Psybur@mobile-166-170-29-82.mycingular.net)
17:46:11 <geekosaur> 9.2.1 currently has a codegen bug on ARM, but as keeps happening to it, it's raised even bigger issues
17:46:44 <geekosaur> they're currently worried that they will have to scrap and redo all the sub-word codegen
17:48:56 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
17:49:53 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Remote host closed the connection)
17:52:09 <c_wraith> ah, so that's what's holding up 9.2
17:52:44 hololeap joins (~hololeap@user/hololeap)
17:53:54 <geekosaur> sub-word support is a huge change to ghc, it's always been word-based
17:54:23 <geekosaur> but m1 native codegen needs proper sub-word support
17:54:25 <c_wraith> is this like sub-word field sizes in data?
17:54:50 <geekosaur> yeh
17:55:04 <c_wraith> uh-oh, maybe field order important!
17:55:05 <geekosaur> affects all FFI etc.
17:55:08 <c_wraith> *making
17:55:11 <hololeap> extractKnown t = case extract t of
17:56:05 <hololeap> how can I use LambdaCase here to avoid naming `t`?
17:56:30 <monochrom> Can't. Consider pattern guards or view patterns.
17:56:44 <c_wraith> you'd need to put the entire case in parens to be like (\case .....) . extract
17:56:57 <geekosaur> yeh, I was thinking becheaty with a vuiew pattern to do the extract and then you can lambdacase
17:57:05 <geekosaur> or that
17:57:52 <c_wraith> putting the whole thing in parens is the worst option available. :P
17:58:30 fusion86 joins (~fusion@2a02-a44c-e6e5-1-2ff7-7242-c0bf-93e9.fixed6.kpn.net)
17:59:51 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:59:56 <c_wraith> I used a view pattern today. It felt weird, but it's part of the standard now. I should get over it.
18:00:05 <c_wraith> err. pattern guard.
18:00:08 <c_wraith> not view pattern
18:00:21 <dsal> Every time I've used a view pattern, it didn't seem to make anything really better.
18:00:32 <c_wraith> view patterns are clearly awesome
18:00:39 <c_wraith> pattern guards are the sketchy ones
18:01:01 <dsal> I use pattern guards a lot. :)
18:01:03 <c_wraith> well... view patterns when combined with pattern synonyms
18:01:24 <dsal> Oh. Yeah, just doing them explicitly usually makes things that you could just as easily make without.
18:01:28 pooryorick joins (~pooryoric@87-119-174-173.tll.elisa.ee)
18:01:41 ec_ joins (~ec@gateway/tor-sasl/ec)
18:01:50 <fusion86> Hey all, I once again come to seek wisdom. Why some something like this not get caught by the compiler/linter? https://paste.tomsmeding.com/JDBcANE1
18:02:19 <c_wraith> pattern guards just make me sad because they have weird scoping rules.
18:03:08 <fusion86> And is there a way to enforce a function to only accept a 'RecordA' instance, and not a 'RecordB'? Because when you just take a 'Thing' you could get either of those.
18:03:08 <c_wraith> fusion86: I'd be all for forbidding record syntax with multiple constructors, but I don't think it's a thing that's ever seriously been considered
18:04:13 <fusion86> Because I used that syntax in my game project like this. Would it be better to write it in another way then? https://paste.tomsmeding.com/QfpsgAy9
18:04:15 <dsal> https://gitlab.haskell.org/ghc/ghc/-/issues/7169 left me a bit confused.
18:04:19 <c_wraith> fusion86: the underlying problem is caused by making RecordA and RecordB the same type
18:04:57 <c_wraith> fusion86: separate them into their own types, then have a sum type over that. Sure it adds an extra level of constructor, but it lets you actually express what you mean
18:05:18 <dsal> You could also just not name them.
18:05:24 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
18:05:52 hololeap joins (~hololeap@user/hololeap)
18:05:58 <c_wraith> dsal: that doesn't help with the follow-up asking how to say something should only accept a RecordA
18:06:30 <dsal> Oh, right. You limit what types things can accept by making them different types. :)
18:07:07 × Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection)
18:07:08 <dsal> The partial record thing is a bit of an annoyance.
18:08:36 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
18:08:50 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
18:08:56 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
18:09:36 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
18:09:49 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
18:10:27 Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
18:10:39 <monochrom> Do you really have functions, at the design level (so, not at the detailed coding level), that really says it doesn't want RecordB.
18:11:41 <monochrom> Because at this point I don't trust that this is not the XY problem of "the only reason I'm asking is because I want to use a field name as a function and I want it total".
18:12:20 <monochrom> which is an artifact of a flawed way of coding, not a consequence of the design.
18:13:46 <monochrom> If your have two cases and they have fundamentally disjoint field names, such as in Scene...
18:14:23 <monochrom> I can respect the field names serving a self-documentation purpose. I mean "data T = C1 Int Int Int | C2 Int Int Int Int Int Int" is very unhelpful.
18:15:05 <monochrom> But then I can't understand in what sense "field names are function names" is meaningful.
18:15:08 <fusion86> Not really I think. I was writing a renderPlayer function which takes both a 'World' and a 'Player' type. But the 'Gameplay' world has a player inside it, so I started thinking what would happen if I used the record accessor function on 'World' type which does not have a player.
18:15:22 × peterhil quits (~peterhil@mobile-access-2e846e-36.dhcp.inet.fi) (Ping timeout: 260 seconds)
18:15:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
18:15:52 <fusion86> At the bottom of this link https://medium.com/@willkurt/why-sum-types-matter-in-haskell-ba2c1ab4e372 is that the sum types you were talking about?
18:15:53 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 258 seconds)
18:16:12 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
18:16:36 <fusion86> Honestly most of my field names are there for self-documentation purposes though, is that a bad thing?
18:16:47 <hololeap> > I was thinking be cheaty with a view pattern to do the extract and then you can lambdacase -- geekosaur, can you show me an example of this?
18:17:05 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds)
18:17:25 tfeb joins (~tfb@88.98.95.237)
18:18:01 <merijn> fusion86: Sounds like you want -XNoFieldSelectors which should be in 9.2, I think?
18:18:29 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
18:18:34 <merijn> fusion86: Then you can reuse fieldnames without clashes, because it eliminates the implicit functions
18:18:59 <merijn> -XNoFieldSelectors is one of the few extensions I'm actually excited about, unlike stuff like LinearHaskell :p
18:19:45 <fusion86> And in the rare case where I would want to have such a function I just implement it myself? Or is there some magic for that too?
18:19:45 <hololeap> this actually works, although it may trigger nerd rage in some individuals: http://sprunge.us/42nMnn
18:20:12 <merijn> fusion86: You just implement it yourself, yeah
18:20:21 × Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection)
18:20:34 <dsal> hololeap: I'm not sure that introduces clarity. :)
18:20:41 <geekosaur> extractKnown (extract t -> t') = \case ... -- guess it's not actuallyt an improvement :(
18:20:56 <merijn> You could rewrite that to just use regular case of and it'd be infinitely easier
18:21:19 <monochrom> geekosaur: "this is getting out of hand. now there are two of them!"
18:21:51 <dsal> Isn't it just `extractKnown (extract -> t) = ...` ?
18:22:02 <dsal> You still have `t`, but you no longer have to call `extract` on it.
18:22:05 <geekosaur> maybe?
18:22:09 <merijn> monochrom: We should replace more educational material with memes :p
18:22:12 <monochrom> failing to eliminate t, now we have t' too, and Star Wars episode I
18:22:31 Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
18:22:47 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 240 seconds)
18:24:07 × Guest81 quits (~Guest81@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
18:24:45 <shapr> Is there a recipe for building haddock + hoogle in Jenkins (or other CI) and then emitting the results onto a server where I can run the hoogle server?
18:25:03 <agumonkey> anybody knows about naperian functors ?
18:25:33 <merijn> I'm gonna go with "yes"
18:25:51 <hololeap> also, just want to give a shout-out to the hasklig font. cool stuff :)
18:26:30 × tfeb quits (~tfb@88.98.95.237) (Quit: died)
18:26:49 <agumonkey> merijn: I've been trying to read about them but couldn't find "easy" enough material
18:27:00 <agumonkey> if you know some, feel free to slap me with it like a large truit
18:27:22 <merijn> Oh, I've never heard about them, but I just assume someone knows about those ;)
18:27:22 <dolio> They're probably another word someone invented for representable functors.
18:27:51 <c_wraith> yes, they're the same as representable functors
18:27:56 <agumonkey> yeah one blog mentioned they were derived from repr
18:28:07 <agumonkey> merijn: I found about it on a book by gibbons and hinze IIRC
18:28:18 <hololeap> @hackage naperian
18:28:18 <lambdabot> https://hackage.haskell.org/package/naperian
18:28:26 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 260 seconds)
18:28:26 <hololeap> "Efficient representable functors"
18:28:38 <agumonkey> so i'm not on a quest for repr functors
18:28:40 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
18:29:10 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
18:31:10 <agumonkey> man functors are fascinating
18:31:19 <agumonkey> i get barely nothing but I like adjoint functors
18:31:28 MQ-17J joins (~MQ-17J@2607:fb90:47:70f6:3994:460d:fb23:b675)
18:31:31 notzmv joins (~zmv@user/notzmv)
18:33:21 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
18:37:53 brainfreeze joins (~brainfree@2a03:1b20:4:f011::20d)
18:39:43 lavaman joins (~lavaman@98.38.249.169)
18:44:30 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
18:44:59 neo3 joins (~neo3@cpe-292712.ip.primehome.com)
18:45:36 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
18:46:35 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
18:50:27 <fusion86> Is it possible to use GHC 9.2 with stack? The latest stackage snapshot only goes up to 9.0.1
18:50:47 <merijn> No clue
18:50:56 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
18:51:40 timCF joins (~timCF@m91-129-111-87.cust.tele2.ee)
18:52:20 <jkaye> Looks like even nightly is on 9.0.1, so not that I am aware of
18:52:37 <geekosaur> there are ways to force stack to use 9.2 prerelease. it would then be on you to constrain versions to get a functioning "resolver"
18:52:59 <jkaye> geekosaur: how would you do something like that? Mostly just interested
18:53:14 <geekosaur> I would assume fpcomplete is waiting for a working 9.2.1 release
18:53:34 <geekosaur> since currently there are only prereleases and various of those have problems
18:55:07 <geekosaur> I'm not a stack user so I can't give details off the top of my head but there's a command line option and corresponding stack.yaml entry to specify a compiler which in this case would be 9.2.0.<date>
18:55:30 <geekosaur> I don't recall how you constrain versions to get packages that willl work with that compiler
18:57:09 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
18:57:29 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
18:58:45 aegon joins (~mike@174.127.249.180)
18:59:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
19:00:18 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:01:33 <fusion86> In case anyone is interested, I used this config to get it 'working' https://raw.githubusercontent.com/DanBurton/stack-setup-info-gen/master/output/stack-ghc-9.2.1-rc1.yaml
19:01:47 <fusion86> And with 'working' in mean that GHC works but all my dependencies are rip
19:02:05 <fusion86> But that's a problem for future me. Anyway, thanks for all the help with all my questions :)
19:03:02 ec_ joins (~ec@gateway/tor-sasl/ec)
19:04:41 × fusion86 quits (~fusion@2a02-a44c-e6e5-1-2ff7-7242-c0bf-93e9.fixed6.kpn.net) (Quit: Leaving)
19:06:09 × spopooi quits (~spopooi@2804:431:cfea:8190:1e39:18d9:9d9e:69d4) (Remote host closed the connection)
19:08:00 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
19:09:16 lavaman joins (~lavaman@98.38.249.169)
19:09:35 max22- joins (~maxime@2a01cb088335980063b7aac9e60f4864.ipv6.abo.wanadoo.fr)
19:14:31 × tomboy64 quits (~tomboy64@user/tomboy64) (Remote host closed the connection)
19:14:43 benin3 joins (~benin@183.82.207.116)
19:15:14 × Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection)
19:15:49 Null_A joins (~null_a@2601:645:8700:2290:6cb0:bf84:22bf:3285)
19:16:55 tomboy64 joins (~tomboy64@user/tomboy64)
19:17:10 × benin quits (~benin@183.82.207.116) (Ping timeout: 260 seconds)
19:17:10 benin3 is now known as benin
19:18:18 <awpr> crowdsourcing time again: with type-level naturals, it's natural (...) to do induction on them as if they were Peano numbers. does anyone know of a meaningful use for type-level _integers_? would they be the subject of some useful form of induction? if so, what form?
19:21:56 <ski> agumonkey : perhaps the "What is a Naperian container?" by Peter G. Hancock in 2005-06-19 and "The universal property of logarithms" by Neil Ghani (via Hancock) in 2005-08-02 posts, both accessible at "Container Types" (blag) <http://sneezy.cs.nott.ac.uk/containers/blog/>, could be of some interest ?
19:22:56 <ski> agumonkey : er, sorry. the link should be <https://web.archive.org/web/20161104231529/http://sneezy.cs.nott.ac.uk/containers/blog/>
19:23:43 <awpr> e.g. would there be cases where you'd want to look at the sign and count towards a base case of zero? would there be cases where you'd always want to recurse on the successor (resp. predecessor) regardless of the relation to zero? count down to a negated power of two and terminate there? or is there just no important form of induction on integers?
19:24:19 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
19:25:27 <ski> awpr : not sure what the difference between the "look at the sign and count towards a base case of zero" and "recurse on the successor (resp. predecessor) regardless of the relation to zero" was ?
19:25:52 <awpr> count towards zero is either the predecessor or successor depending on sign
19:26:13 <awpr> always the successor counts towards +infinity, and always the predecessor counts towards -infinity
19:27:01 <awpr> (the latter two are weird, because they don't terminate)
19:28:29 <ski> integers are "normally" defined as a quotient (grothendieck group) -- iow, you keep a pair of a credit/"positive" and a debit/"negative" part, and identify two pairs when "they cancel to the same"
19:28:56 <awpr> indeed. it's a bit clunky to use that in Haskell though, especially at the type level
19:29:18 <ski> oic
19:29:43 <awpr> gotta normalize by performing subtraction before you can ask anything meaningful about the values, and it's harder to make things abstract at type level
19:29:52 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 258 seconds)
19:30:08 <ski> you can do computations without normalizing all the time. e.g. (order) comparision
19:31:43 × brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving)
19:31:45 <awpr> so `compare (x - y) (z - w) = compare @Nat (x + w) (z + y)`?
19:31:54 <ski> yes
19:32:16 <awpr> ok, that representation might be more usable than I thought
19:32:25 <ski> (also negation, addition, subtraction, multiplication, &c.)
19:32:30 <awpr> it's still a bit awkward that `x == y` doesn't imply `x ~ y`
19:32:42 <awpr> right, arithmetic is easily done without normalizing
19:33:14 <awpr> the question still remains of what the use-case might be; what would one actually use them for after all the arithmetic is done?
19:33:48 <ski> hm, oh, i missed that part of your question
19:33:49 <awpr> like, with naturals, you can make fixed vectors, complete binary trees, finite set types, etc.
19:34:07 <ski> repetitions of an invertable transformation ?
19:34:19 <awpr> oh nice
19:34:35 <awpr> hmm, but that seems equally well served by value-level integers
19:34:56 rond_ joins (~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438)
19:35:02 <awpr> I guess if you have an invertable type-level transformation somehow, but I've never seen such a thing
19:35:12 <ski> i guess you could do free abelian group on some generators, by associating an integer with each generator
19:35:21 × arkeet quits (arkeet@moriya.ca) (Quit: ZNC 1.8.2 - https://znc.in)
19:35:49 <ski> yea, i'm not sure where it'd reasonably come up, on the type level
19:36:34 arkeet joins (arkeet@moriya.ca)
19:37:01 <awpr> maybe one of the reasons this seems weird is: most of the ways you'd use naturals is to make products or natural powers of things, but negative numbers would lead that into quotients or negative powers, and Haskell doesn't really have those in its type vocabulary
19:40:50 × agumonkey quits (~user@88.160.31.174) (Remote host closed the connection)
19:45:45 × pooryorick quits (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 260 seconds)
19:45:46 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 252 seconds)
19:47:28 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 252 seconds)
19:47:37 cods joins (~fred@82-65-232-44.subs.proxad.net)
19:48:42 <awpr> context: I've got https://github.com/awpr/dependent-literals/tree/gamma_kinds, and I sort of just cargo-culted in the idea that it should support negative integers, but I'm realizing a) the current representation is unwieldy, b) the negative numbers are especially unwieldy and make naturals more complicated, c) I've never really used them, and d) I can't even figure out how to contrive a use for them
19:49:49 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
19:49:49 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Remote host closed the connection)
19:50:07 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
19:51:30 <awpr> and e) lazy binary naturals seem to work pretty well (so far), but generalizing it to integers by adding a constructor for negatives is awkward: addition can't be lazy because the top-level sign constructor depends on the entire operands. negabinary seems promising, but then the question is... why? should I bother?
19:53:48 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
19:55:13 × MQ-17J quits (~MQ-17J@2607:fb90:47:70f6:3994:460d:fb23:b675) (Read error: Connection reset by peer)
19:56:00 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
19:59:26 jgeerds joins (~jgeerds@55d40de2.access.ecotel.net)
20:01:05 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:02:20 <dminuoso> merijn: Re statically linking glibc. I absolutely loathe the part that if you rely on nss or iconv, you need to dynamically link against glibc still, and it better be the same version..
20:02:40 <koz> Does anyone know which of the GHC plugin interfaces (as documented here: https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/extending_ghc.html#compiler-plugins) the record-dot-preprocessor plugin uses?
20:03:20 <ski> awpr : hmm .. i suppose maybe one might want slices of such vectors, keeping the index subrange .. and then, perhaps also want to generalize and support index ranges including negatives ?
20:03:47 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
20:04:52 <dminuoso> And neither is necessarily easy to control, especially since NSS is likely used if anything of it uses getaddrinfo, which is more than likely.
20:05:31 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 258 seconds)
20:05:59 evocatus joins (~evocatus@84.51.113.13)
20:06:47 <geekosaur> also looking up users and groups, which is done by more than just network programs
20:07:02 <awpr> ski: interesting, like the Python notion of negative indices counting back from the end?
20:07:12 juhp joins (~juhp@128.106.188.220)
20:08:24 <awpr> is there a reason to want a slice 2..4 to be a different type from a slice 3..5? or even more questionable, 2..4 of a 4-vector vs. -2..0 of a 4-vector?
20:10:14 acidjnk_new joins (~acidjnk@p200300d0c703cb93c8c758eae23fe552.dip0.t-ipconnect.de)
20:10:41 <ski> awpr : i was just thinking of stuff like `listArray (-4,4) [i^3 | i <- range (-4,4)]'
20:11:21 <awpr> oh, interesting, a generalized vector with indices being a subset of some numeric type
20:12:14 <ski> awpr : not sure. one could perhaps imagine an operation on a sequence with indices `a .. b-1' together with one with `b .. c - 1', combining them into one with `a .. c-1'
20:12:36 <ski> well, a contiguous subset, for the slice idea
20:12:53 <ski> (one could perhaps also imagine higher dimensional stuff ..)
20:13:43 <awpr> yeah, I guess this generalizes to: when you start getting into implementing refinement types, then integers start to make sense at the type level whenever the value level involves integers
20:14:04 <ski> (or perhaps one could allow other strides, hmm ..)
20:14:07 ski . o O ( "Multi-dimensional array views for systems programmers" by pervognsen (Per Vognsen) in 2019-01-20(?) - 2019-04-30 at <https://gist.github.com/pervognsen/0e1be3b683d62b16fd81381c909bf67e> )
20:14:22 <awpr> ooh time to name-drop https://hackage.haskell.org/package/orthotope
20:14:56 <awpr> in that, though, strides are only ever value-level, it's only the bounds that are (sometimes) type-level
20:16:02 <awpr> this seems like good enough justification that I shouldn't paint things into a corner where signed numbers are ruled out, but maybe it's fine to leave them as "TODO"
20:17:45 <awpr> it might be profitable to have the main class be `HasNaturalLiterals a`, and then (optionally) have `class HasNaturalLiterals a => HasIntegerLiterals a`. then the integers don't interfere with naturals behaving nicely
20:18:26 ski . o O ( <https://en.wikipedia.org/wiki/SAC_programming_language> )
20:18:31 Pickchea joins (~private@user/pickchea)
20:19:11 <ski> mhm
20:19:36 awpr keeps this open in a tab. might want to harvest ideas/techniques for my actual job
20:21:22 × arkeet quits (arkeet@moriya.ca) (Quit: ZNC 1.8.2 - https://znc.in)
20:24:55 <awpr> koz: looks like it's a source plugin pre-type-checking, `parsedResultAction`
20:26:51 <koz> awpr: Ah, OK. So it basically modifies the parsed AST or something?
20:29:04 <awpr> looks that way. if it let the `(.)` operators make it to type-checking, they'd basically always be type errors, right?
20:29:48 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Remote host closed the connection)
20:29:51 <koz> Yeah, that makes sense.
20:30:21 <koz> Does said parsed AST contain module annotations?
20:30:25 <koz> (assuming there are any)
20:31:15 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 260 seconds)
20:32:17 <awpr> hmm, that's a good question. I'd assume so, but maybe not in a form that's ready to use yet
20:33:30 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 258 seconds)
20:33:33 <koz> awpr: Ah, so it _can_ tell me 'annot is here', but not 'its type is X'?
20:33:50 <awpr> I found them in this form: https://hackage.haskell.org/package/ghc-8.10.2/docs/GHC-Hs-Decls.html#t:AnnDecl
20:34:23 <awpr> yeah, so that contains a pre-type-checker expression for the annotation value
20:34:42 <koz> Ah, so just its stringy name.
20:34:52 <koz> Or rather, stringly _value_.
20:35:02 <awpr> last field is `HsExpr`
20:35:17 <awpr> it's just not been type-inferenced or reduced to a value yet
20:35:20 <koz> Oh, even better.
20:35:29 <koz> Thanks awpr, that's very helpful, and you are uncommonly attractive.
20:35:37 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
20:35:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
20:35:48 × ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 258 seconds)
20:37:13 <awpr> lol, np and thanks, I guess?
20:38:39 <koz> LOL
20:39:38 mestre joins (~mestre@191.177.175.57)
20:40:44 × Null_A quits (~null_a@2601:645:8700:2290:6cb0:bf84:22bf:3285) (Remote host closed the connection)
20:41:50 × timCF quits (~timCF@m91-129-111-87.cust.tele2.ee) (Quit: leaving)
20:44:36 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
20:44:44 mzan parts (~quassel@mail.asterisell.com) (https://quassel-irc.org - Chat comfortably. Anywhere.)
20:48:27 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 258 seconds)
20:49:27 arkeet joins (arkeet@moriya.ca)
20:50:43 × nehsou^ quits (~nehsou@wsip-68-227-92-38.mc.at.cox.net) (Ping timeout: 265 seconds)
20:51:49 × jkaye quits (~jkaye@2601:281:8300:7530:8275:c2bd:871b:678c) (Ping timeout: 252 seconds)
20:51:55 ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
20:53:30 × fendor quits (~fendor@91.141.35.79.wireless.dyn.drei.com) (Remote host closed the connection)
20:55:22 × rond_ quits (~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) (Quit: Client closed)
20:58:00 × connrs quits (~connrs@conners.plus.com) (Quit: ZNC 1.8.2 - https://znc.in)
20:58:07 × zer0bitz quits (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) (Read error: Connection reset by peer)
20:58:20 connrs joins (~connrs@user/connrs)
21:00:00 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
21:07:33 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:07:43 × evocatus quits (~evocatus@84.51.113.13) (Quit: Leaving)
21:10:35 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
21:13:34 × benin quits (~benin@183.82.207.116) (Quit: The Lounge - https://thelounge.chat)
21:19:17 f-a joins (f2a@f2a.jujube.ircnow.org)
21:21:23 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
21:22:58 × zebrag quits (~chris@user/zebrag) (Ping timeout: 260 seconds)
21:24:09 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
21:26:31 stiell joins (~stiell@gateway/tor-sasl/stiell)
21:27:15 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 260 seconds)
21:31:26 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (*.net *.split)
21:31:26 × nitrix quits (~nitrix@user/nitrix) (*.net *.split)
21:31:26 × eruditass quits (uid248673@uxbridge.irccloud.com) (*.net *.split)
21:31:26 × agander_m quits (sid407952@tinside.irccloud.com) (*.net *.split)
21:31:26 × cbarrett quits (sid192934@helmsley.irccloud.com) (*.net *.split)
21:31:26 × NemesisD quits (sid24071@lymington.irccloud.com) (*.net *.split)
21:31:26 × cln quits (sid336875@ilkley.irccloud.com) (*.net *.split)
21:31:26 × angerman quits (sid209936@ilkley.irccloud.com) (*.net *.split)
21:31:26 × gmc quits (sid58314@ilkley.irccloud.com) (*.net *.split)
21:31:26 × vito quits (sid1962@user/vito) (*.net *.split)
21:31:26 × scav quits (sid309693@helmsley.irccloud.com) (*.net *.split)
21:31:26 × JSharp quits (sid4580@lymington.irccloud.com) (*.net *.split)
21:31:26 × bjs quits (sid190364@user/bjs) (*.net *.split)
21:31:26 × NiKaN quits (sid385034@helmsley.irccloud.com) (*.net *.split)
21:31:26 × nrr_ quits (sid20938@lymington.irccloud.com) (*.net *.split)
21:31:26 × dibblego quits (~dibblego@haskell/developer/dibblego) (*.net *.split)
21:31:26 × jinsun quits (~quassel@user/jinsun) (*.net *.split)
21:31:26 × srk quits (~sorki@user/srk) (*.net *.split)
21:31:26 × Katarushisu quits (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (*.net *.split)
21:31:26 × fluxit quits (~fluxit@techsmix.net) (*.net *.split)
21:31:26 × Ram-Z quits (~Ram-Z@li1814-254.members.linode.com) (*.net *.split)
21:31:26 × qwedfg quits (~qwedfg@user/qwedfg) (*.net *.split)
21:31:26 × yaroot quits (~yaroot@6.3.30.125.dy.iij4u.or.jp) (*.net *.split)
21:31:26 × ByronJohnson quits (~bairyn@mail.digitalkingdom.org) (*.net *.split)
21:31:26 × asm quits (~alexander@user/asm) (*.net *.split)
21:31:26 × ellie quits (~ellie@user/ellie) (*.net *.split)
21:31:26 × tv quits (~tv@user/tv) (*.net *.split)
21:31:26 × mrkajetanp quits (~mrkajetan@88.98.245.28) (*.net *.split)
21:31:26 × jackhill quits (~jackhill@kalessin.dragonsnail.net) (*.net *.split)
21:31:26 × dwt_ quits (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net) (*.net *.split)
21:31:26 × drewolson quits (~drewolson@user/drewolson) (*.net *.split)
21:31:26 × Hecate quits (~mariposa@user/hecate) (*.net *.split)
21:31:26 × aarchi quits (sid486183@uxbridge.irccloud.com) (*.net *.split)
21:31:26 × hendi quits (sid489601@lymington.irccloud.com) (*.net *.split)
21:31:26 × gonz___ quits (sid304396@lymington.irccloud.com) (*.net *.split)
21:31:26 × sm2n quits (~sm2n@user/sm2n) (*.net *.split)
21:31:26 × cls quits (~cls@chalk.lubutu.com) (*.net *.split)
21:31:26 × T_S_ quits (sid501726@uxbridge.irccloud.com) (*.net *.split)
21:31:26 × lambdabot quits (~lambdabot@haskell/bot/lambdabot) (*.net *.split)
21:31:26 × slep quits (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) (*.net *.split)
21:31:26 × dpratt_ quits (sid193493@helmsley.irccloud.com) (*.net *.split)
21:31:26 × aria quits (sid380617@lymington.irccloud.com) (*.net *.split)
21:31:26 × bradparker quits (sid262931@uxbridge.irccloud.com) (*.net *.split)
21:31:26 × tapas quits (sid467876@ilkley.irccloud.com) (*.net *.split)
21:31:26 × nisstyre quits (~wes@user/nisstyre) (*.net *.split)
21:31:26 × sqrt2 quits (~ben@80-108-18-7.cable.dynamic.surfer.at) (*.net *.split)
21:31:26 × jrm quits (~jrm@156.34.187.65) (*.net *.split)
21:31:27 × tdammers quits (~tdammers@77.109.72.177.res.static.edpnet.net) (*.net *.split)
21:31:27 × w1gz quits (~do@159.89.11.133) (*.net *.split)
21:31:27 × gnyeki quits (~gnyeki@user/gnyeki) (*.net *.split)
21:31:27 × mmarusea1ph2 quits (~mihai@198.199.100.72) (*.net *.split)
21:31:27 × CannabisIndica quits (~herb@user/mesaboogie) (*.net *.split)
21:31:27 × erisco quits (~erisco@d24-57-249-233.home.cgocable.net) (*.net *.split)
21:31:27 × m5zs7k quits (aquares@web10.mydevil.net) (*.net *.split)
21:31:27 × tureba quits (~tureba@tureba.org) (*.net *.split)
21:31:27 × sshine quits (~simon@hubris.eta.solutions) (*.net *.split)
21:31:27 × samebchase quits (~thelounge@51.15.68.182) (*.net *.split)
21:31:33 slep joins (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net)
21:31:33 jackhill joins (~jackhill@kalessin.dragonsnail.net)
21:31:33 gnyeki joins (~gnyeki@li578-216.members.linode.com)
21:31:36 ByronJohnson joins (~bairyn@mail.digitalkingdom.org)
21:31:37 sqrt2 joins (~ben@80-108-18-7.cable.dynamic.surfer.at)
21:31:37 Hecate joins (~mariposa@163.172.211.189)
21:31:37 lambdabot joins (~lambdabot@silicon.int-e.eu)
21:31:38 tapas joins (sid467876@id-467876.ilkley.irccloud.com)
21:31:38 cls joins (~cls@chalk.lubutu.com)
21:31:40 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com)
21:31:41 gmc joins (sid58314@id-58314.ilkley.irccloud.com)
21:31:41 NemesisD joins (sid24071@id-24071.lymington.irccloud.com)
21:31:41 agander_m joins (sid407952@id-407952.tinside.irccloud.com)
21:31:41 angerman joins (sid209936@id-209936.ilkley.irccloud.com)
21:31:41 samebchase joins (~thelounge@51.15.68.182)
21:31:41 cln joins (sid336875@id-336875.ilkley.irccloud.com)
21:31:41 cbarrett joins (sid192934@id-192934.helmsley.irccloud.com)
21:31:42 yaroot joins (~yaroot@6.3.30.125.dy.iij4u.or.jp)
21:31:48 asm joins (~alexander@burner.asm89.io)
21:31:51 drewolson joins (~drewolson@user/drewolson)
21:31:51 tdammers joins (~tdammers@77.109.72.177.res.static.edpnet.net)
21:31:53 scav joins (sid309693@id-309693.helmsley.irccloud.com)
21:31:55 gonz___ joins (sid304396@id-304396.lymington.irccloud.com)
21:31:57 nisstyre joins (~wes@li798-187.members.linode.com)
21:31:57 mmaruseacph2 joins (~mihai@198.199.100.72)
21:31:57 dpratt_ joins (sid193493@id-193493.helmsley.irccloud.com)
21:32:11 jackhill is now known as KM4MBG
21:32:11 ellie joins (~ellie@user/ellie)
21:32:14 × lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host)
21:32:14 lambdabot joins (~lambdabot@haskell/bot/lambdabot)
21:32:21 bradparker joins (sid262931@id-262931.uxbridge.irccloud.com)
21:32:22 T_S_ joins (sid501726@id-501726.uxbridge.irccloud.com)
21:32:23 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
21:32:23 dibblego joins (~dibblego@haskell/developer/dibblego)
21:32:25 aria joins (sid380617@id-380617.lymington.irccloud.com)
21:32:28 KM4MBG is now known as jackhill
21:32:32 vito joins (sid1962@id-1962.uxbridge.irccloud.com)
21:32:33 bjs joins (sid190364@id-190364.helmsley.irccloud.com)
21:32:34 × nisstyre quits (~wes@li798-187.members.linode.com) (Signing in (nisstyre))
21:32:34 nisstyre joins (~wes@user/nisstyre)
21:32:42 × bjs quits (sid190364@id-190364.helmsley.irccloud.com) (Changing host)
21:32:42 bjs joins (sid190364@user/bjs)
21:32:46 nrr_ joins (sid20938@id-20938.lymington.irccloud.com)
21:32:47 × vito quits (sid1962@id-1962.uxbridge.irccloud.com) (Changing host)
21:32:47 vito joins (sid1962@user/vito)
21:32:51 aarchi joins (sid486183@id-486183.uxbridge.irccloud.com)
21:32:52 hendi joins (sid489601@id-489601.lymington.irccloud.com)
21:32:56 JSharp joins (sid4580@id-4580.lymington.irccloud.com)
21:32:57 eruditass joins (uid248673@id-248673.uxbridge.irccloud.com)
21:33:10 NiKaN joins (sid385034@id-385034.helmsley.irccloud.com)
21:33:11 srk joins (~sorki@user/srk)
21:33:19 erisco joins (~erisco@d24-57-249-233.home.cgocable.net)
21:33:20 CnnibisIndica joins (~herb@user/mesaboogie)
21:33:25 w1gz joins (~do@159.89.11.133)
21:33:27 jrm joins (~jrm@156.34.187.65)
21:33:27 jinsun joins (~quassel@user/jinsun)
21:33:28 nitrix joins (~nitrix@user/nitrix)
21:33:30 mrkajetanp joins (~mrkajetan@2a01:4b00:ea36:6c00:7994:941c:3f5d:2b88)
21:33:31 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
21:33:32 m5zs7k joins (aquares@web10.mydevil.net)
21:33:33 Ram-Z joins (~Ram-Z@li1814-254.members.linode.com)
21:33:34 sm2n joins (~sm2n@user/sm2n)
21:33:37 tv joins (~tv@user/tv)
21:33:38 fluxit joins (~fluxit@techsmix.net)
21:33:39 sshine joins (~simon@hubris.eta.solutions)
21:33:52 qwedfg joins (~qwedfg@user/qwedfg)
21:35:44 dwt_ joins (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net)
21:36:42 tureba joins (~tureba@tureba.org)
21:39:29 × michalz quits (~michalz@185.246.204.41) (Remote host closed the connection)
21:39:58 × max22- quits (~maxime@2a01cb088335980063b7aac9e60f4864.ipv6.abo.wanadoo.fr) (Quit: Leaving)
21:41:18 pooryorick joins (~pooryoric@87-119-174-173.tll.elisa.ee)
21:43:33 <teddyc> TIL: the backslash in anonymous functions is supposed to resemble lambda(λ). makes sense now
21:44:00 <geekosaur> it's as close as you get in ASCII, yeh
21:46:18 <monochrom> :)
21:48:43 <pavonia> ,\
21:49:57 <Rembane_> You need to be slightly careful otherwise you'll fall down the J rabbit hole.
21:51:23 <hpc> (.) is also meant to resemble the middot thing that math uses for function composition
21:51:59 <teddyc> Rembane_: and APL from what I've seen from code_report on youtube.
21:52:03 <monochrom> Hrm! I didn't notice that cabal-install 3.4.1.0 exists.
21:52:37 <teddyc> hpc: ah, thats true. it always bothered me that i forgot the way it composes, but that sort of helps
21:52:44 <Rembane_> teddyc: Yes! :)
21:55:50 × segfaultfizzbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 260 seconds)
21:57:28 zebrag joins (~chris@user/zebrag)
22:02:13 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 252 seconds)
22:02:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Remote host closed the connection)
22:04:24 reumeth joins (~reumeth@user/reumeth)
22:05:10 lavaman joins (~lavaman@98.38.249.169)
22:07:38 mjrosenb joins (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net)
22:07:55 <mjrosenb> getId :: (MonadState s m) => Lens' s (IdGen a) -> m (Id) -- should this require RankNTypes?
22:08:22 <c_wraith> yes
22:08:37 <mjrosenb> is that because Lens' requires RankNTypes?
22:08:40 <c_wraith> no
22:08:56 <c_wraith> It's because Lens' has a forall inside it, and expanding it puts the forall inside the argument
22:09:28 <mjrosenb> that sounds like Lens' requiring RankNTypes?
22:09:45 <c_wraith> nah, you can write foo :: Lens' Bar Foo
22:09:52 <c_wraith> and the forall expands at the top level
22:10:17 <mjrosenb> Ahh, gotcha.
22:10:31 <c_wraith> This is why things in the lens library that accept optics tend to take types like ALens instead of Lens
22:11:25 <mjrosenb> makes sense, I'm guessing ALens is missing that forall?
22:11:49 <mjrosenb> can you just pass optics into functions that accept ALens?
22:11:54 <c_wraith> yes to both
22:12:13 <mjrosenb> I know there are *many* parts of lens that are completely opaque to me
22:12:17 <mjrosenb> like 90% at least.
22:12:32 <c_wraith> ALens specializes to a Functor instance that lets you extract the polymorphic version again to use it
22:12:42 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
22:13:33 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:14:54 <mjrosenb> I know all of those words separately
22:15:14 <c_wraith> so.. a lens is a function that's polymorphic over some Functor instance
22:16:02 <c_wraith> ALens is an alias for a function at a concrete Functor instance, so you can pass a lens to a function that expects ALens as an argument
22:16:04 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
22:16:34 <c_wraith> But the functor instance was carefully chosen so that you can make convert it back to being polymorphic over any functor
22:16:36 <mjrosenb> and (^.) and (.~) force the functor to be specialized in a way suitable for getting or updating?
22:17:04 <c_wraith> Yes. (^.) forces it to be Const, (.~) forces it to be Identity
22:17:10 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
22:18:30 × mmhat quits (~mmh@55d497bf.access.ecotel.net) (Ping timeout: 260 seconds)
22:18:54 acidjnk_new3 joins (~acidjnk@p200300d0c703cb9378de40592bee5174.dip0.t-ipconnect.de)
22:18:58 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Ping timeout: 260 seconds)
22:19:17 <mjrosenb> > polymorphic over any functor -- over absolutely any functor? or over any functors that you'd reasonably want to coerce an optic into?
22:19:18 <lambdabot> error:
22:19:18 <lambdabot> • Variable not in scope:
22:19:18 <lambdabot> polymorphic
22:19:23 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
22:19:35 allbery_b joins (~geekosaur@xmonad/geekosaur)
22:19:36 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
22:19:38 allbery_b is now known as geekosaur
22:19:52 <c_wraith> any
22:20:22 <c_wraith> :t id :: Lens' Int Int
22:20:23 <lambdabot> Functor f => (Int -> f Int) -> Int -> f Int
22:20:34 <c_wraith> any Functor!
22:22:14 notzmv joins (~zmv@user/notzmv)
22:22:36 × acidjnk_new quits (~acidjnk@p200300d0c703cb93c8c758eae23fe552.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
22:23:19 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:26:47 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
22:27:05 × ec_ quits (~ec@gateway/tor-sasl/ec) (Quit: ec_)
22:28:30 × jstolarek quits (~jstolarek@137.220.120.162) (Ping timeout: 260 seconds)
22:28:37 × neo3 quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 252 seconds)
22:28:45 <mjrosenb> :t id :: ALens' Int Int
22:28:46 <lambdabot> ALens' Int Int
22:28:59 <mjrosenb> ... I guess I should have expected that.
22:29:13 <c_wraith> for whatever reason, it doesn't pierce the type aliases there
22:31:07 <c_wraith> it's like... (Int -> Pretext (->) Int Int Int) -> Int -> Pretext (->) Int Int Int
22:31:17 mmhat joins (~mmh@55d49dd9.access.ecotel.net)
22:31:21 <c_wraith> and Pretext is a type I don't pretend to understand at all
22:32:05 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:33:34 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
22:36:14 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
22:36:56 × reumeth quits (~reumeth@user/reumeth) (Ping timeout: 258 seconds)
22:37:16 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
22:38:30 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:38:58 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
22:39:29 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
22:43:28 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 252 seconds)
22:44:57 <hpc> c_wraith: do you tend to understand text?
22:45:34 <c_wraith> nope.
22:45:54 <hpc> :D
22:48:02 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
22:48:03 × wonko quits (~wjc@62.115.229.50) (Ping timeout: 258 seconds)
22:48:19 tommd joins (~tommd@75-164-130-101.ptld.qwest.net)
22:50:01 manjaro-user__ joins (~manjaro-u@95.85.66.41)
22:50:25 <c_wraith> On the other hand, I do end to understand ext
22:52:25 × manjaro-user__ quits (~manjaro-u@95.85.66.41) (Quit: Konversation terminated!)
22:52:47 f-a parts (f2a@f2a.jujube.ircnow.org) ()
22:58:31 × jespada quits (~jespada@2803:9800:9842:7a62:c904:aff:1e1a:fc0a) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:02:43 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
23:06:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
23:06:51 × Hecate quits (~mariposa@163.172.211.189) (Changing host)
23:06:51 Hecate joins (~mariposa@user/hecate)
23:07:35 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f) (Ping timeout: 264 seconds)
23:09:35 burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk)
23:10:53 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4852:7354:5eb5:641f)
23:12:19 acidjnk_new joins (~acidjnk@p200300d0c703cb67c0866ab856626c9e.dip0.t-ipconnect.de)
23:13:41 slowButPresent joins (~slowButPr@user/slowbutpresent)
23:14:26 Hayek joins (~xxx@cpe-72-134-91-230.natsow.res.rr.com)
23:15:14 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
23:15:28 lavaman joins (~lavaman@98.38.249.169)
23:15:36 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
23:15:39 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb9378de40592bee5174.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
23:15:49 × burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 244 seconds)
23:19:06 × Hayek quits (~xxx@cpe-72-134-91-230.natsow.res.rr.com) (Ping timeout: 258 seconds)
23:33:40 × acidjnk_new quits (~acidjnk@p200300d0c703cb67c0866ab856626c9e.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
23:36:44 <mrianbloom> Is there a way to get a cabal/stack project to also build a library with cmake?
23:37:13 <sclv> fully custom setup.hs file but please don’t
23:37:25 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
23:39:51 <mrianbloom> What would you recommend instead?
23:40:29 iqubic joins (~user@2601:602:9502:c70:3ba1:e05a:f13:1fa6)
23:41:20 mvk joins (~mvk@2607:fea8:5cc1:300::4b63)
23:42:57 <iqubic> Does anyone know why MonadAccum isn't yet in mtl? Transformers has Control.Monad.Trans.Accum already.
23:43:49 <davean> iqubic: because edwardk has his hands under his ass and hasn't gotten a release out yet :)
23:43:54 <davean> its in the repository
23:44:05 <iqubic> I see. That's so annoying.
23:44:28 <monochrom> But then it should be s/mtl/transformers/
23:45:45 <davean> iqubic: Uh, feel free to show up and squash release blockers I guess?
23:46:07 lavaman joins (~lavaman@98.38.249.169)
23:47:27 <iqubic> Basically, I want to add a 'MonadAccum w m' constraint to my function, so that I can use "add :: w -> m ()" and "look :: m w" in my function body.
23:47:30 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:47:31 <monochrom> https://lambdacats.github.io/fixed-in-head/ :)
23:47:47 × tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 264 seconds)
23:48:01 <geekosaur> I ewas under the impression mtl release was waiting on the new CLC, maybe I'm wrong
23:48:13 <monochrom> I misread. Sorry! You already know about transformers.
23:49:06 tommd joins (~tommd@75-164-130-101.ptld.qwest.net)
23:49:08 Hayek joins (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com)
23:49:18 <monochrom> But if release blockers happen to be humans, do you squash them too? "If you see Buddha, kill Buddha"? >:)
23:49:22 <davean> https://github.com/haskell/mtl/issues/86
23:49:33 <iqubic> Yes. I know that transformers has Control.Monad.Trans.AccumT. But I'd prefer to write my code in the tagless final format that mtl uses.
23:49:55 <davean> "Sorry, I'm behind with polishing MonadAccum, but I hope it's not holding up the release? I believe it's not necessary to ship it with the next version. But in case it is, I can speed up." specificly
23:50:14 <davean> There is stuff to polish, if you want MonadAccum sooner, show up and help would be my advice - its a blocker ATM
23:50:40 <davean> The specific thing you want is a blocker ATM
23:50:50 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:50:50 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
23:50:50 wroathe joins (~wroathe@user/wroathe)
23:51:00 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
23:51:03 <iqubic> I see. That makes sense.
23:51:22 <davean> But like, it really should be pretty easy to move that forward
23:51:57 dsrt^ joins (~dsrt@wsip-68-227-92-38.mc.at.cox.net)
23:52:22 hololeap joins (~hololeap@user/hololeap)
23:52:31 <iqubic> Yeah, I guess it would be.
23:52:53 <iqubic> It's just that I've never contributed to a major package like this, so I have no clue how to do so.
23:53:05 <davean> Clone it, make some patches, start a marge request
23:53:09 <davean> seriously, it'll be fine
23:53:35 <iqubic> I don't know what patches need to be made. That's it.
23:53:44 <davean> Well for one theres documentation listed
23:53:47 × Hayek quits (~xxx@2603-8000-b401-6099-7541-8f40-8f83-6bcb.res6.spectrum.com) (Ping timeout: 264 seconds)
23:53:58 <davean> you'll get edits and such, you'll probably learn stuff from the process
23:54:23 × tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 265 seconds)
23:54:26 <iqubic> I guess I'll just let others work on this. It's not critical that I have this right now.
23:54:46 <davean> Seriously this is probably VERY easy
23:56:10 <iqubic> I know. But I'm busy with other things right now. I don't actually have the time to work on this right now.
23:56:22 <davean> well now you know why its not in mtl yet :)
23:57:24 <iqubic> I guess so.

All times are in UTC on 2021-10-22.