Home liberachat/#haskell: Logs Calendar

Logs on 2021-11-03 (liberachat/#haskell)

00:01:59 <dsal> One thing that came up in this discussion is the (,) Foldable. Is there actually a good use case for that? It's super easy to confuse people at least.
00:02:24 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
00:02:43 <geekosaur> that one keeps coming up
00:02:50 <geekosaur> > length (1,'a')
00:02:51 <lambdabot> 1
00:02:59 <boxscape_> not even sure (,) should have a Functor instance in base
00:03:24 <boxscape_> (especially considering it has a Bifunctor instance)
00:03:29 <monochrom> That one I agree is more confusing than useful.
00:03:47 <dsal> Some things are debatable, but I'm wondering if what the "yes, this is a good idea" argument sounds like.
00:04:03 <dsal> Functor *sort of* makes sense.
00:04:13 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
00:04:34 <dsal> It's only mildly surprising, that is.
00:04:49 <awpr> best thing I can come up with is, it can have the instance, and that's the only thing the instance could possibly do, so it may as well be provided
00:05:21 <dsal> Scientists were so worried about what instances they could make that they never stopped to think about whether they should.
00:05:22 <geekosaur> that's more or less the only argument for I've ever heard
00:05:26 <awpr> I guess it could be `toList = const []`
00:05:36 <boxscape_> it also means you can use (,) in functions that expect a functor, but then, you could also use Joker + Bifunctor instance for that (but Joker's not in base)
00:05:47 <dsal> What's Joker?
00:05:57 <awpr> `toList (a, b) = [unsafeCoerce a, b]`
00:06:02 <boxscape_> https://hackage.haskell.org/package/bifunctors-5.5.11/docs/Data-Bifunctor-Joker.html
00:06:02 × jespada_ quits (~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:06:13 <boxscape_> it extracts the right Functor/Foldable from a Bifunctor/-foldable
00:06:28 <dsal> Ah, that's neat.
00:06:42 <dsal> Why did they name the arguments `a` and `b`? That's obviously wrong.
00:06:54 <monochrom> To argue for it, I would start with "(,) W is the Writer W monad" so it's also a container of size 1 but oh it also has a W value piggybacked.
00:07:24 <dsal> Is that arguing for Functor or Foldable?
00:08:00 <monochrom> Functor, Foldable, all the way to Traversable too. I used the "container" wording. :)
00:08:19 <dsal> Ah. So the same reason Maybe is.
00:08:49 <awpr> Maybe is actually fairly useful now and then
00:09:03 <dsal> > length Nothing
00:09:04 <lambdabot> 0
00:09:04 <awpr> > foldMap show (Just 42 :: Maybe Int)
00:09:06 <lambdabot> "42"
00:09:11 <awpr> > foldMap show Nothing
00:09:12 <lambdabot> ""
00:09:22 <dsal> Yeah, Maybe doesn't surprise.
00:09:28 <geekosaur> yeh, the Maybe instance treated as a list of at most one element has precedent
00:09:37 <dsal> Until it returns 2.
00:09:59 <awpr> I've seen some writing distinguish "left-biased sums/products" from "symmetric sums/products"
00:10:29 <awpr> the Foldable instance of `(,) a` treats it as left-biased, but people probably intuitively thing of it as symmetric
00:10:37 <awpr> think*
00:11:34 <dsal> I'm not familiar with that terminology.
00:11:35 <monochrom> Right, we think of (,) as unbiased, whereas if I say "Writer" you expect it to be biased. That's where the surprise comes from.
00:12:24 <awpr> like `data WithBonusValue x a = WithBonusValue x a` having a `Foldable` instance with length 1 shouldn't be as surprising, because it's seen as focused on the `a`, but has an extra `x` too
00:13:07 <dsal> Yeah, that's how I look at most of the (,) instances. I guess people just have words for those things. :)
00:13:58 <boxscape_> dsal actually I take it back - as it is currently set up, Joker relies on the existing Functor/Foldable instance to extract it
00:16:46 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
00:20:20 <boxscape_> tbh I'm just confused by instance Functor (Clown f a), which ignores the function argument ( https://hackage.haskell.org/package/bifunctors-5.5.11/docs/src/Data.Bifunctor.Clown.html#line-167 ) - I suppose I should read the original paper
00:21:01 <awpr> looks to me like those two lift normal Functors to Bifunctors that are phantom in their left or right argument
00:21:21 sciencentistguy joins (~sciencent@hacksoc/ordinary-member)
00:21:31 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
00:21:47 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
00:21:47 <awpr> so the Functor instance of Clown would ignore its argument because the rightmost parameter (the one Functor cares about) is the one that's phanto
00:21:48 <awpr> m
00:22:44 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 268 seconds)
00:22:48 <boxscape_> but it's tagline is "Make a Functor over the first argument of a Bifunctor" - it doesn't seem like it does that
00:22:51 <awpr> https://hackage.haskell.org/package/bifunctors-5.5.11/docs/Data-Bifunctor-Wrapped.html#t:WrappedBifunctor is the other direction
00:22:59 <awpr> yeah, the tagline looks wrong
00:23:20 <awpr> unless they have very weird definitions of "make", "over", and "first" or something
00:23:27 <shapr> Is there a quickcheck instance for Data.Set somewhere?
00:26:27 <dsal> shapr: I thought I'd find it in https://hackage.haskell.org/package/quickcheck-instances but doesn't seem to.
00:26:43 <shapr> dsal: I thought that oo
00:26:46 <shapr> turns out it wasn't
00:26:47 <dsal> arbitrary = Set.fromList <$> listOf arbitrary
00:26:51 <dsal> And then, you know, shrink.
00:27:19 <dsal> Handwaving shrink is important because that's the easy part.
00:28:30 × adium quits (adium@user/adium) (Quit: Stable ZNC by #bnc4you)
00:28:58 <dsal> I guess it's just something like `shrink = fmap Set.fromList . shrink . Set.toList`
00:32:46 <boxscape_> hm okay so the actual way to extract the right functor is WrapBifunctor as awpr said and then to extract the left one you'd have to do WrapBifunctor . Flip
00:36:42 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
00:45:59 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
00:47:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:53:31 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
00:55:25 × mmhat quits (~mmh@55d4a263.access.ecotel.net) (Ping timeout: 268 seconds)
00:56:39 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
00:57:31 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
00:59:50 × hiruji quits (~hiruji@user/hiruji) (Ping timeout: 268 seconds)
01:02:04 × Null_A quits (~null_a@2601:645:8700:2290:91de:cb47:8eef:9a3e) (Remote host closed the connection)
01:04:10 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds)
01:04:15 × cigsender quits (~cigsender@74.124.58.162) (Quit: Lost terminal)
01:05:28 Null_A joins (~null_a@2601:645:8700:2290:91de:cb47:8eef:9a3e)
01:06:12 lavaman joins (~lavaman@98.38.249.169)
01:07:34 mmhat joins (~mmh@55d4a3df.access.ecotel.net)
01:08:41 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
01:13:54 × hippoid quits (~idris@184.105.6.88) (Quit: Lost terminal)
01:22:32 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
01:22:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
01:34:55 hiruji joins (~hiruji@user/hiruji)
01:35:27 × emanuele6 quits (~emanuele6@user/emanuele6) (Read error: No route to host)
01:35:49 retroid_ joins (~retro@2e41e9c8.skybroadband.com)
01:36:54 × acidsys quits (~LSD@2.lsd.systems) (Excess Flood)
01:37:29 acidsys joins (~LSD@2.lsd.systems)
01:39:12 × retro_ quits (~retro@2e41e9c8.skybroadband.com) (Ping timeout: 268 seconds)
01:40:53 euouae joins (~euouae@user/euouae)
01:40:56 <euouae> Hello
01:41:09 <euouae> Are the hackage packages signed?
01:42:01 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
01:42:02 <Axman6> there is some sort of signing mechanism but I don't know much about it. I don't think they are signed by the authors (stackage does allow that)
01:43:05 <euouae> https://www.stackage.org/lts-18.14/package/base-4.14.3.0 For example, what is the signature here and how can it be pulled up?
01:43:08 <Axman6> https://github.com/haskell/hackage-security is pretty relevant
01:44:14 <euouae> Axman6 thanks. It seems that there is plenty of work for many projects to do related to TUF
01:44:39 <euouae> In some sense, it's encouraging. I'm learning about crypto and stuff now and if I could participate in such a project it would be nice
01:46:10 kawpuh1 is now known as kawpuh
01:48:24 × hueso quits (~root@user/hueso) (Quit: No Ping reply in 180 seconds.)
01:49:36 hueso joins (~root@user/hueso)
01:49:54 × jonathanclarke quits (~jonathanc@202.51.76.91) (Ping timeout: 260 seconds)
01:50:34 × Jing quits (~textual@2604:a840:3::1021) (Remote host closed the connection)
01:51:13 Jing joins (~textual@2604:a840:3::1021)
01:57:06 × hiruji quits (~hiruji@user/hiruji) (Ping timeout: 268 seconds)
01:57:54 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
01:58:30 MQ-17J joins (~MQ-17J@8.6.144.203)
02:01:59 jonathanclarke joins (~jonathanc@202.51.76.91)
02:02:42 hiruji joins (~hiruji@user/hiruji)
02:03:34 <euouae> Or at least be able to observe the progress & apply the security when available. Thanks for the response.
02:03:37 × euouae quits (~euouae@user/euouae) (Quit: )
02:04:18 × mmhat quits (~mmh@55d4a3df.access.ecotel.net) (Quit: WeeChat 3.3)
02:04:18 × MQ-17J quits (~MQ-17J@8.6.144.203) (Read error: Connection reset by peer)
02:04:29 MQ-17J joins (~MQ-17J@8.6.144.203)
02:04:31 emanuele6 joins (~emanuele6@net-2-36-98-113.cust.vodafonedsl.it)
02:04:51 × emanuele6 quits (~emanuele6@net-2-36-98-113.cust.vodafonedsl.it) (Changing host)
02:04:51 emanuele6 joins (~emanuele6@user/emanuele6)
02:07:59 × tremon quits (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
02:09:25 × MQ-17J quits (~MQ-17J@8.6.144.203) (Ping timeout: 268 seconds)
02:11:44 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
02:13:07 × sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 268 seconds)
02:14:59 × hiruji quits (~hiruji@user/hiruji) (Ping timeout: 268 seconds)
02:18:52 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
02:20:42 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 260 seconds)
02:21:09 × brettgilio quits (~brettgili@x-node.gq) (Quit: Leaving...)
02:22:21 brettgilio joins (~brettgili@x-node.gq)
02:23:15 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
02:24:19 sprout_ joins (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b)
02:25:50 × sprout quits (~quassel@2a02:a467:ccd6:1:8872:6fff:30a7:51e0) (Ping timeout: 260 seconds)
02:28:34 × Null_A quits (~null_a@2601:645:8700:2290:91de:cb47:8eef:9a3e) (Remote host closed the connection)
02:29:39 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:31:18 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
02:31:59 hiruji joins (~hiruji@user/hiruji)
02:46:04 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
02:47:16 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
02:49:31 × xff0x quits (~xff0x@port-92-195-109-25.dynamic.as20676.net) (Ping timeout: 268 seconds)
02:51:08 xff0x joins (~xff0x@2001:1a81:53fb:b000:b58d:2078:260f:228a)
02:51:21 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 268 seconds)
02:52:04 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
02:54:24 × juhp quits (~juhp@128.106.188.220) (Quit: juhp)
02:54:38 juhp joins (~juhp@128.106.188.220)
02:56:55 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
02:59:11 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
03:01:13 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds)
03:01:51 × catman quits (~catman@user/catman) (Ping timeout: 268 seconds)
03:03:24 catman joins (~catman@user/catman)
03:10:16 × alx741 quits (~alx741@186.178.109.189) (Quit: alx741)
03:11:23 mbuf joins (~Shakthi@122.173.251.242)
03:11:47 adium joins (adium@user/adium)
03:12:56 × catman quits (~catman@user/catman) (Ping timeout: 268 seconds)
03:16:06 catman joins (~catman@user/catman)
03:16:32 × catman quits (~catman@user/catman) (Client Quit)
03:17:34 catman joins (~catman@user/catman)
03:17:43 × dsamperi quits (~dsamperi@2603-7000-3b42-5400-c881-7958-2102-07bc.res6.spectrum.com) (Quit: Konversation terminated!)
03:18:07 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:18:20 mishugana joins (~mishugana@user/mishugana)
03:18:31 × hiruji quits (~hiruji@user/hiruji) (Quit: ZNC 1.8.2 - https://znc.in)
03:18:43 <mishugana> Hello, does anybody have a quick small review of "Practical Programming" by Serrano Mena?
03:18:55 hiruji joins (~hiruji@user/hiruji)
03:20:17 <mishugana> Just for a quick background, I have "Programming in Haskell" by Hutton under my belt, and was looking for the next step up. I don't know what I don't know (I have Diehl's list of todos handy, but bear with me), but if I had to choose one, I'm having trouble moving up to, say, Monad Transformers. They all start off with "lift", which Hutton's book did not cover.
03:21:10 <mishugana> I looked at the ToC for Serrano Mena's book, and it looks comprehensive while introducing one to the library ecosystem at the same time, but I have a nagging feeling that there is something missing between Hutton's book and Serrano Mena's book? Am I wrong?
03:21:41 <dsal> mishugana: Do you have any software you're working on?
03:21:48 <dsal> Some of this stuff just becomes obvious as you find you need it.
03:21:51 <mishugana> By the way, I looked at the haskell programming from first principles book, but I couldnt' abide the long-winded seemingly-unnecessary verbose style
03:22:02 <dsal> @hoogle [a] -> [[a]] -> [[a]]
03:22:03 <lambdabot> No results found
03:22:12 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 268 seconds)
03:22:21 <mishugana> dsal: Nothing in particular right now, but I would like to use Haskell for exploratory compiler writing in the future, as a start, say
03:22:50 <mishugana> About Will Kurt's book, I didn't like that either, and it doesn't cover Monad Transformers either
03:23:20 <mishugana> I tried reading the Haskell Wiki, but again, they mention "lift" right from the get go, and I could look that up, but looking for a more cohesive approach
03:24:49 <monochrom> For monad transformer, I would try the Typeclassopedia and/or the Haskell Wikibook (not to be confused with the Haskell Wiki)
03:24:52 <mishugana> I loved Hutton's book and his style, by the way, and wish he'd written the next step up as well :(
03:24:58 <dsal> I can't really learn stuff without doing stuff. Some of these concepts I read through and didn't really get until that one day when I was trying to do a thing and remembered that concept I read about back in the day and went back to review it.
03:25:31 <monochrom> The Haskell Wiki is known to be written for author self-gratification not readership benefit.
03:25:49 <mishugana> dsal: that makes sense, and to a great extent, applies to me as well. However, you mention connecting your practical experience with the theory you'd read sometime back - is that from book(s) or from the wiki/misc. resources?
03:25:58 <mishugana> monochrom: hahaha
03:26:16 <mishugana> yes, it does seem to be like that in places, I suppose
03:27:15 <mishugana> That's why I was wondering if anyone had worked through the "Practical Haskell" book - I don't mind doing extra legwork in parallel, but wondering how people's experience with it went
03:27:20 <dsal> mishugana: Not even sure. I've read the Hutton book, and HPFFP and some specific topics stuff like Penner's Optics book and MacGuire's "Thinking with Types" and random topics people bring up and stuff. Many of those are just words that pass through me until that time I need them.
03:27:33 <mishugana> dsal: Hmmm
03:28:18 <mishugana> Interestingly, I've bookmarked "The Monad Book" and "Thinking with Types" for future reading since I do wish to learn the theoretical/mathematical side of it, but after getting to at least an intermediate "practical" Haskell programmer :)
03:28:41 × trillp quits (~trillp@69.233.98.238) (Quit: nyaa~)
03:28:55 <dsal> I learn more from just writing and maintaining programs.
03:29:55 × Ram-Z quits (~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 260 seconds)
03:35:26 Ram-Z joins (~Ram-Z@li1814-254.members.linode.com)
03:41:20 × sprout_ quits (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
03:41:37 sprout joins (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b)
03:44:25 <sm> @where books
03:44:25 <lambdabot> https://www.extrema.is/articles/haskell-books, see also @where LYAH, RWH, YAHT, SOE, HR, PIH, TFwH, wikibook, PCPH, HPFFP, HTAC, TwT, FoP, PFAD, WYAH, non-haskell-books
03:44:25 <sm> might have some other options
03:45:14 <sm> you sound a bit past HTAC, though I think it has some good practical stuff too
03:45:37 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 268 seconds)
03:49:44 × boxscape_ quits (~boxscape_@i59F67A65.versanet.de) (Quit: Connection closed)
03:50:18 <mishugana> sm: Thank you for that list!
03:50:46 <mishugana> I just checked HTAC. It's by Mark Watson, the Lisper - this guy is prolific!
03:51:48 <mishugana> sm: Very useful list. Thank you yet again - I haven't seen quite a few of those books anywhere during my "research"
03:52:14 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
03:52:30 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
03:54:23 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
03:54:56 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:57:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
03:59:44 dsamperi joins (~dsamperi@2603-7000-3b42-5400-c881-7958-2102-07bc.res6.spectrum.com)
04:00:10 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
04:00:19 × dsamperi quits (~dsamperi@2603-7000-3b42-5400-c881-7958-2102-07bc.res6.spectrum.com) (Client Quit)
04:07:16 <sm> yes, HTAC is great (and so is extrema.is books list, except hard to find)
04:13:23 v01d4lph4 joins (~v01d4lph4@106.215.93.204)
04:13:23 × v01d4lph4 quits (~v01d4lph4@106.215.93.204) (Changing host)
04:13:23 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
04:14:00 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:14:00 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
04:14:00 wroathe joins (~wroathe@user/wroathe)
04:15:00 <Axman6> just had my mind blown by not finding any haskell package which fully represents KMLs
04:18:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
04:20:40 jle` joins (~jle`@2603-8001-3b02-84d4-0000-0000-0000-025d.res6.spectrum.com)
04:20:45 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:21:06 jle` parts (~jle`@2603-8001-3b02-84d4-0000-0000-0000-025d.res6.spectrum.com) ()
04:22:47 Axman6348 joins (~Axman6@user/axman6)
04:24:06 <dsal> I've done enough work in that area that I just got annoyed by it without my mind being blown.
04:24:57 <dsal> Axman6: here's my Very Good implementation: https://github.com/dustin/heatmap/blob/main/src/Graphics/Heatmap/KML.hs
04:25:27 × Axman6 quits (~Axman6@user/axman6) (Ping timeout: 260 seconds)
04:25:42 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 268 seconds)
04:27:56 jle` joins (~jle`@2603-8001-3b02-84d4-0000-0000-0000-025d.res6.spectrum.com)
04:27:56 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
04:28:19 geekosaur joins (~geekosaur@xmonad/geekosaur)
04:29:00 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
04:29:38 Axman6348 is now known as Axman6
04:31:05 <Axman6> ha
04:31:24 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
04:31:31 MQ-17J joins (~MQ-17J@2607:fb90:1d84:6382:7ad7:ddcd:c10b:ea3e)
04:31:55 × MQ-17J quits (~MQ-17J@2607:fb90:1d84:6382:7ad7:ddcd:c10b:ea3e) (Read error: Connection reset by peer)
04:32:15 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
04:32:21 × jle` quits (~jle`@2603-8001-3b02-84d4-0000-0000-0000-025d.res6.spectrum.com) (Client Quit)
04:32:36 mishugana parts (~mishugana@user/mishugana) ()
04:32:51 wei2912 joins (~wei2912@138.75.71.147)
04:35:03 jle` joins (~jle`@2603-8001-3b02-84d4-0000-0000-0000-025d.res6.spectrum.com)
04:39:18 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 260 seconds)
04:39:39 × wei2912 quits (~wei2912@138.75.71.147) (Quit: Lost terminal)
04:40:57 wei2912 joins (~wei2912@138.75.71.147)
04:43:11 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
04:44:33 <jle`> woo hoo i upgraded everything and can finally build ghc 9+
04:44:37 <jle`> just in time for 9.2
04:45:56 <jle`> okay um, is there a cabal equivalent for 'stack new' that sets up a skeleton project?
04:46:18 <sclv> cabal init
04:47:05 <Axman6> does that actually give you anything?
04:47:10 <jle`> ah the docs say it only sets up the package file
04:47:13 <jle`> but i can try it
04:47:43 <Axman6> stack new is the mean feature I miss from stack
04:48:07 <Axman6> main*
04:48:12 <sclv> for richer projects there’s dedicated tools like summoner
04:48:32 <jle`> ooh it made the whole skeleton, neat
04:48:35 <jle`> thanks!
04:48:38 <Axman6> oh yeah, summoner is great, but not sure if it's up to date
04:48:47 <Axman6> check out summoner-tui too
04:49:38 <jle`> ooh that's neat
04:49:40 <jle`> it generates licenses too
04:52:03 × kronicmage quits (user3131@neotame.csclub.uwaterloo.ca) (Ping timeout: 265 seconds)
04:52:27 kronicmage joins (user28253@neotame.csclub.uwaterloo.ca)
04:53:41 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Remote host closed the connection)
04:54:08 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
04:54:10 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Remote host closed the connection)
04:55:17 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
04:55:30 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Remote host closed the connection)
04:56:00 dyeplexer joins (~dyeplexer@user/dyeplexer)
04:56:12 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
04:59:18 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
05:17:13 shidima joins (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl)
05:25:32 × azeem quits (~azeem@2a00:801:3c9:cf16:6d84:9e6f:3c27:1ca6) (Ping timeout: 268 seconds)
05:35:02 azeem joins (~azeem@2a00:801:3c9:cf16:6d84:9e6f:3c27:1ca6)
05:49:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:55:44 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 268 seconds)
05:57:10 desophos joins (~desophos@2601:249:1680:a570:fd0e:5698:a1d9:2696)
05:58:31 geekosaur joins (~geekosaur@xmonad/geekosaur)
06:01:26 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
06:05:09 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:06:23 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
06:08:49 chomwitt joins (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374)
06:14:17 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
06:16:17 Core5109 joins (~Core5109@47.245.54.240)
06:22:26 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
06:28:30 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
06:28:39 Guest|64 joins (~Guest|64@cpe688f2ec6dd93-cm688f2ec6dd90.cpe.net.fido.ca)
06:29:05 × Guest|64 quits (~Guest|64@cpe688f2ec6dd93-cm688f2ec6dd90.cpe.net.fido.ca) (Client Quit)
06:30:05 kadir joins (~kadir@95.7.9.203)
06:30:23 kadir parts (~kadir@95.7.9.203) ()
06:32:04 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
06:32:40 jtomas joins (~jtomas@95.red-88-11-64.dynamicip.rima-tde.net)
06:38:18 Guest|8 joins (~Guest|8@c-75-73-118-185.hsd1.mn.comcast.net)
06:39:59 <Guest|8> Trying to install ghcup and getting this error: [ Info ] verifying digest of: ghc-8.10.7-x86_64-apple-darwin.tar.xz
06:40:00 <Guest|8> [ Info ] Unpacking: ghc-8.10.7-x86_64-apple-darwin.tar.xz to /private/var/folders/0h/xrg9b4ln6yd4rmgm5pdrb36c0000gn/T/ghcup-2849be2844e9b286
06:40:00 <Guest|8> [ Info ] Installing GHC (this may take a while)
06:40:01 <Guest|8> [ ghc-configure ] checking Xcode version... not found (too old?)
06:40:01 <Guest|8> [ ghc-configure ] checking for gcc... gcc
06:40:02 <Guest|8> [ ghc-configure ] checking whether the C compiler works... no
06:40:02 <Guest|8> [ ghc-configure ] configure: error: in `/private/var/folders/0h/xrg9b4ln6yd4rmgm5pdrb36c0000gn/T/ghcu...
06:40:03 <Guest|8> [ ghc-configure ] configure: error: C compiler cannot create executables
06:40:03 <Guest|8> [ ghc-configure ] See `config.log' for more details
06:40:04 <Guest|8> [ Error ] Process "sh" with arguments ["./configure",
06:40:04 <Guest|8> [ ... ] "--prefix=/Users/jwb/.ghcup/ghc/8.10.7"] failed with exit code 77.
06:40:05 <Guest|8> [ Error ] Also check the logs in /Users/jwb/.ghcup/logs
06:40:05 <Guest|8> "_eghcup --cache install ghc recommended" failed!
06:40:06 <Guest|8> sh-3.2$
06:40:51 <Guest|8> Downloaded the dms file manually and adjusted my PATH, but cannot see how to actually activate it.
06:42:48 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
06:42:52 <Axman6> @where paste
06:42:52 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
06:43:05 <Axman6> please don't paste multiple lines into IRC
06:43:11 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
06:43:48 <Axman6> you probably need to install the Xcode command line tools
06:44:08 <Axman6> try running xcode-select --install
06:45:46 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
06:46:52 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
06:54:13 Lycurgus joins (~juan@98.4.112.204)
07:01:43 × Guest|8 quits (~Guest|8@c-75-73-118-185.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
07:08:03 × desophos quits (~desophos@2601:249:1680:a570:fd0e:5698:a1d9:2696) (Quit: Leaving)
07:10:00 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:16:19 v01d4lph4 joins (~v01d4lph4@106.215.93.204)
07:16:19 × v01d4lph4 quits (~v01d4lph4@106.215.93.204) (Changing host)
07:16:19 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
07:18:20 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
07:21:27 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
07:22:43 fendor joins (~fendor@178.165.199.1.wireless.dyn.drei.com)
07:23:53 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection)
07:24:02 kadir joins (~kadir@95.7.9.203)
07:25:49 gehmehgeh joins (~user@user/gehmehgeh)
07:26:17 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
07:31:06 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
07:36:15 × xff0x quits (~xff0x@2001:1a81:53fb:b000:b58d:2078:260f:228a) (Ping timeout: 268 seconds)
07:38:43 xff0x joins (~xff0x@2001:1a81:53fb:b000:b58d:2078:260f:228a)
07:40:35 × chomwitt quits (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
07:41:25 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:42:03 lbseale_ joins (~lbseale@user/ep1ctetus)
07:44:10 × lbseale quits (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds)
07:45:12 chele joins (~chele@user/chele)
07:46:06 lortabac joins (~lortabac@88.125.6.227)
07:47:31 michalz joins (~michalz@185.246.204.109)
07:48:30 wonko joins (~wjc@user/wonko)
07:49:49 × fizzsegfaultbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 268 seconds)
07:50:06 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
07:50:24 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
07:51:16 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
07:51:20 × tomku quits (~tomku@user/tomku) (Ping timeout: 260 seconds)
07:52:56 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
07:53:32 × wonko quits (~wjc@user/wonko) (Ping timeout: 268 seconds)
07:54:50 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 260 seconds)
07:59:36 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
08:00:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:05:28 hendursa1 joins (~weechat@user/hendursaga)
08:07:14 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
08:08:05 nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
08:08:54 × TMA quits (tma@twin.jikos.cz) (Ping timeout: 260 seconds)
08:09:07 TMA joins (tma@twin.jikos.cz)
08:09:15 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
08:12:00 jakalx parts (~jakalx@base.jakalx.net) ()
08:14:40 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
08:15:47 chomwitt joins (~chomwitt@ppp-2-85-245-90.home.otenet.gr)
08:16:54 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Read error: Connection reset by peer)
08:17:35 × shidima quits (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl) (Ping timeout: 268 seconds)
08:17:51 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:19:13 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
08:19:45 cfricke joins (~cfricke@user/cfricke)
08:24:22 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
08:24:51 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds)
08:25:32 jakalx joins (~jakalx@base.jakalx.net)
08:25:47 gehmehgeh joins (~user@user/gehmehgeh)
08:28:11 shidima joins (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl)
08:30:41 mc47 joins (~mc47@xmonad/TheMC47)
08:30:51 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:31:14 <drownbes> mishugana: "haskell in depth" by Bragilevsky is really good book for going beyond basics
08:32:10 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
08:33:56 <drownbes> it explains prelove spells https://paste.tomsmeding.com/hGfXvJgv pretty well
08:33:58 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
08:37:18 × betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Ping timeout: 260 seconds)
08:43:24 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
08:44:33 mmhat joins (~mmh@55d4baf7.access.ecotel.net)
08:45:34 mei joins (~mei@user/mei)
08:47:46 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
08:48:43 × mbuf quits (~Shakthi@122.173.251.242) (Quit: Leaving)
08:52:04 mbuf joins (~Shakthi@122.173.251.242)
08:52:12 trcc joins (~trcc@users-1190.st.net.au.dk)
08:54:56 p_____ joins (~dyeplexer@user/dyeplexer)
08:55:14 × p_____ quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
08:56:12 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
08:58:17 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 268 seconds)
09:00:08 × bakinonion[m] quits (~bakinonio@2001:470:69fc:105::ddb3) (Quit: You have been kicked for being idle)
09:00:48 trcc_ joins (~trcc@eduroam09.au.dk)
09:00:59 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 264 seconds)
09:04:50 × trcc quits (~trcc@users-1190.st.net.au.dk) (Ping timeout: 260 seconds)
09:05:31 × trcc_ quits (~trcc@eduroam09.au.dk) (Ping timeout: 260 seconds)
09:09:40 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
09:13:43 nckx is now known as Thunderbi
09:14:08 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:16:28 × azeem quits (~azeem@2a00:801:3c9:cf16:6d84:9e6f:3c27:1ca6) (Read error: Connection reset by peer)
09:16:50 Thunderbi is now known as guix-znc-test
09:16:54 guix-znc-test is now known as guix
09:17:04 azeem joins (~azeem@emp-89-199.eduroam.uu.se)
09:18:25 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
09:19:09 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
09:19:44 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
09:21:49 guix is now known as nckx
09:22:19 × shidima quits (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl) (Ping timeout: 268 seconds)
09:22:21 × gawen quits (~gawen@user/gawen) (Quit: cya)
09:23:41 gawen joins (~gawen@user/gawen)
09:24:23 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 264 seconds)
09:24:32 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
09:24:47 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
09:27:12 geekosaur joins (~geekosaur@xmonad/geekosaur)
09:27:30 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
09:29:36 cfricke joins (~cfricke@user/cfricke)
09:31:23 × cfricke quits (~cfricke@user/cfricke) (Client Quit)
09:31:53 ubert joins (~Thunderbi@p200300ecdf4fca4ae019fddc82d0353e.dip0.t-ipconnect.de)
09:32:48 × mei quits (~mei@user/mei) (Ping timeout: 268 seconds)
09:38:18 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
09:39:48 × jtomas quits (~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) (Remote host closed the connection)
09:43:42 nschoe joins (~quassel@178.251.84.79)
09:51:29 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
09:53:46 × ubert quits (~Thunderbi@p200300ecdf4fca4ae019fddc82d0353e.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
09:56:51 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
10:00:53 trcc joins (~trcc@eduroam09.au.dk)
10:03:51 boxscape_ joins (~boxscape_@134.171.69.87)
10:04:56 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
10:05:56 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
10:07:49 Techcable_ joins (~Techcable@168.235.93.147)
10:07:50 × unmanbearpig quits (~unmanbear@user/unmanbearpig) (Ping timeout: 260 seconds)
10:08:38 × Techcable quits (~Techcable@168.235.93.147) (Ping timeout: 265 seconds)
10:08:47 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
10:09:52 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
10:09:54 unmanbearpig joins (~unmanbear@user/unmanbearpig)
10:11:02 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
10:14:44 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 268 seconds)
10:15:20 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:16:10 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
10:17:27 lavaman joins (~lavaman@98.38.249.169)
10:18:32 × thornAvery quits (~thornAver@2401:c080:1800:4346:5400:3ff:fe2c:c8f8) (Ping timeout: 268 seconds)
10:19:45 acidjnk_new joins (~acidjnk@p200300d0c726704340645b0c72496253.dip0.t-ipconnect.de)
10:20:28 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
10:21:50 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
10:23:03 × trcc quits (~trcc@eduroam09.au.dk) (Remote host closed the connection)
10:26:20 alzgh joins (~alzgh@user/alzgh)
10:28:32 shidima joins (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl)
10:32:17 wonko joins (~wjc@user/wonko)
10:36:19 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 268 seconds)
10:37:27 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
10:38:18 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
10:38:57 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
10:43:44 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
10:51:31 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
10:51:45 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 268 seconds)
10:52:15 lavaman joins (~lavaman@98.38.249.169)
10:53:22 yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net)
10:54:09 × fendor quits (~fendor@178.165.199.1.wireless.dyn.drei.com) (Remote host closed the connection)
10:55:19 fendor joins (~fendor@178.165.199.1.wireless.dyn.drei.com)
10:55:50 Midjak joins (~Midjak@82-65-111-221.subs.proxad.net)
10:57:18 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
10:58:48 trcc joins (~trcc@eduroam09.au.dk)
10:59:12 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
10:59:31 alzgh joins (~alzgh@user/alzgh)
11:00:22 × xff0x quits (~xff0x@2001:1a81:53fb:b000:b58d:2078:260f:228a) (Ping timeout: 268 seconds)
11:00:23 × azeem quits (~azeem@emp-89-199.eduroam.uu.se) (Read error: Connection reset by peer)
11:00:53 alx741 joins (~alx741@186.178.109.189)
11:02:11 × fendor quits (~fendor@178.165.199.1.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
11:02:52 × terrorjack quits (~terrorjac@static.3.200.12.49.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat)
11:03:20 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
11:04:36 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
11:04:41 azeem joins (~azeem@emp-89-199.eduroam.uu.se)
11:06:56 xff0x joins (~xff0x@2001:1a81:53fb:b000:b58d:2078:260f:228a)
11:08:03 <Hecate> < tomsmeding> Hecate: looks neat! I think I've written a Pretty class like 10 times by now // So have I, hence this library :3
11:08:24 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
11:08:29 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
11:08:29 <Hecate> < tomsmeding> Hecate: I think it's good that you didn't go overboard with the predefined instances // I tried to keep it as close to Show as possible, the real deal is for one's own datatypes
11:08:49 alzgh joins (~alzgh@user/alzgh)
11:09:37 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
11:13:39 v01d4lph4 joins (~v01d4lph4@106.215.93.204)
11:13:39 × v01d4lph4 quits (~v01d4lph4@106.215.93.204) (Changing host)
11:13:39 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
11:13:45 <boxscape_> Hecate the documentation on hackage says "decodeUtf8`" - I can't quite tell if the ` shouldn't be there or if it should be decodeUtf8'
11:14:10 <Hecate> boxscape_: it's Haddock's fault!! :<
11:14:13 <boxscape_> :(
11:14:22 <Hecate> 'decodeUtf8'' should be valid to link the identifier
11:15:09 hololeap_ is now known as hololeap
11:15:16 <boxscape_> yeah true it's strange that it inserts a `
11:16:48 <boxscape_> Ah, I see, you did it like 'decodeUtf8'' for the instance documentation but `decodeUtf8'` for the "You should not try to display ByteStrings" documentation
11:17:00 <Hecate> hhhhhhhhh
11:18:53 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
11:20:43 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 268 seconds)
11:21:27 ubikium joins (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp)
11:22:18 <boxscape_> Hecate that's better :)
11:23:56 <boxscape_> Hecate though I think you have now changed the last line to say ByteStrin&g
11:24:50 <Hecate> hhhhhhhhhhhhh
11:24:58 Hecate foams at the mouth
11:25:30 <Hecate> alright should be good
11:25:31 <Hecate> thanks boxscape_
11:27:01 <Hecate> boxscape_: can you see it changed here? https://hackage.haskell.org/package/text-display-0.0.1.0/docs/Data-Text-Display.html#g:4
11:27:13 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:28:08 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
11:28:47 ubikium parts (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp) (Leaving)
11:29:03 gehmehgeh joins (~user@user/gehmehgeh)
11:29:18 <Cajun> if its meant to be decodeUtf8' then its working on my end
11:30:38 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
11:30:51 <Hecate> Cajun: okay, Hackage caches everything on my end so I can't see if it's been take into account :)
11:31:10 <Hecate> Cajun: yeah, the last line, thank you :)
11:31:47 ubikium joins (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp)
11:32:49 v01d4lph4 joins (~v01d4lph4@106.215.93.204)
11:32:49 × v01d4lph4 quits (~v01d4lph4@106.215.93.204) (Changing host)
11:32:49 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
11:33:14 tomku joins (~tomku@user/tomku)
11:33:25 guniberas joins (~guniberas@42.191.188.121)
11:33:45 hippoid joins (~idris@184.105.6.88)
11:33:48 × ubikium quits (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp) (Quit: Leaving)
11:34:08 ubikium joins (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp)
11:34:41 <Hecate> wew already 14 downloads
11:35:18 × ubikium quits (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp) (Client Quit)
11:35:36 ubikium joins (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp)
11:36:01 lavaman joins (~lavaman@98.38.249.169)
11:37:06 allbery_b joins (~geekosaur@xmonad/geekosaur)
11:37:06 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
11:37:09 allbery_b is now known as geekosaur
11:37:27 mei joins (~mei@user/mei)
11:37:47 × trcc quits (~trcc@eduroam09.au.dk) (Remote host closed the connection)
11:38:31 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
11:39:54 img joins (~img@user/img)
11:41:04 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
11:44:02 <Cajun> i wonder if it would be useful to supply an overloaded `show` method to make displaying stuff unchanged, so long as `show` is hidden from the prelude
11:45:40 Farzad joins (~FarzadBek@178.131.31.240)
11:46:12 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
11:47:33 img joins (~img@user/img)
11:47:47 × LambdaDuck quits (~anka@ksit.fixme.fi) (Ping timeout: 264 seconds)
11:47:56 × opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 260 seconds)
11:48:34 <Hecate> Cajun: the prerequisite makes it really difficult in terms of adoption :/
11:48:45 <Hecate> I don't wish to export a conflictual `show`
11:49:05 × shidima quits (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl) (Ping timeout: 268 seconds)
11:49:19 <Cajun> yeah i figured, and it wouldnt be too hard to define on the user end either should they want it
11:51:36 <Hecate> yup'
11:51:37 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
11:52:48 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
11:52:56 LambdaDuck joins (~anka@ksit.fixme.fi)
11:53:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:54:03 opqdonut joins (opqdonut@pseudo.fixme.fi)
11:54:49 gehmehgeh joins (~user@user/gehmehgeh)
11:55:11 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
11:57:09 <boxscape_> Hecate sorry, had lunch, but yeah, looks good
11:57:14 gentauro joins (~gentauro@user/gentauro)
11:58:19 <Hecate> boxscape_: did you eat well? :)
11:58:23 <boxscape_> yes, thank you :)
12:00:11 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
12:00:11 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
12:02:10 × acidjnk_new quits (~acidjnk@p200300d0c726704340645b0c72496253.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
12:02:14 gentauro joins (~gentauro@user/gentauro)
12:02:47 trcc joins (~trcc@users-5343.st.net.au.dk)
12:03:31 __monty__ joins (~toonn@user/toonn)
12:03:54 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
12:04:03 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
12:04:03 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
12:05:16 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:06:11 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:07:14 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
12:07:18 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
12:07:26 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
12:07:46 alzgh joins (~alzgh@user/alzgh)
12:09:29 gentauro joins (~gentauro@user/gentauro)
12:10:41 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
12:11:01 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:14:05 cfricke joins (~cfricke@user/cfricke)
12:17:59 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
12:18:27 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
12:21:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
12:22:06 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
12:22:19 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:24:00 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
12:24:26 kadir parts (~kadir@95.7.9.203) ()
12:26:02 × opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 260 seconds)
12:26:02 × LambdaDuck quits (~anka@ksit.fixme.fi) (Ping timeout: 260 seconds)
12:26:10 LambdaDuck joins (~anka@ksit.fixme.fi)
12:26:10 opqdonut joins (opqdonut@pseudo.fixme.fi)
12:26:23 Ainoretho joins (~ypw@huji-132-64-245-57.xt.huji.ac.il)
12:26:32 × Ainoretho quits (~ypw@huji-132-64-245-57.xt.huji.ac.il) (Client Quit)
12:27:24 Ainoretho joins (~ypw@huji-132-64-245-57.xt.huji.ac.il)
12:27:32 × Ainoretho quits (~ypw@huji-132-64-245-57.xt.huji.ac.il) (Client Quit)
12:27:57 Ainoretho joins (~ypw@huji-132-64-245-57.xt.huji.ac.il)
12:29:14 × Ainoretho quits (~ypw@huji-132-64-245-57.xt.huji.ac.il) (Client Quit)
12:30:39 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Read error: Connection reset by peer)
12:30:39 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
12:31:02 gentauro joins (~gentauro@user/gentauro)
12:31:51 fendor joins (~fendor@178.165.199.1.wireless.dyn.drei.com)
12:31:51 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
12:32:16 × azeem quits (~azeem@emp-89-199.eduroam.uu.se) (Ping timeout: 268 seconds)
12:32:43 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
12:32:43 cosimone` joins (~user@93-34-133-207.ip49.fastwebnet.it)
12:32:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
12:33:21 azeem joins (~azeem@emp-89-199.eduroam.uu.se)
12:33:22 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:34:43 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 268 seconds)
12:36:35 × xff0x quits (~xff0x@2001:1a81:53fb:b000:b58d:2078:260f:228a) (Ping timeout: 268 seconds)
12:36:39 Psybur joins (~Psybur@mobile-166-170-30-165.mycingular.net)
12:37:07 xff0x joins (~xff0x@2001:1a81:53fb:b000:1550:cc88:ac55:5459)
12:38:06 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 260 seconds)
12:39:43 jpds joins (~jpds@gateway/tor-sasl/jpds)
12:40:02 × cosimone` quits (~user@93-34-133-207.ip49.fastwebnet.it) (Ping timeout: 260 seconds)
12:41:09 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
12:43:06 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
12:43:21 <dminuoso> Gah. prettyprinter is funnyu
12:43:22 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
12:43:42 cosimone joins (~user@93-34-133-207.ip49.fastwebnet.it)
12:43:53 <dminuoso> https://hackage.haskell.org/package/prettyprinter
12:43:55 <dminuoso> [...] which can then be rendered to a variety of formats, for example plain Text, or Markdown. What you are reading right now was generated by this library (see GenerateReadme.hs).
12:44:11 <dminuoso> Funny, because GenerateReadme.hs doesn't render it into markdown, they simply bake the markdown into the document.
12:44:16 <dminuoso> :>
12:44:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:44:51 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds)
12:45:38 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
12:48:22 × yrlnry quits (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 260 seconds)
12:50:09 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
12:50:22 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:52:56 cosimone` joins (~user@93-34-133-207.ip49.fastwebnet.it)
12:53:57 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
12:53:57 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
12:54:27 × mei quits (~mei@user/mei) (Ping timeout: 268 seconds)
12:54:28 × cosimone quits (~user@93-34-133-207.ip49.fastwebnet.it) (Ping timeout: 268 seconds)
12:58:46 × cosimone` quits (~user@93-34-133-207.ip49.fastwebnet.it) (Ping timeout: 268 seconds)
12:59:03 trcc_ joins (~trcc@eduroam09.au.dk)
12:59:23 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 268 seconds)
12:59:39 gentauro joins (~gentauro@user/gentauro)
12:59:55 × immae quits (~immae@2a01:4f8:141:53e7::) (Quit: WeeChat 2.9)
13:00:24 immae joins (~immae@2a01:4f8:141:53e7::)
13:01:07 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
13:01:50 × slowtyper quits (~slowtyper@user/slowtyper) (Quit: ZNC 1.8.2 - https://znc.in)
13:02:07 × trcc quits (~trcc@users-5343.st.net.au.dk) (Ping timeout: 260 seconds)
13:03:59 × obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 264 seconds)
13:03:59 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:04:19 × kjak quits (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 268 seconds)
13:05:14 <maerwald> big names in the author list
13:05:42 <Hecate> :'')
13:05:53 obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl)
13:06:11 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
13:06:47 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
13:06:48 × azeem quits (~azeem@emp-89-199.eduroam.uu.se) (Read error: Connection reset by peer)
13:07:37 azeem joins (~azeem@emp-89-199.eduroam.uu.se)
13:09:57 gentauro joins (~gentauro@user/gentauro)
13:10:13 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
13:16:11 MQ-17J joins (~MQ-17J@8.6.144.203)
13:20:26 dsamperi joins (~dsamperi@2603-7000-3b42-5400-b0ad-0af8-2f41-da4e.res6.spectrum.com)
13:20:26 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:22:03 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:22:37 yrlnry joins (~mjd@pool-100-11-2-80.phlapa.fios.verizon.net)
13:24:13 kadir joins (~kadir@95.7.9.203)
13:24:16 kuribas joins (~user@ptr-25vy0i9fcjh581tavd9.18120a2.ip6.access.telenet.be)
13:25:34 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
13:25:55 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:26:21 gentauro joins (~gentauro@user/gentauro)
13:27:23 × chomwitt quits (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Ping timeout: 264 seconds)
13:30:21 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
13:31:43 <timCF> Hello! Is there any way expression in hpack (package.yaml) to exclude module from exposed-modules list of cabal file?
13:32:33 <maerwald> in plain cabal files easily
13:32:43 × trcc_ quits (~trcc@eduroam09.au.dk) (Remote host closed the connection)
13:33:15 trcc joins (~trcc@users-5343.st.net.au.dk)
13:34:16 <timCF> maerwald: yeah, but plain cabal is kinda pain to deal with :(
13:34:17 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:34:23 <maerwald> not really
13:35:14 <timCF> ¯\_(ツ)_/¯
13:35:34 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
13:35:52 <maerwald> given the fact that you come here asking for something that's *really* simple in cabal, my takeaway is that hpack is a pain to deal with
13:36:52 <yushyin> maybe we just need one more layer of abstraction to deal with hpack? ;)
13:37:08 <maerwald> timCF: https://github.com/sol/hpack#library-fields
13:37:09 <jneira[m]> well in cabal is move the module from `exposed-modules` to `other-modules` iirc
13:37:20 <jneira[m]> i guess hpack has the same field
13:37:22 <maerwald> the documentation of hpack seems to be very clear
13:37:28 <merijn> jneira[m]: Presumably he's using wild-cards to do things automatically
13:37:39 <timCF> maerwald: I didn't did much research of latest cabal development, but for me critical thing was atomated maintainance of exposed-modules (project contains 469 modules and this number is changing from time to time as well as module names)
13:37:43 <merijn> There's a reason why cabal (intentionally) doesn't support wildcards
13:38:20 <jneira[m]> merijn: cause at some point you want to do excluisions .-)
13:38:32 <merijn> timCF: I have a few 100 modules too, but generally you only add/move only a handful at a time anyway, so it's like 5s work to manage
13:38:54 <merijn> jneira[m]: Well, yes, but also, more importantly that for packaging and distribution "explicitness" is a feature, not a bug
13:39:02 lavaman joins (~lavaman@98.38.249.169)
13:39:22 <jneira[m]> maerwald: > Outside conditionals: All modules in source-dirs less exposed-modules less any modules mentioned in when. Inside conditionals, and only if exposed-modules is not specified inside the conditional: All modules in source-dirs of the conditional less any modules mentioned in when of the conditional
13:39:30 <jneira[m]> :-D
13:39:38 <merijn> cabal files are intended to be able to function as manifest files, defining explicitly what *is* and *is not* part of a package. Arguably the support for wildcard data files is a miss-feature
13:39:43 gentauro joins (~gentauro@user/gentauro)
13:39:49 <jneira[m]> it looks like a groucho marx speech
13:39:54 <timCF> maerwald: thanks!
13:40:09 max22- joins (~maxime@2a01cb0883359800e04aab7dab8e26cf.ipv6.abo.wanadoo.fr)
13:40:26 <maerwald> merijn: the proposed solution is to expand all paths when you do `cabal sdist`
13:40:42 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
13:41:13 <maerwald> then hackage would just reject packages with unexpanded paths
13:41:45 <merijn> maerwald: Still leads to people accidentally packaging garbage, though :p
13:43:02 <maerwald> well, hackage doesn't reject bad code either
13:43:48 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
13:43:49 cosimone joins (~user@93-34-133-207.ip49.fastwebnet.it)
13:45:01 <maerwald> would be funny getting an error on upload like "your code looks like garbage, we don't want that here" :D
13:45:22 <maerwald> that would be a nice aprils fool
13:45:22 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:48:44 × max22- quits (~maxime@2a01cb0883359800e04aab7dab8e26cf.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
13:51:03 gentauro joins (~gentauro@user/gentauro)
13:52:37 × hrdl quits (~hrdl@mail.hrdl.eu) (Remote host closed the connection)
13:52:37 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:53:31 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
13:53:31 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
13:53:31 wroathe joins (~wroathe@user/wroathe)
13:54:12 hrdl joins (~hrdl@mail.hrdl.eu)
13:58:05 Sgeo joins (~Sgeo@user/sgeo)
13:58:19 gentauro joins (~gentauro@user/gentauro)
13:59:46 × timCF quits (~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
14:01:03 × MQ-17J quits (~MQ-17J@8.6.144.203) (Ping timeout: 268 seconds)
14:01:04 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
14:01:31 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
14:01:49 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
14:03:00 lavaman joins (~lavaman@98.38.249.169)
14:09:04 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 268 seconds)
14:10:03 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
14:10:34 × cosimone quits (~user@93-34-133-207.ip49.fastwebnet.it) (Ping timeout: 260 seconds)
14:12:26 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
14:12:26 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
14:15:02 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
14:17:06 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 260 seconds)
14:17:06 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
14:18:03 <dsamperi> Seems hackage is not curated, and does not provide incentive to document and provide examples. There are notable exceptions like Pipes.
14:19:12 <geekosaur> youhave to define the scope of "curated" there. for example, stackage is curated but not in that sense
14:22:53 gentauro joins (~gentauro@user/gentauro)
14:28:01 <shapr> do cabal files have an example stanza or something?
14:28:05 <shapr> I was wondering about that yesterday.
14:28:12 <Hecate> no, it's in the README or description
14:28:24 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:28:24 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:28:24 wroathe joins (~wroathe@user/wroathe)
14:28:26 <shapr> Work codebase has lots of examples, and I was wondering if I could reduce compile time by not building them.
14:28:57 shriekingnoise joins (~shrieking@186.137.144.80)
14:28:57 <geekosaur> you can set them to be not buildable without an examples flag
14:31:27 <geekosaur> and with includable sections (which will require you to set a minimum Cabal version on the cabal file) you could define that one and include it into all the examples
14:31:36 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:31:47 <dsamperi> I guess Haskell is more like C++ than R, being naturally a compiled language, where its takes more work to provide working examples. WIth R one can often run working examples with example(funcname).
14:32:55 <maerwald> I don't understand your remarks. Are you saying documentation in Haskell is generally not very good?
14:32:55 burnsidesLlama joins (~burnsides@dhcp168-012.wadham.ox.ac.uk)
14:33:08 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
14:34:01 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
14:34:16 gentauro joins (~gentauro@user/gentauro)
14:36:34 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
14:36:49 <merijn> I mean, overall the average documentation on hackage seems about 50x as any of the python packages I ever have to work with
14:36:49 × wonko quits (~wjc@user/wonko) (Ping timeout: 268 seconds)
14:37:26 <merijn> shapr: You can mark the example components as not built by default
14:38:13 <merijn> Or make them tests, which is what I did :p
14:44:33 cigsender joins (~cigsender@74.124.58.162)
14:45:11 <timCF> Let's say I do have `Foo.Orphan` module with orphan instances of some class, which is used internally inside `Foo` package and is not in exposed-modules. But when there is `Bar.Orphan` file in some other package which depends on
14:45:29 <timCF> `Foo` - orphan instances are stil in scope
14:45:50 × Core5109 quits (~Core5109@47.245.54.240) (Quit: CoreIRC for Android - www.coreirc.com)
14:45:54 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
14:46:23 <timCF> `Bar.Orphan` instances do overlap somehow `Foo.Orphan` even if `Foo.Orphan` is not exposed/exported/imported
14:46:23 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
14:46:23 <geekosaur> orphan instances cannot be imported or exported, they are global
14:46:41 gentauro joins (~gentauro@user/gentauro)
14:46:44 <geekosaur> there is no other way to handle them
14:46:54 <timCF> geekosaur: omg, that's not good
14:47:11 <geekosaur> separate compilation means only the linker knows the full story about instances
14:47:26 <geekosaur> and the linker is designed for C/C++, not Haskell
14:47:28 <timCF> at least in my case :)
14:47:42 tfeb joins (~tfb@88.98.95.237)
14:49:26 <timCF> geekosaur: thanks!
14:49:47 <merijn> timCF: All instances are always global. The only thing that changes is "at what point (if any) does the compiler realise they exist.
14:51:21 <lortabac> if you want to hide an instance the only way is to avoid importing that module anywhere in the program
14:51:21 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
14:51:30 × azeem quits (~azeem@emp-89-199.eduroam.uu.se) (Read error: Connection reset by peer)
14:51:38 <lortabac> but you can't pick different instances in different modules
14:51:55 × tfeb quits (~tfb@88.98.95.237) (Client Quit)
14:52:13 <dsamperi> Haskell documentation varies a lot, from little more than a bunch of function signatures (with pointers to research papers), to detailed explanations with illustrations (Pipes).
14:52:25 <geekosaur> well, you can use the OVERLASPPING pragma or even IncoherentInstances, but in that case you're at the mercy of the compiler
14:52:33 <geekosaur> *OVERLAPPING
14:52:46 azeem joins (~azeem@emp-89-199.eduroam.uu.se)
14:53:22 <timCF> For some reason I was always sure what it's the point of orphan instances - being local, but not the case really
14:53:44 <geekosaur> dsamperi, you haven't even seen the worst of it. Henning Thielemann generally writes good documentation, except all his types are named T and are intended to be used fully qualified
14:54:02 × mmhat quits (~mmh@55d4baf7.access.ecotel.net) (Quit: WeeChat 3.3)
14:54:08 <geekosaur> timcf, this is a large part of why orphan instances are a bad idea
14:54:38 <geekosaur> dsamperi, which makes his documentation well-nigh unreadable
14:55:00 <timCF> geekosaur: overlapping pragma says what it will be *some* instance, but not necessarily any particular
14:55:03 <timCF> ?
14:55:32 <geekosaur> yes. the compiler does try to follow some saneish rules, but at some point it'll throw up its hands and give up
14:55:50 <geekosaur> (basically using the first instance it happens to know about at that point, which may not be the one you intended)
14:57:00 gentauro joins (~gentauro@user/gentauro)
14:57:41 <geekosaur> because, again, only the linker knows the full story and the linker has no clue about Haskell instances
14:58:00 <geekosaur> it knows there are symbols that start with `$d`, but not what they mean
14:58:15 <geekosaur> (instance dictionaries)
14:58:45 <merijn> timCF: Overlapping instances just says "what rules do you follow if you find multiple conflicting instances"
14:59:05 <merijn> timCF: If you mix overlapping and orphans, prepare for some of the worst nightmare debugging you will ever see
14:59:13 <merijn> Of course, not right away. That would be easy
14:59:24 <maerwald> lolo
14:59:45 <merijn> No, at some indeterminate point in the future when stars align and with some specific mix of dependencies *then* it will suddenly manifest
15:00:03 <maerwald> I was never a fun of classes :D
15:02:44 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
15:03:00 <merijn> It's like using a PRNG to generate random identifiers in a concurrent setting to ensure RPCs don't conflict. All you've done is make it less likely to happen and thus more of a nightmare to debug
15:04:35 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
15:05:02 trcc_ joins (~trcc@eduroam09.au.dk)
15:05:03 tfeb joins (~tfb@88.98.95.237)
15:05:24 <maerwald> all code just works by chance
15:05:29 <maerwald> what's the difference :D
15:05:59 geekosaur sends maerwald a cosmic ray
15:06:58 <geekosaur> anyway if you need specific behavior you might be better off passing dictionary records around explicitly instead of relying on instances in scope to do it implicitly
15:06:58 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
15:07:52 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
15:08:50 × trcc quits (~trcc@users-5343.st.net.au.dk) (Ping timeout: 260 seconds)
15:09:21 × tfeb quits (~tfb@88.98.95.237) (Client Quit)
15:09:46 × trcc_ quits (~trcc@eduroam09.au.dk) (Ping timeout: 260 seconds)
15:11:52 × Farzad quits (~FarzadBek@178.131.31.240) (Quit: Leaving)
15:12:23 kadir parts (~kadir@95.7.9.203) ()
15:12:24 gentauro joins (~gentauro@user/gentauro)
15:13:12 ec joins (~ec@gateway/tor-sasl/ec)
15:13:19 × Inst quits (~Inst@2601:6c4:4080:3f80:d8ab:2e91:63f7:db6e) (Remote host closed the connection)
15:13:38 Inst joins (~Inst@2601:6c4:4080:3f80:d8ab:2e91:63f7:db6e)
15:13:59 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
15:16:27 max22- joins (~maxime@2a01cb0883359800dcf2cfbbabba90b8.ipv6.abo.wanadoo.fr)
15:16:51 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
15:17:33 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
15:19:20 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
15:19:51 neurocyte0132889 joins (~neurocyte@212.232.84.130)
15:19:51 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
15:19:51 × neurocyte0132889 quits (~neurocyte@212.232.84.130) (Changing host)
15:19:51 neurocyte0132889 joins (~neurocyte@user/neurocyte)
15:20:00 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
15:20:30 × Inst quits (~Inst@2601:6c4:4080:3f80:d8ab:2e91:63f7:db6e) (Ping timeout: 260 seconds)
15:22:22 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 260 seconds)
15:22:49 <monochrom> All of quantum mechanics just works by chance, too. Overwhelming chance, that is.
15:23:15 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:23:23 <monochrom> And by the way transistor-based logic gates also work by that same chance.
15:24:30 <monochrom> If you issue so much as "xor ax,ax" you are still "not sure" that it sets ax to 0.
15:25:04 <monochrom> And nevermind what the program counter actually points to.
15:25:46 gentauro joins (~gentauro@user/gentauro)
15:27:06 <janus> Is it true that because of Brownian motion, there is a small chance that my whole body will be moved to Jupiter in 42 seconds?
15:27:11 × arahael quits (~arahael@118.208.229.178) (Ping timeout: 245 seconds)
15:27:42 <monochrom> If you s/Brownian motion/wave mechanics/ then yes.
15:27:43 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
15:30:02 <janus> Why not true only with Brownian motion? I consist of particles suspended in gas.
15:30:03 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
15:30:24 <dsamperi> Brownian motion may just be a way of describing lack of knowledge of predicability.
15:30:47 gentauro joins (~gentauro@user/gentauro)
15:30:54 <janus> Well, the same goes for Quantum mechanics, right? There are deterministic interpretations
15:31:14 <monochrom> This should belong to -offtopic but Brownian motion's context is after your wave collapses to particles and after the light-speed limit.
15:31:41 <dsamperi> QBism takes this point of view (Quantum Bayesianism)
15:32:11 <monochrom> Whereas Feymann figured out that with waves, light speed is emergent, photon is just very likely to be at that speed, and you very likely to be under.
15:32:47 thyriaen joins (~thyriaen@dynamic-078-055-251-028.78.55.pool.telefonica.de)
15:34:12 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
15:37:00 NieDzejkob joins (~quassel@212.87.13.106)
15:39:20 slowButPresent joins (~slowButPr@user/slowbutpresent)
15:41:16 arahael joins (~arahael@124.148.78.199)
15:44:42 Inst joins (~Inst@2601:6c4:4080:3f80:cd36:4dbb:1af8:be8)
15:47:30 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
15:49:06 favonia joins (~favonia@user/favonia)
15:53:33 fendor_ joins (~fendor@178.115.63.67.wireless.dyn.drei.com)
15:54:18 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
15:55:01 ec joins (~ec@gateway/tor-sasl/ec)
15:56:23 × fendor quits (~fendor@178.165.199.1.wireless.dyn.drei.com) (Ping timeout: 268 seconds)
15:58:40 CubOfJudahsLion joins (~CubOfJuda@45.63.109.242)
16:00:25 gentauro joins (~gentauro@user/gentauro)
16:00:48 fizzsegfaultbuzz joins (~segfaultf@135-180-0-138.static.sonic.net)
16:00:58 × dsamperi quits (~dsamperi@2603-7000-3b42-5400-b0ad-0af8-2f41-da4e.res6.spectrum.com) (Quit: Konversation terminated!)
16:01:42 × CubOfJudahsLion quits (~CubOfJuda@45.63.109.242) (Client Quit)
16:02:08 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:05:00 × boxscape_ quits (~boxscape_@134.171.69.87) (Ping timeout: 268 seconds)
16:05:23 jumper149 joins (~jumper149@80.240.31.34)
16:06:26 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
16:07:16 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:08:52 × thyriaen quits (~thyriaen@dynamic-078-055-251-028.78.55.pool.telefonica.de) (Quit: Leaving)
16:09:23 ubikium parts (~ubikium@i223-218-66-82.s41.a013.ap.plala.or.jp) (Leaving)
16:12:33 chomwitt joins (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374)
16:18:03 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
16:19:13 <dolio> There's almost certainly ways of making sense of QM that don't involve a 'chance' of your being suddenly teleported to Jupiter. :)
16:20:21 × turlando_ quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Quit: turlando_)
16:20:21 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
16:20:32 <geekosaur> transactional interpretation, yes
16:20:54 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
16:20:54 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
16:20:54 turlando joins (~turlando@user/turlando)
16:21:28 <geekosaur> (note however that by any interpretation the chance is very, very small)
16:22:16 × hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1)
16:22:17 <janus> i am a correctness fetishist, i must obsess over even the smallest probabilities.
16:23:05 hendursaga joins (~weechat@user/hendursaga)
16:24:06 <geekosaur> QM is not for you, then :)
16:24:32 <geekosaur> better stay away from quantum computers
16:25:58 gentauro joins (~gentauro@user/gentauro)
16:26:40 dsamperi joins (~dsamperi@2603-7000-3b42-5400-b0ad-0af8-2f41-da4e.res6.spectrum.com)
16:28:26 × guniberas quits (~guniberas@42.191.188.121) (Ping timeout: 268 seconds)
16:28:27 ec joins (~ec@gateway/tor-sasl/ec)
16:28:42 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
16:29:43 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
16:31:30 × lortabac quits (~lortabac@88.125.6.227) (Quit: WeeChat 2.8)
16:31:38 × wei2912 quits (~wei2912@138.75.71.147) (Quit: Lost terminal)
16:32:26 × tv quits (~tv@user/tv) (Ping timeout: 260 seconds)
16:33:22 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
16:33:23 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
16:36:27 pop3 joins (~pop3@user/pop3)
16:37:01 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:37:02 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
16:37:21 gentauro joins (~gentauro@user/gentauro)
16:37:46 <janus> but QM isn't different from classical mechanics in that regard. our weather models can't rule out freak events either.
16:38:06 × pop3 quits (~pop3@user/pop3) (Remote host closed the connection)
16:38:14 boxscape_ joins (~boxscape_@i59F67A7D.versanet.de)
16:39:31 <janus> the culture around QM may have a larger focus on calculating the exact probabilities, so in that regard it may be more rigorous than weather forecasting
16:40:03 <geekosaur> meh. we know exactly what's wrong with the weather models. we just can't fix it sanely
16:40:06 pop3 joins (~pop3@user/pop3)
16:40:23 <geekosaur> (you need perfect and exact topographical information, for one)
16:40:48 <dolio> Right, it's just impossible to measure precisely enough.
16:41:16 betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be)
16:42:18 jespada joins (~jespada@190.7.36.46)
16:45:48 tv joins (~tv@user/tv)
16:47:18 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
16:51:15 × tv quits (~tv@user/tv) (Ping timeout: 268 seconds)
16:51:39 tv joins (~tv@user/tv)
16:55:16 × zincy quits (~tom@2a00:23c8:970c:4801:b46f:f559:1389:e031) (Read error: Connection reset by peer)
16:56:24 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
16:57:36 shidima joins (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl)
16:57:41 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
16:58:12 ec joins (~ec@gateway/tor-sasl/ec)
16:59:53 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:00:30 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 268 seconds)
17:00:53 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:01:35 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
17:03:29 <monochrom> "What have I done?" :)
17:04:45 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
17:05:14 morphism joins (~ret@static.247.176.55.162.clients.your-server.de)
17:05:25 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
17:06:41 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
17:07:26 <maerwald> weather forecasting is only important if you actually leave the house
17:08:44 × mbuf quits (~Shakthi@122.173.251.242) (Quit: Leaving)
17:09:05 zincy joins (~tom@2a00:23c8:970c:4801:b46f:f559:1389:e031)
17:09:29 <monochrom> ObHaskell: Analogically, IO is only important if you leave purity >:) https://ro-che.info/ccc/9
17:10:39 × zincy quits (~tom@2a00:23c8:970c:4801:b46f:f559:1389:e031) (Read error: Connection reset by peer)
17:12:09 × tv quits (~tv@user/tv) (Read error: Connection reset by peer)
17:13:35 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:15:15 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:15:23 Null_A joins (~null_a@2601:645:8700:2290:41b5:a1c:d64e:bf9)
17:20:47 ec joins (~ec@gateway/tor-sasl/ec)
17:20:50 zincy joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
17:21:29 × boxscape_ quits (~boxscape_@i59F67A7D.versanet.de) (Ping timeout: 268 seconds)
17:22:21 × zincy quits (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Read error: Connection reset by peer)
17:23:53 zincy joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
17:25:25 × zincy quits (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Read error: Connection reset by peer)
17:28:26 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 260 seconds)
17:28:30 × drdo quits (~drdo@roach0.drdo.eu) (Quit: Ping timeout (120 seconds))
17:29:20 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
17:29:30 × azeem quits (~azeem@emp-89-199.eduroam.uu.se) (Ping timeout: 268 seconds)
17:30:24 tv joins (~tv@user/tv)
17:30:51 zincy joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
17:31:53 azeem joins (~azeem@2a00:801:3cb:bcc0:53ee:32be:de18:8352)
17:32:21 drdo joins (~drdo@roach0.drdo.eu)
17:32:24 × zincy quits (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Read error: Connection reset by peer)
17:33:24 cfricke joins (~cfricke@user/cfricke)
17:35:05 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
17:36:01 gdown joins (~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net)
17:36:42 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
17:36:44 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
17:36:54 × xff0x quits (~xff0x@2001:1a81:53fb:b000:1550:cc88:ac55:5459) (Ping timeout: 268 seconds)
17:37:20 xff0x joins (~xff0x@port-92-193-245-245.dynamic.as20676.net)
17:38:45 × chomwitt quits (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
17:39:58 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:39:59 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
17:41:26 × gdown quits (~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
17:42:04 gdown joins (~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net)
17:42:06 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC (IRC client for Emacs 27.1))
17:43:14 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
17:46:05 Topsi joins (~Tobias@dyndsl-095-033-088-198.ewe-ip-backbone.de)
17:47:04 × jespada quits (~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:48:15 kadir joins (~kadir@95.7.9.203)
17:48:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:49:47 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
17:50:27 zincy joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
17:51:00 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
17:51:20 × zincy quits (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Read error: Connection reset by peer)
17:51:55 kadir parts (~kadir@95.7.9.203) ()
17:53:28 × zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving)
17:54:03 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:55:33 aegon joins (~mike@174.127.249.180)
17:56:56 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
17:58:48 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:59:06 desantra joins (~skykanin@user/skykanin)
17:59:36 zaquest joins (~notzaques@5.128.210.178)
17:59:41 mmhat joins (~mmh@55d4baf7.access.ecotel.net)
18:00:24 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
18:00:28 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
18:00:57 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
18:01:18 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
18:01:18 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
18:01:18 wroathe joins (~wroathe@user/wroathe)
18:01:45 × desantra quits (~skykanin@user/skykanin) (Client Quit)
18:02:47 × Null_A quits (~null_a@2601:645:8700:2290:41b5:a1c:d64e:bf9) (Ping timeout: 264 seconds)
18:03:11 neurocyte0132889 joins (~neurocyte@212.232.84.130)
18:03:11 × neurocyte0132889 quits (~neurocyte@212.232.84.130) (Changing host)
18:03:11 neurocyte0132889 joins (~neurocyte@user/neurocyte)
18:06:30 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
18:07:01 chomwitt joins (~chomwitt@ppp-2-85-245-90.home.otenet.gr)
18:07:06 × yrlnry quits (~mjd@pool-100-11-2-80.phlapa.fios.verizon.net) (Ping timeout: 268 seconds)
18:07:07 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
18:08:34 × Jing quits (~textual@2604:a840:3::1021) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:09:03 wonko joins (~wjc@user/wonko)
18:09:20 ec joins (~ec@gateway/tor-sasl/ec)
18:09:59 vicfred joins (~vicfred@user/vicfred)
18:10:01 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
18:11:25 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 268 seconds)
18:14:01 × dsamperi quits (~dsamperi@2603-7000-3b42-5400-b0ad-0af8-2f41-da4e.res6.spectrum.com) (Quit: Konversation terminated!)
18:15:08 × shidima quits (~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl) (Ping timeout: 268 seconds)
18:16:22 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
18:16:47 kadir joins (~kadir@95.7.9.203)
18:19:18 mei joins (~mei@user/mei)
18:22:12 kadir parts (~kadir@95.7.9.203) (WeeChat 3.3)
18:22:32 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:23:09 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
18:26:06 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
18:26:45 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
18:26:45 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
18:28:42 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
18:29:06 × tv quits (~tv@user/tv) (Ping timeout: 260 seconds)
18:30:37 × canta quits (~canta@user/canta) (Quit: WeeChat 2.8)
18:30:47 desantra joins (~skykanin@user/skykanin)
18:30:49 canta joins (~canta@user/canta)
18:31:30 jpds joins (~jpds@gateway/tor-sasl/jpds)
18:31:39 <tomjaguarpaw> Does Haddock always show a class's members even if they're not exported? I want to export the class but not the members and I'd rather Haddock didn't show them ...
18:32:10 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
18:32:16 ubert joins (~Thunderbi@p200300ecdf4fca4ae019fddc82d0353e.dip0.t-ipconnect.de)
18:33:16 <dsal> tomjaguarpaw: I don't think so, but can't you just try to see if it does what you expct?
18:33:19 dsamperi joins (~dsamperi@2603-7000-3b42-5400-ad06-78d6-67f9-46d9.res6.spectrum.com)
18:33:28 <tomjaguarpaw> Well yeah, I tried it and it doesn't do what I want
18:33:36 hololeap joins (~hololeap@user/hololeap)
18:33:44 <tomjaguarpaw> It's the autogenerated "minimal complete definition" section that shows them
18:33:52 <tomjaguarpaw> I wonder if I can tell Haddock to suppress that
18:34:59 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
18:35:18 <tomjaguarpaw> Seems to be this issue https://github.com/haskell/haddock/issues/330
18:35:22 × dsamperi quits (~dsamperi@2603-7000-3b42-5400-ad06-78d6-67f9-46d9.res6.spectrum.com) (Client Quit)
18:35:49 dsamperi joins (~dsamperi@2603-7000-3b42-5400-ad06-78d6-67f9-46d9.res6.spectrum.com)
18:36:26 yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net)
18:37:26 ec joins (~ec@gateway/tor-sasl/ec)
18:37:26 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 260 seconds)
18:42:13 tv joins (~tv@user/tv)
18:45:26 <dsal> Yeah, I don't like these things that look like bugs, but you can see both arguments. I had a few of those with HPC yesterday.
18:46:10 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
18:46:18 × jumper149 quits (~jumper149@80.240.31.34) (Ping timeout: 260 seconds)
18:46:35 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
18:47:25 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
18:47:29 jumper149 joins (~jumper149@80.240.31.34)
18:48:27 boxscape_ joins (~boxscape_@i59F67A7D.versanet.de)
18:50:12 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:52:23 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
18:54:35 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 268 seconds)
18:54:42 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
18:57:37 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
18:59:10 ub joins (~Thunderbi@p548c9652.dip0.t-ipconnect.de)
19:00:03 × ubert quits (~Thunderbi@p200300ecdf4fca4ae019fddc82d0353e.dip0.t-ipconnect.de) (Remote host closed the connection)
19:00:03 ub is now known as ubert
19:01:23 lavaman joins (~lavaman@98.38.249.169)
19:04:10 ec joins (~ec@gateway/tor-sasl/ec)
19:05:06 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
19:05:22 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
19:06:19 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
19:08:10 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:08:58 zincy joins (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c)
19:09:24 × sprout quits (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b) (Ping timeout: 268 seconds)
19:10:52 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection)
19:11:28 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
19:13:25 × zincy quits (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c) (Remote host closed the connection)
19:13:31 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
19:14:51 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
19:16:48 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
19:17:41 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
19:18:20 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
19:22:00 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
19:24:41 zincy joins (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c)
19:26:39 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 268 seconds)
19:27:48 × Topsi quits (~Tobias@dyndsl-095-033-088-198.ewe-ip-backbone.de) (Read error: Connection reset by peer)
19:29:15 pgib joins (~textual@99-148-134-85.lightspeed.knvltn.sbcglobal.net)
19:29:38 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:32:11 × zincy quits (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c) (Remote host closed the connection)
19:32:43 pavonia joins (~user@user/siracusa)
19:32:49 ec joins (~ec@gateway/tor-sasl/ec)
19:33:42 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
19:34:48 sprout joins (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b)
19:39:37 × sprout quits (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b) (Ping timeout: 268 seconds)
19:42:12 × favonia quits (~favonia@user/favonia) (Remote host closed the connection)
19:43:23 justache is now known as justUnited
19:45:04 favonia joins (~favonia@user/favonia)
19:48:26 Pickchea joins (~private@user/pickchea)
19:49:33 × Skyfire quits (~pyon@user/pyon) (Quit: WeeChat 3.3)
19:50:17 × burnsidesLlama quits (~burnsides@dhcp168-012.wadham.ox.ac.uk) (Remote host closed the connection)
19:50:54 burnsidesLlama joins (~burnsides@dhcp168-012.wadham.ox.ac.uk)
19:55:39 × burnsidesLlama quits (~burnsides@dhcp168-012.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
19:58:38 yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net)
19:59:35 econo joins (uid147250@user/econo)
20:00:44 <AWizzArd> When reading about linear types I saw the Socket example, where they had `data State = Unbound | Bound | Listening | …` and then `data Socket (s :: State)`.
20:00:51 <AWizzArd> Now we can have types such as `Socket Unbound` or `Socket Listening` etc.
20:00:58 <AWizzArd> I wonder how we could find an equivalent in Java. Would Socket be a base class and BoundSocket and ClosedSocket be sub classes? Then a close method would be in the base class, while in Haskell close :: ∀s. Socket s → IOL ω ()
20:01:39 doyougnu joins (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
20:02:47 <dminuoso> Having read some opinions, I really wish linear types wouldt have gotten into GHC
20:03:39 × yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
20:04:08 zincy joins (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c)
20:04:18 <AWizzArd> dminuoso: Why? They seem to be very useful for resource management.
20:04:44 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
20:04:54 <AWizzArd> Saving tons of unit tests that are so big that they themselve need their own tests.
20:05:38 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 260 seconds)
20:05:53 <dminuoso> It will promote more fragmentation in libraries, where you will have linear versions, non-linear versions
20:06:28 <jumper149> Isn't linear stuff "downwards-"compatible?
20:06:28 <dminuoso> And if non-linear versions die out due to lack of maintenance, you're suddenly forced to turn on big hammer extensions just to use said library..
20:07:06 juhp joins (~juhp@128.106.188.220)
20:07:30 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
20:07:47 <cigsender> AWizzArd: your example as shown doesn't have much to do with linear types, though, just DataKinds
20:08:18 <jumper149> (aside from linear functions in contravariant position)
20:08:20 <dminuoso> AWizzArd: Also, I think its not that silver bullet some people make it out to be.
20:08:50 <dminuoso> AWizzArd: For a large portion of problems it will not catch realistic bugs, while adding huge complexity and complicate diagnostics a lot.
20:09:07 <dminuoso> It's sort of why "encode invariant XYZ it into the type system" doesn't tend to go well.
20:09:28 <dminuoso> It looks like a cool idea initially, but very rapidly you will drastically increase complexity and reduce the people able or willing to even touch/contribute to your code.
20:09:54 <dminuoso> And even decrease likelihood of people using your api, if haddock gives complicated type signatures
20:10:37 <cigsender> dminuoso: better error messages from GHC will help with this
20:11:03 drownbes89 joins (~drownbes@79-206-50-195.sta.estpak.ee)
20:11:22 <sm> if it's a big enough problem and the community is clear enough, they can always be removed
20:11:56 <dminuoso> cigsender: These error messages will require linear type competency still to understand.
20:12:14 × drownbes89 quits (~drownbes@79-206-50-195.sta.estpak.ee) (Client Quit)
20:12:18 <dminuoso> sm: When has a GHC extension ever been removed for any reason other than being subsumed or completely buggy?
20:12:45 <cigsender> dminuoso: DataKinds without linear types still allows you to encode type-level invariants, though
20:13:09 <dminuoso> And what AWizzArd said is not really true.
20:13:30 <dminuoso> cigsender: Yes, and it's awfully terrible.
20:13:40 <sm> I'm just saying it actually is possible
20:13:42 <dminuoso> Type signatures become completely unreadable for anyone who is not the author
20:14:06 <dminuoso> Errors become unreadable for anyone who is not intimiately familiar with the implementation and with how GHC type inference works
20:14:27 <dminuoso> And your linearly generalized code will have type signatures that newcomers will not be able to understand
20:14:30 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
20:14:45 <dminuoso> linear types is a type of extension that will have a *very* noticeable impact on APIs.
20:18:04 ec joins (~ec@gateway/tor-sasl/ec)
20:18:07 <maerwald> dminuoso: the authors of the proposal said it's an experiment and the community will decide if it's successful, which I find confusing. It's a one-way street. You'll never be able to remove it
20:19:29 <maerwald> oh wait, I haven't read the backlog carefully
20:19:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:19:39 <dminuoso> maerwald: Well, of course the community decides whether an extension is successful. Success is merely a measurement of how many people will use it.
20:20:19 <maerwald> this was rather about DT, but the same principle applies to linear types
20:20:43 <maerwald> at least it will allow some things in streaming libraries that's not possible right now I think
20:20:49 <maerwald> whether that's a net gain, I don't know
20:20:57 <dminuoso> Liquid Haskell is one of those things that is very amazing because it's so non-intrusive. Dont care about it? Well, it all exists just in comments!
20:21:05 <dminuoso> You want it? Add your LH assertions all day long.
20:21:16 <dminuoso> It doesn't impact me as a user in the slightest.
20:21:54 <maerwald> opt-in is always great... if it works well
20:22:10 <dminuoso> maerwald: Yeah. I think to some degree we're the victim of a language that has a long history of being a testbed of experimentation, despite Haskell having succeeded in becoming a language widely used in production.
20:22:29 <awpr> if the API that's using linear types is a pure linear interface to mutable arrays, making it opt-in is just throwing away memory safety
20:22:42 burnsidesLlama joins (~burnsides@dhcp168-012.wadham.ox.ac.uk)
20:22:53 × jocke-l quits (jocke-l@a.x0.is) (Quit: WeeChat 2.3)
20:22:56 <awpr> my view on the point of adding linear types is to make it possible to write safe APIs that would otherwise have been unacceptably unsafe
20:22:57 <dminuoso> awpr: It's not just throwing away memory safety, it adds usability and decreases complicated diagnostics.
20:23:06 jocke-l joins (jocke-l@a.x0.is)
20:23:30 <dminuoso> Depending on the exact ergonomics in your library, linear types can easily make writing trivial and morally correct code impossible in the presence of exceptions
20:23:40 <maerwald> the alternative is to create a new language that's inter-operable with haskell
20:23:42 <awpr> diagnostics and ease of use are nice, but if you have to delete referential transparency to get them, it's not worth it
20:24:12 <awpr> if opt-in were a viable option, we'd already have pure interfaces to mutable arrays today
20:24:31 <dminuoso> Well we do with ST?
20:24:47 <awpr> that's a monadic, imperative interface
20:24:55 <dminuoso> Ah I see what you mean
20:25:06 <boxscape_> hm it doesn't seem impossible to make linear types opt-in - I think you'd just need a flag that unsafely coerces multiplicities when they don't match'/
20:25:13 <boxscape_> s/'\//?
20:25:38 <awpr> yeah, it's surely possible to implement (in fact I'd guess `-fdefer-type-errors` would do it already)
20:25:52 <dminuoso> -fdefer-type-errors is quite the hammer to sling
20:26:00 <dminuoso> It's the nuclear option.
20:26:11 <awpr> I would also guess it'd be feasible to add `-fdefer-multiplicity-errors`
20:26:32 <dminuoso> What about type signatures in haddock on hackage then?
20:26:47 <dminuoso> Can we add a non-linear mode to simply hide the linear type stuff?
20:26:54 <boxscape_> -fdefer-type-errors doesn't do it in ghc at least, but you can unsafeCoerce an argument to a function without problem, so it seems possible in principle
20:27:17 <boxscape_> dminuoso this applies to some other features as well - it'd be nice if maybe there were two versions of haddock html, a simplified view that hides advanced features, and the complete view
20:27:21 <awpr> I don't have a good answer for that. multiplicity-polymorphic signatures would be a bit of a burden to newcomers indeed
20:27:24 <dminuoso> Like, I dont mind linear types at all if it's not just opt-in, but the gory details hidden away for me if I dont care for them
20:27:55 <AWizzArd> cigsender: yes, I just stumbled upon this while reading about LT and wondered what a good mapping to Java would be.
20:28:20 × burnsidesLlama quits (~burnsides@dhcp168-012.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
20:28:25 <dminuoso> boxscape_: Im not sure what other things this could apply on.
20:28:37 <awpr> this is like a turbocharged version of the debate on generalizing stuff in Prelude to Foldable, for one
20:28:57 <boxscape_> runtime reps is the first thing that comes to my mind but I think I thought about this relating to something else in the past as well
20:29:37 <dminuoso> awpr: Well sure, I mean I guess library vendors could expose a linear generalized API in one module, and a monomorphized version in another. But the reality is that this requires discipline from package authors.
20:29:47 × favonia quits (~favonia@user/favonia) (Ping timeout: 264 seconds)
20:29:53 <dminuoso> boxscape_: You mean levity polymorphism?
20:30:06 <dminuoso> Yes, and in fact GHCi already does hide some of it
20:30:18 <awpr> yeah, good point. it sort of goes in the direction of duplicating all the libraries, though
20:30:21 <boxscape_> right, I'm calling it that because the flag is called -fprint-explicit-runtime-reps
20:30:52 <dminuoso> Neat, I should probably enable that one by default here.
20:30:52 <awpr> maybe a suitable JS-side Haddock feature could address this sort of thing: a checkbox or something equivalent to prune out the multiplicity stuff
20:31:01 <AWizzArd> dminuoso: do you have an example of a high increase in complexity? To me LT seem to be not deeply complex. They will provide documentation for the reader, about arguments being consumed exactly once. They can help to manage a sequence of steps with DataKinds. Later on they can take load away from the GC.
20:32:43 <dminuoso> AWizzArd: Im a newcomer, I want to write sockets stuff. Apparently awizz-sockets is the new hot library to use. Oh whats that % or Multiciplity. (Assuming I havent ran away screaming...) Oh linear types. Let me google that...
20:33:00 <maerwald> lol
20:33:05 <dminuoso> And here the journey ends in yet another customer saying "Haskell is a research language" or "You need to be a mathematician to understand Haskell"
20:33:17 <AWizzArd> dminuoso: What Morpheus said: welcome to the real world :)
20:33:36 <boxscape_> dminuoso okay actually the "something else" I had in mind was also levity polymorphism.
20:33:45 <boxscape_> I just misremembered
20:33:56 <AWizzArd> I don't care much about newcomers. Paul Graham wanted a language for experts. You are newbie for a short time, the rest of your career you’ll be an expert.
20:34:27 <boxscape_> it has to be at least accommodating enough to newcomers that they don't quit before becoming experts
20:34:35 <dminuoso> AWizzArd: Without an influx of new developers, the language will over time die out. There's going to be less people maintaining packages and writing new ones.
20:34:38 <boxscape_> (well, a reasonable fraction of them, anyway)
20:34:40 <dsal> I've been a newbie for decades. I don't expect to ever be an expert in anything.
20:34:40 <AWizzArd> dminuoso: newcomer uses my hyped lib, accidentally makes a mistake by forgetting to close the socket. This thing doesn't compile.
20:34:42 <dminuoso> I for one want my dependencies maintained.
20:34:50 <dminuoso> So yes, I want a constant influx of new developers in Haskell
20:35:04 <dminuoso> I can do some work on my dependencies, but there's just far too much to do it alone.
20:35:05 dsal used += in a haskell program for the first time today
20:35:18 <AWizzArd> dminuoso: sure, new people need to join and they will study Haskell *because* it has Linear Types.
20:35:32 <AWizzArd> dminuoso: Rust seems to be very popular and is way more complex than the LT in Haskell.
20:35:39 <dminuoso> AWizzArd: Is GHC going to tell you. "Here, you forgot to close your socket. Look at line XYZ to see why"?
20:35:49 <dminuoso> Or what is GHC going to tell you *realistically*?
20:36:09 dsal imagines hoards of python programmers waiting for linear types before jumping to Haskell
20:36:11 <dminuoso> Besides, I dont buy this problem to be such a big problem.
20:36:12 <AWizzArd> dminuoso: I hope yes, it will tell me such things in the future. It will even generate the code for me from the signature, or give me support.
20:36:21 <boxscape_> * Couldn't match type 'Many with 'One; Expected: a %1 -> a Actual: a -> a
20:36:31 <dminuoso> ^-
20:36:34 <dminuoso> Yes. And now what?
20:36:35 <AWizzArd> dminuoso: the socket thing is not big, but you want to first read from a CSV file and only then dump it into MongoDB.
20:37:05 <dminuoso> AWizzArd: Yes. I can do that without linear types.
20:37:17 <dminuoso> Reading from a file and stuffing it into the database seems trivial enough.
20:37:38 yauhsien joins (~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
20:37:50 <AWizzArd> dminuoso: how will you protect your code against changing it so that you write to the DB *before* reading the file? Unit tests, but those are more complex than the LT.
20:37:59 <dsal> readCSV >>= withDBConnection storeCSVStuff
20:38:29 <boxscape_> you might be able to write a custom type error to tell users when they forgot to close the socket
20:38:39 <boxscape_> at least if the custom type error machinery gets improved further
20:38:40 <AWizzArd> dsal: withDB storeNonsense >> readCSV >>= withDB storeCSVStuff
20:38:59 <dminuoso> boxscape_: Fun fact, while I love optics type errors, at time inference has a way of backtracking so much, I get the most illegible type unification errors before optics type error helpers can resolve.
20:39:00 <dolio> AWizzArd: Is this a real problem?
20:39:09 <dolio> It seems like not a real problem.
20:39:17 <dminuoso> boxscape_: So realistically while it improves the situation in 90%, it drastically reduces diagnostic quality in the other 10%
20:39:21 <dminuoso> Numbers based on feelings.
20:39:23 <boxscape_> hm, interesting
20:39:51 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
20:40:02 <AWizzArd> dolio: yes it may happen rarely. But tell me: where is the problem with LT here? It is trivial to make this sequence of steps work. An implementation will only be correct if you read the csv and write to the db.
20:40:11 alzgh joins (~alzgh@user/alzgh)
20:40:23 <AWizzArd> dolio: also why should we use Haskell in the first place if we now suddenly begin to argue that our code starts getting too correct? (:
20:40:26 <dminuoso> AWizzArd: And why do you conjure up a complex type system to solve what's a trivial non-issue?
20:41:01 <AWizzArd> dminuoso: where is the complexity? We have a few simple steps with DataKinds and throwing a %1 into the mix.
20:41:07 <awpr> I also don't see how linear types would address that use-case
20:41:09 <dminuoso> I mean yes, I can encode a lot of invariants into my type system too. For example, I can express making a modification first before writing to a database in my type system. But why do I actually need this protection?
20:41:11 <dsal> AWizzArd: Can you provide a more concrete example? I read about LT a while back and barely remember how it's useful. I don't exactly understand your CSV/DB situation.
20:41:40 <dolio> The problem is how much extra effort it costs and how much additional correctness is ensured, and how likely it is to be incorrect in the first place.
20:41:47 <dminuoso> AWizzArd: First off, DataKind promoted types are invisible on Hackage.
20:42:02 <dolio> Just saying that maximal correctness is desirable without taking any other context into account is not a good argument.
20:42:10 <dminuoso> Indeed.
20:42:30 × yauhsien quits (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
20:42:36 <AWizzArd> dolio: the extra effort seems to be a couple of minutes. And I don't see here how it made things really complex. Yes, it will take a couple of days to get trained in LT. Monads were possibly harder.
20:42:56 <dolio> How did you come up with that?
20:43:19 <dolio> Did you implement a complete CSV library with linear types?
20:43:21 <dminuoso> AWizzArd: I have yet to find someone give me a *real* world problem that frequently produces bugs that end up in production, that linear types would have solved.
20:43:23 <AWizzArd> dolio: so far the examples I saw seem to indicate that. How did you come up with the idea that it would add "much" complexity.
20:43:31 <dminuoso> The commonly cited sockets example is quite poor for several reasons.
20:43:45 sprout joins (~quassel@2a02:a467:ccd6:1:58cd:ccc2:f66c:e3b)
20:44:08 <AWizzArd> dminuoso: I see the use in areas where a sequence of resources need to be accessed, in a specific order.
20:44:50 <awpr> is the suggestion that you'd have a token that must be used in order to access DBs or read files, and the type of the token would encode the order they must be accessed in?
20:44:56 <AWizzArd> I have a lot of code where I access a file once. Why not show this in the type sig?
20:44:59 <dminuoso> AWizzArd: Okay. And consider those cases, imagine an actual implementation, what are the odds of someone changing the order down the line incorrectly in the first place?
20:45:05 × jushur quits (~human@user/jushur) (Quit: ¯\_(ツ)_/¯)
20:45:08 <dminuoso> Im not saying I dont see what it can do
20:45:37 <AWizzArd> dminuoso: rare bugs when it is a single function. I just see that C coders all the time say that they free memory twice, or use it after freeing it.
20:45:40 <awpr> this is also not a fundamentally new capability of linear types; you can do the same type-state sort of thing with an indexed state monad
20:45:51 <dminuoso> I know that you can encode invariants in linear types or the type system in general. But more often than not that is trying to guard against scenarios you very well can imagine already. In my experience, bugs tend to be things you couldn't imagine before hand.
20:45:55 <AWizzArd> This is not because of their three-liners. It seems to happen when code is distributed.
20:46:09 <awpr> but nobody does, because it doesn't really carry its weight in this instance
20:46:26 <dminuoso> AWizzArd: See, with memory management I can absolutely see the value of such type systems.
20:46:31 <AWizzArd> My point is that the Haskell variant looks simpler than what Rust has. Rust enforces the use everywhere. How many users does Rust have? 5x more than Haskell? Dunno.
20:46:54 <AWizzArd> dminuoso: in Rust everything is a resource, you can't opt out (if I understand it correctly).
20:46:56 <awpr> Rust doesn't encode the order of interacting with databases and files in types
20:47:14 <awpr> at least, not in any code I've seen
20:47:19 <AWizzArd> awpr: Rust is not doing anything. But you can do this in your API.
20:47:25 <dminuoso> In Rust?
20:47:27 <awpr> can you?
20:47:38 <AWizzArd> I would assume it. No?
20:47:42 <maerwald> dminuoso: streams that consume resources on draining. After you drain a stream, the stream is still there and can be passed around. Trying to drain it again will cause an IO exception
20:47:57 <awpr> I don't know how to do that in Rust presently. not willing to claim it's impossible, but it's not clear to me
20:47:59 <maerwald> that would be a use case for streamly
20:48:27 <dminuoso> maerwald: Okay, now the real question is: This type of bug would most easily be caught by your test suite anyhow. Why do we want a linear type system instead?
20:48:28 <maerwald> because once a stream is drained, the resources is cleaned up
20:48:40 × wonko quits (~wjc@user/wonko) (Ping timeout: 268 seconds)
20:48:59 <awpr> I suppose you could have a struct that manufactures restricted mutable references to itself, and is only willing to exchange them in a particular order
20:49:03 <maerwald> dminuoso: I don't think so. If you have a large codebase and store streams in several places, you can never be sure which stream is safe to consume.
20:49:27 burnsidesLlama joins (~burnsides@dhcp168-012.wadham.ox.ac.uk)
20:49:34 <dminuoso> maerwald: Fair enough. Ill have to ponder about it, but it does sound like a viable use case perhaps.
20:49:40 <maerwald> of course you can avoid it... but it requires discipline
20:49:52 <maerwald> and people are not disciplined
20:50:09 <kuribas> I am getting: Couldn't match type ‘ann’ with ‘()’
20:50:14 <maerwald> but if I imagine more widespread use of streams in APIs...
20:50:19 <maerwald> I def. will run into such issues I think
20:50:24 <kuribas> No place where the "()" comes from. Instead a +- 100 line do block.
20:50:34 <dolio> Anyhow, I'm not saying linear types aren't useful. I'm saying the 40 character hypotheticals I'm seeing are not compelling.
20:50:34 <dminuoso> maerwald: Are such undisciplined people disciplined enough to write multiplicity polymorphic code?
20:50:41 <dolio> Show me a real, substantial example.
20:50:42 <maerwald> well...
20:50:43 <dminuoso> Also how does linear types fare in the presence of exceptions? :)
20:51:02 <AWizzArd> As a sketch (please let me know if this is nonsense): we want to implement readCSVandDumpIntoMongo :: UnreadCSV %1 -> UnusedDBConn %1 -> IOL UsedDBConn And we have a readCSV :: UsreadCSV -> IOL ReadCSV and a dumpToMongo :: ReadCSV -> UnusedDBConn -> IOL UsedDBConn
20:51:03 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
20:51:31 <dminuoso> AWizzArd: The example simply does not sound convincing, it's too artificial. You're trying to show what linear types can do, not show a real world problem it would help to solve.
20:52:07 <awpr> kuribas: probably something declares a pretty-printer doc with a () annotation type unnecessarily?
20:52:09 <dminuoso> Start with something some people might do, and then introduce the frequent interaction that can cause a bug down the road. And then conjure up linear types as the hero on the field
20:52:10 <AWizzArd> dminuoso: this example shows what many web handlers in the backend do. A series of steps.
20:52:50 <kuribas> awpr: no, it comes from "my" code. I just don't know which one.
20:52:55 <AWizzArd> dminuoso: Well, we just have to play around with them to see if it works. But to me it seems that I would regularily be able to use them to improve documentation and have implicit test cases.
20:53:00 <dminuoso> AWizzArd: So the reality is going to be. I have `readCSV :: FilePath -> IO MyCSV` `saveToMongo :: Conn -> MyCSV -> IO ()`
20:53:20 <kuribas> awpr: I which ghc would pinpoint don't the "thing" that has the type, being it a literal, or a some function with explicit type signature.
20:53:45 <awpr> it's surprising if it doesn't
20:53:46 <dminuoso> kuribas: No, because of how inference works.
20:53:48 <AWizzArd> dminuoso: in this example you could call saveToMongo multiple times. And you can't prove that you did call it?
20:54:06 <dminuoso> kuribas: I encountered this problem frequently today when reworking prettyprinter annotations just today! :)
20:54:12 <kuribas> dminuoso: even with inference, it comes from "somewhere".
20:54:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
20:54:20 <dminuoso> AWizzArd: Yeah, but given your example that's more than unlikely to actually happen
20:54:21 <dolio> AWizzArd: GHC can already tell if you don't use a variable.
20:54:25 <AWizzArd> If save2Mongo was the only way to retrieve a UsedMongoConn and when you return it then there is no way around calling it.
20:54:34 <kuribas> dminuoso: unless it's a type variable...
20:54:51 × pgib quits (~textual@99-148-134-85.lightspeed.knvltn.sbcglobal.net) (Ping timeout: 268 seconds)
20:54:54 <dminuoso> I generally dont accidentally "copy paste a linear 3 times". It would be caught a) during writing, b) during `git add -p`, c) during the code review, and possible d) by our general test suites (perhaps)
20:55:04 <AWizzArd> dolio: yes, good point, we can get a reminder here. Still we could call it too early.
20:55:10 <dminuoso> kuribas: it doesnt have to tell you where it comes from
20:55:21 <dolio> How are you going to call it without the data?
20:55:22 <dminuoso> kuribas: What you're asking for is type error slices, something GHC doesnt have
20:55:24 <dminuoso> but should have
20:55:37 <AWizzArd> dolio: with bad data.
20:55:54 <AWizzArd> dolio: literals in the code
20:56:11 <dolio> I don't believe this is a serious, common problem.
20:56:20 ec joins (~ec@gateway/tor-sasl/ec)
20:56:40 <AWizzArd> dolio: it will be rare, yet adding a %1 seems not to be a true time sink.
20:56:49 <dolio> I don't believe that claim, either.
20:56:52 <dminuoso> AWizzArd: Look, I have experimented plenty with encoding invariants in the type system. At the end I started to learn, that what I did was add unnecessary safety to guard against non-realistic scenarios. And more than that, they tend to be scenarios you already know, think of. Bugs tend to be things you *dont* think about.
20:57:07 <dminuoso> That last bit is something Ive had to learn over and over again over many years
20:57:33 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:57:57 <AWizzArd> dminuoso: I guess in two years we’ll see if the LT will be used or not and if they turn out to be beneficial or not. I am very optimistic.
20:58:32 <dminuoso> And often a simple architectural change can accomplish the same thing. You want to ensure data is used? Abstract, write a simple `a = f =<< x`. There it's incredibly trivial to validate that `a` is going to use `x` only once, and feed it precisely into `f`.
20:58:33 <AWizzArd> dminuoso: put a reminder into Todoist and let's chat about this in 2 years again. Maybe I’ll have changed my view by then :)
20:59:44 <boxscape_> reading a commit message in linear-base and wow, what a sentence "Any multiplicity involving multiplicity multiplication will hit the limitations of the type checker currently"
21:00:23 <boxscape_> (I read it in https://github.com/tweag/linear-base/commit/f3aff2f9242d05295294a7999a21bcf183bc5ea9 )
21:01:31 <dminuoso> AWizzArd: To me what would be convincing is this: We have a client XYZ and they tasked us to write some software. Because this software handles financial transactions, we want guarantees that the state machine driving this software is correct. So this is the place where I might look at formal methods of any kind.
21:02:07 <dminuoso> And that's when you start comparing costs of various formal methods, weighing them against risks of bugs/violations.
21:02:48 <AWizzArd> dminuoso: would be an interesting case. I see besides those more mundane examples a potential use in tracking stateful backend services, which give us worse than C manual memory management: distributed memory management.
21:02:49 <boxscape_> It does seem neat that you could get some performance benefits from using linear types (since it allows you to mutate instead of copying), though I'm not aware of any GHC-related work on that
21:02:53 <maerwald> formal methods ultimately verify your binaries :p
21:02:59 <dminuoso> boxscape_: You mean like Clean?
21:03:04 <boxscape_> probably
21:03:07 <dolio> dminuoso: You're wrong on one account. I still make plenty of mistakes that I know to look for. :þ
21:03:21 <dminuoso> dolio: heh! :)
21:03:21 <AWizzArd> boxscape_: so far I think LT make the code run slower, unfortunately ;)
21:03:22 × kuribas quits (~user@ptr-25vy0i9fcjh581tavd9.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
21:03:41 <AWizzArd> boxscape_: but maybe in 2-3 years it can take load away from the GC. Sounds at least plausible.
21:03:49 geekosaur remains unconvinced by LT
21:03:53 <boxscape_> AWizzArd compilation, but I imagine it doesn't make code slower at runtime, since the multiplicities are probably erased?
21:04:02 × juri_ quits (~juri@178.63.35.222) (Ping timeout: 265 seconds)
21:04:10 <boxscape_> or are there some optimizations it prevents?
21:04:15 <dminuoso> boxscape_: The linear types GHC introduces is separate from what Clean does.
21:04:43 <AWizzArd> boxscape_: I don't know too much about the implementation details, but their new IO variant possibly needs to do some runtime checking. Not sure.
21:04:55 <geekosaur> also taking load away form the GC apparently only applies to a very limited set of vector operations, not to most things that can be garbage collected
21:04:57 <boxscape_> dminuoso I vaguely remember reading this article which talks about Haskell's linear types, but also mentions "This is still future work" https://www.tweag.io/blog/2017-03-13-linear-types/
21:05:12 <boxscape_> (and it's about performance)
21:05:25 <dolio> Yeah, deallocating things as soon as they're not live is not even an optimization all the time.
21:05:34 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
21:05:38 <AWizzArd> geekosaur: would that require a borrow system as in Rust?
21:05:46 <dminuoso> boxscape_: If I remember correctly, they were on about *manual* memory management.
21:05:54 alzgh joins (~alzgh@user/alzgh)
21:06:03 <dminuoso> boxscape_: What Clean does, is introduce these mutations in the graph reduction transparently
21:06:08 <boxscape_> hm okay
21:06:16 <AWizzArd> geekosaur: the linear type only says that a value must be consumed exactly once, but it could still be shared, so we still need a GC?
21:06:53 <geekosaur> right, lnear types do not change how a value is shared because it may only be linearly used in a few places
21:07:00 <dminuoso> boxscape_: So this is the beauty of Clean. You just write code as usual, and if the compiler can prove something is no longer referenceable beyond, then it will introduce mutation operations instead.
21:07:11 <boxscape_> I see, that is nice
21:07:15 lavaman joins (~lavaman@98.38.249.169)
21:07:19 <dolio> Not sure about that. Is it possible for a linear value to end up in two closures, but for there to be a proof that only one of them actually uses it?
21:07:21 <geekosaur> (linearity would have to be part of the type and not the fuunction arrow otherwise)
21:07:59 <AWizzArd> geekosaur: what I had in mind was: if it is known that a value is not shared and we know it is used exactly once then the compiler could add our malloc/free calls and this value stays completly out of gc.
21:08:09 <dminuoso> There's some really cool optimizations out there. A personal favourite is speculative optimizations in HotSpot
21:08:16 <dminuoso> Especially how they are implemented
21:08:26 <geekosaur> ghc really doesn't know hhow to deal with that currently, AWizzArd
21:08:53 <geekosaur> except in the case where memory is directly allocated with malloc or alloca
21:08:59 <dminuoso> AWizzArd: Yes, and you couldnt do that with linear types in Haskell. Clean does this by the way.
21:09:05 <awpr> malloc and free are probably slower than allocating a GC'd value and immediately letting it become garbage
21:09:10 <geekosaur> but then you're subscribing to entirely manual memory management
21:09:32 <awpr> long-lived values are where the cost comes from in Haskell's GC
21:09:38 acidjnk_new joins (~acidjnk@p200300d0c726702918431f3aede9e057.dip0.t-ipconnect.de)
21:10:19 <dminuoso> Arguably, short-lived objects can be cheaper in our GC.
21:10:22 <geekosaur> right, values allocated and immediately freed never leave the nursery and deallocation is basically a pointer adjustment. if's when they get moved to a igher level of the heap that things become expensive
21:10:26 <dminuoso> Since they dont need to be freed
21:10:42 <awpr> right, that's what I was trying to say
21:11:45 <dsamperi> Linear types sound very interesting and related to crypto (can only spend once). Lambda Man (Wadler) suggests this is studied at IOHK.
21:11:53 <dminuoso> And even long lived is not that big of a problem if you have a generational garbage collector
21:11:59 <dminuoso> So you can dampen the impact of it
21:12:23 <maerwald> dsamperi: yet, IOHK doesn't employ formal methods on *binaries* (the things that actually run the blockchain) :p
21:13:25 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:13:42 lavaman joins (~lavaman@98.38.249.169)
21:13:48 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:14:07 lavaman joins (~lavaman@98.38.249.169)
21:14:14 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:14:30 lavaman joins (~lavaman@98.38.249.169)
21:14:37 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:14:51 lavaman joins (~lavaman@98.38.249.169)
21:14:59 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:15:15 lavaman joins (~lavaman@98.38.249.169)
21:15:22 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
21:15:59 <AWizzArd> geekosaur: is this so far mostly a suspicion that LT could add complexity that is not worth the benefits? Or are there already concrete examples where this can be demonstrated?
21:17:01 <maerwald> AWizzArd: all of the existing type level hackery in current haskell? :D
21:17:21 <geekosaur> currently LT slows things down noticeably even when it's not in use (because it might be used) while adding relatively little (because nothing really tries to take advantage of it)
21:18:21 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
21:18:23 <boxscape_> % data R a where R :: a %1 -> R a deriving Show
21:18:23 <yahb> boxscape_:
21:18:25 <boxscape_> % :t R
21:18:25 <yahb> boxscape_: a -> R a
21:18:30 <boxscape_> do linearity annotations get ignored in constructors?
21:18:38 <monochrom> I think we already know that the LinearType extension specifically is not delivering on any of the theoretical safety promises right now, and unlikely to within the next 5 years, hell probably never will.
21:18:59 <monochrom> This is due to "what if you're in IO and you throw an IO exception".
21:19:21 <maerwald> hide under the table
21:20:10 <monochrom> So my bet is that the only hopeful bet is on LinearType opening opportunities for code optimization. And note that even this one is in the future.
21:21:03 <monochrom> I mean, I am not even talking about using unsafePerformIO to violate purity, or unsafeCoerce to lie about types. I'm just throwing an honest-to-God-legal exception.
21:21:56 <monochrom> If no one has even written a GHC proposal to fix this, then all your "linear types express an invariant" talks are vapourware.
21:21:58 <tomjaguarpaw> geekosaur: Why does "might be used" mean it has to slow things down?
21:22:16 <awpr> hmm, that's a tough issue. seems to me a monad that can throw exceptions is just not a linear monad (i.e. does not have a multiplicity of 1 on its >>=)
21:22:26 safinaskar joins (~safinaska@109-252-90-153.nat.spd-mgts.ru)
21:22:26 <awpr> which... is a bit of an issue for IO
21:22:34 <safinaskar> > 2 + 2
21:22:35 <lambdabot> 4
21:23:34 <dsamperi> > sqrt 2
21:23:35 <lambdabot> 1.4142135623730951
21:23:37 <geekosaur> tomjaguarpaw, the way ghc deals with extensions, they're actually always active. so you have all this machinery that is being invoked to at least some extent, to no point. if only as "is this active?" checks in the hot path (function application)
21:23:48 <safinaskar> jackdk: thanks for answer! (on curl)
21:24:36 <geekosaur> and they *are* active during parsing, they just throw an exception if actually used. which may slow parsing
21:24:53 × zincy quits (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c) (Remote host closed the connection)
21:24:58 × fendor_ quits (~fendor@178.115.63.67.wireless.dyn.drei.com) (Remote host closed the connection)
21:25:26 <boxscape_> this should be quantifiable, ghc has performance tests in CI IIRC
21:26:12 <geekosaur> right, and last I heard (not that I have heard recently, nor can I test this myself on underpowered hardware that can't even build ghc) the slowdown is noticeable
21:26:58 <geekosaur> alos quantifying it would require finding and removing the linear types patches without disturbing anything else, but they're quite invasive
21:27:43 <boxscape_> you think looking at the LT merge request isn't enough?
21:28:14 <geekosaur> it might be
21:28:26 <geekosaur> hm, presumably there are perf notes on the commit
21:28:39 <geekosaur> wonder if it can be brougt up on the perf dashboard
21:29:12 ec joins (~ec@gateway/tor-sasl/ec)
21:29:16 <geekosaur> sadly I don't even remember the url of the perf dashboard
21:29:19 <boxscape_> https://gitlab.haskell.org/ghc/ghc/-/merge_requests/852/pipelines this is the CI pipelines in the MR, but I'm not well versed enough to have found if the data we're interested in exists so far
21:32:09 safinaskar parts (~safinaska@109-252-90-153.nat.spd-mgts.ru) ()
21:32:22 <boxscape_> geekosaur ah, there's a comment on the MR. "~1% more allocation; ~5% slowdown (though, with time measurement, a large pinch of salt should be taken. I've sometimes had better results, @AndreasK also reported worse times to us)"
21:32:34 <boxscape_> ( https://gitlab.haskell.org/ghc/ghc/-/merge_requests/852#note_280407 )
21:32:35 safinaskar joins (~safinaska@109-252-90-153.nat.spd-mgts.ru)
21:33:02 safinaskar parts (~safinaska@109-252-90-153.nat.spd-mgts.ru) ()
21:34:07 <boxscape_> "Our estimate, based on old benchmarks, is that overall the time slowdown should be half that of [this test], but we haven't been able to confirm at all."
21:34:27 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
21:38:21 zincy joins (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c)
21:42:01 × dsamperi quits (~dsamperi@2603-7000-3b42-5400-ad06-78d6-67f9-46d9.res6.spectrum.com) (Quit: Konversation terminated!)
21:42:51 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.3)
21:43:35 × chomwitt quits (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Remote host closed the connection)
21:45:54 lavaman joins (~lavaman@98.38.249.169)
21:47:33 × pop3 quits (~pop3@user/pop3) (Remote host closed the connection)
21:48:10 pop3 joins (~pop3@user/pop3)
21:48:15 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
21:50:57 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
21:53:49 ec joins (~ec@gateway/tor-sasl/ec)
21:54:00 × desantra quits (~skykanin@user/skykanin) (Quit: WeeChat 3.3)
22:02:00 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
22:04:05 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
22:05:13 cosimone` joins (~user@93-34-133-207.ip49.fastwebnet.it)
22:07:32 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
22:08:04 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
22:12:22 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:14:48 favonia joins (~favonia@user/favonia)
22:15:12 × michalz quits (~michalz@185.246.204.109) (Remote host closed the connection)
22:15:26 × doyougnu quits (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 260 seconds)
22:16:59 × zincy quits (~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c) (Remote host closed the connection)
22:18:09 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
22:19:22 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:20:32 lavaman joins (~lavaman@98.38.249.169)
22:20:36 Codaraxis joins (~Codaraxis@user/codaraxis)
22:22:50 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:25:30 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
22:28:29 ec joins (~ec@gateway/tor-sasl/ec)
22:29:26 × mei quits (~mei@user/mei) (Ping timeout: 260 seconds)
22:34:00 soft-warm joins (~soft-warm@ip70-179-31-26.sd.sd.cox.net)
22:35:54 × soft-warm quits (~soft-warm@ip70-179-31-26.sd.sd.cox.net) (Client Quit)
22:43:34 <mjrosenb> Is there a shorthand for do {expr; return Nothing}
22:43:54 dumptruckman joins (~dumptruck@45-79-175-133.ip.linodeusercontent.com)
22:44:03 <dumptruckman> Yay, I found it
22:44:08 <monochrom> expr *> return Nothing
22:44:15 <mjrosenb> like, I could clearly use >>=, and a lambda (or const, I guess) but those seem ugly
22:44:19 <mjrosenb> monochrom: danke.
22:44:42 <mjrosenb> Is that in Control.Monad, or someplace fancier?
22:44:44 <hpc> expr *> pure Nothing
22:44:50 <monochrom> Control.Applicative
22:45:05 <monochrom> You can also use >>, it's already in Prelude
22:45:13 × acidjnk_new quits (~acidjnk@p200300d0c726702918431f3aede9e057.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
22:45:15 <Axman6> expr $> Nothing
22:45:25 <Axman6> @hoogle ($>)
22:45:26 <lambdabot> Data.Functor ($>) :: Functor f => f a -> b -> f b
22:45:26 <lambdabot> Data.Functor.Compat ($>) :: Functor f => f a -> b -> f b
22:45:26 <lambdabot> Data.Functor.Apply ($>) :: Functor f => f a -> b -> f b
22:45:37 <Axman6> there's also...
22:45:43 <Axman6> @hoogle (<$)
22:45:43 <lambdabot> Prelude (<$) :: Functor f => a -> f b -> f a
22:45:43 <lambdabot> Control.Monad (<$) :: Functor f => a -> f b -> f a
22:45:43 <lambdabot> Control.Applicative (<$) :: Functor f => a -> f b -> f a
22:45:58 <Axman6> > "Hello!" <$ Just True
22:45:59 <lambdabot> Just "Hello!"
22:46:02 <[exa]> fmap to the left!
22:46:05 <[exa]> fmap to the right!
22:46:06 rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
22:46:07 <[exa]> party!
22:46:13 <Axman6> \o\
22:46:29 <Axman6> \/o/
22:46:45 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
22:46:51 <[exa]> <$ <* $> *> bottom top!
22:46:51 <Axman6> glguy: how do I escape / at the beginning of a line D:
22:47:03 <hpc> / /like this
22:47:12 <Axman6> I tried that
22:47:14 <[exa]> Axman6: I just put a space there
22:47:17 <[exa]> no one notices
22:47:20 <hpc> / /o/
22:47:21 <dsal> @pl . undo do { expr ; return Nothing }
22:47:21 <lambdabot> (line 1, column 1):
22:47:21 <lambdabot> unexpected "."
22:47:21 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
22:47:23 <hpc> /o/
22:47:24 <mjrosenb> \say / with say
22:47:32 <Axman6> /o/
22:47:39 <monochrom> I think lambdabot's . is @
22:47:41 <mjrosenb> / with /say?
22:47:42 <Axman6> /say ftw
22:47:59 <mjrosenb> wrong slash. I may have written too much tex recently
22:48:10 <dsal> I thought . worked...
22:48:35 × Cajun quits (~Cajun@user/cajun) (Quit: Client closed)
22:48:36 <geekosaur> @. pl undo do { expr ; return Nothing }
22:48:38 <Axman6> @. undo pl f g h x = (f x) (g x)
22:48:38 <lambdabot> expr >> return Nothing
22:48:40 <lambdabot> f = fix ((const .) . ap)
22:48:52 <Axman6> thanks for the better example
22:48:57 <dsal> pl doesn't do anything fancy anyway.
22:49:19 <hpc> pl is anti-fancy - if you give it a poorly typed expression it still comes up with an answer
22:49:23 <geekosaur> and doesn't know the Applicative-basee combinators
22:49:36 <hpc> @pl \x -> x x
22:49:36 <lambdabot> join id
22:49:54 <[exa]> -.-
22:50:06 <boxscape_> @pl (\x -> x x) (\x -> x x)
22:50:09 <lambdabot> ap id id (ap id id)
22:50:09 <lambdabot> optimization suspended, use @pl-resume to continue.
22:50:20 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:50:24 <hpc> @pl-resume
22:50:29 <boxscape_> @pl
22:50:30 <lambdabot> ap id id (ap id id)
22:50:30 <lambdabot> optimization suspended, use @pl-resume to continue.
22:50:30 <lambdabot> (line 1, column 1):
22:50:30 <lambdabot> unexpected end of input
22:50:30 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
22:50:34 <boxscape_> whoops
22:50:39 <hpc> hahaha
22:50:49 <hpc> it can't figure out that's the shortest representation
22:50:55 <hpc> someone needs to teach it SK
22:50:55 <monochrom> Ugh that's a very deep infinite loop :)
22:50:58 <Axman6> keep optimising, lambdabot!
22:51:09 <Axman6> nah it'll figure it out eventually
22:51:32 <hpc> i was really hoping for it to optimize to something longer
22:51:41 ec joins (~ec@gateway/tor-sasl/ec)
22:51:43 <boxscape_> @unpl ap id id (ap id id)
22:51:44 <lambdabot> (\ b0 -> return (b0 b0) b0) (\ b0 -> return (b0 b0) b0)
22:52:08 Cajun joins (~Cajun@user/cajun)
22:52:28 <monochrom> I'm surprised this one doesn't say "pessimization suspended" :)
22:52:35 <boxscape_> haha
22:52:39 × burnsidesLlama quits (~burnsides@dhcp168-012.wadham.ox.ac.uk) (Remote host closed the connection)
22:53:12 burnsidesLlama joins (~burnsides@dhcp168-012.wadham.ox.ac.uk)
22:53:22 <hpc> there's always more to pessimize
22:53:32 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
22:53:47 <boxscape_> applying @pl and @unpl repeatedly seems to make this ever longer, so that's nice
22:54:06 <hpc> on april 1, @pl should instead translate its input into perl
22:54:15 <monochrom> haha
22:54:21 <dsal> See if anyone notices.
22:54:28 <monochrom> hahaha
22:54:32 <hpc> bahahaha
22:54:35 thblt joins (~thblt@user/thblt)
22:54:38 <Axman6> @. pl unpl ap id id (ap id id)
22:54:41 <lambdabot> ap (return . ap id id) id (ap (return . ap id id) id)
22:54:41 <lambdabot> optimization suspended, use @pl-resume to continue.
22:54:53 <Axman6> @. pl unpl ap (return . ap id id) id (ap (return . ap id id) id)
22:54:56 <lambdabot> ap (return . ap (return . ap (return . ap id id) id) id) id (ap (return . ap (return . ap (return . ap id id) id) id) id)
22:54:56 <lambdabot> optimization suspended, use @pl-resume to continue.
22:55:00 <Axman6> :o
22:55:04 <hpc> that's amazing
22:55:07 <Axman6> need a @iterate
22:55:15 <Axman6> Dare I do it again?
22:55:35 <Axman6> @.pl unpl ap (return . ap (return . ap (return . ap id id) id) id) id (ap (return . ap (return . ap (return . ap id id) id) id) id) -- I dare
22:55:35 <lambdabot> unpl ap (return . join id) id (join id)
22:55:42 <Axman6> @. pl unpl ap (return . ap (return . ap (return . ap id id) id) id) id (ap (return . ap (return . ap (return . ap id id) id) id) id) -- I dare
22:55:45 <lambdabot> ap (return . ap (return . ap (return . ap (return . ap (return . ap (return . ap (return . ap id id) id) id) id) id) id) id) id (ap (return . ap (return . ap (return . ap (return . ap (return . ap (
22:55:45 <lambdabot> return . ap (return . ap id id) id) id) id) id) id) id) id)
22:55:45 <lambdabot> optimization suspended, use @pl-resume to continue.
22:55:52 <Axman6> oh my
22:56:08 <Axman6> you know you're having fun when lambdabot splits responses over multiple lines
22:56:20 <hpc> you're not having real fun until it tells you to @more
22:56:46 <hpc> @pl \a s d f -> a s f d s f a s d f a f a s d f d s a
22:56:49 <lambdabot> ap (flip . (flip .) . ((flip .) .) . flip ap id . (flip .) . ((flip .) .) . flip flip id . (ap .) . ((flip .) .) . flip flip id . (flip .) . ((ap .) .) . flip flip id . (ap .) . ((flip .) .) . flip
22:56:49 <lambdabot> ap id . (flip .) . ((flip .) .) . ap (flip . (flip .) . ((flip .) .) . flip flip id . (flip .) . ((ap .) .) . ap (flip . (flip .) . ((flip .) .) . flip flip id . (flip .) . ((ap .) .) . flip flip id
22:56:49 <lambdabot> . (ap .) . ((flip .) .) . flip ap id . (flip .) . ((flip .) .) . ap (flip . (flip .) . ((flip .) .) . flip flip id . (flip .) . ((ap .) .) . flip ap id . (flip .) . ((flip .) .) . (flip .)) id) id)
22:56:49 <lambdabot> id) id
22:56:49 <lambdabot> optimization suspended, use @pl-resume to continue.
22:57:11 <Axman6> flip!
22:57:15 <[exa]> now that's a program!
22:57:17 <hpc> huh, that wasn't supposed to be so spammy
22:57:18 <boxscape_> I
22:57:25 <boxscape_> accidentally pressed my enter key
22:57:50 × burnsidesLlama quits (~burnsides@dhcp168-012.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
22:58:01 <hpc> i wonder what the cutoff actually is now for @more
22:58:44 <boxscape_> > let f = _ in f
22:58:47 <lambdabot> error:
22:58:48 <lambdabot> • Found hole: _ :: t1
22:58:48 <lambdabot> Where: ‘t1’ is a rigid type variable bound by
22:58:54 <boxscape_> oh
22:58:59 <boxscape_> it says @more for this in a private message
22:59:19 <Axman6> :t let f x=(x,x,x,x) in f.f.f.f.f
22:59:20 <lambdabot> d -> (((((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (
22:59:20 <lambdabot> d, d, d, d), (d, d, d, d), (d, d, d, d))), (((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d,
22:59:20 <lambdabot> d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d))), (((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d,
22:59:20 <lambdabot> d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d))), (((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d)
22:59:20 <lambdabot> , (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)), ((d, d, d, d), (d, d, d, d), (d, d, d, d), (d, d, d, d)))), ((((d, d, d, d), (d, d, d, d), (d, d, d, d), (d,
22:59:22 <lambdabot> [14 @more lines]
22:59:29 <boxscape_> I use that function everyday!
22:59:34 <Axman6> 14! jesus, sorry
23:00:15 <boxscape_> definitely seems like the cutoff was increased though
23:00:16 Axman6 will stop abusing lambdabot
23:00:23 <boxscape_> @botsnack
23:00:23 <lambdabot> :)
23:02:40 <Cajun> i wonder if it would be possible to force the tuple'd `d` type variables in that monster to be unique so it can give the entire alphabet. i dont know enough about type level stuff to tell if its possible off the bat :P
23:04:08 <monochrom> GHC may prefer to enumerate d0, d1, d2... instead of running through the alphabet.
23:06:13 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
23:06:50 <mjrosenb> does anything seem off about {value ^? _Ctor . to (==OtherCtor)}
23:10:05 <hpc> Cajun: some rank-2 stuff can probably force it
23:10:22 <hpc> with reasonably short code
23:13:41 <Cajun> i figured it would require some foralls but i dont know how to use them to force types to be unique. will require some tinkering
23:14:10 <mjrosenb> well, in that code, they're all explicitly the same. You can set it up such that they're naturally different
23:14:41 mjrosenb attempts to remember how
23:14:46 <hpc> :t \x -> (runST x, runST x)
23:14:47 <lambdabot> error:
23:14:47 <lambdabot> • Couldn't match expected type ‘ST s a’ with actual type ‘p’
23:14:47 <lambdabot> because type variable ‘s’ would escape its scope
23:15:42 <glguy> Axman6: Use /say
23:16:33 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
23:17:00 <monochrom> Normally "\x" is monomorphizing. You will need some handwritten type annotations.
23:19:28 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
23:19:46 <Cajun> https://paste.tomsmeding.com/jcf3L2oX sadly this didnt work either, ghc is too smart
23:19:49 <hpc> :t let f = \x -> (Const x, Const x) in f.f.f.f
23:19:50 <lambdabot> forall k1 k2 k3 k4 k5 k6 k7 k8 a (b1 :: k1) (b2 :: k2) (b3 :: k3) (b4 :: k4) (b5 :: k5) (b6 :: k6) (b7 :: k7) (b8 :: k8). a -> (Const (Const (Const (Const a b1, Const a b2) b3, Const (Const a b1,
23:19:50 <lambdabot> Const a b2) b4) b5, Const (Const (Const a b1, Const a b2) b3, Const (Const a b1, Const a b2) b4) b6) b7, Const (Const (Const (Const a b1, Const a b2) b3, Const (Const a b1, Const a b2) b4) b5, Const
23:19:50 <lambdabot> (Const (Const a b1, Const a b2) b3, Const (Const a b1, Const a b2) b4) b6) b8)
23:20:02 <hpc> there we go
23:20:32 <hpc> oh man, it even does the kind polymorphism
23:21:55 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
23:22:47 <Cajun> wouldnt `Const x` be only partially applied?
23:23:17 <hpc> :t Const
23:23:18 <lambdabot> forall k a (b :: k). a -> Const a b
23:23:34 <Cajun> ah well that makes sense
23:23:53 <Cajun> the type has the `b` but the term doesnt. fun
23:24:15 <hpc> yep
23:24:28 <hpc> or another way to look at it
23:24:36 <hpc> that data constructor makes Const a b = a
23:24:37 <hpc> :k Const
23:24:38 <lambdabot> * -> k -> *
23:24:41 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
23:24:45 <hpc> and that's the type parameters
23:24:50 <hpc> so you sort of get Const a b = a
23:25:12 <hpc> b is ignored and can be anything
23:25:37 <hpc> and a is constrained to Type by being involved in the data constructor
23:26:11 <Cajun> in the source for Data.Functor.Const, it doesnt explicitly state the kind polymorphism. can GHC just assume polymorphic kinds instead of Type?
23:26:24 <boxscape_> with -XPolyKinds it does
23:26:32 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:27:47 × morphism quits (~ret@static.247.176.55.162.clients.your-server.de) (Ping timeout: 268 seconds)
23:29:13 morphism joins (~ret@86.57.6.225)
23:33:44 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:33:44 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
23:33:44 wroathe joins (~wroathe@user/wroathe)
23:43:19 <mjrosenb> I'm guessing there isn't a built in function equivalent to Data.Set.fromList . Data.Map.elems
23:44:48 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
23:45:06 <Axman6> type Set a = Map a (); then it's just void :P
23:45:12 <sclv> no reason there would be. there's keysSet for the keys, fwiw
23:45:25 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
23:47:21 × aegon quits (~mike@174.127.249.180) (Quit: leaving)
23:48:09 <mjrosenb> the best argument that I can think of for why it would exist is that the values of a map have no inherent order, so why return them in a structure that has an inherent order.
23:48:33 <sclv> well they can have multiplicity
23:48:42 <sclv> which this loses. so arguably you'd want a multiset
23:48:45 <mjrosenb> then again, the inherent order of the keys of a map is why keysSet exists, so *shrug*
23:48:50 <Axman6> :t Data.Set.fromList . Data.Map.elems
23:48:50 <mjrosenb> agreed.
23:48:51 <lambdabot> Ord a => M.Map k a -> S.Set a
23:49:05 × danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 260 seconds)
23:49:12 <Axman6> oh my bad, thought it was the keys, not the values, yeah that's a bit of an odd operation
23:49:20 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
23:49:32 <boxscape_> they kind of have an inherent order in the sense that the keys require an Ord constraint
23:49:40 alzgh joins (~alzgh@user/alzgh)
23:49:56 <boxscape_> but that argument wouldn't work for HashMap
23:49:59 <boxscape_> which also returns a list
23:50:31 × pop3 quits (~pop3@user/pop3) (Remote host closed the connection)
23:51:07 pop3 joins (~pop3@user/pop3)
23:51:10 <boxscape_> just found about recover-rtti and it's "anythingToString :: a -> String" function, and I'm amazed that all this information is available on the heap
23:51:18 <monochrom> I think all of you forgot that library function existence is a result of the tug war between user demand and author mood, not a result of "rational" arguments.
23:52:00 <shapr> Any bad points to list comprehensions?
23:52:10 <shapr> like, for usability or anything else?
23:52:14 <geekosaur> not to standard list comprehensions
23:52:33 <geekosaur> TransformListComps is disliked by some, also MonadComprehensions
23:52:59 <shapr> what's the bad side(s) of MonadComprehensions?
23:53:13 <monochrom> Indeed even "rational" "arguments" are just cosmetics for "I have a use case".
23:53:14 <shapr> geekosaur: do you happen to remember any of the reasons for dislike?
23:53:30 <geekosaur> all list comprehensions are rewritten as monad comprehensions instead of a more optimal form using filter and map
23:53:33 <shapr> I'm just trying to think about pros and cons of various features
23:54:17 <geekosaur> that is they're rewritten to operations in the list monad
23:55:10 <geekosaur> TransformListCompl is barely used and I'm not sure anyone actually understands it except monochrom, who has a batty example lying around somewhere
23:56:31 × Cajun quits (~Cajun@user/cajun) (Quit: Client closed)
23:57:47 Cajun joins (~Cajun@user/cajun)
23:59:08 <boxscape_> at some point it was suggested to remove it but some people said they use it

All times are in UTC on 2021-11-03.