Home liberachat/#haskell: Logs Calendar

Logs on 2023-08-27 (liberachat/#haskell)

00:10:21 artem joins (~artem@73.103.90.145)
00:12:11 × ulysses4ever quits (~artem@2601:408:c408:62c:f474:e3f8:9806:671) (Ping timeout: 246 seconds)
00:13:37 × Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Ping timeout: 246 seconds)
00:19:00 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
00:19:37 chiselfuse joins (~chiselfus@user/chiselfuse)
00:19:42 notzmv joins (~zmv@user/notzmv)
00:25:48 × falafel quits (~falafel@51.6.68.216) (Ping timeout: 248 seconds)
00:27:42 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
00:33:57 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 244 seconds)
00:43:15 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
00:53:36 × mhatta quits (~mhatta@www21123ui.sakura.ne.jp) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in)
00:59:16 jmcantrell joins (644f1bed9a@user/jmcantrell)
01:02:36 Inst joins (~liamzy@2601:6c4:4085:6d50::bb82)
01:06:24 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 246 seconds)
01:06:48 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
01:06:48 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
01:06:48 wroathe joins (~wroathe@user/wroathe)
01:07:52 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:08:32 Guest|79 joins (~Guest|79@177.89.244.30)
01:08:44 × Guest|79 quits (~Guest|79@177.89.244.30) (Client Quit)
01:10:54 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:17:29 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:22:44 bratwurst joins (~blaadsfa@70.75.221.8)
01:24:34 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
01:28:12 × bratwurst quits (~blaadsfa@70.75.221.8) (Ping timeout: 248 seconds)
01:29:13 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
01:41:14 razetime joins (~quassel@117.254.37.141)
01:43:35 Jeanne-Kamikaze joins (~Jeanne-Ka@142.147.89.207)
01:46:31 <Jeanne-Kamikaze> If I have 'class Product a b where type Prod a b :: *; (*) :: a -> b -> Prod a b' and, for example, 'instance Product Foo Bar where type Prod Foo Bar = Baz', why isn't Prod Foo Bar inferred as Baz when I put a Foo * Bar together?
01:47:04 <Jeanne-Kamikaze> (My experience with fundeps was short-lived; I had more runway with the associate type.)
01:47:54 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 4.0.4)
01:47:59 <Jeanne-Kamikaze> "Couldn't match expected type: Baz, actual type: Prod Foo Bar"
01:50:40 <Jeanne-Kamikaze> Oh, I think I get the problem...
01:52:26 <mauke> works here
01:52:47 <mauke> https://paste.tomsmeding.com/LdhIdAzI
01:53:11 <Jeanne-Kamikaze> Yeah. The problem is that I have another type class with its own associated type, and the Prod Associated X isn't known.
02:02:45 Thomas03 joins (~Thomas03@2600:1702:21b0:a500:e09e:1f4f:e07c:2dc2)
02:06:37 × Inst quits (~liamzy@2601:6c4:4085:6d50::bb82) (Ping timeout: 245 seconds)
02:07:21 <Thomas03> Hey, is this the right place to have my beginner code reviewed? I'm mostly self taught at Haskell, and I just finished my first sorta complicated project. The code works, but I just want to know in what ways I might be coding messily or inefficiently.
02:07:50 <geekosaur> this is the place although it might not be the right time
02:08:15 <Jeanne-Kamikaze> Shoot
02:08:19 <geekosaur> discourse.haskell.org is also a possibility and is less dependent on other people being awake
02:10:04 <Thomas03> https://paste.tomsmeding.com/BILueeeA#file-1
02:11:05 × mvk quits (~mvk@2607:fea8:5c9a:a600::5235) (Ping timeout: 244 seconds)
02:12:27 Inst joins (~liamzy@2601:6c4:4085:6d50::773)
02:12:29 <Thomas03> the code is supposed to emulate a game of tic-tac-toe, though I did make a couple shortcuts in its design
02:14:13 <mauke> oof, 1-based indexing?
02:16:23 <mauke> I don't like how everything is a string
02:16:58 <mauke> number? string. a character? string. the board? strings.
02:17:21 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
02:17:45 <Jeanne-Kamikaze> "read" is also not safe, some input handling in main would be helpful.
02:18:28 <mauke> well, the quick and diry way is to combine getLine + read into readLn :-)
02:18:37 <Jeanne-Kamikaze> If '#' is a sentinel, Maybe Char might be more appropriate in checkGrid.
02:21:18 <Thomas03> what is 1-based indexing and a sentinel?
02:22:09 <Jeanne-Kamikaze> '#" in checkGrid seems to be used only to signal that the game isn't over. Could have been '!' or whatever too. The meaning isn't clear until you find how it's used.
02:22:56 <Jeanne-Kamikaze> The input row/column is 1,2,3, as opposed to 0,1,2; that's what he means.
02:23:20 <Jeanne-Kamikaze> But I think that's fine since 1-based is more intuitive from a user's point of view.
02:23:24 <Thomas03> ah, ok
02:26:20 × ddellacosta quits (~ddellacos@146.70.171.100) (Ping timeout: 248 seconds)
02:26:30 <Thomas03> I was pretty surprised that my code was almost safe when I ran it, considering the lack of Maybe monads. Inputting garbage into the row and column choice didn't cause a crash. The only way I found to crash the code was not inputting anything.
02:26:59 <Thomas03> even if !! and my replace function aren't safe
02:27:10 <mauke> I mean the replace function, not necessarily the user interface
02:27:30 <mauke> (also, xs is not used in replace)
02:28:26 ddellacosta joins (~ddellacos@146.70.166.180)
02:30:28 <Thomas03> yeah, i'm pretty sure my replace function could be done much more elegantly, but I chose to take the easy way out rather than turn the users rowChoice into something that wasn't a string
02:31:52 <Thomas03> it might also make the function safe, but I'm going to redo the function in the morning with your suggestions and better handling of the changeGrid function
02:31:59 <Thomas03> thanks for the help
02:33:02 <mauke> :t \n r xs -> case splitAt n xs of (pre, post) -> pre ++ [r] ++ drop 1 post
02:33:03 <lambdabot> Int -> a -> [a] -> [a]
02:33:16 mvk joins (~mvk@2607:fea8:5c9a:a600::5235)
02:34:26 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
02:35:31 <mauke> :t \n r xs -> case splitAt n xs of (pre, post) -> pre <> [r] <> drop 1 post
02:35:32 <lambdabot> Int -> a -> [a] -> [a]
02:37:01 × Inst quits (~liamzy@2601:6c4:4085:6d50::773) (Ping timeout: 248 seconds)
02:37:06 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
02:38:28 <Thomas03> That seems like a much better way to do it, I will just need to create a function to convert characterChoice into a Char
02:39:14 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Client Quit)
02:42:05 × myme quits (~myme@2a01:799:d60:e400:8c94:2d5b:43cf:54e) (Ping timeout: 244 seconds)
02:42:59 myme joins (~myme@2a01:799:d60:e400:931b:da7a:83d:85fa)
02:43:01 × Thomas03 quits (~Thomas03@2600:1702:21b0:a500:e09e:1f4f:e07c:2dc2) (Quit: Client closed)
02:48:12 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:48:12 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:48:12 finn_elija is now known as FinnElija
02:53:00 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Ping timeout: 245 seconds)
02:53:16 × td_ quits (~td@i5387093E.versanet.de) (Ping timeout: 255 seconds)
02:54:24 bilegeek joins (~bilegeek@2600:1008:b049:a550:322c:1ff6:da17:76e2)
02:55:24 td_ joins (~td@83.135.9.2)
03:00:41 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 260 seconds)
03:03:56 YuutaW joins (~YuutaW@mail.yuuta.moe)
03:18:46 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 244 seconds)
03:20:44 × mvk quits (~mvk@2607:fea8:5c9a:a600::5235) (Ping timeout: 248 seconds)
03:29:45 aforemny_ joins (~aforemny@i59F516C9.versanet.de)
03:30:48 × aforemny quits (~aforemny@2001:9e8:6cef:2100:bda0:603:2023:867f) (Ping timeout: 246 seconds)
03:34:44 × caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline)
03:46:17 <EvanR> tic tac toe is obviously -1 based indexing
03:46:45 <wroathe> Is there a version of undefined, but for any kind? The use case is that I've got a scoped type variable in an instance of kind Meta, and I want to construct a value (that doesn't get evaluated) that I can apply https://hackage.haskell.org/package/base-4.18.0.0/docs/GHC-Generics.html#v:selName to
03:47:04 <wroathe> something like: selName (undefined :: c)
03:48:31 <wroathe> s/value/term, I guess
03:55:38 × nyc quits (~nyc@2603-7000-a106-2fb5-0000-0000-0000-1f21.res6.spectrum.com) (Ping timeout: 258 seconds)
03:56:12 <wroathe> Oh, I think TypeApplications works here
03:56:19 <wroathe> selName @c undefined
03:57:11 × Nosrep quits (~Nosrep@user/nosrep) (Remote host closed the connection)
03:57:36 Nosrep joins (~Nosrep@user/nosrep)
03:57:51 × fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
04:00:30 × Jeanne-Kamikaze quits (~Jeanne-Ka@142.147.89.207) (Quit: Leaving)
04:07:26 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
04:11:32 × k3ut0i quits (~keutoi@223.230.26.106) (Ping timeout: 240 seconds)
04:13:09 × razetime quits (~quassel@117.254.37.141) (Ping timeout: 246 seconds)
04:54:10 razetime joins (~quassel@117.254.37.141)
05:08:06 hammond joins (proscan@user/hammond2)
05:08:22 <hammond> ppl seem to change the interface of libraries in haskell a lot.
05:08:37 <hammond> is that a side effect of the language?
05:12:18 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
05:16:28 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
05:17:39 <dsal> hammond: I think it's more of a side effect of your library choice. I don't experience that all that much.
05:18:01 <dsal> I don't doubt it happens. Lots of software out there could use improvement. :)
05:18:35 <hammond> yes
05:18:42 <hammond> like regex.
05:20:55 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 245 seconds)
05:21:14 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
05:21:21 <dsal> Oh. Maybe. I've not used regex for anything in years other than some editor stuff. I did use a haskell regex library a few years ago and it had a pretty awful exception case I couldn't make safe.
05:21:55 <davean> ttps://hackage.haskell.org/package/regex ? A glance suggests its API hasn't changed in years?
05:24:28 × Rydwxz quits (~rw@cpe-75-82-51-90.socal.res.rr.com) (Ping timeout: 255 seconds)
05:24:36 <davean> Like litterly there hasn't been a change in like 5 years. That one 5 years ago sounds pretty minor.
05:28:45 × ddellacosta quits (~ddellacos@146.70.166.180) (Ping timeout: 246 seconds)
05:33:28 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 255 seconds)
05:37:10 <davean> hammond: do you have more clarity about what you mean?
05:39:31 dibblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
05:39:32 × dibblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
05:39:32 dibblego joins (~dibblego@haskell/developer/dibblego)
05:41:20 ddellacosta joins (~ddellacos@146.70.166.100)
05:43:56 sm joins (~sm@plaintextaccounting/sm)
05:46:16 <hammond> oh it doesn't handle groups very well. say "ABC" "ABC" "ABC" and you want to find something (A(B)C)+ or something.
05:46:48 <hammond> you can only get a String[][] back.
05:46:50 <hammond> idk
05:47:21 <dsal> That seems unrelated to the original statement. But I still have a much better life avoiding regex as much as possible.
05:49:13 <hammond> dsal, well was devean referring to the original statement. well for instance the HTTP support. the interface changed with every version i downloaded.
05:49:31 <dsal> Regex has http support?
05:49:48 <hammond> HTTP library.
05:50:29 <dsal> Oh, you mean regex could use improvement, not that it changes a lot.
05:50:37 <dsal> Which HTTP library are you referring to?
05:50:38 <hammond> then the namespaces were all funky too, modules shifted, game and went.
05:50:52 <hammond> came*
05:51:08 <hammond> lemmi open my code hold on.
05:51:18 nyc joins (~nyc@2603-7000-a106-2fb5-0000-0000-0000-1f21.res6.spectrum.com)
05:55:28 <hammond> https://hackage.haskell.org/package/HTTP
05:56:42 <hammond> then Cabal couldn't figure it out, finally luckily for me Debian had the right versions compiled and i managed to figure it out.
05:57:11 <hammond> I was readin this thing about procedural programming, and I figured I asked.
05:58:08 <dsal> Wow, that thing's up to version 4000s. I've never used that particular library.
05:58:26 <hammond> why would regex in a very safe language have exceptions... for instance. and be unsafe.
05:58:29 <hammond> ok
05:58:31 <dolio> It's at version 4000 because it used to be versioned based on date or something.
05:58:44 <dsal> It's from the future!
05:59:11 <dsal> hammond: I've not looked in a while, but it has something to do with working on bytestrings.
06:00:11 <hammond> i found one that was linked to .*? regex, when the string is too long it gets tired and throws an exception.
06:00:32 <hammond> fine.
06:01:00 <dsal> Life is better without regex in general.
06:01:18 <hammond> you have to parse text sometimes.
06:01:19 <mauke> regex is good
06:01:24 <mauke> haskell is just bad at regex
06:01:29 <dsal> When I have to parse text, I write a parser.
06:02:59 <haskellbridge> <s​m> a regular expression is a parser
06:03:10 × ddellacosta quits (~ddellacos@146.70.166.100) (Ping timeout: 255 seconds)
06:03:13 <haskellbridge> <s​m> with all the boilerplate hidden away
06:03:24 <mauke> why spend two seconds writing `printf "%.20s: %3.2f\n" label r` when I could write 20 lines formatting strings manually?
06:03:36 <mauke> same with regex vs. combinator parsers
06:03:37 × ski quits (~ski@ext-1-496.eduroam.chalmers.se) (Ping timeout: 255 seconds)
06:04:55 ddellacosta joins (~ddellacos@143.244.47.89)
06:06:10 <dsal> I don't think it's fair comparing inputs and outputs. Outputs are generally more controlled. I find inputs easier to control with a parser with better ergonomics and maintainability.
06:07:31 <mauke> same, but regex has better ergonomics (and arguably maintainability in cases where it applies)
06:07:37 <hammond> regex is the language of parsing text. although it can be terrible to work with.
06:08:00 <dolio> No, it's the language of lexing text.
06:09:40 × jmcantrell quits (644f1bed9a@user/jmcantrell) (Remote host closed the connection)
06:09:47 jmcantrell joins (644f1bed9a@user/jmcantrell)
06:14:18 acidjnk joins (~acidjnk@p200300d6e7072f522470d89c17007116.dip0.t-ipconnect.de)
06:23:51 Rydwxz joins (~rw@cpe-75-82-51-90.socal.res.rr.com)
06:26:51 × xff0x quits (~xff0x@2405:6580:b080:900:52e4:e06e:5b2b:5859) (Ping timeout: 246 seconds)
06:27:16 xff0x joins (~xff0x@178.255.149.135)
06:30:36 Square joins (~Square@user/square)
06:31:51 <Square> I want a good ansi pretty printer of haskell values. Tried pretty-simple, but it seems a bit limited. Is there some acclaimed ansi pretty printer?
06:34:39 × acidjnk quits (~acidjnk@p200300d6e7072f522470d89c17007116.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
06:36:21 × todi quits (~todi@p4fd1a580.dip0.t-ipconnect.de) (Remote host closed the connection)
06:41:02 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
06:43:47 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:51:51 <haskellbridge> <s​m> that's the one I use. pretty-show is an alternative, with different limitations
06:56:14 × bilegeek quits (~bilegeek@2600:1008:b049:a550:322c:1ff6:da17:76e2) (Quit: Leaving)
07:01:33 MQ-17J joins (~MQ-17J@104.28.216.165)
07:01:48 × MQ-17J quits (~MQ-17J@104.28.216.165) (Client Quit)
07:02:20 MQ-17J joins (~MQ-17J@104.28.216.165)
07:02:26 × MQ-17J quits (~MQ-17J@104.28.216.165) (Client Quit)
07:06:10 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 255 seconds)
07:06:37 acidjnk joins (~acidjnk@p200300d6e7072f524500269999e4b2db.dip0.t-ipconnect.de)
07:08:00 xff0x joins (~xff0x@2405:6580:b080:900:609e:9cca:19ee:68a9)
07:09:18 × Rydwxz quits (~rw@cpe-75-82-51-90.socal.res.rr.com) (Ping timeout: 255 seconds)
07:21:52 ymirhotfoot joins (~ymirhotfo@user/ymirhotfoot)
07:22:34 <ymirhotfoot> How does this work?
07:23:20 <ymirhotfoot> I joined via the Ganja Wee Web Cgat thingie.
07:23:37 Inst joins (~liamzy@2601:6c4:4085:6d50::bb82)
07:25:06 vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua)
07:25:33 <mauke> how does what work?
07:25:55 <ymirhotfoot> Ah, please forgive
07:25:58 × vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Remote host closed the connection)
07:26:06 <ymirhotfoot> gtoss vaguyness.
07:26:32 <ymirhotfoot> I write a tiny ping to Edward Kmett this evening.
07:26:34 vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua)
07:26:55 <ymirhotfoot> I used the address contact@positron.ai .
07:27:44 <ymirhotfoot> But I am "un-authentrcated" to Great Google's Own Version of USENET.
07:27:48 <haskellbridge> <I​nst> testing
07:27:53 <Inst> okay, nice / works
07:28:10 <ymirhotfoot> So the tiny ping failed to get through.
07:29:56 <mauke> looks like edwardk has been idle here for 15 days
07:30:30 <ymirhotfoot> Is it reasonable yo send a single short sentence to Edward via this sub-system of the Internet?
07:31:35 <ymirhotfoot> Ah, this is, oim how to say who I an, ag, well, Lokely I will tru in daylight to fet to Lovelock MV tomorrow.
07:32:32 <ymirhotfoot> which is where the Verizon operator told me is the official home of POSOYTON.AI the Company.
07:33:14 <ymirhotfoot> Thanks, Mauke!
07:34:23 <ymirhotfoot> ad what I sent, attemped to send:
07:34:34 <ymirhotfoot> The main message was
07:34:44 <ymirhotfoot> PING
07:35:12 <ymirhotfoot> and Yes Souriau was right!
07:37:46 <ymirhotfoot> First: Thank you all!
07:38:42 <ymirhotfoot> Secind: Good night, and, Heaven forwarding, see you later!
07:38:49 × ymirhotfoot quits (~ymirhotfo@user/ymirhotfoot) (Remote host closed the connection)
07:39:40 × Square quits (~Square@user/square) (Ping timeout: 245 seconds)
07:39:55 × vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Ping timeout: 255 seconds)
07:48:30 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
07:49:27 mmhat joins (~mmh@p200300f1c7042714ee086bfffe095315.dip0.t-ipconnect.de)
07:51:15 <Inst> what is preventing toDyn from handling polymorphic functions?
07:51:21 × mmhat quits (~mmh@p200300f1c7042714ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
07:52:07 todi joins (~todi@p4fd1a580.dip0.t-ipconnect.de)
07:54:09 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 244 seconds)
07:56:59 <Axman6> What a strange fellow, I hope edwardk doesn't get murdered
08:00:36 <c_wraith> Inst: It's based on Dynamic, and Dynamic can only represent concrete types
08:01:08 <c_wraith> Err.. *Typeable
08:05:57 × APic quits (apic@apic.name) (Quit: Upgrade GNU Screen)
08:08:34 APic joins (apic@apic.name)
08:18:20 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
08:19:08 dobblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
08:19:08 × dobblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
08:19:08 dobblego joins (~dibblego@haskell/developer/dibblego)
08:19:19 × Inst quits (~liamzy@2601:6c4:4085:6d50::bb82) (Remote host closed the connection)
08:19:24 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 248 seconds)
08:19:37 Inst joins (~liamzy@2601:6c4:4085:6d50::6702)
08:19:59 dobblego is now known as dibblego
08:25:56 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2)
08:26:03 <Inst> c_wraith: seems to be what I remembered, not sure how much of a limitation this is
08:38:14 × xff0x quits (~xff0x@2405:6580:b080:900:609e:9cca:19ee:68a9) (Read error: Connection reset by peer)
08:43:12 xff0x joins (~xff0x@2405:6580:b080:900:a08b:1654:7816:1e12)
08:46:34 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:48:25 × todi quits (~todi@p4fd1a580.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
08:50:37 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:52:15 todi joins (~todi@p4fd1a580.dip0.t-ipconnect.de)
08:56:32 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
08:56:33 × artem quits (~artem@73.103.90.145) (Read error: Connection reset by peer)
09:03:22 <[Leary]> Inst: You can circumvent it with a newtype wrapper.
09:06:32 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
09:11:37 × todi quits (~todi@p4fd1a580.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
09:11:49 <Inst> the typing involves specific variables
09:12:36 <Inst> i wonder what this looks like if i just inline everything
09:12:37 <Inst> https://discourse.haskell.org/t/beautiful-functional-programming/7411/28?u=liamzy
09:16:32 <Inst> also, wait, tricking toDyn to do stuff, isn't it easier if you typeapplications than do it with a newtype?
09:17:01 Simikando joins (~Simikando@adsl-dyn1.91-127-51.t-com.sk)
09:17:11 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
09:18:12 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
09:18:14 <Axman6> is the hackage matrix builder still a thing? I've uploaded a release candidate but have no idea if it builds
09:20:16 <dminuoso> https://github.com/haskell/hackage-server/issues/997
09:21:39 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:22:05 <dminuoso> It reads like Andreas Abel is waiting on Herbert for a handover.
09:22:29 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
09:23:10 thyriaen joins (~thyriaen@2a01:aea0:dd4:6c62:6245:cbff:fe9f:48b1)
09:25:20 <Inst> yup, this works
09:25:21 <Inst> ghci> toDyn $ id @Char
09:25:21 <Inst> <<Char -> Char>>
09:25:27 <Inst> but i can see how newtype can be useful
09:26:24 <mauke> > toDyn (id :: Char -> Char)
09:26:26 <lambdabot> <<Char -> Char>>
09:26:36 <mauke> > toDyn (id `asAppliedTo` 'x')
09:26:37 <lambdabot> <<Char -> Char>>
09:26:42 <c_wraith> Inst: use a newtype that quantifies internally
09:27:55 <mauke> newtype IdPoly = IdPoly (forall a. a -> a)
09:28:46 × Simikando quits (~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
09:29:11 × razetime quits (~quassel@117.254.37.141) (Remote host closed the connection)
09:29:14 sm joins (~sm@plaintextaccounting/sm)
09:30:06 <albet70> in do notation, f _ <- ... what's f here?
09:30:07 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:c533:a387:9f57:1069) (Remote host closed the connection)
09:30:29 <mauke> is that legal syntax?
09:30:36 <c_wraith> doesn't look like legal syntax
09:30:49 <mauke> > do { f _ <- undefined; f }
09:30:50 <lambdabot> <hint>:1:6: error:
09:30:50 <lambdabot> Parse error in pattern: f
09:30:50 <lambdabot> Possibly caused by a missing 'do'?
09:30:53 <c_wraith> It would be if there was a constructor in front of it, though
09:31:02 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
09:31:10 <mauke> albet70: it's a parse error
09:31:24 <c_wraith> albet70: F _ <- ... is a pattern match, though
09:31:37 gmg joins (~user@user/gehmehgeh)
09:33:08 <albet70> https://github.com/crytic/echidna/blob/master/src/Main.hs#L60C1-L60C1
09:33:16 <albet70> 62 lines
09:33:16 fendor joins (~fendor@2a02:8388:1640:be00:29b8:807b:7fa6:1bcf)
09:33:28 <c_wraith> Yes, there's a constructor at the start of that pattern
09:33:36 <c_wraith> The capital letter matters
09:36:05 <albet70> but 61 line isn't capitalized
09:36:15 <c_wraith> the pattern portion is
09:36:51 <albet70> what's the term I should search for those sytanx?
09:36:57 <c_wraith> it's just pattern syntax
09:37:13 <c_wraith> the only interesting part is that it's using RecordWildCards to bind record fields to names
09:37:23 <Axman6> dminuoso: thanks - that post beomg from 2022 isn't great. Would be nice to have Haskell benelovent corporate sponsoraship overload
09:38:18 <mauke> albet70: in line 61 there's only one "thing" to the left of the arrow
09:39:30 <albet70> haha, I see
09:40:46 <albet70> 62 line return a value which is EconfigWithValue ... and that pattern matching for extract loadedCfg and ks
09:42:25 <c_wraith> well, pattern-matching in do notation has one extra caveat - if the pattern doesn't match, a call to fail is made
09:43:45 <Inst> hold on
09:44:32 <probie> > do { Just x <- [Nothing]; pure 42 }
09:44:34 <lambdabot> []
09:44:37 <albet70> that's neat, I define a getMultiPart MultiPart x = x to extract b from A b, and this can avoid to define a function
09:44:46 <Inst> cool, it works
09:45:07 <probie> > do { mx <- [Nothing]; case mx of { Just x -> pure 42} }
09:45:09 <lambdabot> *Exception: <interactive>:3:23-53: Non-exhaustive patterns in case
09:45:42 <mauke> Inst: I didn't look at any other solutions, but this is what I came up with: https://paste.tomsmeding.com/8yeAVifc
09:45:55 <c_wraith> :t \m -> do Just x <- m ; pure x -- also, note the inferred constraint
09:45:55 <lambdabot> MonadFail m => m (Maybe b) -> m b
09:46:09 <mauke> @undo do Just x <- m ; pure x
09:46:09 <lambdabot> m >>= \ a -> case a of { Just x -> pure x; _ -> fail ""}
09:46:29 <Inst> i still prefer the Object hashmap approach to data
09:46:50 <Inst> in this particular context; i.e, you're working with foreign data from a paradigm that implies objects, isn't Object hashmap the natural way to do it?
09:46:53 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 246 seconds)
09:47:09 <mauke> no
09:47:18 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:47:25 <Inst> Object treemap is slower
09:47:33 <mauke> we have a clear spec that requires the existence and type of several fields
09:47:33 todi joins (~todi@p4fd1a580.dip0.t-ipconnect.de)
09:47:45 <mauke> we can validate and decode that at the application boundaries
09:48:09 <Inst> tbh i'm not sure how Haskell static vs foreign language dynamic / objects interacts
09:48:16 <mauke> we don't have to go full dynamic for the application core and make everything partial (or put runtime checks everywhere)
09:48:39 <Inst> *parse, don't validate
09:48:53 <mauke> "validate and decode" ~ parse
09:49:40 <Inst> what do you think about the dynamic typing advocate counter-argument, i.e, domain might be too flexible for this to work, and might result in annoying constant refactoring?
09:49:42 dcoutts joins (~duncan@31.94.3.174)
09:49:56 <probie> I actually don't think that a Haskell record type is a fair encoding of the question (assuming this is Jose Valim's problem)
09:50:07 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
09:50:10 vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua)
09:50:10 <mauke> probie: why not?
09:50:14 <Inst> it is
09:50:21 <Inst> (that is, it is Jose Valim's problem)
09:50:21 <c_wraith> Doing it with static types requires not relying on unnecessary information, which a lot of people are... bad at.
09:50:25 <probie> It's not a real key-value data structure. It just looks and feels like one
09:50:49 <mauke> the problem doesn't require a "real" key-value data structure
09:51:05 <Inst> that is to say, you can just drop down to a product type and call it a day?
09:51:06 <probie> The algorithm should receive a list of sections. A section is a key-value data structure ...
09:51:16 <mauke> doesn't say "real"
09:51:40 <mauke> Inst: I don't understand that argument
09:51:53 <Inst> which argument? The dynamic typing advocate argument?
09:51:55 <mauke> yeah
09:52:16 <Inst> i mean the Haskeller counterargument is that Haskell is fast and flexible enough on refactoring that it won't be a problem
09:52:29 <Inst> their argument is that if you lock everything into fully-specified ADTs, the specification can keep on changing
09:52:31 <mauke> if the set of fields changes significantly, I change my data type accordingly
09:52:34 <c_wraith> Inst: that's not the Haskeller counterargument
09:52:47 <mauke> if that breaks the code handling it, then I'll get a compiler error and can fix the code
09:52:48 <Inst> what is the Haskeller counterargument, then?
09:52:59 <mauke> in a dynamic language, the code would still be broken in that case, only you wouldn't know
09:53:14 <c_wraith> Inst: the Haskeller counterargument is that you shouldn't be parsing things into fields that you don't need. You just store "the rest of the data"
09:53:32 <c_wraith> Inst: so the only things that require a code change are the things that change the parts you're actually using
09:54:36 <mauke> case in point: note that my solution is fully polymorphic in the section_extra/lesson_extra fields. you could carry an arbitrary Map in there
09:54:44 <probie> mauke: How can it be a key-value data structure if you don't have keys?
09:55:12 <mauke> probie: I have field names
09:55:14 <mauke> close enough
09:55:21 <Inst> implicit key is the Section l a -> b function, no?
09:55:51 <albet70> what's that syntax of 61 line?
09:55:52 <probie> mauke: Are they? What if I remove the field names and write separate functions to access them? Is that still a key-value data structure?
09:56:12 <mauke> probie: no
09:56:21 <albet70> opts@Options{...} <- ...
09:56:34 <mauke> albet70: aliasing
09:56:53 <c_wraith> albet70: there are only two dots
09:57:06 <c_wraith> albet70: {..} is RecordWildCards
09:57:09 <mauke> `variable@pattern` matches against `pattern`, but also binds the whole value to `variable`
09:57:15 × xff0x quits (~xff0x@2405:6580:b080:900:a08b:1654:7816:1e12) (Remote host closed the connection)
09:57:34 <probie> mauke: What if Haskell didn't have record syntax, but I had a preprocessor that re-added it. Is your identical syntax code now no-longer a key-value data structure?
09:57:34 xff0x joins (~xff0x@2405:6580:b080:900:cb8f:3cad:845d:4b41)
09:57:42 <Inst> mauke: interesting use of runState
09:57:47 <Inst> no need for mapAccumL
09:58:01 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
09:58:33 <mauke> probie: does it matter?
09:59:06 <probie> For writing code which annotates courses and lessons, not one bit
09:59:36 <probie> For solving a problem on "key-value data structures" I think it's important to be explicit about what a key-value data structure is
10:00:13 <mauke> no, that's important for posing the problem
10:01:16 <mauke> for solving I'm going to do whatever seems easiest
10:01:28 <Inst> tbh, does elixir support mutable objects?
10:01:37 <probie> If I'm just going JSON -> annotate -> JSON for that problem, at no point do I need anything like a "key-value" data structure, but I think they'd cry foul if I just treated it as an event stream that needs lookahead (due to the nature of JSON)
10:02:42 <probie> I can just go with my shitty `foldr` solution, and deal in raw bytestrings
10:02:43 <Inst> c_wraith: tbh, are dynamic typing advocates essentially argueing for undefined behavior?
10:02:58 <Inst> /s/argueing/arguing
10:03:26 <probie> https://paste.tomsmeding.com/ewVC4yzd for my unreadable `foldr` solution
10:03:31 <mauke> besides, you can just slap a parser in front of my solution and get the same interface
10:03:48 aeroplane joins (~user@user/aeroplane)
10:04:12 <probie> (to clarify, my solution was originally meant as a joke "all you need is foldr", so readability is lacking)
10:04:15 <albet70> opts@Options{..} <- ... equal to let opts = ...?
10:04:31 notzmv joins (~zmv@user/notzmv)
10:05:49 <Inst> technically speaking, aren't most recursive problems solvable with foldr?
10:05:49 <Inst> like, you can implement maps with foldr, unfolds (I think) with foldr, filters with foldr, etc
10:05:49 × Inst quits (~liamzy@2601:6c4:4085:6d50::6702) (Remote host closed the connection)
10:06:06 Inst joins (~liamzy@2601:6c4:4085:6d50::bb82)
10:06:51 <probie> All problems are solvable with `foldr` if you have infinite lists.
10:07:09 <mauke> and if your "accumulator" is another function
10:08:12 × dcoutts quits (~duncan@31.94.3.174) (Ping timeout: 248 seconds)
10:08:23 <Inst> what is an accumulator in a foldr context?
10:08:35 <Inst> the element on the left, i.e, the next expression to be parsed, or the default value?
10:08:55 <tomsmeding> albet70: 'opts@Options{..} <- ...' means 'x <- ... ; let opts@Options{...} = x'
10:09:09 <tomsmeding> well, it doesn't if Options isn't the only constructor of '...'
10:09:31 <tomsmeding> because then MonadFail would get used if the constructor didn't match
10:09:40 <tomsmeding> but for single-constructor datatypes, close enough
10:09:46 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
10:09:59 kupi_ joins (uid212005@id-212005.hampstead.irccloud.com)
10:10:24 <tomsmeding> Inst: the a in (b -> a -> a) -> a -> [b] -> a
10:12:25 <albet70> right
10:14:56 × kupi_ quits (uid212005@id-212005.hampstead.irccloud.com) ()
10:15:20 kupi_ joins (uid212005@id-212005.hampstead.irccloud.com)
10:15:20 kupi_ is now known as kupi
10:15:23 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Client Quit)
10:15:35 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
10:23:16 <Inst> thanks
10:23:26 <Inst> yeah it's hard for me to think of foldr as containing an accumulator
10:23:44 <Inst> because i think of how you can implement foldl' with foldr
10:23:55 <[Leary]> tomsmeding: That transform also breaks strictness and tyvar scoping. What's wrong with case?
10:23:58 <Inst> wherein the accumulator can actually not exist
10:24:11 <Inst> and the actual accumulator is the function after the foldr function
10:24:26 <probie> In that case, the "accumulator" in foldr is the continuation
10:24:41 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
10:25:50 <[Leary]> @undo do{ x@Foo{} <- foo; bar }
10:25:50 <lambdabot> foo >>= \ a -> case a of { x@Foo{} -> bar; _ -> fail ""}
10:25:55 <[Leary]> albet70: ^
10:28:21 <probie> :t \f z xs -> foldr (\x cont !acc -> cont (acc `f` x)) id xs z -- if this is the foldl' you're thinking of
10:28:22 <lambdabot> Foldable t1 => (t2 -> t3 -> t2) -> t2 -> t1 t3 -> t2
10:30:39 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:508a:b795:5c07:5ed4)
10:33:15 <tomsmeding> Inst: all the same you're accumulating that continuation, as it were -- building a larger and larger continuation as you go
10:34:13 <Inst> ehhh, i can strict it, no?
10:34:41 <Inst> thanks for terms, calling the foldl' simulation a fold with continuation is nice
10:34:47 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:508a:b795:5c07:5ed4) (Ping timeout: 246 seconds)
10:34:57 <Inst> afaik the continuation isn't actually built
10:35:30 <Inst> because if you strict it on the outside accumulator, the function evaluates to a continuation and new accumulator
10:35:40 <Inst> and goes through the continuations step by step
10:36:36 <tomsmeding> Inst: is that behaviour observable?
10:36:50 <tomsmeding> or just a result of ghc's particular choice of lazy evaluation order
10:37:15 <tomsmeding> if the latter, then it's still valid to semantically see foldr as building up a continuation :)
10:37:31 <tomsmeding> anyway, that's where the terminology comes from
10:38:26 <Inst> i guess i think in terms of GHC
10:38:50 <Inst> thanks for the advice and enlightenment everyone!
11:05:39 mrmr1 joins (~mrmr@user/mrmr)
11:12:50 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
11:20:30 × xff0x quits (~xff0x@2405:6580:b080:900:cb8f:3cad:845d:4b41) (Ping timeout: 245 seconds)
11:20:55 xff0x joins (~xff0x@2405:6580:b080:900:6a3:c84f:b4fa:44ab)
11:22:22 wootehfoot joins (~wootehfoo@user/wootehfoot)
11:23:14 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Max SendQ exceeded)
11:23:48 wootehfoot joins (~wootehfoo@user/wootehfoot)
11:26:04 × xff0x quits (~xff0x@2405:6580:b080:900:6a3:c84f:b4fa:44ab) (Ping timeout: 248 seconds)
11:26:49 k3ut0i joins (~keutoi@106.201.95.140)
11:27:47 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 4.0.4)
11:28:06 xff0x joins (~xff0x@2405:6580:b080:900:1db3:366c:50c0:f70b)
11:38:25 × TheCoffeMaker_ quits (~TheCoffeM@190.245.100.85) (Ping timeout: 255 seconds)
11:41:38 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
11:44:27 jabuxas joins (~jabuxas@user/jabuxas)
11:46:04 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 255 seconds)
11:49:21 <edwardk> Axman6: more likely my cofounder will get murdered. I'm not the one in Nevada.
11:50:18 <Axman6> Well, that some consolation then! (Unless we like your cofounder equally, then it's also still probably a bad thing). How' the new gig going?
11:53:09 <edwardk> i mean i do rather like him. we did go start a company together.
11:53:16 <edwardk> going well!
11:53:39 <edwardk> i'll be at ICFP in a week or so hiring a little bit.
11:55:18 <jackdk> man I need more conferences in my life again
11:57:26 <juri_> i just tried to do a talk, after four years of no-talk. it's pretty embarassing.
11:58:12 <juri_> showed up with a laptop that had no pdf viewer, and ended up on a loaner that did not handle "slide and notes" well. showed my slide and notes side-by-side to the audience.
11:58:22 <juri_> very "kill me now" experience.
11:58:49 <mauke> how go you get a laptop without a browser?
11:59:06 <juri_> very carefully. :)
11:59:17 <Inst> did you have a GUI?
11:59:24 × xff0x quits (~xff0x@2405:6580:b080:900:1db3:366c:50c0:f70b) (Ping timeout: 256 seconds)
11:59:38 <juri_> sort of. no GUI apps at all, other than an xterm.
12:00:11 <Inst> no package manager either?
12:00:12 <juri_> the conference had no ethernet, so i couldn't just fix it quickly.
12:00:15 <Inst> ah
12:00:37 <Inst> also, can I ask about Cabal?
12:00:46 <Inst> I'm told it's bad practice to cabal install foo --lib everything
12:00:56 <Inst> what I'm doing now is cabal install acme-dont --lib
12:01:08 <Inst> which overrides dont, which is apparently not in any stackage libs
12:01:15 <juri_> you can thank the german state for that mess. they scheduled a meeting about buying a house in the middle of the conference.
12:01:18 xff0x joins (~xff0x@2405:6580:b080:900:39d8:3c9:7c35:7d94)
12:01:33 <Inst> that seems surreal
12:01:41 <juri_> it's an experience.
12:01:45 <Inst> then i cabal install libs, which doesn't expose them to a public namespace
12:01:59 <juri_> from what i hear, the talk was still alright, but..
12:02:28 <juri_> people might just be being polite.
12:05:02 <Axman6> edwardk: interesting; I wish I could make ICFP sometime. New job which doesn't care about FP and money being tright mean that's unlikely to change anytime soon sadly
12:07:00 <Axman6> edwardk: Any chance you're using Clash at positron?
12:07:20 <edwardk> none. clash isn't really up to the task we're pushing
12:08:08 <edwardk> short term project is 95% direct verilog. 4% c for high-level synthesis, 1% haskell. the 1% haskell is the key to it all.
12:08:45 <Axman6> Interesting, I'd be interested to hear more about that. I've been playing with it lately (new job is a FPGA based scientific test and measurement product), and have been really impressed by the depth of what they've built
12:09:37 <edwardk> happy to jump on a call some time. calendly.com/ekmett is easy, if nothing works for you off there (australian time and the hours i leave open are not terribly compatible) let me know and we'll find something (hell, i'm awake now
12:09:39 anselmschueler joins (~anselmsch@user/schuelermine)
12:11:21 <Axman6> Ha, indeed, it would be good to catch up again. I have a feeling my usual awake hours tend top end up roughly <the US>+12h, which makes overlaps nearly maximally bad
12:11:32 <probie> edwardk: "> awake now" It's 10pm
12:12:22 <edwardk> 8am here, and i didn't sleep yet.
12:12:31 <Axman6> D:
12:13:58 × thyriaen quits (~thyriaen@2a01:aea0:dd4:6c62:6245:cbff:fe9f:48b1) (Remote host closed the connection)
12:14:02 <Axman6> I hope that's because you've been working on something fun, and not the standard company work hours
12:14:50 <edwardk> very much the 'something fun' part
12:15:06 <edwardk> found a clever way to code up the control logic and wanted to see it work before i slept
12:20:55 × anselmschueler quits (~anselmsch@user/schuelermine) (Ping timeout: 246 seconds)
12:24:19 × finsternis quits (~X@23.226.237.192) (Ping timeout: 258 seconds)
12:24:43 finsternis joins (~X@23.226.237.192)
12:24:54 × xff0x quits (~xff0x@2405:6580:b080:900:39d8:3c9:7c35:7d94) (Ping timeout: 256 seconds)
12:26:32 xff0x joins (~xff0x@2405:6580:b080:900:714a:8e99:dec2:574)
12:29:40 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
12:32:52 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
12:33:16 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
12:36:17 ripspin joins (~chatzilla@1.145.230.12)
12:37:22 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
12:40:52 × fendor quits (~fendor@2a02:8388:1640:be00:29b8:807b:7fa6:1bcf) (Remote host closed the connection)
12:41:09 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 246 seconds)
12:41:38 × xff0x quits (~xff0x@2405:6580:b080:900:714a:8e99:dec2:574) (Ping timeout: 246 seconds)
12:43:45 xff0x joins (~xff0x@2405:6580:b080:900:b7a3:53a:8a49:b7b0)
12:43:47 fweht joins (uid404746@id-404746.lymington.irccloud.com)
12:44:48 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:49:02 × extor quits (~extor@ns3018124.ip-149-202-82.eu) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
12:52:58 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:54:51 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
12:55:39 × xff0x quits (~xff0x@2405:6580:b080:900:b7a3:53a:8a49:b7b0) (Remote host closed the connection)
12:55:58 xff0x joins (~xff0x@2405:6580:b080:900:35db:109b:d18d:4f60)
12:58:57 extor joins (~extor@ns3018124.ip-149-202-82.eu)
13:18:57 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
13:19:19 × Inst quits (~liamzy@2601:6c4:4085:6d50::bb82) (Remote host closed the connection)
13:19:37 Inst joins (~liamzy@2601:6c4:4085:6d50::9ad9)
13:23:43 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
13:23:55 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
13:26:39 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 246 seconds)
13:29:33 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
13:30:35 aeroplane parts (~user@user/aeroplane) (ERC 5.4 (IRC client for GNU Emacs 28.2))
13:33:52 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
13:35:05 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Ping timeout: 245 seconds)
13:41:32 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 4.0.4)
13:41:47 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
13:48:08 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 4.0.4)
13:48:23 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
13:48:46 × jabuxas quits (~jabuxas@user/jabuxas) (Ping timeout: 246 seconds)
13:50:06 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
13:50:20 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2)
13:50:55 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Client Quit)
13:51:09 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
13:55:27 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
13:55:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
13:56:56 sm joins (~sm@plaintextaccounting/sm)
14:02:20 × Inst quits (~liamzy@2601:6c4:4085:6d50::9ad9) (Ping timeout: 248 seconds)
14:04:32 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
14:05:46 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 4.0.4)
14:09:22 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
14:13:54 dhil joins (~dhil@78.45.150.83.ewm.ftth.as8758.net)
14:14:44 × sm quits (~sm@plaintextaccounting/sm) (Remote host closed the connection)
14:15:24 sm joins (~sm@plaintextaccounting/sm)
14:15:57 Pickchea joins (~private@user/pickchea)
14:18:27 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
14:18:46 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
14:19:40 × vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Quit: Quit)
14:19:54 vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua)
14:22:42 × vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Client Quit)
14:22:56 vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua)
14:24:44 Inst joins (~liamzy@2601:6c4:4085:6d50::7f5a)
14:26:56 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
14:28:58 sm joins (~sm@plaintextaccounting/sm)
14:29:04 kilolympus joins (~kilolympu@cpc105064-sgyl40-2-0-cust46.18-2.cable.virginm.net)
14:31:20 <albet70> I found that pattern matching is too powerful, we may not need record syntax to extract b from A b
14:32:03 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
14:32:03 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
14:32:27 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
14:32:42 chiselfuse joins (~chiselfus@user/chiselfuse)
14:35:05 × shapr quits (~user@2600:1700:c640:3100:ffa9:4f64:3f6e:7248) (Remote host closed the connection)
14:35:18 shapr joins (~user@2600:1700:c640:3100:5abb:a85e:1a7a:3359)
14:37:18 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
14:38:27 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
14:38:46 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
14:40:23 mikoto-chan joins (~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be)
14:45:43 thyriaen joins (~thyriaen@2a01:aea0:dd4:6c62:6245:cbff:fe9f:48b1)
14:45:44 × thyriaen quits (~thyriaen@2a01:aea0:dd4:6c62:6245:cbff:fe9f:48b1) (Remote host closed the connection)
14:51:42 xmachina joins (~xmachina@modemcable048.127-56-74.mc.videotron.ca)
14:57:52 × leah2 quits (~leah@vuxu.org) (Ping timeout: 245 seconds)
14:58:31 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
15:05:10 RSCASTILHO joins (~RSCASTILH@187.40.124.54)
15:08:25 × sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 245 seconds)
15:08:52 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
15:09:16 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
15:11:04 leah2 joins (~leah@vuxu.org)
15:12:23 sm joins (~sm@plaintextaccounting/sm)
15:13:36 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 246 seconds)
15:13:41 sm_ joins (~sm@plaintextaccounting/sm)
15:14:43 dibblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
15:14:43 × dibblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
15:14:43 dibblego joins (~dibblego@haskell/developer/dibblego)
15:17:00 × sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds)
15:19:58 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
15:23:28 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Remote host closed the connection)
15:23:51 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
15:24:45 Square joins (~Square@user/square)
15:25:17 <Square> Is there some trick to add writer-like capabilities to your Free monad?
15:25:18 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 246 seconds)
15:25:59 gmg joins (~user@user/gehmehgeh)
15:26:41 <Square> ...just want to log things during its evaluation
15:27:36 Simikando joins (~Simikando@adsl-dyn1.91-127-51.t-com.sk)
15:28:17 × ripspin quits (~chatzilla@1.145.230.12) (Remote host closed the connection)
15:34:10 × dhil quits (~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 256 seconds)
15:35:03 × Simikando quits (~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
15:37:20 Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-134-154.cust.tzulo.com)
15:37:23 caryhartline joins (~caryhartl@168.182.58.169)
15:38:27 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
15:38:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
15:40:50 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
15:42:25 grnman_ joins (~michaelsc@c-66-176-3-51.hsd1.fl.comcast.net)
15:50:36 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 248 seconds)
15:51:52 <EvanR> it's a free monad, you add whatever you want to the interface, then implement it
15:52:30 wroathe joins (~wroathe@user/wroathe)
15:52:33 YuutaW joins (~YuutaW@mail.yuuta.moe)
15:52:35 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 246 seconds)
15:52:42 × sm_ quits (~sm@plaintextaccounting/sm) (Quit: sm_)
15:52:46 <EvanR> albet70, 'extracting' fields usually isn't the 'problem' with record syntax
15:53:16 <Inst> where do I go to report that this list is insane?
15:53:17 <Inst> https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/table.html
15:53:26 <Inst> not in the usual "Haskell has too many extensions" sense, but rather:
15:53:31 <Inst> ImplicitPrelude Don't implicitly import Prelude. Implied by RebindableSyntax. ???
15:54:02 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
15:56:57 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
15:57:13 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
15:57:24 wootehfoot joins (~wootehfoo@user/wootehfoot)
15:57:55 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
15:58:44 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:00:05 × k3ut0i quits (~keutoi@106.201.95.140) (Ping timeout: 245 seconds)
16:00:11 × drdo quits (~drdo@bl5-28-156.dsl.telepac.pt) (Ping timeout: 250 seconds)
16:03:13 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
16:04:29 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Ping timeout: 248 seconds)
16:05:00 <Inst> reported on GitLab, hope that's appropriate
16:06:54 k3ut0i joins (~keutoi@122.169.217.14)
16:07:55 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
16:07:56 × Inst quits (~liamzy@2601:6c4:4085:6d50::7f5a) (Remote host closed the connection)
16:08:08 <EvanR> what is the problem
16:08:13 Inst joins (~liamzy@2601:6c4:4085:6d50::bb82)
16:08:27 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
16:08:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
16:11:07 × grnman_ quits (~michaelsc@c-66-176-3-51.hsd1.fl.comcast.net) (Ping timeout: 255 seconds)
16:13:44 notzmv joins (~zmv@user/notzmv)
16:17:37 × fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
16:18:41 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 260 seconds)
16:18:43 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:21:56 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:22:18 Rydwxz joins (~rw@cpe-75-82-51-90.socal.res.rr.com)
16:29:56 × Inst quits (~liamzy@2601:6c4:4085:6d50::bb82) (Remote host closed the connection)
16:30:16 Inst joins (~liamzy@2601:6c4:4085:6d50::7f5a)
16:33:29 × migas quits (~migas@astra4961.startdedicated.net) (Quit: Ping timeout (120 seconds))
16:33:29 × caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline)
16:35:17 migas joins (~migas@astra4961.startdedicated.net)
16:35:44 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:36:12 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:4c5b:3166:bd64:8e4)
16:36:36 caryhartline joins (~caryhartl@168.182.58.169)
16:37:00 × Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-134-154.cust.tzulo.com) (Quit: Leaving)
16:39:31 YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7)
16:40:35 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4c5b:3166:bd64:8e4) (Ping timeout: 246 seconds)
16:44:36 hyvoid joins (~hyenavoid@222-0-178-69.static.gci.net)
16:44:40 × hyvoid quits (~hyenavoid@222-0-178-69.static.gci.net) (Remote host closed the connection)
16:52:00 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
16:52:16 dobblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
16:52:16 × dobblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
16:52:16 dobblego joins (~dibblego@haskell/developer/dibblego)
16:52:30 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 255 seconds)
16:53:08 dobblego is now known as dibblego
16:53:49 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
16:58:27 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Remote host closed the connection)
16:58:28 × pointlessslippe1 quits (~pointless@212.82.82.3) (Ping timeout: 246 seconds)
16:58:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc)
17:02:08 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:ab9c:7f5b:faa5:5bc) (Client Quit)
17:02:57 pointlessslippe1 joins (~pointless@212.82.82.3)
17:04:54 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
17:06:40 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:06:47 × mikoto-chan quits (~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be) (Quit: WeeChat 3.8)
17:11:41 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
17:15:56 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
17:16:30 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
17:20:52 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 255 seconds)
17:29:34 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:30:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds)
17:35:25 × caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline)
17:36:20 sm joins (~sm@plaintextaccounting/sm)
17:40:12 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:41:42 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
17:46:43 <Inst> for antiquated Haskell freeware books
17:46:47 <Inst> why not RWH over LYAH?
17:52:03 <monochrom> Did anyone said "not RWH"?
17:52:23 <geekosaur> I'd actually prefer RWH because it gives you things to do, exercises, etc. LYAH is 15 countries in 15 days
17:52:28 michalz joins (~michalz@185.246.207.197)
17:52:36 <monochrom> Actually, I tend to say that, but no one heard me anyway.
17:53:33 <geekosaur> so you need to do LYAH along with data61 or cis194 in order to be able to actually write Haskell
17:54:05 <dolio> Do you?
17:54:17 <geekosaur> not enough exercises in lyah
17:54:32 <geekosaur> you can read Haskell but not really write it
17:55:15 <dolio> I didn't use any dedicated Haskell course to practice writing Haskell when I was learning.
17:55:23 <monochrom> :)
17:55:27 <dolio> I just wrote my AI homework in it or something.
17:55:36 <monochrom> The Gentle Introduction here. LYAH didn't even exist.
17:55:41 <geekosaur> ^
17:55:56 <geekosaur> right, but not everyone is as good at self-directed learning
17:56:09 <monochrom> I am sympathetic that LYAH is less terse than Gentle Intro.
17:56:39 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:56:41 <geekosaur> I did the gentle intro and then dove directly into xmonad, which was a really good fit because I knew what it had to be doing so I could concentrate on the "how"
17:56:54 <monochrom> OK, unpopular opinion: So you need to do LYAH along/after Learn How to Learn. :)
17:57:50 <Inst> monochrom: I'm a bit excited because someone who I recall said he hated Haskell suddenly changed his mind
17:57:50 <dolio> Maybe you need something that tells you which "optional" libraries to use these days, because they've all been split out of base.
17:58:05 <Inst> but people kept on mentioning LYAH
17:58:09 <Inst> which... didn't work for me
17:58:45 <monochrom> Right, people who don't use Haskell in anger keep suggesting LYAH.
17:58:57 <monochrom> But have you lurked in this channel lately?
17:59:18 <geekosaur> cis194 and the wikibook are most recommended around here, I think
17:59:19 <monochrom> Because here is full of people who use Haskell in anger and they say "anything except LYAH".
17:59:26 <Inst> no one ever mentions lyah here, i think among actual haskellers, different resources get recommended
18:01:07 <Inst> i directed him to effective haskell and thinking functionally with haskell
18:01:22 ss4 joins (~wootehfoo@user/wootehfoot)
18:02:38 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
18:03:59 <Inst> but I'm just surprised that RWH doesn't get mentioned nearly as much, RWH is 50% longer than LYAH, is now free online, and is a better book, imo
18:04:44 <Inst> if Don Stewart et al updated RWH, they'd probably have a book that's better than 90% of books on the market
18:04:52 <geekosaur> it's been free online since it was released. sadly, it's been obsolete for pretty much the same amount of time because the exception system was completely overhauled while it was in post-production
18:05:37 <geekosaur> and I don't know whatm if any, kind of NDA dons is under currently but it would very much not surprise me if he is
18:06:22 jabuxas joins (~jabuxas@user/jabuxas)
18:06:26 <Inst> 2nd edition got published in 2012 iirc
18:06:26 × Inst quits (~liamzy@2601:6c4:4085:6d50::7f5a) (Remote host closed the connection)
18:06:33 <monochrom> I would think merely unbitrotting RWH would not infringe any NDA.
18:06:43 Inst joins (~liamzy@2601:6c4:4085:6d50::9d0d)
18:06:49 <Inst> oh, it was always first edition :(
18:07:02 <geekosaur> one would think so, then I remember the NDA a bank tried to rope me into
18:07:10 <geekosaur> back in 1998
18:07:28 <geekosaur> it was narsty
18:07:37 <monochrom> But the irony of "someone is surprised that non-Haskell users recommend lesser Haskell resource" and "someone who is not a lawyer is surprised that an NDA blocks unbitrotting an old book".
18:08:42 <dolio> Even if you don't think an NDA would, there are all kinds of weird contracts corporations try to get people to sign.
18:09:32 <Inst> so wait, is Standard Chartered somehow blocking RWH?
18:09:35 <dolio> Like, don't one of the big ones have some kind of, 'we own all the programming work you do in your spare time,' clauses?
18:11:28 <Inst> there's this, though
18:11:29 <Inst> https://github.com/tssm/up-to-date-real-world-haskell
18:11:38 <dolio> Probably not. dons probably just doesn't feel like updating the book.
18:12:43 <Inst> it's also a 3 person book, the band probably doesn't want to get back together again
18:12:49 <Inst> dons I think is doing Rust a lot
18:12:55 danza joins (~francesco@151.37.230.40)
18:12:58 <monochrom> His contract allows him to post skyline sunset photos only :)
18:13:30 <APic>
18:14:17 <monochrom> One time someone on haskell-cafe asked about a book for haskell-and-databases-etc.
18:14:39 <monochrom> I said the cold hard truth "if someone tries to write one, it's outdated the next day already".
18:14:59 <monochrom> The original poster was very angry at me. :)
18:15:29 <Inst> well, i guess not, working on glean
18:16:09 <monochrom> Like it or not, it's the cold hard truth. Just look at RWH. Even LYAH is outdated.
18:16:45 <geekosaur> dolio, that's what the bank I was talking about earlier had
18:17:16 <geekosaur> since I was already into open source by then, I was very unhappy
18:17:22 <dolio> Yeah.
18:17:39 <APic> Yeah.
18:17:41 <monochrom> Oh wait, has anyone tried to do stenography analysis or something on dons's posted photos? >:)
18:17:43 <geekosaur> I managed to get it weakened to "…that is related to what we do"
18:18:15 <monochrom> Is it possible that dons was hiding RWH updates and new fantastic Haskell libs that can change the world in the photos?
18:18:41 <Inst> lol ;_;
18:19:29 <monochrom> "dons hid a lens library in a sunset photo 5 years before edwardk wrote the lens library we know" >:D
18:19:32 <dolio> Oh yeah. I suppose it makes some amount of sense to try to prevent people from duplicating what their being paid to work on. Although that seems like a very out of touch concern.
18:20:08 <geekosaur> I wasn't even writing financial code, I was mostly doing sysadmin stuff for them
18:21:33 gatekempt joins (~gatekempt@user/gatekempt)
18:22:50 × ss4 quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
18:26:43 hubvu_ joins (uid495858@id-495858.tinside.irccloud.com)
18:28:20 × gatekempt quits (~gatekempt@user/gatekempt) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:28:44 hubvu_ parts (uid495858@id-495858.tinside.irccloud.com) ()
18:29:01 sm joins (~sm@plaintextaccounting/sm)
18:29:58 × sm quits (~sm@plaintextaccounting/sm) (Client Quit)
18:35:12 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
18:36:09 <edwardk> monochrom: sure, though dons' version limited the choice of functor to IO.
18:43:50 × jabuxas quits (~jabuxas@user/jabuxas) (Quit: Leaving.)
18:44:10 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
18:44:10 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
18:44:10 wroathe joins (~wroathe@user/wroathe)
18:48:11 jabuxas joins (~jabuxas@user/jabuxas)
18:53:34 <monochrom> hahaha
18:54:31 <geekosaur> also I think you meant steganography
18:54:43 <geekosaur> stenography is typists' shorthand
18:57:34 <monochrom> oops yeah
18:58:04 Sgeo joins (~Sgeo@user/sgeo)
19:05:53 Simikando joins (~Simikando@adsl-dyn1.91-127-51.t-com.sk)
19:06:07 × Simikando quits (~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Client Quit)
19:10:15 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
19:14:16 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds)
19:15:19 caryhartline joins (~caryhartl@168.182.58.169)
19:15:51 × ddellacosta quits (~ddellacos@143.244.47.89) (Ping timeout: 245 seconds)
19:16:16 ddellacosta joins (~ddellacos@143.244.47.89)
19:16:46 fendor joins (~fendor@2a02:8388:1640:be00:29b8:807b:7fa6:1bcf)
19:23:38 × extor quits (~extor@ns3018124.ip-149-202-82.eu) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
19:25:19 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
19:25:19 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
19:25:19 wroathe joins (~wroathe@user/wroathe)
19:45:06 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
19:57:54 × jabuxas quits (~jabuxas@user/jabuxas) (Remote host closed the connection)
19:59:39 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
20:01:38 <Inst> since chuck norris is NDA-ed
20:01:55 <Inst> erm, Don Stewart is NDA-ed, is he now the Haskell community Chuck Norris?
20:04:26 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
20:06:56 × Inst quits (~liamzy@2601:6c4:4085:6d50::9d0d) (Remote host closed the connection)
20:07:13 Inst joins (~liamzy@2601:6c4:4085:6d50::7f5a)
20:07:28 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
20:10:38 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
20:11:32 × V quits (~v@ircpuzzles/2022/april/winner/V) (Ping timeout: 240 seconds)
20:25:26 × xmachina quits (~xmachina@modemcable048.127-56-74.mc.videotron.ca) (Ping timeout: 260 seconds)
20:26:34 V joins (~v@ircpuzzles/2022/april/winner/V)
20:29:59 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:30:34 Pickchea joins (~private@user/pickchea)
20:30:34 × todi quits (~todi@p4fd1a580.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in)
20:32:00 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2)
20:32:26 sm joins (~sm@plaintextaccounting/sm)
20:33:27 × sm quits (~sm@plaintextaccounting/sm) (Client Quit)
20:33:53 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:36:26 × shapr quits (~user@2600:1700:c640:3100:5abb:a85e:1a7a:3359) (Remote host closed the connection)
20:45:15 × RSCASTILHO quits (~RSCASTILH@187.40.124.54) ()
20:45:46 × fendor quits (~fendor@2a02:8388:1640:be00:29b8:807b:7fa6:1bcf) (Remote host closed the connection)
20:51:08 son0p joins (~ff@152.203.98.110)
20:53:07 AlexNoo_ joins (~AlexNoo@178.34.150.48)
20:53:51 myxokephale joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com)
20:53:51 Luj1 joins (~Luj@2a01:e0a:5f9:9681:92c9:bd26:afaf:3abb)
20:54:31 billchenchina joins (~billchenc@103.152.35.21)
20:54:44 terrorjack7 joins (~terrorjac@2a01:4f8:c17:87f8::)
20:54:44 pierrot_ joins (~pi@user/pierrot)
20:54:49 jbalint_ joins (~jbalint@071-090-119-177.res.spectrum.com)
20:55:00 TheCoffeMaker_ joins (~TheCoffeM@190.245.100.85)
20:55:01 p3n_ joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
20:55:01 whatsupdoc_ joins (uid509081@id-509081.hampstead.irccloud.com)
20:56:08 hueso_ joins (~root@user/hueso)
20:56:17 × michalz quits (~michalz@185.246.207.197) (Remote host closed the connection)
20:56:28 piele_ joins (~piele@tbonesteak.creativeserver.net)
20:57:27 kronicma1 joins (user98083@neotame.csclub.uwaterloo.ca)
20:57:32 caubert_ joins (~caubert@user/caubert)
20:57:47 [exa]_ joins (~exa@srv3n.blesmrt.net)
20:57:55 dxtr_ joins (~dxtr@user/dxtr)
20:58:20 falafel joins (~falafel@216.68.6.51.dyn.plus.net)
21:00:12 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
21:02:08 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (*.net *.split)
21:02:08 × vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (*.net *.split)
21:02:08 × dxtr quits (~dxtr@user/dxtr) (*.net *.split)
21:02:08 × billchenchina- quits (~billchenc@2a0c:b641:7a2:320:ee3e:47ca:6070:d71a) (*.net *.split)
21:02:08 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (*.net *.split)
21:02:08 × AlexNoo quits (~AlexNoo@178.34.150.48) (*.net *.split)
21:02:08 × piele quits (~piele@tbonesteak.creativeserver.net) (*.net *.split)
21:02:08 × Buggys quits (Buggys@buggy.shelltalk.net) (*.net *.split)
21:02:08 × myxos quits (~myxos@cpe-65-28-251-121.cinci.res.rr.com) (*.net *.split)
21:02:08 × jbalint quits (~jbalint@2600:6c44:117f:e98a:816a:9488:fb1:7b7) (*.net *.split)
21:02:08 × hueso quits (~root@user/hueso) (*.net *.split)
21:02:08 × p3n quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (*.net *.split)
21:02:08 × kronicmage quits (user44322@neotame.csclub.uwaterloo.ca) (*.net *.split)
21:02:08 × pierrot quits (~pi@user/pierrot) (*.net *.split)
21:02:08 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (*.net *.split)
21:02:08 × Ranhir quits (~Ranhir@157.97.53.139) (*.net *.split)
21:02:08 × Luj quits (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (*.net *.split)
21:02:08 × terrorjack quits (~terrorjac@2a01:4f8:c17:87f8::) (*.net *.split)
21:02:08 × Vajb quits (~Vajb@2001:999:489:74bc:8e7:73bb:7236:fd81) (*.net *.split)
21:02:08 × Adran quits (~adran@botters/adran) (*.net *.split)
21:02:08 × [exa] quits (~exa@user/exa/x-3587197) (*.net *.split)
21:02:08 × caubert quits (~caubert@user/caubert) (*.net *.split)
21:02:09 Luj1 is now known as Luj
21:02:09 terrorjack7 is now known as terrorjack
21:02:10 whatsupdoc_ is now known as whatsupdoc
21:02:15 Buggys- joins (Buggys@Buggy.shelltalk.net)
21:02:39 Adran joins (~adran@botters/adran)
21:03:11 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:04:31 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds)
21:06:52 dxtr_ is now known as dxtr
21:09:40 Ranhir joins (~Ranhir@157.97.53.139)
21:09:51 sm joins (~sm@plaintextaccounting/sm)
21:10:48 × sm quits (~sm@plaintextaccounting/sm) (Client Quit)
21:16:27 mniip_ is now known as mniip
21:17:07 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds)
21:17:23 extor joins (~extor@ns3018124.ip-149-202-82.eu)
21:22:52 azimut joins (~azimut@gateway/tor-sasl/azimut)
21:26:34 Thomas03 joins (~Thomas03@2600:1702:21b0:a500:e1c1:8242:9d33:b337)
21:29:47 × cheater quits (~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com))
21:30:41 pavonia joins (~user@user/siracusa)
21:31:37 wroathe joins (~wroathe@user/wroathe)
21:33:56 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
21:35:29 Guest99 joins (~Guest99@2601:602:a080:4e50:fefc:3da5:d370:8cd4)
21:36:20 Guest99 parts (~Guest99@2601:602:a080:4e50:fefc:3da5:d370:8cd4) ()
21:38:52 aaronv joins (~Guest99@user/aaronv)
21:43:53 ec_ joins (~ec@gateway/tor-sasl/ec)
21:46:04 × aaronv quits (~Guest99@user/aaronv) (Quit: aaronv)
21:46:06 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 246 seconds)
21:46:43 aaronv joins (~aaronv@user/aaronv)
21:47:26 × Inst quits (~liamzy@2601:6c4:4085:6d50::7f5a) (Ping timeout: 258 seconds)
21:55:11 × aaronv quits (~aaronv@user/aaronv) (Quit: Leaving)
21:55:33 aaronv joins (~aaronv@user/aaronv)
21:56:34 <Square> I've tried out a bunch of pretty printers (for Haskell values). It seems "prettyprinter" is the golden standard, but there seems to be a mighty endeavor getting nice ANSI colored printing of Haskell values. "pretty-simple" seems like the popular one for this task, but it seems very limited.
21:57:31 <Square> Anyone have any insight in where to look to accomplish this?
21:58:56 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
22:00:14 <EvanR> I like pretty-simple
22:00:16 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
22:00:19 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
22:00:41 <EvanR> silver standard it is
22:01:33 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:02:06 <geekosaur> there's an inherent problem with pretty-printers: everyone has their own idea of what "pretty" is, especially for their program-specific types
22:02:08 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
22:02:22 cheater joins (~Username@user/cheater)
22:02:29 <mniip> I like pretty-show with its "PreProc" mechanism
22:04:04 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Client Quit)
22:04:47 <Square> yeah, I can see that. I just thought "pretty-simple" was a bit cheap in that it just color literal values and block-separators.
22:05:18 <geekosaur> wel, it is simple
22:05:23 <Square> true
22:05:53 <EvanR> welcome to the era of *simple haskell*
22:06:21 <int-e> . o O ( It's better than BASIC )
22:07:46 <mniip> what would "expensive" be in this context?
22:07:48 <dsal> We are using one of those pretty printer things at work. I really dislike it for a few reasons. One is that it follows that new fad of putting everything on its own line. You write out a list of two things or something, you get like, three lines. The other thing is that has to convert everything to a string, then parse that string, and then based on what it parses, decide structure.
22:07:58 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 255 seconds)
22:08:31 <mniip> yeah we only use pretty-printers for golden tests to keep them more readable than `show`
22:08:53 <EvanR> I would like a pretty printer which dumps my value to an SQL database and lets me query it
22:08:59 <EvanR> automatically
22:09:08 <dsal> Besides being super slow, a weird artifact in a Show instance can cause incorrect output, which led to an analysis problem once. I was looking at pretty printed output of a thing and didn't see a specific thing that indicated a problem. It was in the Show output, but the pretty printer ate it.
22:09:28 <dsal> Golden tests are a pretty good use case for pretty printers like this.
22:11:54 <dsal> Whatever one we're using is the default output printer in GHCI which… does not make things easier to read for me.
22:12:17 <dsal> What would be two lines of output can involve scrolling.
22:12:49 <geekosaur> ghci just uses the Show instance unless you're overriding it
22:12:58 × danza quits (~francesco@151.37.230.40) (Read error: Connection reset by peer)
22:13:00 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 248 seconds)
22:13:14 danza joins (~francesco@151.19.248.14)
22:13:45 <dsal> Yeah, our project does the overloading.
22:17:59 <dsal> For example: https://usercontent.irccloud-cdn.com/file/tsMflXlx/example.png
22:18:30 <geekosaur> iiiiiiiick
22:19:05 <dsal> Kind of a trendy look these days.
22:20:01 <monochrom> :)
22:22:35 <dsal> Ha. I made a directive that will ask the printer to do its compact representation. That depends on how wide it considers too wide before going all-in on tall: https://usercontent.irccloud-cdn.com/file/pXAEhSGS/tall.png
22:27:29 <EvanR> your pretty printer is flawed. Each digit must be on its own line
22:27:32 × ec_ quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
22:27:56 ec_ joins (~ec@gateway/tor-sasl/ec)
22:28:13 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 255 seconds)
22:28:35 <aaronv> the commas should get their own lines
22:28:35 dibblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
22:28:35 × dibblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
22:28:35 dibblego joins (~dibblego@haskell/developer/dibblego)
22:31:07 <dsal> fourmolu kind of does that in really weird and unjustifiable conditions: https://github.com/fourmolu/fourmolu/issues/72
22:32:20 × acidjnk quits (~acidjnk@p200300d6e7072f524500269999e4b2db.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
22:34:59 <Square> dsal, how do you get this fourmolu to work in ghci?
22:35:23 foul_owl_ joins (~kerry@174-21-66-189.tukw.qwest.net)
22:35:42 <dsal> ghci is running some other pretty printer. fourmolu is a sticky paste we smear on our code to make it take up more vertical space.
22:35:44 × foul_owl quits (~kerry@157.97.134.164) (Ping timeout: 258 seconds)
22:36:35 <dsal> You can override the print function with `-interactive-print` – I've got a ghci function that overrides our override to sometimes be less bad.
22:39:01 <wroathe> Say I want to map types to strings... is there a more concise way of doing so than defining a type class and instances? I.e. instead of class Foo t where; fooString :: Tagged t String and instance X where; instance Y where;
22:39:16 <wroathe> Just having some kind of map from Type -> 'String or something like that
22:39:53 <geekosaur> Data.Typeable.typeRep?
22:42:04 <EvanR> a type level String?
22:42:11 <wroathe> geekosaur: Does that let me choose atrbitrary strings? the use case is a code generator that maps haskell data types to type keywords in that other language
22:42:42 <wroathe> I want to go from Int32 -> "int" and Text -> "text" and so on
22:42:52 <EvanR> you could use a type family to go from type/datakind to Symbol
22:43:13 <wroathe> EvanR: That's what I was wondering about. I need to go read up on type families
22:43:42 <EvanR> F Int32 = "int"
22:43:47 <EvanR> F Text = "text"
22:43:52 <EvanR> ...
22:44:01 <wroathe> perfect, yeah, that would be great
22:44:04 <EvanR> ok, that's not the syntax
22:44:54 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 246 seconds)
22:45:56 <EvanR> https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/type_families.html#synonym-families
22:46:29 <wroathe> symbolVal (Proxy :: Proxy (F Int32))
22:46:38 <wroathe> Yeah, that seems to do the trick
22:47:02 <wroathe> type family F a where; F Int32 = "int"
22:47:46 <wroathe> This kind of type level programming is such a fun rabbit hole
22:47:56 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:48:02 <EvanR> still waiting for my type level DOOM
22:48:49 gatekempt joins (~gatekempt@user/gatekempt)
22:48:50 <wroathe> EvanR: I'm sure there's someone working on it
22:49:26 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:54:36 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Ping timeout: 248 seconds)
22:57:08 shapr joins (~user@2600:1700:c640:3100:147e:15c1:a149:186b)
22:57:52 Jeanne-Kamikaze joins (~Jeanne-Ka@142.147.89.237)
23:10:00 <dsal> Simple Haskell is the knee jerk reaction to Type Level Doom
23:10:10 <wroathe> Hmm, is there a way to use a type family as a constraint?
23:10:34 <wroathe> asType :: Tagged t String; asType = Tagged $ symbolVal (Proxy :: Proxy (DataType t))
23:10:54 <wroathe> The use case is that the compiler isn't inferring that DataType t is an instance of KnownSymbol
23:11:41 <wroathe> https://gist.github.com/JustinChristensen/d6f0c180899a1b03008dbf6b9007ec38
23:14:46 <wroathe> What I'd like to be able to say there is DataType t => Tagged t String
23:20:05 <aaronv> what was wrong with using type classes?
23:20:54 <wroathe> aaronv: just experimenting in trying to be a bit more concise
23:25:42 <geekosaur> wroathe, can you not simply say that?
23:26:38 <wroathe> • Expected a constraint, but ‘DataType t’ has kind ‘Symbol’
23:26:46 <aaronv> you need the KnownSymbol constraint. Also your type family has the downside that it's closed. Would be more comparable to type classes to use an open type family
23:26:48 <geekosaur> hm, actually I think it has to be either `Tagged (DataType t) String` or `DataType t ~ x => Tagged x String`
23:27:04 <geekosaur> oh, more complex than I'm thinking
23:27:07 <aaronv> and there are unfortunately no constraints for type families
23:27:08 <wroathe> aaronv: The closedness is just fine in this case
23:27:14 <aaronv> instead they just get stuck if you don't have an instance
23:27:28 <geekosaur> `(DataType t ~ x, KnownSymbol x) => Tagged t String` ?
23:27:59 <wroathe> geekosaur: no dice
23:28:16 <aaronv> KnownSymbol (DataType t) =>
23:28:26 <wroathe> aaronv: Yeah in this case I just need a way to tell the compiler that `t` is one of the types that I have a type family instance defined for
23:28:42 <wroathe> aaronv: Hmm, I tried that too before I posted here, and it didn't work
23:28:43 <geekosaur> oh
23:29:22 <aaronv> you can't do that, but even if you could you would still need a type class constraint in order to get something term-level
23:30:00 <wroathe> Hmm, if type classes are the only way to do this I'm going to be a sad panda
23:30:18 <aaronv> open type families are essentially just type-level type classes (in that they associate types with types rather than terms with types), but broken in that they don't require constraints to use (and you can't write such constraints)
23:30:36 <aaronv> well, you can reuse the KnownSymbol class
23:30:57 <wroathe> Meaning KnownSymbol (DataType t) => ?
23:31:01 <aaronv> yes
23:31:05 <wroathe> I had tried that and I get the same result
23:31:07 <aaronv> or you can make an alias for it
23:31:29 ski joins (~ski@w188040.eduroam.gu.se)
23:31:29 <wroathe> asType :: (KnownSymbol (DataType t)) => Tagged t String; asType = Tagged $ symbolVal (Proxy :: Proxy (DataType t))
23:31:39 <aaronv> you need to enable scoped type variables and write an explicit forall for t
23:31:48 <wroathe> Still tells me that Could not deduce (KnownSymbol (DataType t0))
23:31:57 <wroathe> Ok, I've got #1
23:32:01 <wroathe> I'll add the forall
23:32:18 <wroathe> aaronv: You're a wizard
23:32:21 <wroathe> That worked
23:33:24 <wroathe> Assuming I don't mind that type family being closed, what's wrong with doing it this way
23:33:40 <wroathe> Seems a little more syntactically concise than doing it the regular type class way
23:35:53 <aaronv> you can write your type class instances on a single line each btw
23:36:40 <wroathe> instance DataType Int32 where asType = "int" ?
23:36:56 <wroathe> Yeah I suppose
23:37:28 <wroathe> well, I suppose asType = Tagged "int"
23:37:42 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
23:38:25 <aaronv> you can avoid Tagged if you use AllowAmbiguousTypes and TypeApplications
23:38:30 otto_s joins (~user@p4ff27798.dip0.t-ipconnect.de)
23:38:48 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
23:39:10 <wroathe> I've been mulling over AllowAmbiguousTypes. I'm going to finish this code generator with Tagged first, and then maybe removed that bit
23:39:29 <wroathe> Seemed like a sledgehammer, but I suppose I can limit that by moving this into a separate module
23:39:59 <aaronv> you probably only need it for the class definition, I think
23:40:20 <wroathe> right
23:40:42 <wroathe> aaronv: thanks for the help, I'm logging off for a bit
23:40:57 <aaronv> wait, you could use overloaded strings
23:41:00 <aaronv> to not write Tagged
23:41:06 <wroathe> :O
23:41:22 <geekosaur> aaronv, iirc this started out as that but wroathe wanted to avoid AAT
23:41:41 <wroathe> geekosaur: You're right, but I've been waffling on my position on that
23:41:45 <aaronv> create your own tagged type with an IsString instance
23:41:50 <aaronv> no need for AAT then
23:41:55 <geekosaur> yeh, personally I think this is the very case AAT exists for
23:41:57 <aaronv> for literals at least
23:42:20 <geekosaur> since it really needs what amounts to a dependent type to be properly typeable
23:42:44 <wroathe> Thanks for the help guys. I'll be back on a bit later on.
23:43:09 <aaronv> newtype TaggedString t = TaggedString String; class Foo t where foo :: TaggedString t; instance IsString (TaggedString t) where ...
23:45:26 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
23:47:19 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
23:48:40 × Thomas03 quits (~Thomas03@2600:1702:21b0:a500:e1c1:8242:9d33:b337) (Quit: Client closed)
23:49:01 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
23:50:21 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds)
23:53:10 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 258 seconds)
23:54:21 dibblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
23:54:21 × dibblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
23:54:21 dibblego joins (~dibblego@haskell/developer/dibblego)
23:54:23 <Jeanne-Kamikaze> How can I express "If Foo is an instance of MyClass, then it automatically is an instance of MyOtherClass (and here's the def, by the way)." Or do I need to write an instance of MyOtherClass for every Foo?
23:55:21 <EvanR> instance MyClass a => MyOtherClass a where
23:55:31 <EvanR> -- you prove it
23:55:52 <Jeanne-Kamikaze> I seem to get an error with overlapping instances when I do that (slightly more complicated code.)
23:56:17 <Jeanne-Kamikaze> It tells me that Bar has two MyOtherClass implementations, even though Bar does not implement MyClass.
23:56:44 <c_wraith> The overall rule is that you shouldn't make types you don't know about instances of something.
23:56:59 <aaronv> if you do what EvanR suggests then there can be no other instances of MyOtherClass
23:57:18 <aaronv> there's no way to do what you want right now. You have to write the boilerplate instances
23:57:23 <c_wraith> You can make a default definition for the class which allows one-line definitions for types that wish to opt in.
23:57:26 <aaronv> and yes it's terrible
23:57:26 <Jeanne-Kamikaze> You mean I cannot instance MyOtherClass Bar, even though Bar does not implement MyClass?
23:57:46 <c_wraith> Bar sounds like a type you know
23:57:46 <EvanR> you want to write that instance or not?
23:58:05 <c_wraith> What you shouldn't do is write instances for types you don't know.
23:58:11 <EvanR> is it supposed to be automatic or manual
23:58:15 <Jeanne-Kamikaze> I am trying to save writing boilerplate MyOtherClass instances for Foo, Bar, Baz.
23:58:31 <aaronv> short answer is you can't. This is a problem with haskell
23:58:39 <c_wraith> it's not even a problem.
23:58:42 <c_wraith> It makes code sane
23:58:44 <EvanR> if all the boilerplates are the same you could use generics
23:58:57 <c_wraith> if you could write a magic instance, you don't need generics.
23:59:00 <aaronv> having to write boilerplate instances is definitely a problem
23:59:01 <c_wraith> Just write a default implementation
23:59:14 <c_wraith> then all you have to do is add the class to your deriving line...
23:59:17 <EvanR> I mean, "the same"
23:59:24 <aaronv> though the solution would not be able to write an instance like EvanR suggests
23:59:40 <Jeanne-Kamikaze> Yeah, they are "the same". How do I use generics here?
23:59:46 <c_wraith> don't.
23:59:49 <c_wraith> they're irrelevant

All times are in UTC on 2023-08-27.