2021/09/16

2021-09-16 00:02:08 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-09-16 00:03:38 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 00:03:51 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 00:04:51 +0200chisui97(~chisui@200116b8640ff5008528468472c032d2.dip.versatel-1u1.de) (Ping timeout: 256 seconds)
2021-09-16 00:09:32 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-09-16 00:11:10 +0200favonia(~favonia@user/favonia) (Ping timeout: 240 seconds)
2021-09-16 00:11:46 +0200xff0x(~xff0x@2001:1a81:522c:4300:7515:65a1:dfa5:eb8b) (Ping timeout: 260 seconds)
2021-09-16 00:12:36 +0200xff0x(~xff0x@2001:1a81:522c:4300:5ee7:ef88:cf65:a085)
2021-09-16 00:13:27 +0200slack1256(~slack1256@2607:fb90:c6c:174c:8ae6:d206:f808:323d)
2021-09-16 00:16:58 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-16 00:17:55 +0200 <ldlework> Anyway to get vsync in Gloss?
2021-09-16 00:18:58 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 00:19:10 +0200 <mrianbloom> I'm trying to write a program with accelerate and I'd like to be able to easily switch between GPU (llvm-ptx) and CPU (llvm-native) implementations. What is the best way to approach this? Should I use the c-preprocessor?
2021-09-16 00:19:11 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 00:19:38 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Client Quit)
2021-09-16 00:19:50 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 00:20:37 +0200slack1256(~slack1256@2607:fb90:c6c:174c:8ae6:d206:f808:323d) (Remote host closed the connection)
2021-09-16 00:21:30 +0200wroathe(~wroathe@96-88-30-181-static.hfc.comcastbusiness.net)
2021-09-16 00:21:31 +0200wroathe(~wroathe@96-88-30-181-static.hfc.comcastbusiness.net) (Changing host)
2021-09-16 00:21:31 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 00:21:53 +0200benin036932301(~benin@183.82.24.197)
2021-09-16 00:23:42 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-09-16 00:24:57 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-09-16 00:25:35 +0200benin036932301(~benin@183.82.24.197) (Client Quit)
2021-09-16 00:25:59 +0200benin036932301(~benin@183.82.24.197)
2021-09-16 00:27:24 +0200benin036932301(~benin@183.82.24.197) (Client Quit)
2021-09-16 00:28:29 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-09-16 00:31:59 +0200 <awpr> monochrom: ooh that's clever. I de-Intified it since the Int only ever reaches 1 or 0, and ended up with a one-liner: https://paste.tomsmeding.com/DIDOXwwJ
2021-09-16 00:32:21 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 00:33:21 +0200 <awpr> although the Int probably blocks sharing and makes the original not leak space
2021-09-16 00:36:41 +0200 <awpr> I guess it's straightforward to untie the knot in my one-liner to make it recompute, just recurse via the top-level name instead of via `it`
2021-09-16 00:38:24 +0200 <monochrom> Yeah you should measure space too, a purpose of iterative deepening is to prefer re-computation and avoid taking up space.
2021-09-16 00:39:18 +0200 <awpr> yeah, it should be `iterDeep next x = x : concatMap next (iterDeep next x)` then
2021-09-16 00:39:34 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
2021-09-16 00:39:49 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 00:40:03 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 00:40:19 +0200nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.2)
2021-09-16 00:41:34 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-16 00:43:11 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 00:47:43 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-09-16 00:49:18 +0200theang(~theang@fef109.internetdsl.tpnet.pl)
2021-09-16 00:50:30 +0200nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
2021-09-16 00:51:17 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds)
2021-09-16 00:54:51 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-09-16 00:55:09 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 00:55:24 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 00:55:30 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Client Quit)
2021-09-16 00:55:45 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 00:57:05 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-16 00:58:25 +0200TranquilEcho(~grom@user/tranquilecho) (Quit: WeeChat 2.8)
2021-09-16 01:00:18 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 01:03:10 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-09-16 01:04:20 +0200acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds)
2021-09-16 01:05:00 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-16 01:06:03 +0200 <awpr> indeed ghci can do 100M elements of that in constant memory, but increases memory usage with the knot-tying version. I briefly defeated myself trying to test it because ghci holds onto past results as `it` even if they don't themselves leak space, but `length` fixed that
2021-09-16 01:07:08 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 01:09:24 +0200thyriaen(~thyriaen@dynamic-078-054-146-050.78.54.pool.telefonica.de) (Quit: Leaving)
2021-09-16 01:10:49 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 01:13:52 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-09-16 01:19:01 +0200Gurkenglas(~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2021-09-16 01:20:04 +0200kimjetwav(~user@2607:fea8:235f:9730:7652:9a19:d3a:6562) (Remote host closed the connection)
2021-09-16 01:23:05 +0200xsperry(~as@user/xsperry) (Remote host closed the connection)
2021-09-16 01:24:06 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 260 seconds)
2021-09-16 01:25:19 +0200Cajun(~Cajun@user/cajun)
2021-09-16 01:28:54 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 01:33:57 +0200 <monochrom> :)
2021-09-16 01:34:18 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 01:34:40 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-09-16 01:35:42 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 01:35:51 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 01:36:04 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 01:39:57 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 01:43:02 +0200O0c(~O0c@69-226-234-181.lightspeed.nsvltn.sbcglobal.net)
2021-09-16 01:44:56 +0200O0c(~O0c@69-226-234-181.lightspeed.nsvltn.sbcglobal.net) ()
2021-09-16 01:45:35 +0200kimjetwav(~user@2607:fea8:235f:9730:7652:9a19:d3a:6562)
2021-09-16 01:46:11 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 01:46:25 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 01:50:02 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 01:50:03 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 01:50:03 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 01:58:48 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 02:05:37 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 02:07:41 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 02:11:31 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 02:11:45 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 02:12:55 +0200aegon(~mike@174.127.249.180) (Quit: leaving)
2021-09-16 02:13:45 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 02:16:29 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 02:21:11 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-09-16 02:21:42 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 02:21:51 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 02:22:10 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 02:24:28 +0200ph88(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a)
2021-09-16 02:24:58 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 02:26:06 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 02:26:57 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-16 02:27:40 +0200ph88^(~ph88@ip5f5af6fd.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
2021-09-16 02:29:33 +0200stites(~stitescoc@130.44.141.131) (Quit: Bridge terminating on SIGTERM)
2021-09-16 02:29:33 +0200enick_769(~matrixbot@130.44.141.131) (Quit: Bridge terminating on SIGTERM)
2021-09-16 02:30:00 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 02:39:24 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2.1)
2021-09-16 02:43:42 +0200proofofkeags_(~proofofke@205.209.28.54) (Ping timeout: 268 seconds)
2021-09-16 02:46:18 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 02:51:27 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 02:51:44 +0200 <ldlework> i'm finding the rendering performance of gloss a bit unsatsifactory
2021-09-16 02:51:48 +0200 <ldlework> but i bet it's my code
2021-09-16 02:54:16 +0200jinsun(~quassel@user/jinsun) (Read error: Connection reset by peer)
2021-09-16 02:55:12 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-09-16 02:57:03 +0200jinsun(~quassel@user/jinsun)
2021-09-16 02:57:56 +0200lbseale(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-09-16 02:59:24 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-16 03:01:39 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-16 03:01:43 +0200 <Axman6> Feel free to share some code
2021-09-16 03:05:20 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 03:07:40 +0200acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-09-16 03:08:41 +0200 <ldlework> Axman6: https://github.com/dustinlacewell/cells-hs
2021-09-16 03:08:46 +0200 <ldlework> It's very "jerky"
2021-09-16 03:09:06 +0200 <ldlework> It's not the computation going on either, because I can kick it up to 1000 ticks a frame and it keeps up just fine
2021-09-16 03:09:16 +0200 <ldlework> It's like the rendering itself is very jerky / not vsynced
2021-09-16 03:10:57 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 03:12:00 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-09-16 03:12:50 +0200vysn(~vysn@user/vysn) (Ping timeout: 260 seconds)
2021-09-16 03:13:07 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-09-16 03:13:09 +0200 <Axman6> mrianbloom: it looks relatively easy to run an Acc a expression with either backend, what issues are you running into?
2021-09-16 03:13:30 +0200 <awpr> from a cursory look I think its memory usage will grow unbounded and make GCs take progressively longer over time as there's more live data on the heap to look through
2021-09-16 03:13:40 +0200 <awpr> (ldlework)
2021-09-16 03:14:23 +0200 <ldlework> awpr: i'm not sure what to do about that, since you need to generate new rows of cells as the simulation evolves, etc
2021-09-16 03:14:27 +0200 <mrianbloom> Axman6: I think in early debugging sessions I maybe convinced myself that aliasing PTX.runN was somehow problematic. Now I'm thinking that's a false negative.
2021-09-16 03:14:49 +0200 <awpr> can old rows be deleted as they get very old?
2021-09-16 03:15:00 +0200 <ldlework> awpr: yeah
2021-09-16 03:15:07 +0200 <ldlework> i don't even keep them in the World structure
2021-09-16 03:15:10 +0200 <Axman6> mrianbloom: yeah worth exploring further I think
2021-09-16 03:15:13 +0200xff0x(~xff0x@2001:1a81:522c:4300:5ee7:ef88:cf65:a085) (Ping timeout: 252 seconds)
2021-09-16 03:15:31 +0200 <Axman6> ldlework: looks like you're reinvention a lot of Data.Bits btw
2021-09-16 03:15:40 +0200 <ldlework> yeah? lol
2021-09-16 03:15:51 +0200 <Axman6> reinventing*
2021-09-16 03:15:55 +0200 <awpr> oh, I missed that appendRow trims it to a bounded length
2021-09-16 03:16:08 +0200asivitz(uid178348@id-178348.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-16 03:16:20 +0200 <ldlework> If I increase the resolution of a the sim a lot, it starts off fast, then gets slow after about 2 seconds, then starts to chug
2021-09-16 03:16:22 +0200 <awpr> could store rows as Integer or Word64 depending on size, to have 1 allocation per row instead of 2n
2021-09-16 03:16:47 +0200xff0x(~xff0x@2001:1a81:526d:1c00:a4aa:2b9e:15c4:9931)
2021-09-16 03:16:55 +0200 <awpr> well, Integer would be like n/64 rather than 1, but still
2021-09-16 03:17:03 +0200 <ldlework> awpr: maybe I should pregenerate every possible row ;P
2021-09-16 03:17:59 +0200 <awpr> if the number of rows is large, you might benefit from Data.Sequence where you can append and uncons in constant time. worse constant factors, though, so it may or may not help
2021-09-16 03:18:02 +0200 <ldlework> storing rows directly as numbers will complicate make having the row size be flexible I think
2021-09-16 03:18:14 +0200 <Cajun> are you trying to strictly stay with Lists or are you willing to use an array library for a more efficient (and simpler) implementation?
2021-09-16 03:18:20 +0200 <mrianbloom> Axman6: I think my main question is how to make it a compile time option without modifying any code.
2021-09-16 03:18:33 +0200 <ldlework> Cajun: not at all, I'm open to optimizations that I can still understand
2021-09-16 03:18:38 +0200 <awpr> Integer is an unbounded number of bits, and you can use testBit to access each one
2021-09-16 03:18:39 +0200 <Cajun> doing this with `massiv` and stencils
2021-09-16 03:18:47 +0200 <Cajun> *would be not too complicated
2021-09-16 03:18:54 +0200 <mrianbloom> Axman6: as in a user of my library can decide.
2021-09-16 03:20:01 +0200 <Axman6> hmm, so do you only want to compile in one backend and have a flag which decides which?
2021-09-16 03:20:04 +0200 <ldlework> Would another option be to parallize it?
2021-09-16 03:20:10 +0200 <ldlework> Like split the row in half
2021-09-16 03:20:27 +0200 <awpr> I'd check out how much memory it's using and how much time it's spending in GC first. if you have GC pauses, parallelizing work might not fix it
2021-09-16 03:20:49 +0200 <Cajun> massiv could parallelize it automatically, removes all the issues that updating a state in parallel has. it shouldnt be necessary to use massiv though
2021-09-16 03:20:49 +0200 <Axman6> You'll just make garbage faster!
2021-09-16 03:20:52 +0200 <mrianbloom> Axman6: That's correct.
2021-09-16 03:20:52 +0200 <ldlework> haha
2021-09-16 03:21:08 +0200 <awpr> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#rts-options-t…
2021-09-16 03:21:47 +0200 <Axman6> mrianbloom: what are you exposing to the user? are you exposing Acc things or functions which are supposed to use accelerate behind the scenes?
2021-09-16 03:22:23 +0200 <mrianbloom> I'm exposing functions on Array representations.
2021-09-16 03:23:01 +0200 <mrianbloom> Axman6: So definitely behind the scenes accelerate.
2021-09-16 03:23:02 +0200 <Axman6> So wouldn't it be up to the user to decide how to execute those functions and make the necessary decisions in their code?
2021-09-16 03:23:05 +0200 <Axman6> ah ok
2021-09-16 03:23:46 +0200 <mrianbloom> Axman6: I mean none of the exposed functions have Acc in the type signatures.
2021-09-16 03:23:47 +0200 <Axman6> Well, usually this is the sort of thing you would do with a combination of cabal flags and some CPP
2021-09-16 03:24:08 +0200 <Axman6> as that's the only way to dynamically add dependencies
2021-09-16 03:24:16 +0200 <Axman6> "dynamically" at compile time
2021-09-16 03:24:36 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com)
2021-09-16 03:24:37 +0200 <mrianbloom> Axman6: Ok cool, that's good confirmation. I was thinking there might be another way besides cpp.
2021-09-16 03:25:30 +0200 <geekosaur> backpack?
2021-09-16 03:29:06 +0200neurocyte6(~neurocyte@185.117.68.241)
2021-09-16 03:29:06 +0200neurocyte6(~neurocyte@185.117.68.241) (Changing host)
2021-09-16 03:29:06 +0200neurocyte6(~neurocyte@user/neurocyte)
2021-09-16 03:31:11 +0200neurocyte(~neurocyte@user/neurocyte) (Ping timeout: 268 seconds)
2021-09-16 03:31:11 +0200neurocyte6neurocyte
2021-09-16 03:36:16 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 03:37:27 +0200 <ldlework> OK made the Data.Bits refactor, https://github.com/dustinlacewell/cells-hs/blob/master/app/Main.hs#L45
2021-09-16 03:37:29 +0200 <ldlework> thanks for that tip
2021-09-16 03:38:22 +0200 <ldlework> I'm more uncertain about my ability to use massiv
2021-09-16 03:40:39 +0200 <zzz> now im worried
2021-09-16 03:41:30 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 03:42:30 +0200 <awpr> ldlework: I'd try running with `+RTS -s -RTS` to see how much time it's spending on GC first; there's more info in the link I sent
2021-09-16 03:42:55 +0200 <awpr> best to know what it's spending time on before trying to speed up any particular thing
2021-09-16 03:43:10 +0200roboguy_(~roboguy_@2605:a601:afe7:9f00:d11a:2286:b23f:5e4c)
2021-09-16 03:43:12 +0200 <ldlework> awpr: I use nix, and no idea how it's build infrastructure works really
2021-09-16 03:43:19 +0200 <ldlework> So I'm not sure how I would add those flags :(
2021-09-16 03:43:24 +0200 <awpr> those are flags to the compiled binary itself
2021-09-16 03:43:29 +0200 <ldlework> oh weird
2021-09-16 03:44:02 +0200 <awpr> the GHC runtime has its own set of flags that are magically in every binary, if enabled. you might have to enable it explicitly, though
2021-09-16 03:45:28 +0200favonia(~favonia@user/favonia)
2021-09-16 03:45:38 +0200 <ldlework> awpr: https://gist.github.com/dustinlacewell/466cd9c9bbf58290ef3cf8470521bca2
2021-09-16 03:46:13 +0200 <awpr> wow, 0% of time in GC, was not expecting that
2021-09-16 03:46:39 +0200 <ldlework> awpr: are you able to run the project
2021-09-16 03:46:52 +0200 <ldlework> i wonder if it's just me?
2021-09-16 03:47:01 +0200 <ldlework> screwy linux, not using gpu or something?
2021-09-16 03:48:19 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-09-16 03:50:06 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Client Quit)
2021-09-16 03:51:19 +0200brainfreeze(~brainfree@2a03:1b20:4:f011::20d)
2021-09-16 03:51:56 +0200brettgilio(~brettgili@x-node.gq)
2021-09-16 03:53:16 +0200 <awpr> still building, but the list indexing looks like it'll be pretty slow -- every cell will traverse the row 3 times
2021-09-16 03:54:57 +0200 <awpr> switching to Vector Bool might speed it up a lot, since it's constant-time access
2021-09-16 03:57:12 +0200 <awpr> could also build and run it with profiling enabled, if you can figure out how to do that with nix (I haven't used it myself, but it's not terribly hard to profile under Stack)
2021-09-16 03:57:29 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Remote host closed the connection)
2021-09-16 03:58:43 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
2021-09-16 03:59:05 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d)
2021-09-16 04:00:25 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Remote host closed the connection)
2021-09-16 04:00:34 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d)
2021-09-16 04:02:12 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-16 04:02:27 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-16 04:03:25 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds)
2021-09-16 04:04:28 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 04:09:15 +0200proofofkeags_(~proofofke@97-118-134-2.hlrn.qwest.net)
2021-09-16 04:09:27 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds)
2021-09-16 04:10:54 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-16 04:11:24 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-09-16 04:13:09 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-16 04:14:58 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Ping timeout: 268 seconds)
2021-09-16 04:16:11 +0200 <awpr> looks like all the time is going to OpenGL functions, especially matrix stack manipulation
2021-09-16 04:17:12 +0200goepsilongo(~chacho@2603-7000-ab00-62ed-0000-0000-0000-0bd0.res6.spectrum.com)
2021-09-16 04:19:22 +0200alx741(~alx741@181.196.68.49) (Quit: alx741)
2021-09-16 04:21:14 +0200 <ldlework> awpr: maybe it is the way I reset the transform for each cell?
2021-09-16 04:21:26 +0200 <ldlework> i wonder why that would cause it to slow down over time though
2021-09-16 04:21:45 +0200 <awpr> that sure sounds consistent with the profile. I didn't run it for very long, though
2021-09-16 04:22:01 +0200td_(~td@muedsl-82-207-238-063.citykom.de) (Ping timeout: 265 seconds)
2021-09-16 04:23:44 +0200td_(~td@muedsl-82-207-238-006.citykom.de)
2021-09-16 04:24:20 +0200orion(~orion@user/orion)
2021-09-16 04:25:02 +0200ridcully_(~ridcully@p508ac428.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-09-16 04:27:05 +0200ridcully_(~ridcully@p57b523cc.dip0.t-ipconnect.de)
2021-09-16 04:27:32 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-09-16 04:28:36 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-09-16 04:33:30 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 276 seconds)
2021-09-16 04:33:51 +0200 <ldlework> awpr: https://i.imgur.com/rRVPkZ6.png
2021-09-16 04:35:27 +0200 <awpr> odd, I didn't notice any space-leaky behavior when I ran it. do you have optimizations on?
2021-09-16 04:36:18 +0200 <ldlework> awpr: i just added -O2 yeah
2021-09-16 04:36:28 +0200 <ldlework> just throwing stuff at the wall lol
2021-09-16 04:37:48 +0200 <ldlework> awpr: when I run it for longer, it looks like the memory flattens out
2021-09-16 04:37:49 +0200 <ldlework> http://logos.ldlework.com/caps/2021-09-16-02-37-35.png
2021-09-16 04:37:53 +0200 <awpr> my binary seems to be constant memory. it might ramp up until the row limit is reached and then plateau, does that heap profile cover after that part?
2021-09-16 04:37:55 +0200 <ldlework> the curve is probably filling up the grid with rows
2021-09-16 04:37:56 +0200 <awpr> yeah, what you just said
2021-09-16 04:38:01 +0200greg8128(~user@50.47.115.102)
2021-09-16 04:38:19 +0200 <ldlework> I also increased the resolution by a lot to make the effect more dramatic
2021-09-16 04:39:14 +0200 <ldlework> these stand out https://gist.github.com/dustinlacewell/135cf3906f0fb036e2048558cadb14f4
2021-09-16 04:39:54 +0200 <awpr> the rightmost 4 columns seem to say very little time or allocation is spent on them
2021-09-16 04:42:22 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-09-16 04:45:25 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 252 seconds)
2021-09-16 04:45:42 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 04:48:04 +0200 <ldlework> awpr: `neighborhood` is the most expensive function of my own authorship, with 4.4 individual %
2021-09-16 04:48:13 +0200 <ldlework> doesn't that indicate that stenciling might help?
2021-09-16 04:48:22 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com)
2021-09-16 04:49:06 +0200 <ldlework> beyond that, my only guess is the wasteful transforms
2021-09-16 04:49:18 +0200 <awpr> well it was running at 2-3fps on my machine, so making that function infinitely faster isn't gonna bring it up to 60. the time is going to the rendering much more than the world update (as much as I initially expected it to go to list indexing or GC)
2021-09-16 04:49:18 +0200 <ldlework> need haskell->GLSL
2021-09-16 04:49:51 +0200 <awpr> if matrix stack manipulation is expensive, try to do less of it
2021-09-16 04:50:14 +0200 <ldlework> I guess my drawing routine will have to be smarter somehow
2021-09-16 04:50:39 +0200ph88^(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a)
2021-09-16 04:50:39 +0200 <ldlework> the reason i'm translating to origin for each cell that's drawn, is so that i don't have to draw each cell
2021-09-16 04:50:40 +0200 <awpr> my vague recollection is that the matrix stack is meant for, like, loading an entire mesh under a transform, not so much to be the entire means of getting positions for every vertex
2021-09-16 04:50:49 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 04:50:52 +0200 <ldlework> to avoid the transforms, i'd have to like go cell by cell
2021-09-16 04:51:01 +0200 <ldlework> which seems like it would mean even more transforms
2021-09-16 04:51:36 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 04:51:42 +0200 <awpr> I don't really know how gloss does things unfortunately. the code looked sensible, but somehow it's changing the matrix stack a whole lot
2021-09-16 04:51:55 +0200 <ldlework> awpr: indeed the API for Gloss wants you to transform somewhere, then use some kind of primitive like a square of a certain size
2021-09-16 04:51:59 +0200 <ldlework> the square doesn't take a position
2021-09-16 04:52:32 +0200 <awpr> is it possible this is just pushing the limits of the number of individual things Gloss can deal with? I'm not really familiar with the library
2021-09-16 04:52:59 +0200 <ldlework> awpr: I believe it is using the old-style OpenGL pipeline
2021-09-16 04:53:06 +0200hyiltiz(~quassel@31.220.5.250)
2021-09-16 04:53:08 +0200 <awpr> yeah, it is
2021-09-16 04:53:39 +0200 <awpr> profile mentioned the function that pushes a singular vertex into the stream
2021-09-16 04:54:26 +0200ph88(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a) (Ping timeout: 268 seconds)
2021-09-16 04:55:33 +0200orion(~orion@user/orion) (Read error: Connection reset by peer)
2021-09-16 04:56:01 +0200 <ldlework> I assume it would be no faster switching to hSDL
2021-09-16 04:56:03 +0200 <ldlework> hmm
2021-09-16 04:56:16 +0200 <ldlework> I could just move on with my life I guess
2021-09-16 04:58:18 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds)
2021-09-16 04:58:49 +0200 <awpr> it doesn't really look very aggressively performance optimized; this might just be how fast it goes with lots of tiny rectangles
2021-09-16 04:59:32 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2021-09-16 05:00:07 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-09-16 05:02:03 +0200 <awpr> https://www.47deg.com/blog/game-of-life-haskell/ has someone doing a similar thing, and the end result is "hooray, we improved it from 2 iterations before crashing to 60 iterations before crashing", so it looks like yours is already ahead of the curve
2021-09-16 05:03:26 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2021-09-16 05:04:40 +0200goepsilongo(~chacho@2603-7000-ab00-62ed-0000-0000-0000-0bd0.res6.spectrum.com) (Quit: Konversation terminated!)
2021-09-16 05:07:49 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 252 seconds)
2021-09-16 05:13:17 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2021-09-16 05:15:46 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-09-16 05:17:12 +0200zaquest(~notzaques@5.128.210.178)
2021-09-16 05:20:38 +0200 <Cajun> Idlework: if you want to learn `massiv` (which i highly recommend as an upgrade to `repa` and a good cpu-bound upgrade to `accelerate` ) he has a 6 part talk from 2019 about the library. its quite long, around 6 hours but itll tell you the ins and outs of the library
2021-09-16 05:21:02 +0200 <ldlework> phew
2021-09-16 05:21:05 +0200 <ldlework> hit me I guess
2021-09-16 05:21:31 +0200 <Cajun> heres 1/6: https://www.youtube.com/watch?v=euEacUD6jQQ
2021-09-16 05:21:35 +0200 <ldlework> thanks
2021-09-16 05:23:15 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 05:23:16 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 05:23:16 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 05:25:49 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-09-16 05:29:06 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2021-09-16 05:38:50 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2021-09-16 05:39:54 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 05:46:36 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 265 seconds)
2021-09-16 05:50:10 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-09-16 05:52:08 +0200falafel(~falafel@2603-8000-d800-688c-4852-3b82-73df-20ff.res6.spectrum.com)
2021-09-16 05:54:01 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-09-16 05:55:01 +0200notzmv(~zmv@user/notzmv)
2021-09-16 05:58:25 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
2021-09-16 06:07:59 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 06:08:19 +0200jokleinn(~jokleinn@user/jokleinn) (Ping timeout: 252 seconds)
2021-09-16 06:15:20 +0200phma(~phma@host-67-44-208-97.hnremote.net) (Read error: Connection reset by peer)
2021-09-16 06:18:56 +0200phma(~phma@host-67-44-208-97.hnremote.net)
2021-09-16 06:21:42 +0200haysh_
2021-09-16 06:23:14 +0200texasmynsted(~texasmyns@99.96.221.112) (WeeChat 3.1)
2021-09-16 06:37:09 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 06:40:23 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds)
2021-09-16 06:49:45 +0200roboguy_(~roboguy_@2605:a601:afe7:9f00:d11a:2286:b23f:5e4c) ()
2021-09-16 06:49:45 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-09-16 06:49:58 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 06:50:07 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-09-16 06:56:06 +0200dsrt^(~dsrt@68.101.54.227) (Remote host closed the connection)
2021-09-16 07:03:42 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 07:07:14 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi)
2021-09-16 07:07:20 +0200zmt00(~zmt00@user/zmt00)
2021-09-16 07:10:43 +0200zmt01(~zmt00@user/zmt00) (Ping timeout: 268 seconds)
2021-09-16 07:10:52 +0200michalz(~michalz@185.246.204.61)
2021-09-16 07:11:58 +0200gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2021-09-16 07:13:07 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 07:14:02 +0200qbt(~edun@user/edun)
2021-09-16 07:15:26 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Read error: Connection reset by peer)
2021-09-16 07:15:43 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-16 07:16:12 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-09-16 07:16:35 +0200gentauro(~gentauro@user/gentauro)
2021-09-16 07:20:36 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 07:20:53 +0200aws(~aws@mx1.aosync.me)
2021-09-16 07:21:36 +0200sagax(~sagax_nb@user/sagax)
2021-09-16 07:24:02 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 07:24:03 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 07:25:08 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 07:25:31 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
2021-09-16 07:26:32 +0200aws(~aws@mx1.aosync.me) (Leaving)
2021-09-16 07:26:43 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-16 07:30:05 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 07:30:05 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 07:30:05 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 07:34:40 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-09-16 07:37:25 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-09-16 07:37:31 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-16 07:39:06 +0200greg8128(~user@50.47.115.102) (Remote host closed the connection)
2021-09-16 07:40:20 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-09-16 07:43:07 +0200 <Orbstheorem> The more I play with `ViewPatterns`, the more I like them, but I also have to admit, it makes the code look a bit scarier x)
2021-09-16 07:52:10 +0200ellie(~ellie@user/ellie) (Quit: The Lounge - https://thelounge.chat)
2021-09-16 07:52:24 +0200ellie(~ellie@user/ellie)
2021-09-16 07:53:47 +0200 <c_wraith> You can use them with Pattern Synonyms to make them look much more normal
2021-09-16 07:56:07 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-16 07:57:47 +0200chele(~chele@user/chele)
2021-09-16 08:00:01 +0200 <Orbstheorem> Oh, neat!
2021-09-16 08:02:33 +0200phma(~phma@host-67-44-208-97.hnremote.net) (Read error: Connection reset by peer)
2021-09-16 08:04:11 +0200nshepperd(nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (Quit: quit)
2021-09-16 08:04:11 +0200nshepperd2(~nshepperd@li364-218.members.linode.com) (Quit: The Lounge - https://thelounge.chat)
2021-09-16 08:04:23 +0200phma(~phma@host-67-44-208-97.hnremote.net)
2021-09-16 08:05:57 +0200brainfreeze(~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection)
2021-09-16 08:09:50 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-09-16 08:10:50 +0200Akronymus(~Akronymus@85.31.8.180)
2021-09-16 08:12:12 +0200img(~img@user/img)
2021-09-16 08:13:36 +0200ubert(~Thunderbi@178.165.161.81.wireless.dyn.drei.com)
2021-09-16 08:14:51 +0200ph88(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a)
2021-09-16 08:15:40 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-09-16 08:18:16 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-09-16 08:18:20 +0200ph88^(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a) (Ping timeout: 268 seconds)
2021-09-16 08:19:03 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 08:23:10 +0200falafel(~falafel@2603-8000-d800-688c-4852-3b82-73df-20ff.res6.spectrum.com) (Ping timeout: 260 seconds)
2021-09-16 08:23:17 +0200nshepperd2(~nshepperd@li364-218.members.linode.com)
2021-09-16 08:23:20 +0200nshepperd(nshepperd@2600:3c03::f03c:92ff:fe28:92c9)
2021-09-16 08:23:40 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-09-16 08:27:10 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2021-09-16 08:30:01 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.1)
2021-09-16 08:31:41 +0200falafel(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com)
2021-09-16 08:31:50 +0200nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.2)
2021-09-16 08:33:31 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-09-16 08:33:41 +0200ubert1(~Thunderbi@178.165.161.81.wireless.dyn.drei.com)
2021-09-16 08:34:14 +0200pfurla(~pfurla@64.145.79.69)
2021-09-16 08:35:40 +0200ubert(~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Ping timeout: 240 seconds)
2021-09-16 08:35:40 +0200ubert1ubert
2021-09-16 08:36:49 +0200pfurla_(~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 252 seconds)
2021-09-16 08:37:18 +0200benin036932301(~benin@183.82.24.197)
2021-09-16 08:38:41 +0200xff0x(~xff0x@2001:1a81:526d:1c00:a4aa:2b9e:15c4:9931) (Ping timeout: 268 seconds)
2021-09-16 08:39:14 +0200xff0x(~xff0x@port-92-195-42-138.dynamic.as20676.net)
2021-09-16 08:39:47 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-09-16 08:41:27 +0200pfurla_(~pfurla@ool-182ed2e2.dyn.optonline.net)
2021-09-16 08:43:08 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Read error: Connection reset by peer)
2021-09-16 08:44:28 +0200pfurla(~pfurla@64.145.79.69) (Ping timeout: 265 seconds)
2021-09-16 08:45:24 +0200falafel(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com) (Read error: Connection reset by peer)
2021-09-16 08:45:30 +0200falafel_(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com)
2021-09-16 08:47:56 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 268 seconds)
2021-09-16 08:48:15 +0200cfricke(~cfricke@user/cfricke)
2021-09-16 08:49:16 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 08:49:35 +0200xsperry(~as@user/xsperry)
2021-09-16 08:49:37 +0200xsperry(~as@user/xsperry) (Excess Flood)
2021-09-16 08:50:08 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl)
2021-09-16 08:51:15 +0200kuribas(~user@ptr-25vy0i96fc65i21clnv.18120a2.ip6.access.telenet.be)
2021-09-16 08:52:07 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-16 08:52:46 +0200benin036932301(~benin@183.82.24.197) (Ping timeout: 252 seconds)
2021-09-16 08:53:05 +0200benin036932301(~benin@183.82.24.197)
2021-09-16 08:54:02 +0200falafel__(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com)
2021-09-16 08:57:14 +0200falafel_(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com) (Ping timeout: 260 seconds)
2021-09-16 09:02:31 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 09:03:53 +0200jakalx(~jakalx@base.jakalx.net)
2021-09-16 09:04:08 +0200 <kuribas> I got to present my haskell project to the company. Mostly it went well, they where quite interested. They asked me to explain why I think haskell is a good fit for the project.
2021-09-16 09:05:32 +0200 <kuribas> One example I give was type directed parsing of the CSV, which allows you to easily parse code with good error messages.
2021-09-16 09:05:47 +0200 <kuribas> Their response "we can do that in lisp, you don't need haskell for that"
2021-09-16 09:06:30 +0200 <tdammers> I can do that in C, no need for lisp
2021-09-16 09:06:30 +0200 <kuribas> My claims for robustness where refuted with "those are easy fixes, we don't care".
2021-09-16 09:06:55 +0200 <kuribas> point is, you "can" do this in lisp/clojure, but nobody does.
2021-09-16 09:07:06 +0200 <tdammers> case in point, though, CSV parsing is maybe not the most compelling example
2021-09-16 09:07:22 +0200 <Akronymus> csv's aren't even a good format
2021-09-16 09:07:37 +0200 <Akronymus> escape character > escaping the range
2021-09-16 09:07:43 +0200 <kuribas> true, but loading CSVs into the database was the usecase for this project.
2021-09-16 09:07:47 +0200 <tdammers> technically, CSV isn't even a format at all, there is no standard
2021-09-16 09:07:55 +0200 <kuribas> and we'll go to .ods
2021-09-16 09:08:16 +0200 <tdammers> seriously though, CSV data is basically [[String]], so there's not much to be gained in terms of type safety
2021-09-16 09:08:49 +0200 <Akronymus> But if you have a separator in the data, you have to use "
2021-09-16 09:08:52 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it)
2021-09-16 09:08:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Remote host closed the connection)
2021-09-16 09:09:06 +0200 <Akronymus> And if you have " in it too, you need to use "" afair
2021-09-16 09:09:09 +0200 <kuribas> tdammers: you need a parser [String] -> Either err a
2021-09-16 09:09:26 +0200 <Akronymus> Just let me do \<escape character>
2021-09-16 09:09:28 +0200 <kuribas> or (Map String String) -> a
2021-09-16 09:09:44 +0200 <tdammers> what? no
2021-09-16 09:09:58 +0200 <tdammers> there are only 2 special characters, you can special-case those in code
2021-09-16 09:10:34 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-09-16 09:10:37 +0200VoidNoir0(~VoidNoir0@72.80.203.52)
2021-09-16 09:12:24 +0200 <Akronymus> tdammers `,;.:` all of those are valid for csv afair
2021-09-16 09:12:29 +0200 <kuribas> tdammers: but parsing a record is still better than taking a list with clojure types, and getting a stacktrace when the types don't match later.
2021-09-16 09:12:37 +0200 <Akronymus> Along with quoting
2021-09-16 09:13:17 +0200 <kuribas> three quotes, no?
2021-09-16 09:13:28 +0200 <kuribas> "abc" => """abc"""
2021-09-16 09:15:05 +0200 <kuribas> Another point was that all my queries worked the first time, and the type system even caught something that could be a subtle bug...
2021-09-16 09:15:43 +0200 <kuribas> Their response that it's hard to write such code, and those kind of errors are easy to fix.
2021-09-16 09:15:50 +0200 <DigitalKiwi> o/ ldlework
2021-09-16 09:15:57 +0200 <kuribas> Both of which statements I disagree with.
2021-09-16 09:16:22 +0200 <kuribas> 1) it's not that hard when you know what you do 2) Some of those bugs can be tricky to find.
2021-09-16 09:16:22 +0200 <ldlework> yo yo
2021-09-16 09:17:11 +0200 <awpr> kuribas: I haven't had much luck convincing people with those sorts of obviously different values that there's any value to Haskell. I've had better luck looking for people with the same values as me to begin with
2021-09-16 09:17:27 +0200 <kuribas> awpr: makes sense.
2021-09-16 09:18:03 +0200mousey(~sky@gateway/tor-sasl/mousey)
2021-09-16 09:18:22 +0200 <awpr> but if you have unlimited effort to convince people and manage to succeed, that's awesome
2021-09-16 09:18:31 +0200 <Akronymus> kuribas also: the bugs can make quite expensive problems even if they are easy to fix
2021-09-16 09:19:04 +0200 <kuribas> the sad thing is most of the developers where quite interested, only the two leads where giving me a hard time.
2021-09-16 09:19:18 +0200 <kuribas> trying as hard as possible to refute any of my arguments.
2021-09-16 09:19:21 +0200 <Akronymus> If they want lisp, implement haskell as a DSL? /s
2021-09-16 09:19:26 +0200 <awpr> guerilla Haskell team!
2021-09-16 09:19:30 +0200 <Akronymus> On top of lisp
2021-09-16 09:20:03 +0200 <Akronymus> kuribas was it a thesis defense or something?
2021-09-16 09:20:10 +0200vaucouleur(~vaucouleu@78.194.70.105)
2021-09-16 09:20:16 +0200 <kuribas> Akronymus: nah, a project I am doing in the company.
2021-09-16 09:20:30 +0200 <kuribas> It felt a bit like that yeah...
2021-09-16 09:21:21 +0200 <tdammers> kuribas: how can the types not match? It's all just strings. Converting those to "proper" types is something you'd do later, when you map the list-of-string CSV rows to more meaningful record types.
2021-09-16 09:21:34 +0200 <tdammers> I wouldn't call that "parsing"
2021-09-16 09:21:39 +0200 <Akronymus> Numbers?
2021-09-16 09:21:56 +0200 <kuribas> tdammers: I mean, the "later" is what I am talking about.
2021-09-16 09:22:15 +0200 <kuribas> tdammers: not the library code that takes a ByteString and returns a [[String]]
2021-09-16 09:22:24 +0200 <tdammers> OK
2021-09-16 09:23:11 +0200 <kuribas> anyway, the project is still ongoing, so if it works well and is very stable, I'll have proven my point :)
2021-09-16 09:23:32 +0200 <kuribas> then they'll rewrite it in clojure...
2021-09-16 09:23:56 +0200max22-(~maxime@2a01cb088335980073df05503d80cbee.ipv6.abo.wanadoo.fr)
2021-09-16 09:24:02 +0200falafel_(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com)
2021-09-16 09:24:49 +0200 <tdammers> So you need to make the conversion explicit, and you have to somehow fail if the conversion is invalid. That goes for both Haskell and Clojure: in both cases, if the data is malformed, you have to throw (or return Nothing, or a Left Error, or however you decide to signal it) - malformed data is always going to cause a runtime error, not compile-time
2021-09-16 09:24:56 +0200 <kuribas> awpr: you're right, but otherwise I like the values of the company, working in renewables etc...
2021-09-16 09:25:05 +0200 <tdammers> so the "exception throwing" argument is a strawman
2021-09-16 09:25:12 +0200 <tdammers> Haskell's advantage is more subtle
2021-09-16 09:25:16 +0200 <dminuoso> Unless you unsafePerformIO in TemplateHaskell and load the file then, tdammers!
2021-09-16 09:25:23 +0200 <dminuoso> Oh wait, dont even need unsafePerformIO.
2021-09-16 09:25:24 +0200 <kuribas> tdammers: I am also not throwing, I collect the errors using Validation.
2021-09-16 09:25:37 +0200 <tdammers> dminuoso: indeed, there's runIO :: IO a -> Q a
2021-09-16 09:25:48 +0200 <tdammers> kuribas: you can do the same in clojure though
2021-09-16 09:26:04 +0200 <tdammers> kuribas: hence the "or however you want to signal it" part
2021-09-16 09:26:35 +0200 <kuribas> tdammers: you can do anything in any language which is turing complete.
2021-09-16 09:26:37 +0200 <tdammers> kuribas: the advantage that Haskell brings is that once you've done the conversion, the type system can make sure, statically, that from that point onwards, your data is valid as per the type
2021-09-16 09:26:52 +0200 <kuribas> indeed, I made that point.
2021-09-16 09:27:37 +0200falafel__(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com) (Ping timeout: 268 seconds)
2021-09-16 09:28:20 +0200 <kuribas> IMO, it's not just about what the language can do, but also the idiomatic way to do things.
2021-09-16 09:29:07 +0200 <kuribas> Because in practice, people in clojure simply don't start from a single "type definition", which they use to verify the types, etc...
2021-09-16 09:29:24 +0200 <kuribas> Being more rigorous is *possible* in clojure, but most of the time not done.
2021-09-16 09:29:48 +0200 <kuribas> The honeysql libary for example *should* validate the arguments, so the generated SQL is valid, but it doesn't.
2021-09-16 09:30:20 +0200 <tdammers> it's all about ergonomics and meatware performance
2021-09-16 09:30:37 +0200 <tdammers> (which is also why the Turing Completeness argument is utter bullshit)
2021-09-16 09:30:45 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 09:30:47 +0200 <kuribas> Even if the query generator is correct, some error in an unrelated part can cause the generation of an invalid query, or even a valid but simply wrong query.
2021-09-16 09:31:12 +0200 <tdammers> yup. welcome to the crazy world of the Consenting Adults Fallacy
2021-09-16 09:31:20 +0200 <kuribas> what's that?
2021-09-16 09:33:10 +0200falafel_(~falafel@2603-8000-d800-688c-753f-04f5-7eeb-6eb7.res6.spectrum.com) (Ping timeout: 260 seconds)
2021-09-16 09:35:49 +0200bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-16 09:41:08 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 09:43:14 +0200 <tdammers> a thing from the Python community, where they reject features like proper module systems, type systems, controllable mutability, etc., saying that "we're all consenting adults here, we don't need to police each other", which is of course not what any of those features are about, but the sentiments runs quite strong - not just in the Python community, but in pretty much any dynamic language
2021-09-16 09:43:23 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-09-16 09:43:43 +0200 <tdammers> it's kind of a gross overestimation of the reliability and feasibility of manual diligence
2021-09-16 09:44:16 +0200 <tdammers> "without a type checker, how can I make sure that nobody passes the wrong arguments to this function?" - "well, duh, just don't pass the wrong arguments, ezpz"
2021-09-16 09:44:42 +0200 <kuribas> yeah, in our place it's called "garbage in - garbage out".
2021-09-16 09:45:51 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-09-16 09:46:04 +0200 <Drew[m]> "I have an excellent and flawless plan. All it requires is to get everyone everywhere to alter their behavior."
2021-09-16 09:48:09 +0200 <kuribas> How am I suppose to know what is garbage in a function I didn't write, or write a year ago, and which has no type signature...
2021-09-16 09:48:21 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-09-16 09:49:17 +0200 <tdammers> easy: just read the code :P
2021-09-16 09:49:52 +0200 <dminuoso> 09:26:37 tdammers | kuribas: the advantage that Haskell brings is that once you've done the conversion, the type system can make sure, statically, that from that point onwards, your data is valid as per the type
2021-09-16 09:50:16 +0200 <dminuoso> Having seen a talk by Richard Hickey, Im nearly convinced that your averge clojure fan will not care about that in the slightest.
2021-09-16 09:50:56 +0200 <kuribas> yeah
2021-09-16 09:51:00 +0200 <tdammers> having written clojure professionally for a year and a half, I'm gonna say you're probably right
2021-09-16 09:51:48 +0200ph88^(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a)
2021-09-16 09:52:22 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-16 09:55:09 +0200ph88(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a) (Ping timeout: 268 seconds)
2021-09-16 09:59:45 +0200System12_(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com)
2021-09-16 10:03:10 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it) (Ping timeout: 252 seconds)
2021-09-16 10:03:14 +0200hendursa1(~weechat@user/hendursaga)
2021-09-16 10:04:21 +0200mousey(~sky@gateway/tor-sasl/mousey) (Ping timeout: 276 seconds)
2021-09-16 10:05:45 +0200dexterfoo(dexter@2a01:7e00::f03c:91ff:fe86:59ec)
2021-09-16 10:06:00 +0200hendursa2(~weechat@user/hendursaga)
2021-09-16 10:06:18 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-09-16 10:09:09 +0200Gurkenglas(~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de)
2021-09-16 10:09:24 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d)
2021-09-16 10:09:33 +0200hendursa1(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-09-16 10:13:51 +0200nschoe(~quassel@2a04:cec0:11d0:a38e:f051:be01:a43f:d5b6)
2021-09-16 10:14:28 +0200mc47(~mc47@xmonad/TheMC47)
2021-09-16 10:15:06 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Ping timeout: 268 seconds)
2021-09-16 10:15:49 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 10:16:07 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 268 seconds)
2021-09-16 10:17:02 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 10:17:45 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-09-16 10:17:45 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-09-16 10:17:48 +0200allbery_bgeekosaur
2021-09-16 10:17:56 +0200hyiltiz(~quassel@31.220.5.250)
2021-09-16 10:21:09 +0200max22-(~maxime@2a01cb088335980073df05503d80cbee.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-16 10:23:33 +0200theang(~theang@fef109.internetdsl.tpnet.pl) (Ping timeout: 265 seconds)
2021-09-16 10:24:54 +0200theang(~theang@2a00:f41:58f0:244b:4742:c02a:6877:e413)
2021-09-16 10:26:43 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-09-16 10:30:55 +0200benin036932301(~benin@183.82.24.197) (Ping timeout: 268 seconds)
2021-09-16 10:31:25 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c18a:e65c:d93c:bac0)
2021-09-16 10:32:57 +0200eggplant_(~Eggplanta@2600:1700:bef1:5e10:65ff:a34c:5e53:2b94)
2021-09-16 10:33:22 +0200System12_(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) (Ping timeout: 260 seconds)
2021-09-16 10:33:39 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-09-16 10:34:18 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-09-16 10:34:59 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-09-16 10:35:00 +0200chele_(~chele@user/chele)
2021-09-16 10:35:09 +0200chele(~chele@user/chele) (Ping timeout: 265 seconds)
2021-09-16 10:36:28 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c18a:e65c:d93c:bac0) (Ping timeout: 268 seconds)
2021-09-16 10:36:54 +0200chele_(~chele@user/chele) (Remote host closed the connection)
2021-09-16 10:37:55 +0200eggplant_(~Eggplanta@2600:1700:bef1:5e10:65ff:a34c:5e53:2b94) (Ping timeout: 268 seconds)
2021-09-16 10:42:08 +0200azeem(~azeem@2a00:801:23a:d5ca:5e0:54f5:67cf:d7dc) (Read error: Connection reset by peer)
2021-09-16 10:45:46 +0200azeem(~azeem@emp-91-123.eduroam.uu.se)
2021-09-16 10:46:40 +0200mateusz(~mateusz@83.0.46.72.internetdsl.tpnet.pl)
2021-09-16 10:46:51 +0200 <ldlework> I just got hylide working and i'm kind of excited
2021-09-16 10:47:35 +0200__monty__(~toonn@user/toonn)
2021-09-16 10:54:11 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it)
2021-09-16 10:56:00 +0200 <mateusz> Hi! I want to understand deeper why `untest` function cannot compile due to type error. The question is what should I look for in order to understand that? data Test = X Int | Y String deriving Show
2021-09-16 10:56:01 +0200 <mateusz> untest val = case val of ; X i -> i ; Y s -> s
2021-09-16 10:57:13 +0200 <__monty__> mateusz: The first step is really reading the type error.
2021-09-16 10:57:19 +0200 <__monty__> @where paste
2021-09-16 10:57:19 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2021-09-16 10:57:33 +0200 <__monty__> Output includes the errors : )
2021-09-16 10:58:41 +0200Guest2294(~neo3@cpe-292712.ip.primehome.com)
2021-09-16 10:58:48 +0200 <dminuoso> mateusz: The only way to write something as generic as that, is with GADTs.
2021-09-16 10:58:49 +0200Guest2294neo1
2021-09-16 10:59:02 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 260 seconds)
2021-09-16 10:59:10 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2021-09-16 10:59:19 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it) (Ping timeout: 265 seconds)
2021-09-16 10:59:24 +0200 <mateusz> So error says like types don't match, and its probably due to type inference but I wonder if there is any way in standard Haskell (without extensions) to manually annotate that https://paste.tomsmeding.com/2aHWTmAo
2021-09-16 10:59:37 +0200 <dminuoso> The thing is
2021-09-16 10:59:45 +0200 <dminuoso> What do you expect the return type of that function?
2021-09-16 11:00:58 +0200 <mateusz> What I can't understand is that if I annotate this as: `Test -> a` it doesnt work, I would expect type to be a, and based on expression either Int or String
2021-09-16 11:01:11 +0200 <dminuoso> You can do this with GADTs.
2021-09-16 11:01:17 +0200 <dminuoso> % data Test a where X :: Int -> Test Int; Y :: String -> Test String
2021-09-16 11:01:18 +0200 <yahb> dminuoso:
2021-09-16 11:01:28 +0200 <dminuoso> % untest val = case val of; X i -> i; Y s -> s
2021-09-16 11:01:28 +0200 <yahb> dminuoso: ; <interactive>:24:34: error:; * Couldn't match expected type `p' with actual type `Int'; `p' is untouchable inside the constraints: a ~ Int bound by a pattern with constructor: X :: Int -> Test Int, in a case alternative at <interactive>:24:27-29; `p' is a rigid type variable bound by; the inferred type of untest :: Test a -> p; at <interactive>:24:1-44; Possible
2021-09-16 11:01:37 +0200 <dminuoso> Hold on
2021-09-16 11:02:14 +0200 <__monty__> mateusz: But if the return type were 'a' then someone calling the function would get to choose the type. How can your function return a value of any type it is asked for starting from a Test?
2021-09-16 11:02:24 +0200 <mateusz> thanks, will look into that later but I think I should understand why it throws error before I dive into GADTs, any resource or search keyword which might help in it?
2021-09-16 11:02:39 +0200 <dminuoso> % untest :: Test a -> a; untest val = case val of; X i -> i; Y s -> s
2021-09-16 11:02:39 +0200 <yahb> dminuoso:
2021-09-16 11:02:42 +0200 <dminuoso> mateusz: ^- there.
2021-09-16 11:03:00 +0200 <kuribas> mateusz: the idiomatic way is to return a sumtype.
2021-09-16 11:03:08 +0200 <awpr> a) can't infer stuff across GADT constructor matches, but b) I doubt GADTs are the most helpful answer here, this seems like a case of missing some key aspects of type checking
2021-09-16 11:03:14 +0200 <dminuoso> mateusz: Your expectation is *exactly* what GADTs fill. :)
2021-09-16 11:03:28 +0200 <kuribas> or just go to idris :)
2021-09-16 11:03:34 +0200 <dminuoso> Then you can annotate it as `Test a -> a` exactly.
2021-09-16 11:03:52 +0200 <dminuoso> GADTs are a very intuitive and almost obvious conclusion of ADTs, really.
2021-09-16 11:04:10 +0200hpc(~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 260 seconds)
2021-09-16 11:04:40 +0200 <dminuoso> mateusz: So part of the reason without GADTs is the way that type variables work. A type variable is something the caller/consumer must chose.
2021-09-16 11:04:48 +0200 <awpr> sure, but they're probably not the next step after "why doesn't this function work as `forall a. Test -> a`?"
2021-09-16 11:04:56 +0200 <dminuoso> Let's for the same of argument argue that you coudl write it as:
2021-09-16 11:05:03 +0200 <dminuoso> untest :: Test -> a; untest = ...
2021-09-16 11:05:16 +0200 <dminuoso> That means, the *consumer* of untest can pick an arbitrary type for `a`
2021-09-16 11:05:22 +0200sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds)
2021-09-16 11:05:27 +0200 <dminuoso> Irrespective of what the value of Test is.
2021-09-16 11:05:34 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 260 seconds)
2021-09-16 11:06:08 +0200 <dminuoso> So you coudl write something like:
2021-09-16 11:06:18 +0200 <kuribas> the cps version is still "simple" haskell, the GADT is not.
2021-09-16 11:06:20 +0200 <dminuoso> `untest (Y "String") :: Float`
2021-09-16 11:06:26 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2021-09-16 11:06:54 +0200 <dminuoso> Which is of course non-sense.
2021-09-16 11:07:45 +0200 <mateusz> ok so the question is where from comes the constaint of not typing this union like: `Test -> [Int|String]`? Is it from system f?
2021-09-16 11:08:05 +0200 <mateusz> kuribas what you mean by cps?
2021-09-16 11:08:11 +0200 <kuribas> mateusz: Continuation passing style
2021-09-16 11:08:25 +0200 <kuribas> mateusz: That would be "Text -> Either Int String"
2021-09-16 11:08:32 +0200 <__monty__> mateusz: It's because that would mean the caller gets to pick whether the return type is Int or String *regardless* of what the input Test value is.
2021-09-16 11:09:06 +0200chris(~chris@81.96.113.213)
2021-09-16 11:09:09 +0200chrisGuest240
2021-09-16 11:09:19 +0200 <kuribas> mateusz: untest :: Text -> (Int -> a) -> (String -> a) -> a
2021-09-16 11:09:19 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 11:09:23 +0200hpc(~juzz@ip98-169-35-13.dc.dc.cox.net)
2021-09-16 11:09:29 +0200 <__monty__> kuribas: Test, not Text.
2021-09-16 11:09:48 +0200 <kuribas> __monty__: yeah. Muscle memory
2021-09-16 11:11:58 +0200max22-(~maxime@2a01cb08833598004808c986d8fd0bff.ipv6.abo.wanadoo.fr)
2021-09-16 11:12:00 +0200 <awpr> wow, QuickCheck discovered the Haskell `\&` syntax all on its own and showed me a bug regarding it
2021-09-16 11:12:09 +0200Guest240(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-16 11:12:19 +0200nschoe(~quassel@2a04:cec0:11d0:a38e:f051:be01:a43f:d5b6) (Remote host closed the connection)
2021-09-16 11:12:22 +0200 <mateusz> kuribas i don't get this example, why two additional args?
2021-09-16 11:12:33 +0200 <kuribas> mateusz: one for each case
2021-09-16 11:13:13 +0200 <kuribas> mateusz: but note that untest doesn't do anything useful.
2021-09-16 11:13:16 +0200 <mateusz> hmm this example shows how to make polymorphic a possible with untest function?
2021-09-16 11:13:32 +0200nschoe(~quassel@2a04:cec0:11d0:a38e:b326:412:811:9d36)
2021-09-16 11:13:33 +0200 <mateusz> polymorphic `a`
2021-09-16 11:13:40 +0200pounce(~pounce@facebook/engineering/pounce) (Ping timeout: 240 seconds)
2021-09-16 11:13:50 +0200 <kuribas> mateusz: no, `a` is the return type of the continuation.
2021-09-16 11:14:13 +0200 <kuribas> see for example the either function
2021-09-16 11:14:14 +0200 <kuribas> :t either
2021-09-16 11:14:15 +0200 <lambdabot> (a -> c) -> (b -> c) -> Either a b -> c
2021-09-16 11:14:52 +0200 <kuribas> it's case matching on each case.
2021-09-16 11:15:01 +0200 <kuribas> And you get a different continuation for each.
2021-09-16 11:15:19 +0200 <mateusz> why different if both return `c`?
2021-09-16 11:15:45 +0200 <mateusz> I cant handle differently way from a/b to c
2021-09-16 11:15:48 +0200 <kuribas> > either show id $ (Left 2 :: Either Int String)
2021-09-16 11:15:50 +0200 <lambdabot> "2"
2021-09-16 11:16:01 +0200 <kuribas> > either show id $ (Right "2" :: Either Int String)
2021-09-16 11:16:03 +0200 <lambdabot> "2"
2021-09-16 11:16:52 +0200 <kuribas> mateusz: but note that normally you just pattern match. either just makes the code a bit shorter.
2021-09-16 11:17:33 +0200 <kuribas> > case (Left 2 :: Either Int String) of Left i -> show i; Right s -> s
2021-09-16 11:17:35 +0200 <lambdabot> "2"
2021-09-16 11:18:16 +0200 <kuribas> mateusz: you have to handle them differently, since they have different types.
2021-09-16 11:19:01 +0200 <__monty__> mateusz: Inference example, `\x -> toUpper (id x) :: Char -> Char`, what is the inferred type of `id` here?
2021-09-16 11:19:17 +0200pounce(~pounce@facebook/engineering/pounce)
2021-09-16 11:20:02 +0200ishutin_(~ishutin@87-97-12-212.pool.digikabel.hu) (Ping timeout: 260 seconds)
2021-09-16 11:20:40 +0200 <mateusz> __monty__ Char?
2021-09-16 11:21:02 +0200 <__monty__> No, id is a function, so the type has to have an `->`.
2021-09-16 11:21:24 +0200ishutin(~ishutin@80-95-82-223.pool.digikabel.hu)
2021-09-16 11:21:26 +0200 <mateusz> :D i meant `Char->Char` because its derived from lambda annotation
2021-09-16 11:21:47 +0200 <__monty__> And do you see where that Char is coming from?
2021-09-16 11:22:13 +0200 <__monty__> You're inferring it from the *output* side a in `a -> a`, right? Not the input side?
2021-09-16 11:22:15 +0200max22-(~maxime@2a01cb08833598004808c986d8fd0bff.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-09-16 11:22:18 +0200 <mateusz> I think yes, `x` can be Char exclusively so id has to return Char
2021-09-16 11:22:37 +0200 <mateusz> I inferred from input
2021-09-16 11:22:41 +0200 <__monty__> How do you know x can only be Char?
2021-09-16 11:22:43 +0200 <mateusz> input to lambda
2021-09-16 11:22:51 +0200 <__monty__> Ah, crap.
2021-09-16 11:22:54 +0200 <mateusz> from the annotation for lambda: `Char->Char`
2021-09-16 11:22:58 +0200 <__monty__> Shouldn't have put a signature on it >.<
2021-09-16 11:23:03 +0200max22-(~maxime@2a01cb0883359800c203f4e20803de91.ipv6.abo.wanadoo.fr)
2021-09-16 11:23:19 +0200 <__monty__> Let's just pretend I gave you `toUpper . id`.
2021-09-16 11:24:50 +0200 <__monty__> Do you see how the inference for the type of id would be the same even though you have no information about the type of the input?
2021-09-16 11:25:36 +0200 <mateusz> given that toUpper is `Char->Char` and id `a->a`, contraint comes from toUpper which expect `Char` as input so i think it would be `Char->Char`
2021-09-16 11:25:46 +0200 <__monty__> Exactly.
2021-09-16 11:25:56 +0200 <__monty__> How about `toUpper . untest`?
2021-09-16 11:26:00 +0200 <mateusz> Are there any priorities in inference rules?
2021-09-16 11:26:06 +0200 <mateusz> wow give me sec
2021-09-16 11:28:11 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it)
2021-09-16 11:31:14 +0200 <mateusz> consider `toUpper :: Text->Text`, OverloadedStrings, I can't pick untest implementation which dosnt raise type error
2021-09-16 11:31:28 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-09-16 11:32:03 +0200 <mateusz> or will define untestY as function which returns always Text, so it matches
2021-09-16 11:32:33 +0200 <mateusz> __monty__
2021-09-16 11:34:39 +0200hannessteffenhag(~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
2021-09-16 11:34:47 +0200 <__monty__> mateusz: Let's take `Data.Char.toUpper . untest`. OverloadedStrings is only complicating matters.
2021-09-16 11:35:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-09-16 11:35:46 +0200 <mateusz> so not sure which implementation of untest you picked, the one I proposed (`Test -> a`) which doesnt compile?
2021-09-16 11:35:54 +0200 <__monty__> Yeah.
2021-09-16 11:36:33 +0200 <mateusz> ok, so `Test -> Char` but it doesnt sound right to me becaouse untest may also return Int which is unhandled
2021-09-16 11:36:46 +0200 <__monty__> No, it's exactly correct.
2021-09-16 11:37:02 +0200 <__monty__> Do you see how I as a user of your untest function get to constrain the return type?
2021-09-16 11:37:38 +0200 <__monty__> You seemed to think that as the definer of untest you got to fill in the `a`, but that's not the case.
2021-09-16 11:38:04 +0200 <__monty__> If you say your function returns `a` it *really* has to be able to return any type.
2021-09-16 11:38:41 +0200 <mateusz> I think I start to understand that
2021-09-16 11:38:49 +0200 <__monty__> Just like how when you say a function takes input type `a` it has to actually be able to deal with *any* value I can give it.
2021-09-16 11:38:53 +0200Everything(~Everythin@37.115.210.35) ()
2021-09-16 11:40:36 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-09-16 11:40:49 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2021-09-16 11:41:05 +0200 <mateusz> So I wonder if there you know about any formal description of this so I can revise it in moments of doubt?
2021-09-16 11:41:13 +0200nschoe(~quassel@2a04:cec0:11d0:a38e:b326:412:811:9d36) (Ping timeout: 268 seconds)
2021-09-16 11:41:13 +0200nschoe_(~quassel@178.251.84.79)
2021-09-16 11:41:29 +0200xsperry(~as@user/xsperry)
2021-09-16 11:41:30 +0200xsperry(~as@user/xsperry) (Excess Flood)
2021-09-16 11:42:40 +0200pounce(~pounce@facebook/engineering/pounce) (Ping timeout: 240 seconds)
2021-09-16 11:43:18 +0200pounce(~pounce@facebook/engineering/pounce)
2021-09-16 11:43:52 +0200max22-(~maxime@2a01cb0883359800c203f4e20803de91.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-09-16 11:44:37 +0200max22-(~maxime@2a01cb0883359800326db5d5b924c729.ipv6.abo.wanadoo.fr)
2021-09-16 11:47:12 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:6430:ba41:fc15:9c04)
2021-09-16 11:47:56 +0200xsperry(~as@user/xsperry)
2021-09-16 11:48:49 +0200eggplant_(~Eggplanta@2600:1700:bef1:5e10:c461:91fb:5e87:26b7)
2021-09-16 11:50:52 +0200 <kuribas> mateusz: it's easy to confuse the type variable `a` with a supertype, or Any type. But it really is just a variable, it stands for another type.
2021-09-16 11:51:40 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:6430:ba41:fc15:9c04) (Ping timeout: 240 seconds)
2021-09-16 11:52:24 +0200 <__monty__> Unfortunately I don't have a good reference, it's the kind of thing you internalize and forget where you learned about it, though for me that was here : )
2021-09-16 11:52:37 +0200 <kuribas> types and programming languages?
2021-09-16 11:52:42 +0200max22-(~maxime@2a01cb0883359800326db5d5b924c729.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-09-16 11:53:10 +0200eggplant_(~Eggplanta@2600:1700:bef1:5e10:c461:91fb:5e87:26b7) (Ping timeout: 240 seconds)
2021-09-16 11:53:34 +0200 <mateusz> thanks all for help, will look into that @kur
2021-09-16 11:54:15 +0200hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-09-16 11:54:28 +0200max22-(~maxime@2a01cb0883359800b93d6fac2a60b640.ipv6.abo.wanadoo.fr)
2021-09-16 11:54:46 +0200max22-(~maxime@2a01cb0883359800b93d6fac2a60b640.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-09-16 11:55:42 +0200hololeap(~hololeap@user/hololeap)
2021-09-16 11:57:27 +0200hannessteffenhag(~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de)
2021-09-16 11:58:07 +0200chris(~chris@81.96.113.213)
2021-09-16 11:58:11 +0200chrisGuest5493
2021-09-16 11:58:23 +0200 <__monty__> Quite a heavy reference for something like this : )
2021-09-16 12:00:40 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
2021-09-16 12:10:18 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-16 12:10:51 +0200 <kuribas> yeah, a basic haskell course should explain it as well.
2021-09-16 12:12:33 +0200max22-(~maxime@2a01cb08833598005b81de1e843a31cc.ipv6.abo.wanadoo.fr)
2021-09-16 12:16:10 +0200azeem(~azeem@emp-91-123.eduroam.uu.se) (Read error: Connection reset by peer)
2021-09-16 12:16:44 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 12:20:27 +0200jacks2(~bc8165b6@217.29.117.252)
2021-09-16 12:21:37 +0200 <DigitalKiwi> i missed half of that conversation and thought __monty__ said this irc channel was quite a heavy reference not tapl and i think that would be more correct lol
2021-09-16 12:21:59 +0200 <kuribas> ah right
2021-09-16 12:22:18 +0200 <DigitalKiwi> at least if i set out to read tapl i could do it in a finite amount of time
2021-09-16 12:22:42 +0200 <DigitalKiwi> >10 years probably and i'm still reading this channel
2021-09-16 12:24:28 +0200chele(~chele@user/chele)
2021-09-16 12:24:29 +0200 <kuribas> this channel good when you are stuck.
2021-09-16 12:24:43 +0200 <kuribas> But you really should read a book if you are serious with learning.
2021-09-16 12:25:03 +0200 <DigitalKiwi> is it bad when i am not stuck
2021-09-16 12:26:58 +0200thyriaen(~thyriaen@dynamic-078-055-122-076.78.55.pool.telefonica.de)
2021-09-16 12:27:43 +0200tfeb(~tfb@host81-155-127-18.range81-155.btcentralplus.com)
2021-09-16 12:28:12 +0200tfeb(~tfb@host81-155-127-18.range81-155.btcentralplus.com) (Read error: Connection reset by peer)
2021-09-16 12:32:13 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 252 seconds)
2021-09-16 12:32:18 +0200Guest5493(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-16 12:35:03 +0200vysn(~vysn@user/vysn)
2021-09-16 12:36:23 +0200raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e)
2021-09-16 12:36:50 +0200frisbro(uid518331@id-518331.helmsley.irccloud.com)
2021-09-16 12:37:48 +0200frisbro_(uid518331@id-518331.helmsley.irccloud.com)
2021-09-16 12:49:58 +0200mateusz(~mateusz@83.0.46.72.internetdsl.tpnet.pl) (Quit: Client closed)
2021-09-16 12:51:45 +0200raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) (Ping timeout: 260 seconds)
2021-09-16 12:53:03 +0200raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e)
2021-09-16 13:00:59 +0200alx741(~alx741@181.196.68.49)
2021-09-16 13:03:45 +0200raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) (Quit: WeeChat 3.2)
2021-09-16 13:04:34 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 260 seconds)
2021-09-16 13:10:18 +0200neurocyte(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2021-09-16 13:12:40 +0200gentauro(~gentauro@user/gentauro) (Ping timeout: 240 seconds)
2021-09-16 13:12:46 +0200Akronymus(~Akronymus@85.31.8.180) (Quit: Client closed)
2021-09-16 13:12:58 +0200Akronymus(~Akronymus@85.31.8.180)
2021-09-16 13:14:22 +0200neurocyte(~neurocyte@185.117.68.241)
2021-09-16 13:14:22 +0200neurocyte(~neurocyte@185.117.68.241) (Changing host)
2021-09-16 13:14:22 +0200neurocyte(~neurocyte@user/neurocyte)
2021-09-16 13:16:49 +0200jespada(~jespada@2803:9800:9842:7a62:e809:3117:30c6:aea3)
2021-09-16 13:20:27 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-09-16 13:20:44 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it)
2021-09-16 13:22:29 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 13:27:54 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-09-16 13:29:36 +0200gentauro(~gentauro@user/gentauro)
2021-09-16 13:30:25 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-09-16 13:37:04 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 13:37:09 +0200Akronymus(~Akronymus@85.31.8.180) (Quit: Client closed)
2021-09-16 13:37:14 +0200zer0bitz(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi)
2021-09-16 13:37:19 +0200Akronymus(~Akronymus@85.31.8.180)
2021-09-16 13:40:56 +0200jacks2(~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/)
2021-09-16 13:41:22 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-09-16 13:46:31 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-09-16 13:46:33 +0200GuestTHU16_1(~GuestTHU1@219.91.230.26)
2021-09-16 13:46:52 +0200 <GuestTHU16_1> how can the + operator be prefix
2021-09-16 13:47:01 +0200 <GuestTHU16_1> like + a b
2021-09-16 13:47:11 +0200 <sshine> (+) a b
2021-09-16 13:47:18 +0200 <sshine> > (+) 1 2
2021-09-16 13:47:20 +0200 <lambdabot> 3
2021-09-16 13:47:24 +0200 <GuestTHU16_1> ok.
2021-09-16 13:47:31 +0200caubert(~caubert@136.244.111.235) (Quit: WeeChat 3.2)
2021-09-16 13:48:02 +0200 <hpc> and for completeness, if you have a "lettery" identifier you can do a `plus` b
2021-09-16 13:48:07 +0200 <hpc> to infix it
2021-09-16 13:48:42 +0200 <_________> what about postfix ?
2021-09-16 13:48:52 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
2021-09-16 13:49:06 +0200 <sshine> they were never that popular
2021-09-16 13:49:40 +0200 <GuestTHU16_1> Prelude> 3 `plus` 4
2021-09-16 13:49:41 +0200 <GuestTHU16_1> <interactive>:32:4: error:
2021-09-16 13:49:41 +0200 <GuestTHU16_1> Variable not in scope: plus :: Integer -> Integer -> t
2021-09-16 13:49:54 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:9052:e8ea:d68a:7809)
2021-09-16 13:50:22 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-16 13:50:30 +0200gehmehgeh(~user@user/gehmehgeh)
2021-09-16 13:50:49 +0200 <sshine> :t (":" `isPrefixOf`)
2021-09-16 13:50:50 +0200 <lambdabot> [Char] -> Bool
2021-09-16 13:51:01 +0200 <sshine> not exactly postfix, but sort of.
2021-09-16 13:51:14 +0200 <geekosaur> there's an extension for "postfix" that is pretty limited
2021-09-16 13:51:58 +0200 <sshine> yeah, I went looking for it, and the first page of search results wasn't even that useful, so I'm guessing people have stopped using it.
2021-09-16 13:52:04 +0200 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/users_guide/exts/rebindable_syntax.html#postfix…
2021-09-16 13:52:25 +0200 <geekosaur> not sure they ever really used it
2021-09-16 13:52:40 +0200 <sshine> oh, uhm. yeah.
2021-09-16 13:52:52 +0200 <geekosaur> (also, since 7.10? that was in 6.6)
2021-09-16 13:52:56 +0200Pickchea(~private@user/pickchea)
2021-09-16 13:54:01 +0200 <sshine> > let (!) n = product [1..n] in (5 !)
2021-09-16 13:54:02 +0200 <lambdabot> 120
2021-09-16 13:54:09 +0200caubert(~caubert@136.244.111.235)
2021-09-16 13:54:13 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:9052:e8ea:d68a:7809) (Ping timeout: 252 seconds)
2021-09-16 13:54:32 +0200 <_________> > let (+) l = sum l in ([1..5] +)
2021-09-16 13:54:34 +0200 <lambdabot> 15
2021-09-16 13:54:49 +0200 <_________> nice
2021-09-16 13:56:29 +0200System123(~System123@net-37-179-171-3.cust.vodafonedsl.it) (Ping timeout: 268 seconds)
2021-09-16 13:56:30 +0200 <sshine> _________, I've used this more to create more readable function names, e.g. (":" `isPrefixOf`) vs. isPrefixOf ":" (since it looks like "something is prefix of ":", when in fact it is ":" that is prefix of something).
2021-09-16 13:57:58 +0200 <sshine> _________, so normally you might write x `isPrefixOf` y, but in cases where you only do partial application, rather than e.g. 'any (\y -> x `isPrefixOf` y) ys' or 'any (isPrefixOf x) ys', I prefer 'any (x `isPrefixOf`) ys'.
2021-09-16 13:58:46 +0200 <sshine> _________, having actual postfix operators like '!' to signify factorial is pretty rarely useful, so you don't really see a bunch of functions grow out of that idea.
2021-09-16 13:59:13 +0200GuestTHU16_1(~GuestTHU1@219.91.230.26) (Quit: Client closed)
2021-09-16 13:59:44 +0200 <sshine> _________, have you seen the monkey operator? (:[])
2021-09-16 13:59:59 +0200 <sshine> > let monkey = (:[]) in monkey 5
2021-09-16 14:00:00 +0200 <lambdabot> [5]
2021-09-16 14:00:31 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.2.1)
2021-09-16 14:01:03 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 265 seconds)
2021-09-16 14:01:17 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi)
2021-09-16 14:02:55 +0200chris(~chris@81.96.113.213)
2021-09-16 14:02:59 +0200chrisGuest3036
2021-09-16 14:03:29 +0200 <_________> > let (+) = sum, (*) = product in ((([1,2,3] +) [6,7] :) *)
2021-09-16 14:03:30 +0200 <lambdabot> <hint>:1:14: error: parse error on input ‘,’
2021-09-16 14:03:40 +0200 <_________> > let (+) = sum in let (*) = product in ((([1,2,3] +) [6,7] :) *)
2021-09-16 14:03:42 +0200 <lambdabot> error:
2021-09-16 14:03:42 +0200 <lambdabot> • Could not deduce (Num a0)
2021-09-16 14:03:42 +0200 <lambdabot> from the context: (Foldable ((->) [a]), Num a1, Num ([a1] -> a),
2021-09-16 14:05:15 +0200max22-(~maxime@2a01cb08833598005b81de1e843a31cc.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2021-09-16 14:05:56 +0200sheddow(~sheddow@84-52-255.245.3p.ntebredband.no)
2021-09-16 14:07:08 +0200oxide(~lambda@user/oxide)
2021-09-16 14:07:22 +0200Guest3036(~chris@81.96.113.213) (Ping timeout: 252 seconds)
2021-09-16 14:08:16 +0200cuz(~user@2601:182:cc02:8b0:c414:97d1:1f4d:202f)
2021-09-16 14:09:29 +0200cuz(~user@2601:182:cc02:8b0:c414:97d1:1f4d:202f) (Remote host closed the connection)
2021-09-16 14:09:52 +0200cuz(~user@2601:182:cc02:8b0:c414:97d1:1f4d:202f)
2021-09-16 14:11:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-09-16 14:11:10 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 14:11:22 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 14:14:23 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.2.1)
2021-09-16 14:16:33 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2021-09-16 14:16:39 +0200zer0bitz_(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi)
2021-09-16 14:17:15 +0200hololeap(~hololeap@user/hololeap)
2021-09-16 14:17:48 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 14:18:38 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi)
2021-09-16 14:18:56 +0200zer0bitz(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi) (Ping timeout: 265 seconds)
2021-09-16 14:23:24 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 14:23:57 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi)
2021-09-16 14:25:23 +0200dsrt^(~dsrt@68.101.54.227)
2021-09-16 14:26:44 +0200 <sshine> > let (┻━┻) = intersperse 'f'; ノಠ益ಠノ = "Python" in (ノಠ益ಠノ ┻━┻)
2021-09-16 14:26:45 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 14:26:45 +0200 <lambdabot> "Pfyftfhfofn"
2021-09-16 14:27:20 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 14:28:39 +0200 <Hecate> https://www.unicode.org/versions/Unicode14.0.0/ it's out!
2021-09-16 14:28:57 +0200jtomas(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net)
2021-09-16 14:30:01 +0200neurocyte(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2021-09-16 14:30:42 +0200 <sshine> 🥳 𝕪𝕒𝕪!
2021-09-16 14:30:55 +0200dsrt^(~dsrt@68.101.54.227) (Remote host closed the connection)
2021-09-16 14:33:06 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 14:34:07 +0200neurocyte(~neurocyte@185.117.68.241)
2021-09-16 14:34:07 +0200neurocyte(~neurocyte@185.117.68.241) (Changing host)
2021-09-16 14:34:07 +0200neurocyte(~neurocyte@user/neurocyte)
2021-09-16 14:35:33 +0200Vajb(~Vajb@85-76-8-0-nat.elisa-mobile.fi)
2021-09-16 14:35:58 +0200Vajb(~Vajb@85-76-8-0-nat.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 14:35:59 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-09-16 14:36:09 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 14:38:03 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-09-16 14:40:20 +0200 <sshine> wow, you can sponsor a unicode character: https://www.unicode.org/consortium/adopt-a-character.html
2021-09-16 14:42:49 +0200nedh^(~nedh@68.101.54.227)
2021-09-16 14:45:06 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 14:46:04 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi)
2021-09-16 14:48:37 +0200xff0x(~xff0x@port-92-195-42-138.dynamic.as20676.net) (Ping timeout: 252 seconds)
2021-09-16 14:49:32 +0200juhp(~juhp@bb220-255-204-220.singnet.com.sg)
2021-09-16 14:53:13 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 14:54:01 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi)
2021-09-16 14:54:48 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-16 14:55:31 +0200xff0x(~xff0x@2001:1a81:526d:1c00:6ed0:c2d3:55f8:e793)
2021-09-16 14:55:37 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2021-09-16 14:56:00 +0200Cajun(~Cajun@user/cajun)
2021-09-16 14:56:05 +0200 <Hecate> % scanl1 (+) . map (succ . length) $ [["lol", "mdr", "haha"], ["blah", "bleh"]]
2021-09-16 14:56:05 +0200 <yahb> Hecate: [4,7]
2021-09-16 14:59:34 +0200benin036932301(~benin@183.82.205.89)
2021-09-16 14:59:53 +0200 <sshine> > ('o':) . pure . chr . foldl1 (\x y -> 10*x+y) . scanl1 (+) . map (succ . length) $ [["lol", "mdr", "haha"], ["blah", "bleh"]]
2021-09-16 14:59:54 +0200 <lambdabot> "o/"
2021-09-16 15:01:09 +0200chris(~chris@81.96.113.213)
2021-09-16 15:01:12 +0200chrisGuest7647
2021-09-16 15:02:38 +0200AlexNoo(~AlexNoo@178.34.162.211) (Quit: Leaving)
2021-09-16 15:03:26 +0200Alex_test(~al_test@178.34.162.211) (Quit: ;-)
2021-09-16 15:03:33 +0200AlexZenon(~alzenon@178.34.162.211) (Quit: ;-)
2021-09-16 15:03:56 +0200ph88(~ph88@ip5f5af6fd.dynamic.kabel-deutschland.de)
2021-09-16 15:06:40 +0200ph88^(~ph88@2a02:8109:9e00:7e5c:c17a:3fe0:849c:9e0a) (Ping timeout: 240 seconds)
2021-09-16 15:06:41 +0200Vajb(~Vajb@nbptnppvs5wp2vjps-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-16 15:06:55 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-09-16 15:07:30 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 15:09:31 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 15:09:52 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 15:12:41 +0200hendursa2(~weechat@user/hendursaga) (Quit: hendursa2)
2021-09-16 15:12:57 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Ping timeout: 268 seconds)
2021-09-16 15:13:13 +0200jstolarek(~jstolarek@165.231.33.108)
2021-09-16 15:13:28 +0200hendursaga(~weechat@user/hendursaga)
2021-09-16 15:13:59 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-16 15:14:04 +0200zer0bitz_(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-09-16 15:15:03 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-16 15:17:28 +0200Lycurgus(~juan@98.4.112.204)
2021-09-16 15:17:40 +0200vysn(~vysn@user/vysn) (Ping timeout: 268 seconds)
2021-09-16 15:18:17 +0200jstolarek(~jstolarek@165.231.33.108) (Ping timeout: 268 seconds)
2021-09-16 15:19:42 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 15:20:04 +0200jstolarek(~jstolarek@188.241.156.4)
2021-09-16 15:24:42 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-217f-c4e6-d1e6-03f0.res6.spectrum.com)
2021-09-16 15:26:55 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-09-16 15:27:07 +0200AlexZenon(~alzenon@178.34.162.211)
2021-09-16 15:27:50 +0200AlexZenon(~alzenon@178.34.162.211) (Client Quit)
2021-09-16 15:28:09 +0200hammock(~Hammock@2600:1700:19a1:3330::588) (Ping timeout: 268 seconds)
2021-09-16 15:28:09 +0200AlexZenon(~alzenon@178.34.162.211)
2021-09-16 15:28:18 +0200AlexNoo(~AlexNoo@178.34.162.211)
2021-09-16 15:29:57 +0200Alex_test(~al_test@178.34.162.211)
2021-09-16 15:30:28 +0200motherfsck(~motherfsc@user/motherfsck)
2021-09-16 15:31:19 +0200System123(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com)
2021-09-16 15:31:50 +0200Sgeo(~Sgeo@user/sgeo)
2021-09-16 15:32:30 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-09-16 15:36:27 +0200jstolarek(~jstolarek@188.241.156.4) (Read error: Connection reset by peer)
2021-09-16 15:37:06 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 15:39:03 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl)
2021-09-16 15:41:21 +0200tito(tito@tilde.team)
2021-09-16 15:43:23 +0200Guest7647(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-16 15:49:02 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-09-16 15:49:23 +0200max22-(~maxime@2a01cb0883359800cbea6a523dcdbf78.ipv6.abo.wanadoo.fr)
2021-09-16 15:50:14 +0200jokleinn(~jokleinn@user/jokleinn) (Ping timeout: 260 seconds)
2021-09-16 15:50:21 +0200 <kuribas> We are getting this error on macOs: Undefined symbols for architecture x86_64: > "___darwin_check_fd_set_overflow", referenced from: > _awaitEvent in libHSrts.a(Select.o) > ld: symbol(s) not found for architecture x86_64 > clang: error: linker command failed with exit code 1 (use -v to see invocation) > `gcc' failed in phase `Linker'. (Exit code: 1)
2021-09-16 15:53:21 +0200 <maerwald> kuribas: https://gitlab.haskell.org/ghc/ghc/-/issues/19950
2021-09-16 15:53:43 +0200 <maerwald> seems you're not running 8.10.7
2021-09-16 15:55:17 +0200 <kuribas> ghc?
2021-09-16 15:55:27 +0200 <maerwald> yeah
2021-09-16 15:56:11 +0200 <kuribas> 8.10.7
2021-09-16 15:56:17 +0200 <kuribas> 8.10.6 sorry
2021-09-16 15:56:20 +0200 <maerwald> yeah
2021-09-16 15:56:44 +0200chris(~chris@81.96.113.213)
2021-09-16 15:56:47 +0200chrisGuest9212
2021-09-16 15:57:07 +0200Guest9212(~chris@81.96.113.213) (Read error: Connection reset by peer)
2021-09-16 15:58:37 +0200chris(~chris@81.96.113.213)
2021-09-16 15:58:41 +0200chrisGuest3568
2021-09-16 15:59:43 +0200 <kuribas> isn't it risky to run bleeding edge?
2021-09-16 15:59:52 +0200 <kuribas> this is what I don't like about stack.
2021-09-16 16:01:02 +0200 <maerwald> kuribas: you can use my stack ghc install hooks :p
2021-09-16 16:01:15 +0200 <maerwald> but it's not upstreamed
2021-09-16 16:01:31 +0200ubert1(~Thunderbi@178.115.48.20.wireless.dyn.drei.com)
2021-09-16 16:01:46 +0200juhp_(~juhp@bb220-255-204-220.singnet.com.sg)
2021-09-16 16:02:22 +0200ubert(~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2021-09-16 16:02:22 +0200ubert1ubert
2021-09-16 16:02:47 +0200juhp_(~juhp@bb220-255-204-220.singnet.com.sg) (Read error: Connection reset by peer)
2021-09-16 16:02:49 +0200jespada(~jespada@2803:9800:9842:7a62:e809:3117:30c6:aea3) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-09-16 16:03:18 +0200sm2n_sm2n
2021-09-16 16:03:19 +0200juhp(~juhp@bb220-255-204-220.singnet.com.sg) (Read error: Connection reset by peer)
2021-09-16 16:03:27 +0200juhp(~juhp@bb220-255-204-220.singnet.com.sg)
2021-09-16 16:04:05 +0200 <maerwald> allows you to provide a shell script that performs installation/discovery of ghc
2021-09-16 16:04:08 +0200System123(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) (Ping timeout: 268 seconds)
2021-09-16 16:04:27 +0200 <maerwald> so the shell script gets "need 8.10.6" as input and you can just install 8.10.7 instead
2021-09-16 16:04:58 +0200 <maerwald> micro version barely matters for dependency resolution anyway
2021-09-16 16:06:36 +0200nedh^(~nedh@68.101.54.227) (Ping timeout: 268 seconds)
2021-09-16 16:06:41 +0200 <maerwald> https://downloads.haskell.org/~ghcup/unofficial-bindists/stack/2.7.3.1/
2021-09-16 16:06:47 +0200 <maerwald> example hook https://paste.tomsmeding.com/NI4H4xT3
2021-09-16 16:06:58 +0200 <maerwald> needs to be placed in ~/.stack/hooks/
2021-09-16 16:07:22 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 16:08:35 +0200oxide(~lambda@user/oxide) (Quit: oxide)
2021-09-16 16:08:53 +0200 <Drew[m]> I want to see if a package can build on a platform it doesn't currently support, but the test suite absolutely cannot be built on this thanks to some dependencies platform. Is it the default behavior of cabal to try to resolve test suite dependencies even if I specifically ask to build just the package library component?
2021-09-16 16:09:04 +0200 <Drew[m]> Because that's what this package is currently doing
2021-09-16 16:09:22 +0200 <maerwald> Drew[m]: maybe there's stuff in cabal.project?
2021-09-16 16:09:46 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.2.1)
2021-09-16 16:10:52 +0200ph88(~ph88@ip5f5af6fd.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
2021-09-16 16:11:10 +0200 <Drew[m]> the cabal.project file lists the test suite dependency package that can't be build under "packages"
2021-09-16 16:11:53 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-09-16 16:11:55 +0200 <Drew[m]> Should that matter if I specifically ask to build a specific component of a different package in the project?
2021-09-16 16:12:09 +0200 <maerwald> all depends
2021-09-16 16:12:21 +0200 <maerwald> hard to say without seeing the project
2021-09-16 16:13:56 +0200 <Drew[m]> The project is reflex-dom
2021-09-16 16:13:58 +0200 <Drew[m]> https://github.com/reflex-frp/reflex-dom
2021-09-16 16:14:38 +0200 <Drew[m]> From the top level folder I'm trying to execute `cabal build reflex-dom-core:lib:reflex-dom-core -f +use-warp --dry-run`
2021-09-16 16:14:59 +0200 <Drew[m]> I'm not sure my component identifier syntax is right
2021-09-16 16:15:48 +0200 <maerwald> `--disable-tests`?
2021-09-16 16:17:12 +0200ph88(~ph88@ip5f5af6fd.dynamic.kabel-deutschland.de)
2021-09-16 16:18:41 +0200 <Drew[m]> As in `cabal build reflex-dom-core:lib:reflex-dom-core -f +use-warp --disable-tests`?
2021-09-16 16:18:45 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-09-16 16:18:47 +0200 <maerwald> yeah
2021-09-16 16:20:02 +0200nschoe_(~quassel@178.251.84.79) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-09-16 16:20:21 +0200nschoe(~quassel@178.251.84.79)
2021-09-16 16:20:33 +0200 <Drew[m]> I just tried it and it's still failing in dependency resolution, referring to dependencies that don't seem to belong to `reflex-dom-core`'s library
2021-09-16 16:20:35 +0200 <Drew[m]> https://paste.tomsmeding.com/0YiZEKmR
2021-09-16 16:20:56 +0200Akronymus(~Akronymus@85.31.8.180) (Quit: Client closed)
2021-09-16 16:21:30 +0200cuz(~user@2601:182:cc02:8b0:c414:97d1:1f4d:202f) (Ping timeout: 260 seconds)
2021-09-16 16:22:07 +0200 <Drew[m]> So here's a thing, there's a project file: cabal.project-nogtk
2021-09-16 16:22:12 +0200 <Drew[m]> It turns off some flags
2021-09-16 16:22:19 +0200 <Drew[m]> If you use it, it works
2021-09-16 16:22:39 +0200 <maerwald> that file just removes the test stuff from packages
2021-09-16 16:22:42 +0200 <Drew[m]> What I want to know is how those flags are disabling this dependency
2021-09-16 16:23:36 +0200 <Drew[m]> So those package dependencies have to be satisfied even if I'm building a different package in the project?
2021-09-16 16:23:44 +0200 <maerwald> usually not
2021-09-16 16:24:02 +0200Guest3568(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-16 16:24:37 +0200sheddow(~sheddow@84-52-255.245.3p.ntebredband.no) (Ping timeout: 256 seconds)
2021-09-16 16:24:42 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab)
2021-09-16 16:24:48 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 16:24:48 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 16:24:48 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 16:25:05 +0200 <infinisil> A couple days ago I asked for help about a problem where a program would take multiple minutes to complete a very small amount of work, but turning on profiling made it finish instantly, leaving me unable to profile it, merijn was involved in the discussion
2021-09-16 16:25:40 +0200jespada(~jespada@2803:9800:9842:7a62:95e0:d2b5:ae88:676)
2021-09-16 16:25:43 +0200 <infinisil> Update for that: It turns out https://hackage.haskell.org/package/concise-0.1.0.1/docs/Control-Lens-Cons-Extras.html was the cause of it, which uses a combination of NOINLINE and rewrite rules
2021-09-16 16:26:29 +0200 <infinisil> I submitted a fix for the library that uses this here, which has more discussion on this problem: https://github.com/frasertweedale/hs-jose/pull/103
2021-09-16 16:29:10 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab) (Ping timeout: 240 seconds)
2021-09-16 16:30:06 +0200ArsenArsen[test]
2021-09-16 16:30:21 +0200Arsen[test]Arsen
2021-09-16 16:30:42 +0200ArsenArsen_test[m]
2021-09-16 16:30:51 +0200Arsen_test[m]group
2021-09-16 16:30:59 +0200groupArsen
2021-09-16 16:32:40 +0200fendor(~fendor@83-131-155-114.adsl.net.t-com.hr)
2021-09-16 16:33:26 +0200 <Franciman> haskell sux
2021-09-16 16:33:36 +0200 <Franciman> sorry I had to get a fast answer
2021-09-16 16:33:37 +0200 <Drew[m]> maerwald: curious! I wish I could figure out why
2021-09-16 16:33:40 +0200 <Franciman> ok it work
2021-09-16 16:33:43 +0200 <Franciman> :P
2021-09-16 16:34:11 +0200cuz(~user@38.140.58.234)
2021-09-16 16:36:27 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com)
2021-09-16 16:37:20 +0200nedh^(~nedh@68.101.54.227)
2021-09-16 16:38:03 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-217f-c4e6-d1e6-03f0.res6.spectrum.com) (Quit: Textual IRC Client: www.textualapp.com)
2021-09-16 16:38:30 +0200jess(~jess@libera/staff/jess) ()
2021-09-16 16:39:38 +0200chris(~chris@81.96.113.213)
2021-09-16 16:39:43 +0200chrisGuest5190
2021-09-16 16:41:42 +0200xstill(~xstill@fimu/xstill)
2021-09-16 16:41:45 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-09-16 16:42:20 +0200jlamothe(~jlamothe@104.158.48.100) (Quit: leaving)
2021-09-16 16:42:48 +0200 <xstill> hi, is there any chance downloads.haskell.org/debian will contain bullseye binaries any time soon?
2021-09-16 16:43:29 +0200Guest5190(~chris@81.96.113.213) (Read error: Connection reset by peer)
2021-09-16 16:43:45 +0200chris(~chris@81.96.113.213)
2021-09-16 16:43:49 +0200chrisGuest9509
2021-09-16 16:47:54 +0200 <kuribas> Franciman: it does... but other language suck more...
2021-09-16 16:48:02 +0200 <kuribas> maerwaldthanks!
2021-09-16 16:49:51 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-09-16 16:50:23 +0200neo1(~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 268 seconds)
2021-09-16 16:52:01 +0200theang(~theang@2a00:f41:58f0:244b:4742:c02a:6877:e413) (Ping timeout: 268 seconds)
2021-09-16 16:52:18 +0200theang(~theang@fef109.internetdsl.tpnet.pl)
2021-09-16 16:52:40 +0200Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2021-09-16 16:54:48 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-16 16:56:58 +0200proofofkeags_(~proofofke@97-118-134-2.hlrn.qwest.net) (Ping timeout: 260 seconds)
2021-09-16 16:57:24 +0200Franciman(~Franciman@openglass.it) (Remote host closed the connection)
2021-09-16 17:00:51 +0200cheater1__(~Username@user/cheater)
2021-09-16 17:00:51 +0200cheater(~Username@user/cheater) (Ping timeout: 265 seconds)
2021-09-16 17:00:55 +0200cheater1__cheater
2021-09-16 17:07:27 +0200Xe(~cadey@tailscale/xe) (Quit: WeeChat 3.2)
2021-09-16 17:07:27 +0200Ranhir(~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
2021-09-16 17:07:42 +0200Xe(~cadey@tailscale/xe)
2021-09-16 17:07:51 +0200shaprhops randomly
2021-09-16 17:08:21 +0200Ranhir(~Ranhir@157.97.53.139)
2021-09-16 17:09:28 +0200juhp(~juhp@bb220-255-204-220.singnet.com.sg) (Quit: juhp)
2021-09-16 17:12:46 +0200 <sshine> /nick hopr
2021-09-16 17:13:50 +0200zmt00(~zmt00@user/zmt00)
2021-09-16 17:14:01 +0200Franciman(~Franciman@openglass.it)
2021-09-16 17:14:25 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Ping timeout: 252 seconds)
2021-09-16 17:16:27 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-09-16 17:17:40 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-09-16 17:17:55 +0200juhp(~juhp@bb220-255-204-220.singnet.com.sg)
2021-09-16 17:21:00 +0200chele(~chele@user/chele) (Read error: Connection reset by peer)
2021-09-16 17:21:09 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds)
2021-09-16 17:21:11 +0200chele(~chele@user/chele)
2021-09-16 17:21:33 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 17:22:09 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-16 17:34:06 +0200fendor(~fendor@83-131-155-114.adsl.net.t-com.hr) (Remote host closed the connection)
2021-09-16 17:34:28 +0200fendor(~fendor@83-131-155-114.adsl.net.t-com.hr)
2021-09-16 17:35:00 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 17:35:01 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 17:35:01 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 17:35:31 +0200Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-09-16 17:39:56 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-09-16 17:40:00 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 17:42:19 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab)
2021-09-16 17:42:25 +0200proofofkeags_(~proofofke@205.209.28.54)
2021-09-16 17:43:15 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 17:44:02 +0200zebrag(~chris@user/zebrag)
2021-09-16 17:46:50 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 17:48:08 +0200favonia(~favonia@user/favonia) (Ping timeout: 268 seconds)
2021-09-16 17:53:50 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 17:54:08 +0200spruit11_(~quassel@2a02:a467:ccd6:1:563:f225:f6bf:7d85)
2021-09-16 17:57:36 +0200spruit11(~quassel@2a02:a467:ccd6:1:8499:aaa7:da86:787a) (Ping timeout: 268 seconds)
2021-09-16 18:01:38 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving)
2021-09-16 18:01:56 +0200jokleinn(~jokleinn@user/jokleinn) (Quit: WeeChat 3.2)
2021-09-16 18:03:47 +0200lbseale(~lbseale@user/ep1ctetus)
2021-09-16 18:04:58 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-09-16 18:05:14 +0200akronymus[m](~akronymus@2001:470:69fc:105::f7be) ()
2021-09-16 18:07:40 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 18:07:52 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 18:07:52 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 18:07:52 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 18:08:02 +0200fendor(~fendor@83-131-155-114.adsl.net.t-com.hr) (Ping timeout: 265 seconds)
2021-09-16 18:10:33 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 18:10:50 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-09-16 18:17:05 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 18:17:28 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 18:18:54 +0200Guest9509(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-16 18:20:16 +0200enicar(~enikar@user/enikar)
2021-09-16 18:21:55 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 260 seconds)
2021-09-16 18:26:02 +0200chris(~chris@81.96.113.213)
2021-09-16 18:26:02 +0200chrisGuest1324
2021-09-16 18:26:42 +0200favonia(~favonia@user/favonia)
2021-09-16 18:28:48 +0200 <Drew[m]> Ok so after doing my own test, it turns out that by default cabal automatically checks the dependencies of all packages in a project when resolving dependencies to build just one
2021-09-16 18:29:15 +0200 <Drew[m]> And I need to figure out a way to say I don't want that
2021-09-16 18:30:16 +0200Guest1324(~chris@81.96.113.213) (Ping timeout: 252 seconds)
2021-09-16 18:37:48 +0200enicar(~enikar@user/enikar) (Quit: WeeChat 3.2.1)
2021-09-16 18:38:00 +0200nschoe(~quassel@178.251.84.79) (Ping timeout: 265 seconds)
2021-09-16 18:38:17 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 18:39:44 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-16 18:40:27 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 18:42:14 +0200fendor(~fendor@83-131-155-114.adsl.net.t-com.hr)
2021-09-16 18:42:58 +0200hyiltiz(~quassel@31.220.5.250)
2021-09-16 18:43:45 +0200MQ-17J(~MQ-17J@8.21.10.6)
2021-09-16 18:44:40 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds)
2021-09-16 18:45:44 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 18:46:45 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-09-16 18:47:34 +0200tdammers(~tdammers@77.109.72.213.res.static.edpnet.net) (Ping timeout: 260 seconds)
2021-09-16 18:48:17 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-09-16 18:50:32 +0200Teacup(~teacup@user/teacup) (Quit: Teacup)
2021-09-16 18:50:53 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-09-16 18:53:25 +0200choucavalier(~choucaval@peanutbuttervibes.com)
2021-09-16 18:54:40 +0200choucavalier(~choucaval@peanutbuttervibes.com) (Changing host)
2021-09-16 18:54:40 +0200choucavalier(~choucaval@user/choucavalier)
2021-09-16 18:56:36 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl)
2021-09-16 18:56:57 +0200timCF(~timCF@m91-129-108-244.cust.tele2.ee)
2021-09-16 18:58:02 +0200jokleinn(~jokleinn@user/jokleinn) (Ping timeout: 268 seconds)
2021-09-16 18:59:25 +0200 <timCF> Hello! Is there any good combinator libraries for Aeson to transform/compose `Value` AST data? For example I need to apply filter to `Value` in case where it's an object and get new object `Value` where `Null` value fields are removed. Maybe I can use `lens-aeson` for this, but I don't know how exactly
2021-09-16 19:00:00 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-09-16 19:00:00 +0200 <sm> congrats infinisil
2021-09-16 19:00:27 +0200tdammers(~tdammers@77.109.72.177.res.static.edpnet.net)
2021-09-16 19:01:00 +0200 <infinisil> :D
2021-09-16 19:02:59 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 19:04:22 +0200MQ-17J(~MQ-17J@8.21.10.6) (Ping timeout: 260 seconds)
2021-09-16 19:04:40 +0200MQ-17J(~MQ-17J@8.21.10.6)
2021-09-16 19:05:35 +0200econo(uid147250@user/econo)
2021-09-16 19:07:12 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-09-16 19:08:40 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 240 seconds)
2021-09-16 19:09:46 +0200benin036932301(~benin@183.82.205.89) (Read error: Connection reset by peer)
2021-09-16 19:10:08 +0200fendor_(~fendor@83-131-155-114.adsl.net.t-com.hr)
2021-09-16 19:10:52 +0200fendor(~fendor@83-131-155-114.adsl.net.t-com.hr) (Read error: Connection reset by peer)
2021-09-16 19:11:41 +0200 <carbolymer> how can I make this work: https://bpa.st/U5FA ?
2021-09-16 19:12:09 +0200zebrag(~chris@user/zebrag)
2021-09-16 19:12:10 +0200azimut_(~azimut@gateway/tor-sasl/azimut)
2021-09-16 19:12:19 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 19:12:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-09-16 19:12:57 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2021-09-16 19:13:05 +0200Teacup(~teacup@user/teacup)
2021-09-16 19:14:10 +0200cuz(~user@38.140.58.234) (Ping timeout: 240 seconds)
2021-09-16 19:15:25 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-09-16 19:16:50 +0200 <carbolymer> why ghc tries to decude (Exception e10) when there's a constraint on exception from E.try already
2021-09-16 19:18:05 +0200 <sm> plot twist! "Happily, I am involved with a new build system, the next generation of Buck." --https://neilmitchell.blogspot.com/2021/09/huge-project-build-systems.html
2021-09-16 19:18:09 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 19:18:10 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 19:18:10 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 19:18:33 +0200 <geekosaur> carbolymer, that usually means it can't unify e10 with what you expect it to
2021-09-16 19:19:00 +0200 <carbolymer> yeah, but why, and can I work around that?
2021-09-16 19:19:14 +0200 <geekosaur> but I'm not familiar with protolude or can-i-haz so I can't help much
2021-09-16 19:22:28 +0200fendor_(~fendor@83-131-155-114.adsl.net.t-com.hr) (Ping timeout: 265 seconds)
2021-09-16 19:23:26 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 19:23:57 +0200 <sm> incidentally, https://github.com/bazelbuild/starlark looks kind of useful, I wonder if there's any start at a haskell implementation
2021-09-16 19:25:24 +0200chris(~chris@81.96.113.213)
2021-09-16 19:25:27 +0200chrisGuest2044
2021-09-16 19:27:15 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 19:27:22 +0200Guest2044(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-16 19:28:06 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-09-16 19:33:11 +0200Erutuon(~Erutuon@user/erutuon)
2021-09-16 19:34:18 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 19:38:28 +0200favonia(~favonia@user/favonia) (Ping timeout: 252 seconds)
2021-09-16 19:38:40 +0200nschoe(~quassel@2a01:e0a:8e:a190:e304:f7fc:fa6b:13a4)
2021-09-16 19:38:45 +0200nschoe(~quassel@2a01:e0a:8e:a190:e304:f7fc:fa6b:13a4) (Client Quit)
2021-09-16 19:39:01 +0200 <sclv> Drew[m]: why are you in that situation to begin with?
2021-09-16 19:39:56 +0200 <sclv> ah i see
2021-09-16 19:40:18 +0200 <sclv> so, if the test deps are in test stanzas, and you explicitly disable testing, it won't solve for the test deps
2021-09-16 19:42:08 +0200 <sclv> otherwise, just change the project file to not include the stuff you don't want to build
2021-09-16 19:42:51 +0200chris(~chris@81.96.113.213)
2021-09-16 19:42:54 +0200chrisGuest2003
2021-09-16 19:44:27 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-16 19:46:15 +0200jokleinn(~jokleinn@user/jokleinn) (Quit: WeeChat 3.2)
2021-09-16 19:47:19 +0200Guest2003(~chris@81.96.113.213) (Ping timeout: 252 seconds)
2021-09-16 19:48:02 +0200cuz(~user@38.140.58.234)
2021-09-16 19:50:17 +0200Cajun(~Cajun@user/cajun)
2021-09-16 19:51:46 +0200timCF(~timCF@m91-129-108-244.cust.tele2.ee) (Quit: leaving)
2021-09-16 19:52:55 +0200cuz(~user@38.140.58.234) (Ping timeout: 265 seconds)
2021-09-16 19:55:17 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-16 19:55:47 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-16 19:55:49 +0200 <dminuoso> @tell timCF You can work on Value directly, it's just an ADT.
2021-09-16 19:55:49 +0200 <lambdabot> Consider it noted.
2021-09-16 19:57:05 +0200cuz(~user@38.140.58.234)
2021-09-16 19:59:06 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 20:00:56 +0200favonia(~favonia@user/favonia)
2021-09-16 20:01:09 +0200timCF(~timCF@m91-129-108-244.cust.tele2.ee)
2021-09-16 20:03:45 +0200 <timCF> Is there some class similar to `Num`, but safe to use with `Natural` numbers? For example subtract method should be something like `(-) :: a -> a -> Either Error a`?
2021-09-16 20:04:06 +0200 <geekosaur> not currently
2021-09-16 20:05:38 +0200 <timCF> probably I'll do my own locally in project then :)
2021-09-16 20:05:43 +0200lep(~lep@94.31.80.176) ()
2021-09-16 20:05:52 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 20:06:32 +0200ubert(~Thunderbi@178.115.48.20.wireless.dyn.drei.com) (Remote host closed the connection)
2021-09-16 20:06:51 +0200ubert(~Thunderbi@178.115.48.20.wireless.dyn.drei.com)
2021-09-16 20:07:06 +0200 <dminuoso> timCF: Regarding the earlier Value question, you could then write a simple recursive function.
2021-09-16 20:10:25 +0200alx741(~alx741@181.196.68.49) (Ping timeout: 252 seconds)
2021-09-16 20:10:41 +0200 <timCF> Yeah, already did it) Just thought it could be done "smarter" with some sort of generic lens/prism magic https://github.com/tkachuk-labs/bitfinex-client/blob/3b96cff21cd06a8f1c44e7657a17e6a9ce67d21f/src/…
2021-09-16 20:11:08 +0200 <dminuoso> Nothing as concise
2021-09-16 20:11:59 +0200 <dminuoso> You could perhaps do something with Plated?
2021-09-16 20:12:18 +0200 <dminuoso> If lens-aeson has an instance for that
2021-09-16 20:12:37 +0200 <dminuoso> Oh it does!
2021-09-16 20:13:10 +0200 <dminuoso> Though I think it would rather require writing a custom Plated instance
2021-09-16 20:13:16 +0200 <kuribas> timCF: golfing, are we?
2021-09-16 20:14:36 +0200 <timCF> kuribas: golfing?
2021-09-16 20:14:59 +0200 <kuribas> https://en.wikipedia.org/wiki/Code_golf
2021-09-16 20:15:20 +0200 <carbolymer> geekosaur: I've removed can-i-haz and Protolude for readability, maybe you have any ideas now: https://stackoverflow.com/questions/69213328/lift-io-exception-into-monaderror-with-automatic-mapp…
2021-09-16 20:15:54 +0200Pickchea(~private@user/pickchea)
2021-09-16 20:16:14 +0200ubert(~Thunderbi@178.115.48.20.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2021-09-16 20:16:35 +0200 <dminuoso> timCF: If at all, it seems `rewrite` or `transformOf` together with `plate` would be the way to go.
2021-09-16 20:17:38 +0200 <timCF> kuribas: well, seems like I'm not that good in Haskell yet to do golfing)
2021-09-16 20:17:46 +0200 <dminuoso> timCF: Ah I think I got it.
2021-09-16 20:18:12 +0200seventhCrow(crow@gateway/vpn/protonvpn/seventhcrow)
2021-09-16 20:18:23 +0200 <geekosaur> carbolymer, I think multiparameter type classes don't work that way, you really need either functional dependencies or type families to make them work the way you expect
2021-09-16 20:18:43 +0200 <carbolymer> hmm
2021-09-16 20:19:10 +0200lavaman(~lavaman@98.38.249.169)
2021-09-16 20:19:44 +0200 <geekosaur> and just because you have only one instance doesn't mean there can't be others (typeclasses operate under an open world assumption because separate compilation means someone could theoretically add an additional instance later)
2021-09-16 20:19:49 +0200 <carbolymer> that would enforce only one mapping allowed a -> b in Injection instance
2021-09-16 20:19:56 +0200 <carbolymer> I guess I can live with that
2021-09-16 20:20:15 +0200 <geekosaur> and only the linker would know, not the conmpiler
2021-09-16 20:20:17 +0200 <carbolymer> geekosaur: exactly, I think I start seeing it now
2021-09-16 20:20:37 +0200 <dminuoso> timCF: If you want this without the explicit recursion, you can use plain `rewrite`
2021-09-16 20:21:02 +0200 <awpr> carbolymer: the other potential answer is that the error is really more of a warning, and you can turn on `AllowAmbiguousTypes` and `TypeApplications` to use it
2021-09-16 20:21:25 +0200 <timCF> dminuoso: I'll take a look to what actually `plate` is first I guess) I feel like I'm missing a lot of profit ignoring lens-related stuff "for simplicity" in spite of programming in Haskell for already 2 years
2021-09-16 20:21:44 +0200 <carbolymer> awpr: is AllowAmbiguousTypes a safe extension to just turn it on and go with it hoping that all the magic will happen?
2021-09-16 20:21:58 +0200 <kuribas> timCF: simple is better
2021-09-16 20:22:07 +0200 <awpr> the error is just saying it can't figure out what exception type it should `try` on based on the argument and return types, and call sites will need help in the form of `TypeApplications`
2021-09-16 20:22:27 +0200 <dminuoso> timCF: So maybe something like `rewrite (\case of Object o -> HM.filter (/= Null) o; Array v -> V.filter (/= Null) v; r -> r ) tree)`
2021-09-16 20:22:46 +0200 <awpr> I generally don't hesitate to turn on `AllowAmbiguousTypes`; it basically just means "hey, you can't use this without `TypeApplications`, are you sure that's what you wanted?"
2021-09-16 20:22:56 +0200kuribas(~user@ptr-25vy0i96fc65i21clnv.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2021-09-16 20:23:04 +0200 <carbolymer> awpr: sounds useful
2021-09-16 20:23:08 +0200 <dminuoso> timCF: Plated is just a typeclass in which you can have a `Traversal' a a` that knows how to extract self-similar children.
2021-09-16 20:23:14 +0200rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438)
2021-09-16 20:23:19 +0200 <dminuoso> Together with a bunch of combinators that let you sort of recursion-style work with that
2021-09-16 20:23:37 +0200 <dminuoso> Like `rewrite`
2021-09-16 20:24:26 +0200 <timCF> dminuoso: looks cool, thanks!
2021-09-16 20:24:39 +0200alx741(~alx741@181.196.68.9)
2021-09-16 20:25:33 +0200 <dminuoso> So for instance, to turn a tree of integers into a list, you can just write `universe tree`
2021-09-16 20:26:39 +0200 <dminuoso> But this is only an almost meaningless example. Plated is very powerful to work with such tree-like data.
2021-09-16 20:27:29 +0200chris(~chris@81.96.113.213)
2021-09-16 20:27:33 +0200chrisGuest3304
2021-09-16 20:28:39 +0200cuz(~user@38.140.58.234) (Remote host closed the connection)
2021-09-16 20:28:48 +0200cuz(~user@38.140.58.234)
2021-09-16 20:30:18 +0200 <Cajun> `universe tree` sounds deeply metaphorical :P
2021-09-16 20:32:04 +0200Guest3304(~chris@81.96.113.213) (Ping timeout: 265 seconds)
2021-09-16 20:34:32 +0200zer0bitz(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi)
2021-09-16 20:34:44 +0200timCF(~timCF@m91-129-108-244.cust.tele2.ee) (Quit: leaving)
2021-09-16 20:34:54 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
2021-09-16 20:35:03 +0200timCF(~timCF@m91-129-108-244.cust.tele2.ee)
2021-09-16 20:35:17 +0200timCF(~timCF@m91-129-108-244.cust.tele2.ee) (Client Quit)
2021-09-16 20:36:10 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 20:36:10 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 20:36:10 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 20:40:48 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-09-16 20:43:06 +0200vaucouleur(~vaucouleu@78.194.70.105) (Read error: Connection reset by peer)
2021-09-16 20:43:14 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-09-16 20:43:57 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 20:45:36 +0200rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) (Quit: Client closed)
2021-09-16 20:48:56 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab) (Remote host closed the connection)
2021-09-16 20:52:42 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab)
2021-09-16 20:53:44 +0200Franciman(~Franciman@openglass.it) (Remote host closed the connection)
2021-09-16 20:54:09 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 20:56:22 +0200nedh^(~nedh@68.101.54.227) (Ping timeout: 260 seconds)
2021-09-16 20:59:11 +0200nvmd(~nvmd@user/nvmd) (Read error: Connection reset by peer)
2021-09-16 21:01:04 +0200cheater(~Username@user/cheater) (Ping timeout: 265 seconds)
2021-09-16 21:01:05 +0200cheater1__(~Username@user/cheater)
2021-09-16 21:01:09 +0200cheater1__cheater
2021-09-16 21:01:14 +0200ephemient(uid407513@id-407513.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-16 21:03:25 +0200nvmd(~nvmd@user/nvmd)
2021-09-16 21:03:32 +0200hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-09-16 21:04:57 +0200hololeap(~hololeap@user/hololeap)
2021-09-16 21:06:40 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
2021-09-16 21:06:52 +0200favonia(~favonia@user/favonia) (Ping timeout: 265 seconds)
2021-09-16 21:09:44 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 21:09:50 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.2.1)
2021-09-16 21:12:49 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab) (Remote host closed the connection)
2021-09-16 21:13:09 +0200jtomas(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) (Ping timeout: 265 seconds)
2021-09-16 21:13:51 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 21:15:38 +0200 <awpr> informal opinion-gathering: would you be put off from using a pretty-printing library if its instance for String printed it as a list of Chars? I'm torn on whether to implement the typeclass trickery to special-case Strings among other lists -- it complicates the class a bit, and I'm tempted to leave it out to subtly discourage using String
2021-09-16 21:17:14 +0200Lycurgus(~juan@98.4.112.204)
2021-09-16 21:18:57 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-09-16 21:20:45 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 21:21:01 +0200jtomas(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net)
2021-09-16 21:25:40 +0200pavonia(~user@user/siracusa)
2021-09-16 21:27:20 +0200 <dminuoso> I would be, yes.
2021-09-16 21:27:48 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab)
2021-09-16 21:27:48 +0200 <dminuoso> It depends a bit on the ergonmoics of the library
2021-09-16 21:29:49 +0200 <dminuoso> Actually let me go back and rephrase.
2021-09-16 21:29:56 +0200gehmehgeh(~user@user/gehmehgeh)
2021-09-16 21:30:10 +0200 <dminuoso> Personally I dont use typeclass instances much with `prettyprinter`, its mostly custom `ppr*` functions because most things dont have a canonical representation.
2021-09-16 21:30:28 +0200 <dminuoso> In that sense, having a dedicated pprText and pprString function would probably be fine.
2021-09-16 21:30:55 +0200wrengr_awaywrengr
2021-09-16 21:31:26 +0200 <geekosaur> in the only program I have that does prettyprinting I use custom functions as well
2021-09-16 21:33:12 +0200 <geekosaur> come to think of it, two programs and the other one uses custom functions as well (DebugEvent in xmonad-contrib)
2021-09-16 21:33:53 +0200 <awpr> so the main thing it provides is "debug-style" derived instances printing types as mostly-valid-Haskell syntax, along with structured diffing for tests. if you're carefully constructing user-facing output documents, you probably wouldn't use this, unless the "users" are people inspecting test failures or are Haskell developers
2021-09-16 21:34:30 +0200 <awpr> the present issue is that it'd print String fields in records as lists of Char, for example (but Text as really nicely formatted string literals)
2021-09-16 21:34:59 +0200favonia(~favonia@user/favonia)
2021-09-16 21:35:04 +0200 <geekosaur> I'd actually prefer to support both forms
2021-09-16 21:35:06 +0200zer0bitz(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi) (Ping timeout: 260 seconds)
2021-09-16 21:35:36 +0200 <geekosaur> although admittedly the main reason is things like (Mega)Parsec that use lists when they ought to be using Sets
2021-09-16 21:36:10 +0200tdammers(~tdammers@77.109.72.177.res.static.edpnet.net) (Ping timeout: 252 seconds)
2021-09-16 21:37:06 +0200 <awpr> it'd be even more effort to support both, I'd have to grow a configuration mechanism just for that individual choice
2021-09-16 21:37:37 +0200 <geekosaur> that's one advantage of ppr* functions though, I can just use the one that fits the purpose
2021-09-16 21:38:13 +0200 <awpr> yeah, you should use explicit functions if you're hand-crafting documents for well-maintained user-facing output
2021-09-16 21:38:37 +0200 <geekosaur> come to think of it, String's already going through this with Show because of people who want it to display Unicode "properly"
2021-09-16 21:41:10 +0200kimjetwav(~user@2607:fea8:235f:9730:7652:9a19:d3a:6562) (Ping timeout: 260 seconds)
2021-09-16 21:42:27 +0200Franciman(~Franciman@mx1.fracta.dev)
2021-09-16 21:42:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-09-16 21:43:01 +0200tdidrfyls^(~tdidrfyls@68.101.54.227)
2021-09-16 21:43:45 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 21:43:58 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds)
2021-09-16 21:47:58 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab) (Remote host closed the connection)
2021-09-16 21:48:41 +0200tdammers(~tdammers@77.109.72.177.res.static.edpnet.net)
2021-09-16 21:50:31 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 21:53:10 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 21:54:26 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Client Quit)
2021-09-16 21:55:01 +0200System123(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com)
2021-09-16 21:57:40 +0200l4mee(~l4mee@93.49.6.163)
2021-09-16 21:57:56 +0200mikoto-chan(~mikoto-ch@83.137.2.242)
2021-09-16 21:58:53 +0200l4mee(~l4mee@93.49.6.163) (Quit: l4mee)
2021-09-16 21:59:54 +0200 <awpr> hmm, yeah, at the moment I just have it doing decimal escapes the same way Show currently does
2021-09-16 22:04:46 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Ping timeout: 252 seconds)
2021-09-16 22:06:08 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
2021-09-16 22:06:52 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-16 22:06:53 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-16 22:06:53 +0200wroathe(~wroathe@user/wroathe)
2021-09-16 22:06:58 +0200Gurkenglas(~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2021-09-16 22:07:08 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-09-16 22:08:37 +0200 <awpr> it's a bit tricky, since depending on the system locale, the runtime might just blow up if you try to output non-ASCII characters, so if it unconditionally includes those, it'll not work in certain locales, but if it's conditional, you have to do IO to figure out whether it's supported and then plumb that around everywhere
2021-09-16 22:09:10 +0200jtomas(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
2021-09-16 22:09:58 +0200 <Cajun> well you could do what one of those networking packages does and use `unsafePerformIO` to get an `IORef` instead of an `IO (IORef)` which will be used as a default config every time its requested
2021-09-16 22:10:35 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab)
2021-09-16 22:11:58 +0200 <awpr> yeah, I guess so, but global unsafePerformIOs make me feel a bit dirty. and it's still just a best guess, since what's actually relevant IIUC is the encoding of the particular handle the text will be output to -- which is _probably_ the system locale, but maybe not always
2021-09-16 22:12:59 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 22:13:00 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com)
2021-09-16 22:14:23 +0200 <sneedsfeed> In imperative programming I rely a lot on adding random little printouts into loops to see whats going on in there. Is there anything even sort of analogous to that when writing recursive functions?
2021-09-16 22:14:44 +0200 <geekosaur> I don't think the runtime supports per-handle locales (yet?)
2021-09-16 22:15:05 +0200 <awpr> sneedsfeed: yes, Debug.Trace.trace; it can be a bit subtle understanding when they actually happen if you're not used to lazy evaluation, though
2021-09-16 22:15:06 +0200 <geekosaur> sneedsfeed, there is Debug.Trace
2021-09-16 22:15:37 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
2021-09-16 22:16:02 +0200 <Cajun> you may not always want to fallback to using Debug.Trace unless you really have no idea whats happening, most of the time you can reason about what something does. there are times when its really useful though, i just havent used it much myself
2021-09-16 22:16:05 +0200 <awpr> geekosaur: hmm, I'll have to read the source
2021-09-16 22:16:37 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-09-16 22:16:53 +0200 <geekosaur> I didn't see anything in System.IO; there might be some lower level stuff in GHC.IO.Handle though
2021-09-16 22:17:06 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 260 seconds)
2021-09-16 22:17:15 +0200 <awpr> there are multiple fields in Handle that look like they're meant to support handle-granularity text encodings
2021-09-16 22:17:26 +0200 <Cajun> awpr: well you can provide both methods, passing around some manager to each function (this is tarting to sound like Reader though). heres the code i was thinking of: https://paste.tomsmeding.com/o4vzbVzg
2021-09-16 22:17:28 +0200 <sneedsfeed> Cajun thats probably true.
2021-09-16 22:18:14 +0200 <awpr> yes, that's possible, it's just that it doesn't actually fix the issue for real
2021-09-16 22:18:41 +0200 <awpr> so far I've just dodged the issue by sticking to decimal escapes
2021-09-16 22:19:48 +0200vysn(~vysn@user/vysn)
2021-09-16 22:19:59 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-09-16 22:20:07 +0200 <awpr> seems like the root of the problem is that the way Haskell libraries are currently set up has transparent locale-sensitivity only up to the text encoding level, and not above, with no good story for locale-sensitive /content/ that I'm aware of
2021-09-16 22:20:40 +0200 <awpr> which basically just means outputting non-ASCII characters is banned unless you're willing to crash on basic locales
2021-09-16 22:20:53 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-09-16 22:20:59 +0200 <awpr> (or explicitly UTF-8 them and output bytes rather than text)
2021-09-16 22:21:02 +0200smuses unsafePerformIO to get info for debug tracing (color support, --debug flag, etc), it works well
2021-09-16 22:21:06 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2021-09-16 22:24:24 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab) (Remote host closed the connection)
2021-09-16 22:26:28 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-16 22:27:18 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 22:27:42 +0200kimjetwav(~user@2607:fea8:235f:9730:162d:fa69:3f15:a6a5)
2021-09-16 22:30:43 +0200 <awpr> I guess nothing's stopping me from adding a config record, and having the debug utilities infer the config by default
2021-09-16 22:31:13 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 22:31:20 +0200 <awpr> just concerned it'll open the floodgates to an enormous config record with a bunch of random fields for every type, if I'm not careful of how it's designed
2021-09-16 22:35:14 +0200 <Cale> awpr: Just be careful about which things need what config, and make types accordingly. Then you might end up with a config record consisting of several other config records, and it's actually enormous at the top level, but gets split up into smaller types quickly.
2021-09-16 22:35:39 +0200 <awpr> but this is in the context of a typeclass method
2021-09-16 22:35:41 +0200 <Cale> (but I only read your last few messages, so I might be missing context)
2021-09-16 22:35:47 +0200 <geekosaur> there's also a Map indexed by Typeable
2021-09-16 22:36:05 +0200 <sneedsfeed> I just found this. You guys should consider pointing every newby you encounter at this. https://colah.github.io/posts/2015-02-DataList-Illustrated/
2021-09-16 22:36:07 +0200 <geekosaur> more precisely TypeRep
2021-09-16 22:36:32 +0200 <awpr> geekosaur: yeah, I tried that approach for overriding individual instances, but decided it was too much and was just complicating things more than I wanted
2021-09-16 22:38:31 +0200 <awpr> it turns out the locale-sensitive escaping logic would live entirely in renderers and not in the classes, though, so there are finitely many constructs to configure at the point where I'd actually need the configuration, and I can probably get away with zero configuration for the instances
2021-09-16 22:43:46 +0200kuribas(~user@ptr-25vy0i9fqiblx2l1e59.18120a2.ip6.access.telenet.be)
2021-09-16 22:44:26 +0200 <kuribas> Are there ways to have multifunctors? Like three or more functors in one type?
2021-09-16 22:44:51 +0200 <awpr> like Bifunctor for >2?
2021-09-16 22:45:13 +0200 <kuribas> yeah :)
2021-09-16 22:45:20 +0200 <kuribas> NFunctor?
2021-09-16 22:45:52 +0200 <awpr> not aware of one, but you can have standalone functions to map over earlier type parameters
2021-09-16 22:46:03 +0200 <kuribas> perhaps with newtypes to swap type variables?
2021-09-16 22:46:19 +0200 <awpr> yeah, that's one approach I played with a while back. it's... okay
2021-09-16 22:46:47 +0200 <awpr> gets a bit tedious, but IIRC it largely works
2021-09-16 22:48:40 +0200favonia(~favonia@user/favonia) (Ping timeout: 268 seconds)
2021-09-16 22:49:41 +0200 <Cale> kuribas: There is a way, by generalising Functor to be between an arbitrary pair of categories
2021-09-16 22:50:10 +0200 <awpr> this is an aspect of something I wish we had a better answer for in Haskell -- there are infinitely many variations on functors that we occasionally want, it's a huge pain to write special case libraries for each one, but writing a sufficiently general thing that covers all functors makes use sites so complicated that it just results in getting fed up with all the kind instantiation and doing something else
2021-09-16 22:50:47 +0200 <ProofTechnique> I'm _certain_ there's a Trifunctor on Hackage somewhere
2021-09-16 22:51:01 +0200 <awpr> how about Triskaidekafunctor
2021-09-16 22:51:10 +0200 <Cale> I don't think it's all that big a deal, honestly
2021-09-16 22:51:24 +0200 <Cale> If you have that many type parameters, you'd probably prefer to name your operations more clearly
2021-09-16 22:51:43 +0200 <ProofTechnique> ^this
2021-09-16 22:51:57 +0200 <Cale> fmap3of7 is not very cool
2021-09-16 22:52:28 +0200 <kuribas> hmm, it's worse, I am thinking about a higher kinded bifunctor now...
2021-09-16 22:52:44 +0200 <Cale> But yeah, you can just do enough runNat's ;)
2021-09-16 22:52:45 +0200 <ProofTechnique> Being a Functor is boring. Practically everything is a Functor. Trifunctors are thrice as boring, and who needs that?
2021-09-16 22:53:00 +0200 <awpr> kuribas: like https://hackage.haskell.org/package/ten-0.1.0.1/docs/Data-Ten-Functor.html#t:Functor10 but Bifunctor?
2021-09-16 22:53:04 +0200 <kuribas> Cale: how so?
2021-09-16 22:53:36 +0200 <kuribas> "If you have that many type parameters, you'd probably prefer to name your operations more clearly"
2021-09-16 22:54:18 +0200 <Cale> https://github.com/ekmett/hask/blob/master/src/Hask/Category.hs#L329
2021-09-16 22:54:32 +0200 <Cale> kuribas: Because the parameters probably have meaning to you
2021-09-16 22:54:46 +0200 <kuribas> right, they have
2021-09-16 22:55:29 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-16 22:55:40 +0200 <ProofTechnique> "I wrote Dodecafunctor, but I use id in nearly every position"
2021-09-16 22:56:00 +0200 <Cale> ProofTechnique: seventhOfTwelve
2021-09-16 22:56:06 +0200 <kuribas> maybe labeled functors?
2021-09-16 22:56:41 +0200 <Cale> (like first and second for Bifunctor)
2021-09-16 22:57:23 +0200 <kuribas> For example, I model some sort of subtyping with functors. Like "Device fields", where Device contains command fields, fields are specific to the type of Device.
2021-09-16 22:58:21 +0200 <kuribas> Or just (Device ()) if I don't care about the special fields.
2021-09-16 22:58:29 +0200 <ProofTechnique> Questions like these are why we have lenses now
2021-09-16 22:58:58 +0200 <kuribas> ProofTechnique: that sounds orthogonal.
2021-09-16 22:59:32 +0200 <kuribas> Well, I guess I don't need the functor instance really...
2021-09-16 22:59:39 +0200 <kuribas> I can use the LabelOptic instead.
2021-09-16 22:59:41 +0200 <dsal> Lenses give you named profunctors on arbitrary things.
2021-09-16 22:59:44 +0200 <awpr> a polymorphic lens or other optic can target whichever type parameter it wants, have a nice name, and give you all the available functionality of the suite of functor-ish instances
2021-09-16 22:59:54 +0200 <kuribas> yeah true.
2021-09-16 23:00:07 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl)
2021-09-16 23:00:10 +0200 <kuribas> Are there higher rank lenses?
2021-09-16 23:00:16 +0200 <monochrom> I don't fear seventhOfTwelve. What I fear is there are almost 2^12 siblings of it.
2021-09-16 23:00:54 +0200 <awpr> kuribas: like `(forall x. m x -> f (n x)) -> s -> f t`?
2021-09-16 23:01:15 +0200 <kuribas> awpr: yeah
2021-09-16 23:01:22 +0200 <awpr> ooh I just realized GHC 9.2 makes those not suck
2021-09-16 23:01:33 +0200 <awpr> I've been tempted to add them to `ten`, but haven't yet
2021-09-16 23:02:21 +0200 <awpr> I may even have a commented out `Lens10` type alias with a comment like "uh, is this useful?"
2021-09-16 23:03:02 +0200zmt00(~zmt00@user/zmt00)
2021-09-16 23:03:28 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-09-16 23:03:32 +0200 <awpr> (background: composing those without quick look impredicativity doesn't work, it'd need a newtype to guard the forall. with quick look, maybe it works)
2021-09-16 23:04:10 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2021-09-16 23:04:27 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 23:05:04 +0200 <kuribas> I was just thinking how to model clojure style "data API", where you put all information in data. It seems to map to HKD data. For example you fill a HKD with a parser description. Then use the HKD to "run" each parser to Identity.
2021-09-16 23:05:50 +0200 <awpr> not familiar with the clojure side of that, but it sure sounds like `traverse10` to me
2021-09-16 23:06:14 +0200Lord_of_Life_Lord_of_Life
2021-09-16 23:06:54 +0200 <kuribas> like: https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html
2021-09-16 23:07:19 +0200 <awpr> yeah, same idea. I like mine better :)
2021-09-16 23:08:08 +0200 <awpr> in particular I have support for getting access to the constraints that are common to all fields
2021-09-16 23:08:21 +0200 <dsal> awpr: I'm not smart enough to understand ten. Do you have an explanation for dummies?
2021-09-16 23:08:40 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-09-16 23:09:01 +0200 <awpr> yeah the docs are still not super friendly to newcomers to the library, I'd like to improve that
2021-09-16 23:09:05 +0200 <Cajun> how is HKD different from First Class Families?
2021-09-16 23:09:19 +0200 <Cajun> they seem similar in concept, maybe i just dont understand the idea behind HKD
2021-09-16 23:09:28 +0200 <dsal> awpr: I guess it's just a type functor. I don't spend too much time there.
2021-09-16 23:09:33 +0200 <dsal> Whence the name?
2021-09-16 23:10:28 +0200 <awpr> dsal: yeah, pretty much. in practice I've seen it come up when wanting a lot of variants of the same record type and ways to manipulate them generically, like "MyRecord Parser -> Parser (MyRecord Identity)"
2021-09-16 23:10:46 +0200 <ProofTechnique> I was gonna say "how about even one example?" 😄 I get HKD well enough to use it in anger (well, barbies, anyway), but I don't even know where to start with ten
2021-09-16 23:10:52 +0200 <kuribas> awpr: how is it different from HKD?
2021-09-16 23:11:07 +0200 <awpr> kuribas: exactly the same core idea, but more functionality
2021-09-16 23:11:08 +0200 <kuribas> awpr: to me it looks like the same think with a different name.
2021-09-16 23:11:28 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2021-09-16 23:12:11 +0200 <kuribas> hmm, ok
2021-09-16 23:13:47 +0200 <kuribas> it's always nice in theory, but the code seems to become hairy quickly.
2021-09-16 23:13:56 +0200 <kuribas> for example beam.
2021-09-16 23:14:32 +0200 <ProofTechnique> dsal: Evidently the name comes from its being a functor from the category of objects with one (1) type parameter to the category of objects with zero (0)
2021-09-16 23:14:34 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:854d:ae90:d2a1:51ab)
2021-09-16 23:14:50 +0200 <dsal> ProofTechnique: Ah. Thanks.
2021-09-16 23:15:31 +0200 <dsal> Needs more abstraction. Next time, call it LilNasFunctorX
2021-09-16 23:15:50 +0200 <ProofTechnique> Lil Nat Z
2021-09-16 23:15:50 +0200 <awpr> lol I get the sense I should demote the current description to a category theory section and start over
2021-09-16 23:16:49 +0200burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-09-16 23:16:57 +0200 <ProofTechnique> I'll see if I can use it next time I write a CLI tool 🙂
2021-09-16 23:17:35 +0200 <ProofTechnique> Config construction is most of what I've used HKD for, thus far
2021-09-16 23:17:39 +0200jstolarek(~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Ping timeout: 268 seconds)
2021-09-16 23:17:48 +0200newbie(~newbie@80-196-109-198-dynamic.dk.customer.tdc.net)
2021-09-16 23:17:51 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 265 seconds)
2021-09-16 23:17:57 +0200 <awpr> kuribas: yeah, it can get confusing. I did try to iron out a lot of the scarier issues, but there are still a lot of types and type parameters and quantifiers floating around. it's certainly not functionality for zero complexity cost, it's more on the heavyweight side
2021-09-16 23:18:14 +0200 <newbie> Hi, I have a question regarding '>>=' of Either. If I want to apply it to a tuple containing Either instead i.e (Either SomeData a, String), how can I lift '>>=' such that it operates on tuples?
2021-09-16 23:19:04 +0200 <Rembane> :t first (>>=)
2021-09-16 23:19:05 +0200 <lambdabot> Monad m => (m a, d) -> ((a -> m b) -> m b, d)
2021-09-16 23:19:22 +0200 <Cajun> :t first
2021-09-16 23:19:23 +0200 <lambdabot> Arrow a => a b c -> a (b, d) (c, d)
2021-09-16 23:19:30 +0200 <Rembane> That wasn't the clearest type signature, but it's one way to do it.
2021-09-16 23:19:32 +0200 <dsal> @hoogle first
2021-09-16 23:19:32 +0200 <Cajun> i see arrows im scared
2021-09-16 23:19:32 +0200 <lambdabot> Control.Arrow first :: Arrow a => a b c -> a (b, d) (c, d)
2021-09-16 23:19:32 +0200 <lambdabot> Data.Bifunctor first :: Bifunctor p => (a -> b) -> p a c -> p b c
2021-09-16 23:19:32 +0200 <lambdabot> Text.PrettyPrint.Annotated.HughesPJ first :: Doc a -> Doc a -> Doc a
2021-09-16 23:19:47 +0200 <dsal> The Bifunctor one is what your probably probably thinks of.
2021-09-16 23:19:48 +0200 <awpr> :t Data.Bifunctor.first -- a less scary one, slightly
2021-09-16 23:19:49 +0200 <lambdabot> Bifunctor p => (a -> b) -> p a c -> p b c
2021-09-16 23:19:56 +0200 <Cajun> oh its bifunctor, thats way less scary
2021-09-16 23:20:12 +0200 <dsal> newbie: You could use regular functor if you swapped the tuple around.
2021-09-16 23:20:41 +0200 <Rembane> :t swap
2021-09-16 23:20:42 +0200 <lambdabot> (a, b) -> (b, a)
2021-09-16 23:21:03 +0200 <dsal> I'd probably try to actually just use it in that direction instead of doing a `. swap`
2021-09-16 23:21:33 +0200 <newbie> That seems easier than i thought. Thanks guys, i'll try to implement it :)
2021-09-16 23:21:41 +0200 <ProofTechnique> More descriptive, for sure
2021-09-16 23:21:45 +0200cuz(~user@38.140.58.234) (Ping timeout: 268 seconds)
2021-09-16 23:22:35 +0200max22-(~maxime@2a01cb0883359800cbea6a523dcdbf78.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-16 23:22:47 +0200shailangsa(~shailangs@host86-186-132-44.range86-186.btcentralplus.com) ()
2021-09-16 23:23:58 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 250 seconds)
2021-09-16 23:27:06 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 23:28:22 +0200chris(~chris@81.96.113.213)
2021-09-16 23:28:26 +0200chrisGuest7922
2021-09-16 23:29:15 +0200 <ldlework> Is "Reflex" react for haskell?
2021-09-16 23:29:20 +0200 <ldlework> I can't quite tell
2021-09-16 23:29:52 +0200 <kuribas> rather react is pseudo FRP for javascript.
2021-09-16 23:30:11 +0200 <ldlework> so Reflex is a generic framework for doing FRP in haskell?
2021-09-16 23:30:25 +0200 <ldlework> Is it for web-development, or like, more general than that
2021-09-16 23:31:04 +0200 <kuribas> I am not that familiar with it, but I'd say it's mostly for the web, yes...
2021-09-16 23:31:32 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-16 23:32:40 +0200Guest7922(~chris@81.96.113.213) (Ping timeout: 240 seconds)
2021-09-16 23:33:41 +0200tdidrfyls^(~tdidrfyls@68.101.54.227) (Ping timeout: 268 seconds)
2021-09-16 23:34:21 +0200 <sm> lots of reflex packages: https://hackage.haskell.org/packages/search?terms=reflex
2021-09-16 23:34:21 +0200 <Boarders> is there a nice way to do your own custom errors in a alex+happy parser?
2021-09-16 23:34:37 +0200 <sm> wow. I guess reflex works
2021-09-16 23:36:44 +0200 <newbie> Hi again, I could not make it work. I do realize something is very wrong with the type signatures i pass around, just not how to fix it. I have created a pastebin with a minimized problem: https://pastebin.com/Pc8KA4dv
2021-09-16 23:37:11 +0200 <newbie> Question from before: I have a question regarding '>>=' of Either. If I want to apply it to a tuple containing Either instead i.e (Either SomeData a, String), how can I lift '>>=' such that it operates on tuples?
2021-09-16 23:37:26 +0200cuz(~user@38.140.58.234)
2021-09-16 23:37:29 +0200 <newbie> Namely to define ">>=" for Test without patternmatching on Either
2021-09-16 23:38:22 +0200 <kuribas> newbie: what is you monad doing with those integers?
2021-09-16 23:38:25 +0200 <kuribas> collecting them?
2021-09-16 23:38:59 +0200 <newbie> Just collecting them
2021-09-16 23:39:12 +0200hexfive(~eric@50.35.83.177)
2021-09-16 23:39:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-16 23:39:58 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 252 seconds)
2021-09-16 23:40:12 +0200 <newbie> I just realize '>>=' for either would never concatenate the integer list, thus it would never work
2021-09-16 23:40:20 +0200hexfive(~eric@50.35.83.177) (Client Quit)
2021-09-16 23:40:55 +0200 <kuribas> then ExceptT SomeData (ReaderT String (WriterT [Integer])) ?
2021-09-16 23:41:11 +0200 <kuribas> erm Writer, not WriterT
2021-09-16 23:41:27 +0200 <kuribas> or ExceptT SomeData (ReaderT String ([Integer],))
2021-09-16 23:41:51 +0200waleee(~waleee@h-98-128-228-119.na.cust.bahnhof.se)
2021-09-16 23:42:29 +0200 <newbie> Damn okay, that seems way to complicated to me
2021-09-16 23:42:58 +0200cuz(~user@38.140.58.234) (Ping timeout: 260 seconds)
2021-09-16 23:43:01 +0200 <newbie> Is pattern matching in declarations of 'bind' necessarily a bad idea?
2021-09-16 23:43:34 +0200 <kuribas> newbie: just use GeneralizedNewtypeDeriving.
2021-09-16 23:43:42 +0200 <kuribas> No need to write any instances.
2021-09-16 23:43:46 +0200 <ldlework> newbie: is the goal to make a Test Monad where you can compose a bunch of tests together and get some structure with all the results as Eithers
2021-09-16 23:44:06 +0200 <ldlework> or to short circuit on the first test
2021-09-16 23:44:09 +0200 <ldlework> that fails
2021-09-16 23:44:35 +0200 <newbie> It should short-circuit on the first test that fails
2021-09-16 23:44:41 +0200 <dsal> > Right [1] <> Right [2]
2021-09-16 23:44:43 +0200 <lambdabot> Right [1]
2021-09-16 23:44:46 +0200favonia(~favonia@user/favonia)
2021-09-16 23:44:59 +0200 <dsal> Huh. That's interesting.
2021-09-16 23:45:06 +0200 <dsal> > Just [1] <> Just [2]
2021-09-16 23:45:08 +0200 <lambdabot> Just [1,2]
2021-09-16 23:45:18 +0200 <dsal> Who thought that was a good idea?
2021-09-16 23:45:43 +0200 <ldlework> dsal: there might be multiple monads
2021-09-16 23:45:55 +0200 <ldlework> wait no, i'm dumb
2021-09-16 23:46:03 +0200 <newbie> It's for a school assignment, so the declarations is static. I have made a solution that works using pattern matching in ">>=" declaration of 'Test' , however I just wanted to see if I could utilize monads some more
2021-09-16 23:46:23 +0200System12_(~System123@net-37-179-171-3.cust.vodafonedsl.it)
2021-09-16 23:46:46 +0200 <ldlework> newbie: they have you do haskell at school?
2021-09-16 23:46:55 +0200 <newbie> Oh yes
2021-09-16 23:47:08 +0200 <dsal> ldlework: It's surprising when `Maybe` and `Left x` behave differently.
2021-09-16 23:47:14 +0200 <dsal> Er, `Either x`
2021-09-16 23:47:25 +0200 <ldlework> newbie: dope
2021-09-16 23:47:49 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-16 23:47:54 +0200jokleinn(~jokleinn@user/jokleinn) (Quit: WeeChat 3.2)
2021-09-16 23:48:04 +0200 <newbie> We have 3 weeks of Haskell, 3 weeks of Erlang and then an exam where you have to write a pretty big program in both within a week
2021-09-16 23:48:59 +0200 <kuribas> 3 weeks is very short
2021-09-16 23:49:30 +0200System123(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) (Ping timeout: 260 seconds)
2021-09-16 23:49:47 +0200 <ldlework> I'm only like 6 days in :P
2021-09-16 23:49:56 +0200 <newbie> I wish we had some more weeks ya, Haskell is a language I really have wanted to learn for years
2021-09-16 23:50:04 +0200 <ldlework> oh, that's the length of the whole program?!
2021-09-16 23:50:24 +0200 <ldlework> i thought you were saying you had three weeks under your belt
2021-09-16 23:50:36 +0200 <ldlework> newbie: I think >=> can come into play here
2021-09-16 23:50:41 +0200 <newbie> Oh no, that is the program/course
2021-09-16 23:51:22 +0200System12_(~System123@net-37-179-171-3.cust.vodafonedsl.it) (Ping timeout: 260 seconds)
2021-09-16 23:51:37 +0200 <newbie> Got any ideas about how?
2021-09-16 23:51:50 +0200favonia(~favonia@user/favonia) (Ping timeout: 260 seconds)
2021-09-16 23:52:15 +0200jokleinn(~jokleinn@user/jokleinn)
2021-09-16 23:52:46 +0200 <ldlework> newbie: still thinking about it
2021-09-16 23:53:10 +0200michalz(~michalz@185.246.204.61) (Remote host closed the connection)
2021-09-16 23:53:19 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-09-16 23:53:54 +0200 <kuribas> newbie: can you explain the problem?
2021-09-16 23:54:00 +0200 <ldlework> it kind of feels wierd
2021-09-16 23:54:06 +0200 <ldlework> because the function is inside the Test Monad
2021-09-16 23:54:25 +0200 <ldlework> what are the semantics of >>= supposed to be
2021-09-16 23:54:41 +0200 <ldlework> it feels like the thing desired is some associativity
2021-09-16 23:54:57 +0200 <ldlework> t1 <> t2 <> t3 == some Either
2021-09-16 23:55:05 +0200 <kuribas> :t runReaderT . runExceptT
2021-09-16 23:55:07 +0200 <lambdabot> ExceptT e (ReaderT r m) a -> r -> m (Either e a)
2021-09-16 23:55:20 +0200 <ldlework> Ah I don't know the Reader monad yet
2021-09-16 23:55:34 +0200 <ldlework> I should finish HFFP..
2021-09-16 23:55:38 +0200 <kuribas> substitute m = ([Integer],)
2021-09-16 23:55:42 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-16 23:55:49 +0200 <kuribas> that's your monad.
2021-09-16 23:56:01 +0200sleym(~sleym@195.181.171.237)
2021-09-16 23:56:05 +0200 <kuribas> Not sure it's the one you need for the problem though...
2021-09-16 23:56:34 +0200 <kuribas> Also, appending lists is very inefficient.
2021-09-16 23:57:31 +0200 <ldlework> kuribas: without Reader would it be enough to implement Monoid for Test?
2021-09-16 23:57:42 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-09-16 23:58:08 +0200 <ldlework> run the test, return either a Left failure, or a Right Integer composed with a recursive call to the rest of the tests
2021-09-16 23:58:28 +0200sleym(~sleym@195.181.171.237) (Client Quit)
2021-09-16 23:59:03 +0200 <ldlework> t1 <> t2 == Either (SomeData a) [Integer]
2021-09-16 23:59:35 +0200 <kuribas> ldlework: I have no idea what this function is supposed to do...
2021-09-16 23:59:43 +0200 <ldlework> which one
2021-09-16 23:59:48 +0200 <kuribas> What's SomeData? What's String?
2021-09-16 23:59:57 +0200 <kuribas> The one from newbie