2022/03/23

2022-03-23 00:00:28 +0100 <abastro[m]> Hm I guess I'd like symbolic calculator for haskell
2022-03-23 00:00:38 +0100 <abastro[m]> Tho idk what would be normal form
2022-03-23 00:00:49 +0100 <monochrom> My impression is that people who self-identify as "bad at math" already struggle with the full logical conclusions of equality. Though, I have no data.
2022-03-23 00:01:00 +0100 <[itchyjunk]> So close to being able to solve this : https://i.imgur.com/1K4VUux.png
2022-03-23 00:01:07 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 00:01:08 +0100 <[itchyjunk]> I can count how often each digit appears now.
2022-03-23 00:01:08 +0100 <monochrom> The following next hurdle though, I saw it in students first-hand.
2022-03-23 00:01:14 +0100 <[itchyjunk]> https://bpa.st/NA6A
2022-03-23 00:01:35 +0100 <monochrom> Define f(x)=x+3, g(x)=x*4. People struggle with f(g(x)).
2022-03-23 00:02:01 +0100 <abastro[m]> Yea it is hard
2022-03-23 00:02:05 +0100 <monochrom> Here is why. Their mental model is like BASIC. Have a global variable x, same x for both f and g.
2022-03-23 00:02:19 +0100 <abastro[m]> Granted, I wonder how ppl would even program without the ability
2022-03-23 00:02:23 +0100 <abastro[m]> Oh wait
2022-03-23 00:02:32 +0100 <abastro[m]> Same global variable,
2022-03-23 00:02:43 +0100 <monochrom> To find f(1), set global x to 1. To find g(2), set global x to 2. Now f(g(x)) is a paradox.
2022-03-23 00:02:58 +0100 <abastro[m]> Think that could be fixed by using different symbol.. maybe not? :<
2022-03-23 00:03:19 +0100 <abastro[m]> So ppl's minds do operate in imperative way :<
2022-03-23 00:03:22 +0100 <boxscape_> I kind of wish early mathematicians had written (x)f instead
2022-03-23 00:04:24 +0100 <dolio> Variables are often poorly explained in mathematics, so it's not entirely the students' fault.
2022-03-23 00:04:38 +0100 <abastro[m]> Then we won't have haskell notation
2022-03-23 00:04:56 +0100 <abastro[m]> Of having `f x y z` with currying
2022-03-23 00:04:58 +0100vorpuni(~pvorp@2001:861:3881:c690:3875:d51d:97cc:8362) (Remote host closed the connection)
2022-03-23 00:05:22 +0100 <monochrom> You can have "z y x f" with currying :)
2022-03-23 00:05:39 +0100 <abastro[m]> Ewww
2022-03-23 00:05:58 +0100 <boxscape_> kind of a RPN vibe
2022-03-23 00:06:16 +0100 <abastro[m]> (((z y) x) f)
2022-03-23 00:06:26 +0100 <abastro[m]> :^)
2022-03-23 00:06:27 +0100 <geekosaur> forth
2022-03-23 00:06:34 +0100vorpuni(~pvorp@2001:861:3881:c690:c18a:999a:aef5:52af)
2022-03-23 00:07:38 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 00:07:48 +0100 <abastro[m]> Perhaps haskell is too hard for ppl..
2022-03-23 00:08:09 +0100 <geekosaur> <cynic> thinking is too hard for people
2022-03-23 00:08:12 +0100 <abastro[m]> Tho I wonder why ppl do not find programming hard
2022-03-23 00:08:46 +0100 <abastro[m]> Indeed, thinking is too hard for ppl. You can see it everywhere nowadays :facepalm:
2022-03-23 00:08:55 +0100 <monochrom> You may have a selection bias. People who survive 1st-year CS don't find programming hard.
2022-03-23 00:09:00 +0100 <dolio> Because the problem isn't actually that Haskell is too hard for people.
2022-03-23 00:09:07 +0100 <[itchyjunk]> I find programming hard.
2022-03-23 00:09:08 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-03-23 00:10:08 +0100 <monochrom> I think I saw first-hand when a friend taught a "computer stuff for non-CS-majors" course and taught a little bit of python scripting. The students struggled with even for-loops.
2022-03-23 00:10:20 +0100 <monochrom> And to think it was python, not even haskell.
2022-03-23 00:10:43 +0100 <boxscape_> can't struggle with for loops if you language doesn't have for loops
2022-03-23 00:10:46 +0100 <hpc> i mean... i struggle with loops in python
2022-03-23 00:10:50 +0100jakalx(~jakalx@base.jakalx.net)
2022-03-23 00:10:53 +0100 <alt-romes> boxscape_: lol
2022-03-23 00:10:55 +0100 <monochrom> Haha OK.
2022-03-23 00:11:07 +0100 <monochrom> But they struggled with almost everything in python.
2022-03-23 00:11:24 +0100 <monochrom> Supposedly the most newbie-friendly language.
2022-03-23 00:11:29 +0100 <alt-romes> boxscape_: for [1..n] (do stuff)
2022-03-23 00:11:36 +0100 <boxscape_> cheating
2022-03-23 00:11:41 +0100 <alt-romes> hahaha ;)
2022-03-23 00:11:41 +0100 <monochrom> Probably they struggled with merely variables, too.
2022-03-23 00:12:20 +0100hpc. o O ( fizzbuzz is a legitimate job interview filtering tool )
2022-03-23 00:12:23 +0100 <alt-romes> monochrom: I've seen it too in those sort of non-CS-majors
2022-03-23 00:12:26 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 252 seconds)
2022-03-23 00:12:36 +0100 <abastro[m]> Oh I see, perhaps programming is hard but ppl do not realize
2022-03-23 00:12:43 +0100 <alt-romes> fizzbuzz = fizzbuzz "See, it compiles"
2022-03-23 00:13:00 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 252 seconds)
2022-03-23 00:13:26 +0100alt-romes(~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
2022-03-23 00:13:33 +0100 <abastro[m]> And just think after learning imperative programming, that they know everything they need
2022-03-23 00:13:40 +0100 <abastro[m]> And refuse to learn further
2022-03-23 00:13:44 +0100 <hpc> there's a mindset of logic and precision that's required for programming (and a lot of other sciencey stuff), that's likely what's hard
2022-03-23 00:13:50 +0100 <abastro[m]> Ya that is perhaps what is happening
2022-03-23 00:14:23 +0100 <abastro[m]> And ppl somehow say python is easier to learn
2022-03-23 00:14:25 +0100 <hpc> i want to call it "rationality" but that's a much broader and deeper term
2022-03-23 00:14:32 +0100 <abastro[m]> ..like, it just has lots of resources
2022-03-23 00:14:43 +0100 <hpc> and no matter what language you use, even if it's excel formulas
2022-03-23 00:14:48 +0100 <hpc> you need at least a little bit of that mindset
2022-03-23 00:15:27 +0100 <boxscape_> helps even if you use natural language
2022-03-23 00:16:06 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-03-23 00:16:06 +0100 <hpc> yeah
2022-03-23 00:16:16 +0100 <hpc> almost to the point that scientific literacy is the new book-literacy
2022-03-23 00:16:17 +0100 <abastro[m]> Doesn't help with daily job tho
2022-03-23 00:16:26 +0100 <hpc> (complete with percentage of population that's skilled at it)
2022-03-23 00:16:35 +0100 <abastro[m]> Book literacy?
2022-03-23 00:16:36 +0100 <abastro[m]> Oh
2022-03-23 00:16:38 +0100 <abastro[m]> I see.
2022-03-23 00:16:38 +0100 <boxscape_> hm yeah
2022-03-23 00:17:02 +0100 <abastro[m]> And we see ppl revolting against authority of scientific literacy
2022-03-23 00:17:23 +0100 <hpc> there's a lot of logical steps to follow in order to go from "i need to do my taxes" to "i should install an adblocker and google carefully so i don't empty my bank account"
2022-03-23 00:17:28 +0100 <abastro[m]> Then there is my theory of flat earthers origin, one of the revolts
2022-03-23 00:17:52 +0100 <hpc> much like the logical steps from "i am hungry" to "i should read this year's almanac so i don't deplete the nitrogen in my fields"
2022-03-23 00:18:47 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 00:19:12 +0100 <abastro[m]> I guess the skill is not much help in real life tho, seeing those who lack the skill thrive in the society
2022-03-23 00:19:24 +0100 <hpc> (fun fact - textiles specialists were the first commercial programmers, and farmers are behind all the recent right-to-repair bills in the US)
2022-03-23 00:19:53 +0100 <geekosaur> people thrived when literacy was rare, too
2022-03-23 00:19:57 +0100 <hpc> eh, i wouldn't say they thrived
2022-03-23 00:20:33 +0100 <abastro[m]> I mean, those who lack the skill thrive "now"
2022-03-23 00:21:02 +0100 <hpc> when i hear "thrive" i think like the nobility who spend their lives learning horse riding and astronomy for fun
2022-03-23 00:21:07 +0100 <hpc> or people who fly to orbit for fun
2022-03-23 00:21:15 +0100 <abastro[m]> Somehow my brain connect the dot with "University is dying in current society"
2022-03-23 00:21:27 +0100 <hpc> not people who are negative net worth most of their lives and retire at the age of 70
2022-03-23 00:21:40 +0100 <abastro[m]> Yea, born as nobility greatly help there
2022-03-23 00:22:09 +0100 <abastro[m]> Retire at age 70 sounds like success tbh
2022-03-23 00:22:42 +0100 <abastro[m]> I heard ppl at those ages crave having jobs
2022-03-23 00:23:05 +0100 <hpc> ... this is very off topic lol
2022-03-23 00:23:24 +0100 <abastro[m]> Oh wait
2022-03-23 00:23:36 +0100 <abastro[m]> This chat is for haskell right
2022-03-23 00:23:39 +0100 <abastro[m]> Apparently I forgot
2022-03-23 00:23:44 +0100 <hpc> in theory, yeah :D
2022-03-23 00:24:04 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 00:24:05 +0100 <abastro[m]> (Btw is there haskell-offtopic bridged over matrix)
2022-03-23 00:24:06 +0100vysn(~vysn@user/vysn) (Ping timeout: 245 seconds)
2022-03-23 00:24:17 +0100 <hpc> all of libera is bridged, i think?
2022-03-23 00:24:29 +0100 <geekosaur> I see matrix folk there, don'tknow what it's called matrix side
2022-03-23 00:24:48 +0100 <abastro[m]> I see, let me try
2022-03-23 00:25:54 +0100 <abastro[m]> Eh idk how
2022-03-23 00:27:31 +0100 <abastro[m]> Hm, does anyone got a symbolic calculator which calculates haskell terms into sensible normal forms?
2022-03-23 00:27:36 +0100 <boxscape_> abastro[m] /join #haskell-offtopic:libera.chat
2022-03-23 00:27:51 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
2022-03-23 00:28:02 +0100 <abastro[m]> Thank you!!
2022-03-23 00:28:07 +0100 <boxscape_> np
2022-03-23 00:28:57 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 252 seconds)
2022-03-23 00:30:07 +0100 <abastro[m]> As ppl p much live with calculator nowadays, I think a symbolic calculator for haskell would greatly help.
2022-03-23 00:34:17 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-03-23 00:34:25 +0100 <Guest27> Hmmm... sounds like a fun project
2022-03-23 00:34:25 +0100 <Guest27> Perhaps peek inside GHC's frontend
2022-03-23 00:35:10 +0100 <geekosaur> not sure ghc would helpmuch, ghc'sidea of normal form is core
2022-03-23 00:35:16 +0100 <geekosaur> maybe hugs?
2022-03-23 00:35:17 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 240 seconds)
2022-03-23 00:39:15 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-03-23 00:39:53 +0100Benzi-Junior(~BenziJuni@dsl-149-64-179.hive.is) (Quit: ZNC 1.8.2 - https://znc.in)
2022-03-23 00:39:58 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 00:44:24 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it)
2022-03-23 00:46:38 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-03-23 00:51:51 +0100xff0x(~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Ping timeout: 256 seconds)
2022-03-23 00:53:09 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
2022-03-23 00:53:16 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-03-23 00:53:48 +0100euandreh(~euandreh@2804:14c:33:9fe5:156d:4cd3:81cf:f50c) (Ping timeout: 240 seconds)
2022-03-23 00:55:51 +0100euandreh(~euandreh@2804:14c:33:9fe5:2b3e:70f8:165f:be99)
2022-03-23 00:55:54 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
2022-03-23 00:56:16 +0100nicbk(~nicbk@user/nicbk)
2022-03-23 00:56:52 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-03-23 00:58:12 +0100sugar(~sugar@bras-base-hmtnon1497w-grc-46-67-70-68-108.dsl.bell.ca) (Quit: Client closed)
2022-03-23 00:58:56 +0100 <Axman6> > cos a ^ 2 + sin a ^ 2 :: Expr
2022-03-23 00:58:57 +0100 <lambdabot> cos a * cos a + sin a * sin a
2022-03-23 00:59:11 +0100acidjnk(~acidjnk@p200300d0c7049f30dd97d7382d55cf65.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-03-23 00:59:13 +0100sciencentistguy(~sciencent@hacksoc/ordinary-member) (Ping timeout: 256 seconds)
2022-03-23 00:59:29 +0100 <abastro[m]> Ohh
2022-03-23 00:59:59 +0100 <geekosaur> @hackage simple-reflect
2022-03-23 00:59:59 +0100 <lambdabot> https://hackage.haskell.org/package/simple-reflect
2022-03-23 00:59:59 +0100 <abastro[m]> > foldMap First [a, b, c] :: Expr
2022-03-23 01:00:00 +0100 <lambdabot> error:
2022-03-23 01:00:00 +0100 <lambdabot> • Couldn't match expected type ‘Expr’ with actual type ‘First a0’
2022-03-23 01:00:00 +0100 <lambdabot> • In the expression: foldMap First [a, b, c] :: Exprerror:
2022-03-23 01:00:15 +0100 <Axman6> > iterate reduce (a * 7) :: Expr
2022-03-23 01:00:17 +0100 <lambdabot> error:
2022-03-23 01:00:17 +0100 <lambdabot> • Couldn't match expected type ‘Expr’ with actual type ‘[Expr]’
2022-03-23 01:00:17 +0100 <lambdabot> • In the expression: iterate reduce (a * 7) :: Expr
2022-03-23 01:00:22 +0100 <Axman6> > iterate reduce (a * 7 :: Expr)
2022-03-23 01:00:24 +0100 <lambdabot> [a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a *...
2022-03-23 01:00:43 +0100 <Axman6> > iterate reduce (a+a+a+a+a :: Expr)
2022-03-23 01:00:44 +0100 <lambdabot> [a + a + a + a + a,a + a + a + a + a,a + a + a + a + a,a + a + a + a + a,a +...
2022-03-23 01:00:50 +0100 <abastro[m]> foldMap First [a :: Expr, b, c]
2022-03-23 01:01:08 +0100 <Axman6> need more ?
2022-03-23 01:01:09 +0100 <Axman6> >
2022-03-23 01:02:21 +0100 <abastro[m]> > foldMap First [a :: Expr, b, c]
2022-03-23 01:02:22 +0100 <lambdabot> error:
2022-03-23 01:02:22 +0100 <lambdabot> • Couldn't match expected type ‘Maybe a’ with actual type ‘Expr’
2022-03-23 01:02:22 +0100 <lambdabot> • In the expression: a :: Expr
2022-03-23 01:03:15 +0100nicbk(~nicbk@user/nicbk) (Ping timeout: 240 seconds)
2022-03-23 01:03:58 +0100 <abastro[m]> Uhm a bit tough to use
2022-03-23 01:04:12 +0100 <geekosaur> yes
2022-03-23 01:04:18 +0100 <geekosaur> and more than a bit limited
2022-03-23 01:04:29 +0100 <geekosaur> read the docs for the simple-reflect package for details
2022-03-23 01:04:36 +0100chenqisu1(~chenqisu1@183.217.201.47)
2022-03-23 01:04:37 +0100 <geekosaur> (I pointed to it earlier)
2022-03-23 01:05:18 +0100 <geekosaur> that said, it can do a surprising amount of stuff
2022-03-23 01:06:19 +0100fluxit(~fluxit@techsmix.net)
2022-03-23 01:06:22 +0100 <geekosaur> > foldr f z [a,b,c]
2022-03-23 01:06:23 +0100 <lambdabot> f a (f b (f c z))
2022-03-23 01:06:55 +0100 <geekosaur> > foldr (*) z [a,b,c]
2022-03-23 01:06:56 +0100 <lambdabot> a * (b * (c * z))
2022-03-23 01:07:14 +0100 <abastro[m]> Interesting!
2022-03-23 01:07:29 +0100 <abastro[m]> > foldMap First [a, b, c]
2022-03-23 01:07:30 +0100 <lambdabot> error:
2022-03-23 01:07:30 +0100 <lambdabot> • Couldn't match expected type ‘Maybe a’ with actual type ‘Expr’
2022-03-23 01:07:30 +0100 <lambdabot> • In the expression: a
2022-03-23 01:07:39 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-03-23 01:07:42 +0100 <abastro[m]> Uhm that is not working
2022-03-23 01:08:38 +0100 <geekosaur> First is a bit too tricky for it
2022-03-23 01:08:56 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-03-23 01:09:53 +0100 <boxscape_> what output would you expect from foldMap First [a, b, c]?
2022-03-23 01:12:20 +0100AdamConner-Sax[m(~adamcsmat@2001:470:69fc:105::1:e2c8)
2022-03-23 01:12:55 +0100acidsys(~LSD@2a03:4000:55:d20::3) (Excess Flood)
2022-03-23 01:13:25 +0100acidsys(~LSD@2a03:4000:55:d20::3)
2022-03-23 01:14:22 +0100azimut_(~azimut@gateway/tor-sasl/azimut)
2022-03-23 01:15:55 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-03-23 01:16:24 +0100 <abastro[m]> Hmm
2022-03-23 01:16:34 +0100 <abastro[m]> > foldMap f [a, b, c]
2022-03-23 01:16:35 +0100 <lambdabot> error:
2022-03-23 01:16:35 +0100 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M904037765254...
2022-03-23 01:16:35 +0100 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
2022-03-23 01:16:56 +0100 <abastro[m]> Wait even that does not work
2022-03-23 01:17:02 +0100hgolden(~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
2022-03-23 01:17:07 +0100 <abastro[m]> I just want it to try simplify
2022-03-23 01:17:32 +0100 <abastro[m]> Perhaps `First a <> First b <> First c` would do, idk
2022-03-23 01:18:06 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 01:18:41 +0100 <boxscape_> I was going to say maybe foldMap f [a, b, c] would work if Expr had a Monoid instance, but it does
2022-03-23 01:19:13 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 01:19:16 +0100 <boxscape_> > mconcat [a, b, c]
2022-03-23 01:19:17 +0100 <lambdabot> mconcat [a,b,c]
2022-03-23 01:19:22 +0100 <boxscape_> great
2022-03-23 01:19:36 +0100 <monochrom> What is the type of First?
2022-03-23 01:20:01 +0100vorpuni(~pvorp@2001:861:3881:c690:c18a:999a:aef5:52af) (Quit: bye)
2022-03-23 01:20:23 +0100 <monochrom> Equivalently, why did the error message bring up Maybe?
2022-03-23 01:21:41 +0100 <boxscape_> > foldMap f [a, b, c] :: Expr
2022-03-23 01:21:42 +0100 <lambdabot> f a <> f b <> f c <> mempty
2022-03-23 01:21:44 +0100 <boxscape_> ^ abastro[m]
2022-03-23 01:22:03 +0100zeenk(~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94) (Quit: Konversation terminated!)
2022-03-23 01:22:20 +0100 <abastro[m]> Yea, so I think even with First
2022-03-23 01:22:34 +0100mvk(~mvk@2607:fea8:5cc3:7e00::7980)
2022-03-23 01:22:40 +0100 <abastro[m]> It could have gave me `First a <> First b <> First c <> mempty` but nah
2022-03-23 01:22:49 +0100 <boxscape_> :t First
2022-03-23 01:22:50 +0100 <lambdabot> Maybe a -> First a
2022-03-23 01:22:56 +0100 <abastro[m]> Idk, I guess I have many complaints
2022-03-23 01:23:08 +0100 <hpc> it can't unify Expr with (Maybe a)
2022-03-23 01:23:15 +0100 <abastro[m]> Ya, the type is not matching
2022-03-23 01:23:24 +0100lottaquestions(~nick@2607:fa49:5041:a200:746b:7a76:5f:680b) (Quit: Konversation terminated!)
2022-03-23 01:23:25 +0100 <boxscape_> abastro[m] I think you could make it work, but you'd need a FromExpr instance for `Maybe a`
2022-03-23 01:23:26 +0100 <hpc> Expr isn't a magical fill-stuff-in-wherever type, it's basically String
2022-03-23 01:23:35 +0100 <monochrom> Type checker says "the sentiment is mutual" :)
2022-03-23 01:23:38 +0100 <abastro[m]> I mean sometimes the user wants that kind of simplification.
2022-03-23 01:23:43 +0100 <hpc> you could make an Expr that renders as "First" though
2022-03-23 01:26:15 +0100charukiewicz(~charukiew@2600:1702:a90:2750:724d:7bff:fe2b:f560) (Remote host closed the connection)
2022-03-23 01:26:58 +0100grimey63(~grimey@pool-108-26-37-118.syrcny.east.verizon.net) (Quit: Connection closed)
2022-03-23 01:27:21 +0100nicbk(~nicbk@user/nicbk)
2022-03-23 01:27:30 +0100charukiewicz(~charukiew@2600:1702:a90:2750::3c)
2022-03-23 01:28:35 +0100 <boxscape_> > foldMap First [f, g, h] :: First Expr
2022-03-23 01:28:37 +0100 <lambdabot> First {getFirst = Just f}
2022-03-23 01:28:53 +0100 <boxscape_> ^ abastro[m] I did this by first defining @let instance FromExpr (Maybe Expr) where fromExpr e = Just e
2022-03-23 01:29:31 +0100 <boxscape_> unfortunately doesn't really take into account the logic of First
2022-03-23 01:29:45 +0100 <boxscape_> or illustrates it I mean
2022-03-23 01:29:52 +0100 <boxscape_> because no Nothing elements can exist with this instance
2022-03-23 01:29:53 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-03-23 01:30:15 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-03-23 01:30:29 +0100 <abastro[m]> Hm, interesting
2022-03-23 01:32:38 +0100 <boxscape_> abastro[m] generally Expr from simple-reflect relies on being able to make free instance for classes, so when you have specific behavior like First that's not given by a class, it's less useful
2022-03-23 01:32:56 +0100 <boxscape_> (except for something like foldr where you can illustrate how it works on a container of expressions, I suppose)
2022-03-23 01:33:53 +0100notzmv(~zmv@user/notzmv)
2022-03-23 01:36:14 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 01:38:29 +0100 <abastro[m]> Hm, I guess what I want is actually
2022-03-23 01:39:29 +0100abastro[m]sent a hs code block: https://libera.ems.host/_matrix/media/r0/download/libera.chat/91f90df4179b292c9a860c4637424f47bda6…
2022-03-23 01:39:43 +0100 <boxscape_> yeah that makes sense
2022-03-23 01:40:28 +0100 <boxscape_> abastro[m] you might be interested in this which kind of goes in that direction https://youtu.be/xZmPuz9m2t0
2022-03-23 01:40:47 +0100 <Axman6> > foldMap (First . Just) [a,b,c] :: First Expr
2022-03-23 01:40:48 +0100 <lambdabot> First {getFirst = Just a}
2022-03-23 01:41:20 +0100 <boxscape_> alternatively this which is a much shorter video but a similar idea https://youtu.be/SVRYcrhRCes
2022-03-23 01:43:08 +0100 <abastro[m]> Thx, I'll take a look
2022-03-23 01:48:43 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-03-23 01:49:13 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-03-23 01:52:00 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2022-03-23 01:52:27 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-03-23 01:52:39 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-03-23 01:55:27 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-03-23 01:55:27 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-03-23 01:55:27 +0100wroathe(~wroathe@user/wroathe)
2022-03-23 01:57:09 +0100xff0x(~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
2022-03-23 01:57:42 +0100 <Zemyla> > (a + b) * c
2022-03-23 01:57:44 +0100 <lambdabot> (a + b) * c
2022-03-23 01:58:11 +0100Guest|6(~Guest|6@189.128.188.226)
2022-03-23 01:59:00 +0100 <Guest|6> hi all, I am having some trouble installing haskell, I was wondering if someone could help me please
2022-03-23 02:02:12 +0100 <sm> what's your operating system and what have you tried, Guest|6
2022-03-23 02:04:54 +0100 <Guest|6> I'm on windows 10, I tried installing haskell using the steps from the ghcup guide, and when I'm asked to install Msys2 it will throw an error
2022-03-23 02:05:47 +0100 <Axman6> can you share the error?
2022-03-23 02:07:33 +0100 <Axman6> @where paste
2022-03-23 02:07:33 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-03-23 02:08:07 +0100 <Guest|6> Exec: Error executing command curl.exe with arguments '-o
2022-03-23 02:09:22 +0100 <koz> Suppose I have v :: Vector a, and I want [Vector a], which is comprised of every sub-vector of v. What's the easiest way to write this?
2022-03-23 02:10:13 +0100 <koz> (specifically, proper sub-vector, aka not including v itself)
2022-03-23 02:10:13 +0100 <Axman6> surely there's a vector slice function?
2022-03-23 02:10:23 +0100dsrt^(~dsrt@96-67-120-105-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds)
2022-03-23 02:10:31 +0100 <koz> Axman6: Yeah, I can do it with manual slicing, but I don't necessarily want _contiguous_ sub-vectors.
2022-03-23 02:10:41 +0100 <Axman6> oh, that's less fun...
2022-03-23 02:10:45 +0100 <koz> (like, non-contiguous ones should be included too)
2022-03-23 02:10:53 +0100 <Axman6> hmm, I'm sure there's a filerM trick
2022-03-23 02:11:11 +0100 <Axman6> > filterM (const [False,True] [1,2,3]
2022-03-23 02:11:12 +0100 <lambdabot> <hint>:1:36: error:
2022-03-23 02:11:12 +0100 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
2022-03-23 02:11:17 +0100 <Axman6> > filterM (const [False,True]) [1,2,3]
2022-03-23 02:11:18 +0100 <lambdabot> [[],[3],[2],[2,3],[1],[1,3],[1,2],[1,2,3]]
2022-03-23 02:11:32 +0100 <koz> That's 100% what I want, except the last one.
2022-03-23 02:11:39 +0100 <koz> Could a list comprehension do this?
2022-03-23 02:11:40 +0100 <Axman6> init :)
2022-03-23 02:11:51 +0100 <koz> I guess init would work.
2022-03-23 02:11:55 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-03-23 02:12:00 +0100 <koz> Something like
2022-03-23 02:12:02 +0100 <Axman6> > dropb 1 $ filterM (const [True,False]) [1,2,3]
2022-03-23 02:12:03 +0100 <lambdabot> error:
2022-03-23 02:12:03 +0100 <lambdabot> • Variable not in scope: dropb :: t0 -> [[b0]] -> t
2022-03-23 02:12:03 +0100 <lambdabot> • Perhaps you meant one of these:
2022-03-23 02:12:06 +0100 <Axman6> > drop 1 $ filterM (const [True,False]) [1,2,3]
2022-03-23 02:12:08 +0100 <lambdabot> [[1,2],[1,3],[1],[2,3],[2],[3],[]]
2022-03-23 02:12:11 +0100Guest|6(~Guest|6@189.128.188.226) (Quit: Connection closed)
2022-03-23 02:12:30 +0100 <koz> [v' | v <- Vector.filterM (const [False, True]) v, v' /= v]?
2022-03-23 02:13:08 +0100 <Axman6> if you know where that once case is going to be, then just exclude it - it's either going to be the first or last element deopending on the order of True and False
2022-03-23 02:13:25 +0100 <koz> > [v' | v' <- filterM (const [False, True]) [1, 2, 3], v' /= [1, 2, 3]]
2022-03-23 02:13:27 +0100 <lambdabot> [[],[3],[2],[2,3],[1],[1,3],[1,2]]
2022-03-23 02:13:29 +0100 <koz> :D
2022-03-23 02:13:32 +0100 <Axman6> you're making it (more) O(n^2) by adding that check
2022-03-23 02:13:48 +0100 <Axman6> since it checks every single vector. just drop the last one with init
2022-03-23 02:13:58 +0100 <koz> I guess that works.
2022-03-23 02:14:01 +0100 <koz> Thanks!
2022-03-23 02:14:16 +0100 <abastro[m]> filterM is honestly impressive
2022-03-23 02:14:25 +0100 <abastro[m]> Had hard time replicating the behavior in Scala
2022-03-23 02:15:02 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net)
2022-03-23 02:15:24 +0100 <koz> Yeah, I always forget it exists, and then realize you can do so many things with it.
2022-03-23 02:15:37 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 02:16:11 +0100 <koz> OK, so how about this: I have v :: Vector Word8, and I wanna make [Vector Word8] such that they're all the same length as v, but have _at least one_ element somewhere be smaller than its corresponding position in v.
2022-03-23 02:16:35 +0100 <koz> Is that some kind of traverse + init combo again?
2022-03-23 02:16:43 +0100 <Axman6> > filterM (const [True,False]) "abcd" -- probably a better example since it's more concise
2022-03-23 02:16:44 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-03-23 02:16:44 +0100 <lambdabot> ["abcd","abc","abd","ab","acd","ac","ad","a","bcd","bc","bd","b","cd","c","d...
2022-03-23 02:17:03 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-03-23 02:17:17 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-03-23 02:17:29 +0100 <koz> > traverse (\x -> [0 .. x]) [1, 2, 3]
2022-03-23 02:17:31 +0100 <lambdabot> [[0,0,0],[0,0,1],[0,0,2],[0,0,3],[0,1,0],[0,1,1],[0,1,2],[0,1,3],[0,2,0],[0,...
2022-03-23 02:17:44 +0100 <koz> > last . traverse (\x -> [0 .. x]) $ [1, 2, 3]
2022-03-23 02:17:45 +0100 <lambdabot> [1,2,3]
2022-03-23 02:17:48 +0100 <koz> HMMMM
2022-03-23 02:18:08 +0100 <koz> > last . traverse (\x -> [0 .. x]) $ [0, 1, 2]
2022-03-23 02:18:10 +0100 <lambdabot> [0,1,2]
2022-03-23 02:18:14 +0100 <koz> OK yeah, works.
2022-03-23 02:18:25 +0100 <koz> You could probably spell the filterM example with traverse too somehow.
2022-03-23 02:19:05 +0100 <Axman6> foo v = replicate (V.length v) (V.replicate (V.length v) 0) :P
2022-03-23 02:19:26 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Quit: Palaver https://palaverapp.com)
2022-03-23 02:19:28 +0100 <koz> Wat.
2022-03-23 02:19:44 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net)
2022-03-23 02:20:01 +0100 <Axman6> unless v has length 1, that will produce a list of vectors where at least one element has a value lower than its index
2022-03-23 02:20:20 +0100 <Axman6> because all elements are 0 - problem solved!
2022-03-23 02:21:10 +0100Techcable(~Techcable@user/Techcable) (Remote host closed the connection)
2022-03-23 02:21:15 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-03-23 02:22:13 +0100DNH(~DNH@2a02:8108:1100:16d8:b07b:b6be:41fa:d6a) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-03-23 02:22:39 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection)
2022-03-23 02:22:45 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 02:22:47 +0100Techcable(~Techcable@user/Techcable)
2022-03-23 02:25:29 +0100DNH(~DNH@2a02:8108:1100:16d8:b07b:b6be:41fa:d6a)
2022-03-23 02:25:37 +0100lumberjack123(~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection)
2022-03-23 02:26:57 +0100DNH(~DNH@2a02:8108:1100:16d8:b07b:b6be:41fa:d6a) (Client Quit)
2022-03-23 02:30:27 +0100vglfr(~vglfr@88.155.11.162) (Ping timeout: 256 seconds)
2022-03-23 02:30:50 +0100lumberjack123(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-03-23 02:33:20 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 02:34:45 +0100haasn`(~nand@haasn.dev)
2022-03-23 02:35:33 +0100alp(~alp@user/alp)
2022-03-23 02:36:15 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-03-23 02:36:24 +0100vysn(~vysn@user/vysn)
2022-03-23 02:38:43 +0100 <abastro[m]> Lmao
2022-03-23 02:38:45 +0100haasn(~nand@haasn.dev) (Ping timeout: 256 seconds)
2022-03-23 02:38:45 +0100haasn`haasn
2022-03-23 02:41:11 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4.1)
2022-03-23 02:41:34 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-03-23 02:42:28 +0100lainon(lainon@gateway/vpn/protonvpn/lainon)
2022-03-23 02:49:24 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 02:54:49 +0100jao(~jao@45.152.183.53) (Remote host closed the connection)
2022-03-23 02:59:24 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-03-23 03:05:40 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e)
2022-03-23 03:11:43 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
2022-03-23 03:13:57 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 252 seconds)
2022-03-23 03:15:04 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-03-23 03:21:29 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 03:23:43 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-03-23 03:30:34 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-03-23 03:34:15 +0100ubert1(~Thunderbi@p200300ecdf1588c644ba34ac9ed54fc8.dip0.t-ipconnect.de)
2022-03-23 03:34:55 +0100ubert(~Thunderbi@p200300ecdf158894f1c8f499466ba149.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-03-23 03:34:55 +0100ubert1ubert
2022-03-23 03:34:55 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-03-23 03:37:14 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 268 seconds)
2022-03-23 03:54:20 +0100k8yun(~k8yun@user/k8yun)
2022-03-23 03:54:39 +0100alp(~alp@user/alp) (Ping timeout: 252 seconds)
2022-03-23 03:55:33 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
2022-03-23 03:56:08 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-03-23 03:57:33 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si)
2022-03-23 03:58:46 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 03:59:18 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 04:04:32 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-03-23 04:05:55 +0100nicbk(~nicbk@user/nicbk) (Ping timeout: 240 seconds)
2022-03-23 04:05:58 +0100vglfr(~vglfr@88.155.11.162)
2022-03-23 04:08:08 +0100nicbk(~nicbk@user/nicbk)
2022-03-23 04:10:46 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-03-23 04:17:55 +0100lainon(lainon@gateway/vpn/protonvpn/lainon) (Quit: WeeChat 3.4)
2022-03-23 04:20:12 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
2022-03-23 04:25:25 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-03-23 04:26:30 +0100 <Axman6> Where's the best place to ask about ghcup? the docs have instructions for bash completion ut provides zsh and fish completion files, and I don't know how to install those
2022-03-23 04:27:43 +0100 <janus> Axman6: i think this is a good place to ask but try asking when europe is awake
2022-03-23 04:28:25 +0100 <Axman6> WAKE UP EUROPE!
2022-03-23 04:29:25 +0100 <Axman6> On an unrelated note... are the colours of the ghcup site intentionally the ukrainian flag?
2022-03-23 04:29:46 +0100mbuf(~Shakthi@223.178.96.253)
2022-03-23 04:35:59 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
2022-03-23 04:36:15 +0100belphegor666(~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2022-03-23 04:36:39 +0100belphegor666(~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de)
2022-03-23 04:37:10 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
2022-03-23 04:38:38 +0100 <abastro[m]> Oh, the color scheme changed, I see
2022-03-23 04:38:57 +0100 <abastro[m]> Very courageous.. perhaps at cost of losing Russian userbase
2022-03-23 04:43:54 +0100 <Axman6> might hurt our Oleg-factor somewhat
2022-03-23 04:48:02 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 04:49:41 +0100 <koz> Oleg K is basically OCamling now, and Oleg G is a Finn IIRC.
2022-03-23 04:49:45 +0100boxscape_(~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Quit: Connection closed)
2022-03-23 04:50:23 +0100k8yun(~k8yun@user/k8yun) (Quit: Leaving)
2022-03-23 04:51:51 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2022-03-23 04:52:12 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-03-23 04:53:16 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net)
2022-03-23 04:53:33 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection)
2022-03-23 04:57:53 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-03-23 04:58:13 +0100vglfr(~vglfr@88.155.11.162) (Ping timeout: 240 seconds)
2022-03-23 04:59:20 +0100 <sm> also #haskell-ghcup:libera.chat
2022-03-23 04:59:44 +0100 <sm> but.. shell completions ? really ? :)
2022-03-23 04:59:46 +0100 <Axman6> great, thanks
2022-03-23 04:59:57 +0100 <Axman6> well, if they're there, why not document how to use them
2022-03-23 05:00:02 +0100haasn(~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2022-03-23 05:00:11 +0100 <sm> that's fair enough :)
2022-03-23 05:01:23 +0100haasn(~nand@haasn.dev)
2022-03-23 05:11:42 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 05:16:13 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-03-23 05:17:03 +0100gehmehgeh(~user@user/gehmehgeh)
2022-03-23 05:19:54 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 05:21:55 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-03-23 05:23:14 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 05:27:49 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-03-23 05:28:07 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 05:29:17 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds)
2022-03-23 05:38:06 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer)
2022-03-23 05:40:05 +0100gehmehgeh_(~user@user/gehmehgeh)
2022-03-23 05:41:15 +0100gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 240 seconds)
2022-03-23 05:47:15 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
2022-03-23 05:49:18 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-03-23 05:52:05 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 250 seconds)
2022-03-23 05:54:06 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 05:54:13 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-03-23 06:00:15 +0100vglfr(~vglfr@88.155.11.162)
2022-03-23 06:02:29 +0100Codaraxis_(~Codaraxis@user/codaraxis)
2022-03-23 06:03:49 +0100Codaraxis(~Codaraxis@user/codaraxis) (Ping timeout: 240 seconds)
2022-03-23 06:10:15 +0100nicbk(~nicbk@user/nicbk) (Ping timeout: 240 seconds)
2022-03-23 06:11:26 +0100bahamas(~lucian@84.232.140.158)
2022-03-23 06:13:49 +0100nicbk(~nicbk@user/nicbk)
2022-03-23 06:20:17 +0100awpr(uid446117@id-446117.lymington.irccloud.com)
2022-03-23 06:21:37 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 06:22:56 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-03-23 06:28:33 +0100zmt00(~zmt00@user/zmt00)
2022-03-23 06:32:17 +0100nsyd(~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
2022-03-23 06:36:21 +0100bahamas(~lucian@84.232.140.158) (Ping timeout: 252 seconds)
2022-03-23 06:42:51 +0100 <abastro[m]> Oleg-factor XD
2022-03-23 06:51:01 +0100cheater(~Username@user/cheater) (Ping timeout: 250 seconds)
2022-03-23 06:52:04 +0100nsyd(~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net)
2022-03-23 06:56:31 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 07:01:39 +0100vglfr(~vglfr@88.155.11.162) (Ping timeout: 252 seconds)
2022-03-23 07:03:35 +0100ProfSimm(~ProfSimm@87.227.196.109) (Ping timeout: 256 seconds)
2022-03-23 07:06:57 +0100Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 240 seconds)
2022-03-23 07:07:05 +0100cheater(~Username@user/cheater)
2022-03-23 07:13:05 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-03-23 07:25:37 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 07:26:20 +0100 <koz> Slightly meta question: is there some abstraction that unifies mapping, filtering and folding? In the sense that any of those can be described with said abstraction.
2022-03-23 07:26:57 +0100 <Axman6> Witherable perhaps? jackdk talks about it often but I haven't run into it myself
2022-03-23 07:27:17 +0100 <Axman6> not a single abstraction, but it extends the idea of filtering to Traversables
2022-03-23 07:27:29 +0100 <Axman6> (I think)
2022-03-23 07:27:37 +0100 <jackdk> since you can recreate foldMap with traverse, perhaps you can do everything with witherable?
2022-03-23 07:27:48 +0100vglfr(~vglfr@88.155.11.162)
2022-03-23 07:27:51 +0100 <abastro[m]> (Well mapping is implemented by folding tho) .. but yea filtering requires sth like witherable
2022-03-23 07:28:51 +0100 <koz> This Witherable? https://hackage.haskell.org/package/witherable-0.4.2/docs/Data-Witherable.html#t:Witherable
2022-03-23 07:29:53 +0100 <koz> (also, that function argument should totes be 'a -> Compose f Maybe b')
2022-03-23 07:30:01 +0100 <jackdk> with `f ~ forall m . Const m` you can foldmap with that, but you're traverable anyway
2022-03-23 07:30:26 +0100Giovanni(~Giovanni@176.67.166.45)
2022-03-23 07:30:51 +0100 <koz> (heck, it should _really_ be Star (Compose f Maybe) a b)
2022-03-23 07:33:15 +0100 <Axman6> what's Star?
2022-03-23 07:33:22 +0100 <koz> Kleisli with more instances.
2022-03-23 07:33:32 +0100 <koz> (from profunctors)
2022-03-23 07:34:03 +0100 <Axman6> any reason why Kleisli couldn't have those instances too? I remember seeing Star in lens but never looked into it
2022-03-23 07:34:19 +0100 <koz> Axman6: No non-hysterical reasons.
2022-03-23 07:34:32 +0100 <koz> Star is just a more profunctorially-oriented Kleisli.
2022-03-23 07:34:59 +0100 <Axman6> damn raisins
2022-03-23 07:35:05 +0100 <koz> I know right.
2022-03-23 07:35:58 +0100 <koz> Annoyingly, Compose f Maybe doesn't automagic up an Alternative.
2022-03-23 07:36:03 +0100 <koz> (Compose Maybe f would)
2022-03-23 07:36:43 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 07:36:50 +0100 <koz> I mean, I _guess_ if we have Traversable f it would?
2022-03-23 07:38:06 +0100 <koz> I wonder what method fails.
2022-03-23 07:38:33 +0100vysn(~vysn@user/vysn)
2022-03-23 07:38:35 +0100nicbk(~nicbk@user/nicbk) (Ping timeout: 240 seconds)
2022-03-23 07:39:08 +0100 <koz> Couldn't you define empty as 'pure empty' and '<|>
2022-03-23 07:39:19 +0100 <koz> ' as 'liftA2 <|>
2022-03-23 07:39:21 +0100 <koz> '?
2022-03-23 07:39:24 +0100 <koz> Curse my typing.
2022-03-23 07:39:34 +0100 <Axman6> we love typing though
2022-03-23 07:39:39 +0100 <koz> (well, modulo all the Compose and getCompose noise)
2022-03-23 07:40:09 +0100 <koz> Like, does this violate any laws?
2022-03-23 07:44:23 +0100Graham31415(~Graham314@5.33.52.156)
2022-03-23 07:48:36 +0100vglfr(~vglfr@88.155.11.162) (Ping timeout: 240 seconds)
2022-03-23 07:50:12 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 07:50:32 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 07:52:19 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi)
2022-03-23 07:52:35 +0100 <abastro[m]> Is this Compose the Compose we all know?
2022-03-23 07:55:19 +0100 <koz> abastro[m]: newtype Compose f g a = Compose { getCompose :: f (g a) }
2022-03-23 07:55:23 +0100 <koz> At least, last I checked.
2022-03-23 07:55:28 +0100 <abastro[m]> Ya, I guess it is
2022-03-23 07:55:58 +0100 <abastro[m]> I guess you could do that, but it seems like Alternative is just.. applicative with innate monoid structure
2022-03-23 07:56:26 +0100 <abastro[m]> `pure empty` could work yes
2022-03-23 07:57:19 +0100 <koz> I get the feeling that either (Applicative f, Alternative g) or (Alternative f, Applicative g) would work.
2022-03-23 07:57:28 +0100 <abastro[m]> Uhm actually
2022-03-23 07:57:34 +0100 <koz> (they'd be _different_ Alternatives though wrt their relationship to Applicative)
2022-03-23 07:57:45 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 252 seconds)
2022-03-23 07:57:56 +0100 <dminuoso> abastro[m]: Alternative is slightly more than that.
2022-03-23 07:58:08 +0100 <dminuoso> abastro[m]: There's additional structure with respect to Applicative.
2022-03-23 07:58:08 +0100 <abastro[m]> I guess `liftA2 (pure empty) x` does not equal to `x`
2022-03-23 07:58:23 +0100 <abastro[m]> Oh. Why does the docs not reveal that
2022-03-23 07:58:30 +0100 <dminuoso> It does?
2022-03-23 07:58:31 +0100 <koz> dminuoso: Nobody quite agrees on said relationship.
2022-03-23 07:58:39 +0100 <koz> abastro[m]: Also check Typeclassopedia's writeup on Alternative.
2022-03-23 07:58:59 +0100 <abastro[m]> `A monoid on applicative functors.`
2022-03-23 07:59:01 +0100 <dminuoso> base at least has this to say:
2022-03-23 07:59:03 +0100 <dminuoso> https://hackage.haskell.org/package/base-4.16.0.0/docs/Control-Applicative.html#t:Alternative
2022-03-23 07:59:10 +0100 <dminuoso> If defined, some and many should be the least solutions of the equations: [...]
2022-03-23 07:59:18 +0100 <koz> abastro[m]: 'liftA2 (<|>) (pure empty) x' _should_ be 'x'?
2022-03-23 07:59:20 +0100 <koz> Ah yeah.
2022-03-23 07:59:32 +0100 <koz> 'some' and 'many' are something I always forget about the existence of.
2022-03-23 07:59:32 +0100 <dminuoso> Though those are rather constraints about `some` and `many`
2022-03-23 07:59:44 +0100 <abastro[m]> I mean, wouldn't the laws hold with default implementations?
2022-03-23 07:59:58 +0100 <dminuoso> Yeah I guess
2022-03-23 08:00:10 +0100 <koz> Default implementations depend on each other, so if you don't define _either_, I think you might diverge.
2022-03-23 08:00:17 +0100 <koz> (you won't _necessarily_, but you might)
2022-03-23 08:00:24 +0100 <abastro[m]> Yea, I was more about the minimal definitions
2022-03-23 08:00:31 +0100 <abastro[m]> I think the definition is deliberste
2022-03-23 08:00:36 +0100 <dminuoso> abastro[m]: You might be interested in Ap
2022-03-23 08:00:37 +0100 <abastro[m]> Deliberate*
2022-03-23 08:00:41 +0100 <abastro[m]> So it could work in most cases
2022-03-23 08:00:56 +0100 <abastro[m]> Isn't Ap which makes Alternative into Monoid
2022-03-23 08:00:58 +0100 <koz> abastro[m]: If you don't define _either_ of 'some' or 'many', since they're defined in terms of each other, _using_ one or the other could diverge potentially.
2022-03-23 08:01:08 +0100 <dminuoso> abastro[m]: Yup!
2022-03-23 08:01:11 +0100 <koz> abastro[m]: 'Ap' makes _Applicative_ into Monoid.
2022-03-23 08:01:11 +0100 <dminuoso> instance (Applicative f, Monoid a) => Monoid (Ap f a)
2022-03-23 08:01:22 +0100 <abastro[m]> Oh wait
2022-03-23 08:01:25 +0100 <abastro[m]> It is applicative.
2022-03-23 08:01:29 +0100 <dminuoso> That's essentially just Alternative but via Monoid!
2022-03-23 08:01:33 +0100 <abastro[m]> I somehow messed up what it is
2022-03-23 08:01:43 +0100 <abastro[m]> No, it is not alike alternative you know
2022-03-23 08:01:43 +0100 <dminuoso> Ah sorry hold on
2022-03-23 08:01:47 +0100 <dminuoso> miscopy and paste
2022-03-23 08:01:50 +0100 <dminuoso> I meant Alt
2022-03-23 08:01:51 +0100 <koz> dminuoso: Yes, but it's weaker. Alternative works for _any_ a.
2022-03-23 08:01:55 +0100 <dminuoso> https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Monoid.html#t:Alt :)
2022-03-23 08:01:58 +0100 <koz> Alt is the other one yes.
2022-03-23 08:02:05 +0100 <koz> All these similar-sounding things.
2022-03-23 08:02:20 +0100gehmehgeh_(~user@user/gehmehgeh) (Remote host closed the connection)
2022-03-23 08:02:37 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 08:02:48 +0100 <koz> Basically everything is a monoid.
2022-03-23 08:03:08 +0100 <koz> The entirety of Haskell is an elaborate edifice built upon monoids.
2022-03-23 08:03:12 +0100 <koz> It's monoids all the way down.
2022-03-23 08:03:22 +0100 <abastro[m]> Yea, Alt
2022-03-23 08:03:29 +0100 <abastro[m]> I also mixed up Alt and Ap
2022-03-23 08:03:31 +0100 <abastro[m]> Meh, me
2022-03-23 08:03:38 +0100 <koz> They're easy to mix up.
2022-03-23 08:03:39 +0100Graham31415(~Graham314@5.33.52.156) (Ping timeout: 256 seconds)
2022-03-23 08:03:58 +0100 <abastro[m]> Ap lifts Monoids through Applicative, IIRC
2022-03-23 08:03:58 +0100 <koz> Not helped by the fact that 'Alt' is also a semigroupoids thing, which is 'Alternative without empty'.
2022-03-23 08:04:17 +0100winstonsmith_(~winston@2a02:c98:1003:8000:6106:3ff0:197d:fcd2)
2022-03-23 08:04:23 +0100 <abastro[m]> Btw IIRC `some` and many` is designed to terminate for most cases without you implementing them.
2022-03-23 08:04:28 +0100 <abastro[m]> * `some` and `many` is
2022-03-23 08:04:42 +0100 <koz> A little inconsistent, since it also defined Apply as 'Applicative without pure', so shouldn't it be called 'Altern'?
2022-03-23 08:05:00 +0100gehmehgeh_(~user@user/gehmehgeh)
2022-03-23 08:05:26 +0100 <abastro[m]> Naming is hard tbh
2022-03-23 08:05:38 +0100 <abastro[m]> In my math class I just heard how bad mathematicians are at naming
2022-03-23 08:05:54 +0100 <abastro[m]> So they often ended up with same names for numerous concepts
2022-03-23 08:06:21 +0100 <koz> Can confirm. Worse, they ended up with _different_ names for the _same_ concept!
2022-03-23 08:07:20 +0100 <abastro[m]> <strikethrough> Well concepts become different when you give it different names </>
2022-03-23 08:07:41 +0100 <koz> A natural transformation by any other name will compose just as well.
2022-03-23 08:09:17 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 252 seconds)
2022-03-23 08:11:55 +0100 <abastro[m]> ?
2022-03-23 08:12:02 +0100Neuromancer(~Neuromanc@user/neuromancer)
2022-03-23 08:12:03 +0100 <abastro[m]> Natural transformation by other name?
2022-03-23 08:12:13 +0100michalz(~michalz@185.246.204.57)
2022-03-23 08:12:25 +0100charukiewicz(~charukiew@2600:1702:a90:2750::3c) ()
2022-03-23 08:12:42 +0100 <koz> abastro[m]: A long-running joke/justification in category theory is that so many things in other fields of mathematics are just NTs in fancy clothes.
2022-03-23 08:12:51 +0100 <koz> I think Awodey's book pretty much _opens_ with such a claim.
2022-03-23 08:14:23 +0100 <dminuoso> 08:08:04 koz | [07:03:08] The entirety of Haskell is an elaborate edifice built upon monoids.
2022-03-23 08:14:31 +0100 <dminuoso> Monoids are just ubiquitous. They are everywhere.
2022-03-23 08:14:35 +0100 <dminuoso> Not just Haskell or programming.
2022-03-23 08:14:45 +0100 <abastro[m]> Oh, that joke
2022-03-23 08:14:58 +0100 <abastro[m]> Ya the one where many other mathematicians would hate :)
2022-03-23 08:16:55 +0100vglfr(~vglfr@88.155.11.162)
2022-03-23 08:21:10 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 08:22:07 +0100lagooned(~lagooned@108-208-149-42.lightspeed.hstntx.sbcglobal.net)
2022-03-23 08:22:41 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-03-23 08:24:57 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-03-23 08:25:55 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 250 seconds)
2022-03-23 08:26:35 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-03-23 08:28:20 +0100mmhat(~mmh@55d49226.access.ecotel.net)
2022-03-23 08:31:24 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-03-23 08:32:32 +0100 <tomsmeding> dminuoso: talking about monoids -- there's this trick: newtype Thing m = Thing (m -> m) ; instance Semigroup (Thing m) where Thing f <> Thing g = Thing (f . g) ; instance Monoid (Thing m) where mempty = Thing id ; rep :: Semigroup m => m -> Thing m ; rep m = Thing (m <>) ; abs :: Monoid m => Thing m -> m ; abs (Thing f) = f mempty
2022-03-23 08:32:45 +0100 <abastro[m]> Hm I wonder if `liftA2 f (pure x) y == y`
2022-03-23 08:32:48 +0100 <tomsmeding> this is "the difference list trick", also known as ShowS
2022-03-23 08:32:55 +0100Graham31415(~Graham314@5.33.52.156)
2022-03-23 08:33:13 +0100 <tomsmeding> I've also seen it being called a "Cayley" transform at least once, but is there a generally accepted name for this?
2022-03-23 08:33:37 +0100Graham31415(~Graham314@5.33.52.156) (Client Quit)
2022-03-23 08:33:45 +0100 <dminuoso> tomsmeding: Mmm, what exactly is the "trick" here?
2022-03-23 08:33:54 +0100 <abastro[m]> Eh I should have said, `liftA2 f (pure x) y == y` if for any z, `f x z == z`
2022-03-23 08:34:01 +0100 <dminuoso> On its own this seems blant so far
2022-03-23 08:34:08 +0100 <tomsmeding> representing a monoid M as functions M -> M, which has better performance properties for some monoids and some usages
2022-03-23 08:34:17 +0100 <dminuoso> Ah yes.
2022-03-23 08:34:56 +0100 <abastro[m]> Sounds like `Endo`
2022-03-23 08:35:10 +0100 <tomsmeding> ah, it is Endo
2022-03-23 08:35:27 +0100 <c_wraith> It's not exactly Endo, as you need to associate a function in the mapping between them
2022-03-23 08:35:39 +0100alp(~alp@user/alp)
2022-03-23 08:35:43 +0100 <tomsmeding> so, like, suppose I'm writing a paper where I do this and need to call it something :p
2022-03-23 08:35:50 +0100 <dminuoso> c_wraith: Thing is Endo
2022-03-23 08:35:52 +0100 <c_wraith> To really model it, you want to put the necessary functions in the type, too.
2022-03-23 08:36:09 +0100 <abastro[m]> Wdym necessary functions?
2022-03-23 08:36:56 +0100 <c_wraith> to convert between Endo [a] and [a], for instance..
2022-03-23 08:37:02 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 08:37:07 +0100 <hololeap> @hackage bytebuild
2022-03-23 08:37:07 +0100 <lambdabot> https://hackage.haskell.org/package/bytebuild
2022-03-23 08:37:12 +0100 <hololeap> > Unlike builders from the bytestring package, these builders do not track their state when they run out of space.
2022-03-23 08:37:21 +0100 <hololeap> anyone know what they mean by "run out of space"?
2022-03-23 08:37:30 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 08:37:47 +0100 <tomsmeding> c_wraith: the conversion is always (\x -> (x <>)) :: m -> Endo m ; (\x -> x mempty) :: Endo m -> m
2022-03-23 08:37:48 +0100 <abastro[m]> Well you could just define `rep` for `Endo`, then you get that.
2022-03-23 08:37:58 +0100 <tomsmeding> potentially with (<> x) instead of (x <>) if that works better
2022-03-23 08:38:16 +0100 <tomsmeding> at least in this trick that I'm trying to find a name for, it is always this way
2022-03-23 08:38:24 +0100 <dminuoso> hololeap: Mmm, did you read the following sentence?
2022-03-23 08:38:38 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 08:38:50 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e)
2022-03-23 08:38:59 +0100 <c_wraith> hololeap: builders are a wrapper around a mutable buffer.
2022-03-23 08:39:41 +0100 <abastro[m]> Tbh `Endo (<> x)` sounds short enough to me
2022-03-23 08:39:41 +0100 <tomsmeding> abastro[m]: liftA2 f (pure x) y = f <$> pure x <*> y = pure f <*> pure x <*> y =[homomorphism] pure (f x) <*> y =[f x z == z] pure id <*> y =[identity] y
2022-03-23 08:39:57 +0100 <tomsmeding> abastro[m]: as a name?
2022-03-23 08:39:58 +0100 <abastro[m]> Oh wait
2022-03-23 08:40:05 +0100 <tomsmeding> (oh I forgot the Endo wrappers)
2022-03-23 08:40:07 +0100 <abastro[m]> Noo
2022-03-23 08:40:18 +0100 <tomsmeding> (just coerce that stuff :p )
2022-03-23 08:40:45 +0100 <abastro[m]> <del>name it as `Endo _<>`</del>
2022-03-23 08:40:50 +0100 <hololeap> dminuoso: yeah I read it
2022-03-23 08:41:21 +0100 <tomsmeding> "Now in the next step, we will eliminate some adverse complexity issues using the Endo _<> trick, which ..."
2022-03-23 08:41:37 +0100 <hololeap> hm, ok...
2022-03-23 08:42:12 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 08:42:14 +0100 <c_wraith> hololeap: well. they're a wrapper around a function for manipulating such a buffer. In any case, it's saying it doesn't track the length of the buffer and space available.
2022-03-23 08:42:15 +0100 <hololeap> yeah I get it now. thanks c_wraith
2022-03-23 08:42:18 +0100 <abastro[m]> Hmm, `liftA2 f x (pure y) == pure f <*> x <*> pure y`, can I go further from here
2022-03-23 08:42:28 +0100 <abastro[m]> Apparently idk applicative laws. I should memorize it..
2022-03-23 08:42:29 +0100 <c_wraith> hololeap: it just fails if it would try to write outside it
2022-03-23 08:42:37 +0100tomsmedinglooked up the laws
2022-03-23 08:42:49 +0100 <tomsmeding> abastro[m]: perhaps use Interchange
2022-03-23 08:42:54 +0100 <abastro[m]> Ohh
2022-03-23 08:42:58 +0100 <tomsmeding> oh no
2022-03-23 08:43:04 +0100 <tomsmeding> wrong association of <*>
2022-03-23 08:43:18 +0100 <tomsmeding> oh no of course not
2022-03-23 08:43:48 +0100 <c_wraith> flip f y <$> x
2022-03-23 08:44:11 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-03-23 08:44:27 +0100 <c_wraith> (I have a policy of never using flip in non-toy code)
2022-03-23 08:44:53 +0100jakalx(~jakalx@base.jakalx.net)
2022-03-23 08:45:33 +0100 <c_wraith> But you end up writing a lot of code that looks vaguely like that when you're writing lenses by hand.
2022-03-23 08:45:56 +0100 <c_wraith> and it's important that you stick with only Functor in those cases
2022-03-23 08:46:24 +0100 <tomsmeding> abastro[m]: (pure f <*> x) <*> pure y =[interchange] pure ($ y) <*> (pure f <*> x) =[composition] pure (.) <*> pure ($ y) <*> pure f <*> x =[homomorphism x2] pure (($ y) . f) <*> x = pure (\z -> f z y) <*> x
2022-03-23 08:46:45 +0100 <abastro[m]> Oh wait, that works
2022-03-23 08:46:57 +0100 <c_wraith> I didn't say it was wrong!
2022-03-23 08:47:01 +0100 <tomsmeding> had to think a little before I realised that composition does work :p
2022-03-23 08:48:43 +0100 <abastro[m]> I guess when f z y = z for all z, like the case with `f = (<|>)` and `y = empty`, it would boil down to `x`,
2022-03-23 08:48:52 +0100 <abastro[m]> So..
2022-03-23 08:49:02 +0100machinedgod(~machinedg@24.105.81.50)
2022-03-23 08:49:26 +0100 <abastro[m]> Given `(Applicative f, Alternative g)`, we could have `Alternative (Compose f g)`
2022-03-23 08:49:54 +0100 <abastro[m]> by `empty = pure empty` and `(<|>) = liftA2 (<|>)`
2022-03-23 08:50:10 +0100 <abastro[m]> Now question is, why is it not defined?
2022-03-23 08:51:01 +0100 <c_wraith> Probably because there is another equally-lawful implementation with an Alternative f constraint
2022-03-23 08:51:09 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:9be3:3a9c:fd6c:bab4)
2022-03-23 08:52:15 +0100 <abastro[m]> Oh. Makes sense.
2022-03-23 08:52:34 +0100 <abastro[m]> `(<|>) = coerce ((<|>) :: f (g a) -> f (g a) -> f (g a))` Wait how does this work
2022-03-23 08:52:57 +0100 <abastro[m]> Oh nvm, of course works when `f` is alternative
2022-03-23 08:53:45 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 08:54:45 +0100 <koz> Yeah, you'd have to pick _one_, because otherwise GHC would barf at instance resolution.
2022-03-23 08:58:09 +0100 <abastro[m]> Sometimes deciding instance is intricate, it seems.
2022-03-23 08:58:36 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 08:58:45 +0100 <c_wraith> especially for a type with as little semantic content as Compose
2022-03-23 08:58:59 +0100zeenk(~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94)
2022-03-23 08:59:06 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 245 seconds)
2022-03-23 08:59:29 +0100 <abastro[m]> Yep, indeed.
2022-03-23 09:01:17 +0100acidjnk(~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de)
2022-03-23 09:02:17 +0100mvk(~mvk@2607:fea8:5cc3:7e00::7980) (Ping timeout: 240 seconds)
2022-03-23 09:03:04 +0100acidsys(~LSD@2a03:4000:55:d20::3) (Excess Flood)
2022-03-23 09:03:23 +0100briandaed(~root@109.95.142.93.r.toneticgroup.pl)
2022-03-23 09:03:25 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 09:03:34 +0100acidsys(~LSD@2a03:4000:55:d20::3)
2022-03-23 09:03:41 +0100acidsys(~LSD@2a03:4000:55:d20::3) (Excess Flood)
2022-03-23 09:04:17 +0100acidsys(~LSD@2a03:4000:55:d20::3)
2022-03-23 09:04:20 +0100cfricke(~cfricke@user/cfricke)
2022-03-23 09:05:57 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 252 seconds)
2022-03-23 09:10:58 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 09:15:18 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-03-23 09:15:25 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 09:16:14 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 09:18:15 +0100benin(~benin@183.82.207.30)
2022-03-23 09:18:36 +0100vglfr(~vglfr@88.155.11.162) (Ping timeout: 252 seconds)
2022-03-23 09:19:15 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 09:20:15 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e) (Remote host closed the connection)
2022-03-23 09:20:27 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e)
2022-03-23 09:23:04 +0100benin(~benin@183.82.207.30) (Client Quit)
2022-03-23 09:23:57 +0100Flow(~none@gentoo/developer/flow) (Ping timeout: 240 seconds)
2022-03-23 09:25:28 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 09:25:31 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-03-23 09:27:18 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-03-23 09:27:29 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 09:28:03 +0100lagooned(~lagooned@108-208-149-42.lightspeed.hstntx.sbcglobal.net) (Quit: WeeChat 3.4)
2022-03-23 09:28:20 +0100fendor(~fendor@178.115.72.153.wireless.dyn.drei.com)
2022-03-23 09:30:59 +0100dsrt^(~dsrt@96-67-120-105-static.hfc.comcastbusiness.net)
2022-03-23 09:31:43 +0100Flow(~none@gentoo/developer/flow)
2022-03-23 09:31:49 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-03-23 09:32:10 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 260 seconds)
2022-03-23 09:32:14 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer)
2022-03-23 09:32:26 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 09:33:59 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
2022-03-23 09:36:25 +0100urtieearthy
2022-03-23 09:38:29 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-03-23 09:43:26 +0100ccntrq(~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2)
2022-03-23 09:43:29 +0100benin(~benin@183.82.207.30)
2022-03-23 09:45:10 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 09:52:27 +0100gehmehgeh_(~user@user/gehmehgeh) (Quit: Leaving)
2022-03-23 09:56:42 +0100Pickchea(~private@user/pickchea)
2022-03-23 09:57:25 +0100MajorBiscuit(~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl)
2022-03-23 09:59:06 +0100MajorBiscuit(~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl) (Client Quit)
2022-03-23 09:59:06 +0100benin(~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 10:02:23 +0100Midjak(~Midjak@82.66.147.146)
2022-03-23 10:07:00 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-03-23 10:08:03 +0100benin(~benin@183.82.207.30)
2022-03-23 10:09:12 +0100benin(~benin@183.82.207.30) (Client Quit)
2022-03-23 10:09:56 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 245 seconds)
2022-03-23 10:10:15 +0100lumberjack123(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-03-23 10:10:18 +0100benin(~benin@183.82.207.30)
2022-03-23 10:10:54 +0100benin(~benin@183.82.207.30) (Client Quit)
2022-03-23 10:11:21 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 10:13:51 +0100benin(~benin@183.82.207.30)
2022-03-23 10:17:02 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Remote host closed the connection)
2022-03-23 10:17:36 +0100benin(~benin@183.82.207.30) (Client Quit)
2022-03-23 10:18:36 +0100benin(~benin@183.82.207.30)
2022-03-23 10:19:09 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 10:19:33 +0100gehmehgeh(~user@user/gehmehgeh)
2022-03-23 10:20:17 +0100benin(~benin@183.82.207.30) (Client Quit)
2022-03-23 10:20:32 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
2022-03-23 10:21:30 +0100benin(~benin@183.82.207.30)
2022-03-23 10:21:57 +0100jinsun(~jinsun@user/jinsun)
2022-03-23 10:23:31 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-03-23 10:24:50 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-03-23 10:25:19 +0100jinsun__(~jinsun@user/jinsun) (Ping timeout: 256 seconds)
2022-03-23 10:28:07 +0100benin(~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 10:28:26 +0100chenqisu1(~chenqisu1@183.217.201.47) (Quit: Leaving)
2022-03-23 10:30:52 +0100benin(~benin@183.82.207.30)
2022-03-23 10:31:20 +0100MajorBiscuit(~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl)
2022-03-23 10:32:36 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-03-23 10:33:16 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 10:35:02 +0100krappix(~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr)
2022-03-23 10:35:25 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-03-23 10:38:34 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 10:39:09 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it)
2022-03-23 10:44:01 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-03-23 10:44:35 +0100nsyd(~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
2022-03-23 10:44:49 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 10:46:52 +0100 <abastro[m]> Hmm what is meta?
2022-03-23 10:47:23 +0100benin(~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 10:48:01 +0100shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-03-23 10:48:15 +0100 <merijn> E_INSUFFICIENT_CONTEXT :p
2022-03-23 10:48:29 +0100benin(~benin@183.82.207.30)
2022-03-23 10:48:56 +0100 <abastro[m]> Haskell foundation links the meta
2022-03-23 10:49:17 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 10:49:20 +0100 <Franciman> abastro[m]: isnt it the new name of facebook?
2022-03-23 10:49:36 +0100 <merijn> Yeah
2022-03-23 10:49:46 +0100 <Franciman> Meta is paying haskell to exist
2022-03-23 10:49:58 +0100 <Franciman> like microsofwt
2022-03-23 10:50:17 +0100 <merijn> Meta the company is the parent company of facebook, trying to rebrand away from facebook's...great...reputation
2022-03-23 10:50:49 +0100bahamas(~lucian@86.120.77.115)
2022-03-23 10:51:02 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 260 seconds)
2022-03-23 10:52:09 +0100 <Franciman> luky for us
2022-03-23 10:52:35 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 250 seconds)
2022-03-23 10:53:11 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-03-23 10:55:13 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-03-23 10:56:13 +0100dextaa_(~dextaa@user/dextaa) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 10:56:47 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-03-23 10:57:37 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
2022-03-23 10:57:51 +0100tinwood(~tinwood@canonical/tinwood) (Remote host closed the connection)
2022-03-23 10:57:54 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
2022-03-23 10:58:05 +0100Everything(~Everythin@37.115.210.35)
2022-03-23 10:58:57 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-03-23 11:00:53 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2022-03-23 11:00:53 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
2022-03-23 11:00:53 +0100tinwood(~tinwood@canonical/tinwood)
2022-03-23 11:01:32 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 11:02:01 +0100 <boxscape> Hmm why does the duckduckgo search result for the haskell foundation say "Haskell Foundation - Donuts"
2022-03-23 11:02:01 +0100 <boxscape> not that there's anything wrong with donuts
2022-03-23 11:02:32 +0100 <boxscape> abastro: meta is the new name of facebook's parent company
2022-03-23 11:03:50 +0100 <abastro[m]> Donuts haha
2022-03-23 11:04:01 +0100 <abastro[m]> Uhh facebook parent has name meta?
2022-03-23 11:04:06 +0100 <abastro[m]> What a lousy name
2022-03-23 11:05:18 +0100xff0x(~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
2022-03-23 11:06:04 +0100DNH(~DNH@2a02:8108:1100:16d8:4199:73fa:f378:33d)
2022-03-23 11:06:11 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 245 seconds)
2022-03-23 11:06:22 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 11:07:54 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2022-03-23 11:10:15 +0100mc47(~mc47@xmonad/TheMC47)
2022-03-23 11:10:44 +0100notzmv(~zmv@user/notzmv)
2022-03-23 11:11:09 +0100 <abastro[m]> Why such a huge multibillion dollar corporation would choose a name "meta"? I wonder..
2022-03-23 11:13:27 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
2022-03-23 11:15:00 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 240 seconds)
2022-03-23 11:15:11 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 256 seconds)
2022-03-23 11:15:17 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 11:16:38 +0100 <merijn> because "metaverse"
2022-03-23 11:17:04 +0100 <Franciman> and because they are so powerful they can get to pick a super short name
2022-03-23 11:17:06 +0100 <merijn> Which can be adequately explained as: Zuckerberg fell asleep while reading Snow Crash and didn't realise Neal Stephenson was describing a dystopia
2022-03-23 11:17:08 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 11:17:08 +0100 <Franciman> just to prove they are super cool
2022-03-23 11:17:33 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 11:17:44 +0100 <merijn> tbh, Facebook rebranding to Meta and Metaverse is really, *really* funny
2022-03-23 11:18:08 +0100 <Franciman> would you classify facebook as a terrorist group trying to undermine democracy?
2022-03-23 11:18:27 +0100 <merijn> "Hey, should we market our society destroying tech death machine after a completely dystopian cyberpunk fiction?" 'yeah, that sounds dope'
2022-03-23 11:18:52 +0100 <merijn> But probably more for -offtopic :)
2022-03-23 11:19:17 +0100Pickchea(~private@user/pickchea) (Ping timeout: 240 seconds)
2022-03-23 11:22:37 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 11:29:28 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
2022-03-23 11:31:35 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 11:34:38 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 11:39:17 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 11:42:23 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 11:44:05 +0100bahamas(~lucian@86.120.77.115) (Ping timeout: 256 seconds)
2022-03-23 11:45:37 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-03-23 11:45:52 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-03-23 11:50:26 +0100 <maerwald[m]> boxscape: https://www.haskellfoundation.org/
2022-03-23 11:50:39 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 11:51:01 +0100 <boxscape> maerwald: but the donuts are mentioned in the title of the haskell.foundation search results
2022-03-23 11:51:14 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 260 seconds)
2022-03-23 11:51:19 +0100 <boxscape> s/results/result
2022-03-23 11:51:58 +0100 <boxscape> though it is funny that there are multiple foundations called "haskell foundation"
2022-03-23 11:52:19 +0100 <maerwald[m]> It's like googling curry
2022-03-23 11:52:51 +0100benin(~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 11:52:59 +0100 <abastro[m]> It is still great that HF managed to get to the second entry :)
2022-03-23 11:54:00 +0100 <boxscape> the first entry in my search results, even
2022-03-23 11:55:42 +0100 <abastro[m]> Wait, duckduckgo now detects who you are?
2022-03-23 11:55:42 +0100 <abastro[m]> Scary
2022-03-23 11:57:33 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-03-23 11:58:19 +0100 <abastro[m]> It is strange
2022-03-23 11:58:34 +0100 <abastro[m]> How company like meta could support haskell
2022-03-23 11:58:56 +0100 <abastro[m]> I mean, tbh I dislike FB so..
2022-03-23 11:58:58 +0100 <maerwald[m]> https://github.com/haskell-foundation/foundation
2022-03-23 11:59:04 +0100 <maerwald[m]> Another one
2022-03-23 11:59:14 +0100 <abastro[m]> This is too much offtopic right
2022-03-23 11:59:51 +0100sloorush(~sloorush@136.233.9.99)
2022-03-23 12:00:01 +0100ft(~ft@shell.chaostreff-dortmund.de) (Remote host closed the connection)
2022-03-23 12:00:14 +0100ft(~ft@shell.chaostreff-dortmund.de)
2022-03-23 12:00:43 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
2022-03-23 12:01:09 +0100 <maerwald[m]> Is there a good overview of existing preludes?
2022-03-23 12:01:26 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-03-23 12:01:57 +0100belphegor666(~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2022-03-23 12:02:38 +0100cfricke(~cfricke@user/cfricke)
2022-03-23 12:03:11 +0100belphegor666(~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de)
2022-03-23 12:04:59 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 12:05:04 +0100 <abastro[m]> Indeed, it is funny
2022-03-23 12:05:07 +0100 <abastro[m]> Oh right, sorry. offtopic'
2022-03-23 12:07:19 +0100krappix(~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) (Ping timeout: 256 seconds)
2022-03-23 12:07:31 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
2022-03-23 12:07:39 +0100boxscape_(~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
2022-03-23 12:08:23 +0100 <maerwald[m]> Franciman: no, terrorists usually have political goals. Causing destructive effects on global society, because you don't care about it needs a different name
2022-03-23 12:08:39 +0100xff0x(~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp)
2022-03-23 12:09:05 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-03-23 12:10:29 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) (Ping timeout: 256 seconds)
2022-03-23 12:10:41 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 12:10:50 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi)
2022-03-23 12:12:55 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4.1)
2022-03-23 12:13:58 +0100benin(~benin@183.82.207.30)
2022-03-23 12:14:55 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 260 seconds)
2022-03-23 12:18:37 +0100fendor(~fendor@178.115.72.153.wireless.dyn.drei.com) (Remote host closed the connection)
2022-03-23 12:20:01 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 12:20:16 +0100Codaraxis__(~Codaraxis@user/codaraxis)
2022-03-23 12:20:31 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
2022-03-23 12:20:51 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 12:21:33 +0100Pickchea(~private@user/pickchea)
2022-03-23 12:21:41 +0100chenqisu1(~chenqisu1@183.217.201.47)
2022-03-23 12:22:27 +0100abab9579(~abab9579@143.248.229.174)
2022-03-23 12:22:58 +0100abab9579abastro_
2022-03-23 12:23:07 +0100MasseR46(~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 12:23:43 +0100MasseR46(~MasseR@51.15.143.128)
2022-03-23 12:23:54 +0100dextaa_(~dextaa@user/dextaa)
2022-03-23 12:24:19 +0100Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2022-03-23 12:24:58 +0100abastro_(~abab9579@143.248.229.174) (Client Quit)
2022-03-23 12:25:39 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2022-03-23 12:27:24 +0100Pickchea(~private@user/pickchea) (Ping timeout: 240 seconds)
2022-03-23 12:28:54 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
2022-03-23 12:29:03 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-03-23 12:30:26 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-03-23 12:30:37 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 12:35:27 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 12:35:49 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-03-23 12:37:00 +0100belphegor666(~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) (Changing host)
2022-03-23 12:37:00 +0100belphegor666(~satan@user/belphegor666)
2022-03-23 12:39:19 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 12:39:42 +0100CiaoSen(~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-03-23 12:42:21 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 12:43:37 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 240 seconds)
2022-03-23 12:45:46 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Quit: Leaving)
2022-03-23 12:46:57 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-03-23 12:47:31 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 12:50:53 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
2022-03-23 12:51:19 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 12:52:11 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 12:52:49 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
2022-03-23 12:52:54 +0100Digit(~user@user/digit)
2022-03-23 12:54:11 +0100Digitgets wild idea of a haskelly terminal shell, wonders if ever been done, to use haskell ways and syntax with unix command line
2022-03-23 12:54:52 +0100 <opqdonut> Digit: https://hackage.haskell.org/package/turtle
2022-03-23 12:55:04 +0100 <opqdonut> not sure if anybody uses that any more but it was a big thing back in the day
2022-03-23 12:55:15 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 256 seconds)
2022-03-23 12:55:30 +0100 <opqdonut> looks like new releases keep coming out, cool
2022-03-23 12:55:37 +0100CiaoSen(~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-03-23 12:56:26 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.4.1)
2022-03-23 12:57:45 +0100 <Digit> oh yup. been here before. lets see if the fanciful notion sticks this time. thanks for sparing me much painful websearching.
2022-03-23 12:57:49 +0100 <boxscape_> there's also https://hackage.haskell.org/package/shelly
2022-03-23 12:57:51 +0100CiaoSen(~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-03-23 12:57:55 +0100 <boxscape_> I don't know how they compare though
2022-03-23 13:00:01 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer)
2022-03-23 13:00:36 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 13:01:28 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 13:02:35 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection)
2022-03-23 13:02:49 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-03-23 13:05:31 +0100 <geekosaur> you can even runb it in a haskell terminal
2022-03-23 13:05:37 +0100 <geekosaur> @package termonad
2022-03-23 13:05:38 +0100 <lambdabot> https://hackage.haskell.org/package/termonad
2022-03-23 13:05:41 +0100elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 256 seconds)
2022-03-23 13:05:58 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 13:06:03 +0100 <boxscape_> and run that in xmonad
2022-03-23 13:09:02 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 252 seconds)
2022-03-23 13:09:04 +0100 <Andrew> Digit: I've used lisp shells before, that's a good idea
2022-03-23 13:10:10 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out)
2022-03-23 13:10:46 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Read error: Connection reset by peer)
2022-03-23 13:11:11 +0100 <Digit> :) already got termonad, but yet to make it my daily driver. i like the idea my window manager, terminal emulator, and shell, could all be haskell. :) and yi, for text editor. :)
2022-03-23 13:11:25 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
2022-03-23 13:11:48 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-03-23 13:11:54 +0100razetime(~quassel@117.207.18.88)
2022-03-23 13:12:13 +0100 <boxscape_> just need a Haskell OS
2022-03-23 13:12:15 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds)
2022-03-23 13:12:21 +0100 <boxscape_> to complete the set
2022-03-23 13:13:10 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-03-23 13:13:17 +0100 <merijn> boxscape_: House, HaLVM
2022-03-23 13:13:48 +0100 <boxscape_> I was going to say that I haven't heard of those but then I saw that the link of the search result for HaLVM was purple
2022-03-23 13:14:12 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-03-23 13:17:10 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 13:26:40 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
2022-03-23 13:26:49 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-03-23 13:29:07 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 13:32:54 +0100alp(~alp@user/alp)
2022-03-23 13:33:00 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out)
2022-03-23 13:33:01 +0100acidjnk(~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-03-23 13:38:36 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
2022-03-23 13:40:01 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
2022-03-23 13:41:26 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e)
2022-03-23 13:41:30 +0100haritz(~hrtz@user/haritz) (Ping timeout: 252 seconds)
2022-03-23 13:43:37 +0100 <abastro[m]> Haskell shell sounds like a dream :)
2022-03-23 13:43:47 +0100 <abastro[m]> Wanna experience Typed shell, how can I?
2022-03-23 13:44:57 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 13:46:07 +0100 <[exa]> bash isn't a typed shell? (all them nice Strings)
2022-03-23 13:50:15 +0100 <geekosaur> sadly there'sno good way to experience a typed shell, since any types have to be imposed on programs after the fact and that means the shell interface has to know about them to do it
2022-03-23 13:50:49 +0100 <geekosaur> unix is kinda fundamentally stringly typed
2022-03-23 13:50:50 +0100 <abastro[m]> Sad
2022-03-23 13:54:21 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-03-23 13:54:31 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-03-23 13:56:35 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-03-23 13:57:25 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 13:57:57 +0100 <[exa]> abastro[m]: I highly recommend to observe some systems that attempted to make inputs and outputs of general programs "typed"
2022-03-23 13:58:27 +0100 <geekosaur> yeh, unix was actually a reaction to those
2022-03-23 13:58:32 +0100 <abastro[m]> I have no experience with such systems, what are the examples?
2022-03-23 13:58:33 +0100 <[exa]> esp. OLE32, the favorite choice. :D
2022-03-23 13:58:47 +0100 <abastro[m]> Oh, so unix was intentionally untyped
2022-03-23 13:59:14 +0100 <[exa]> intentionally textual and string-ish, yes.
2022-03-23 13:59:24 +0100 <geekosaur> (pre-unix, input andoutput was typically in the form of database-like typed records)
2022-03-23 14:00:03 +0100 <abastro[m]> Hm. I'd prefer typed records though. I guess it is ditched for good, but..
2022-03-23 14:00:37 +0100 <[exa]> some extra things to compare would be the MIME "types" that kinda settled in internets, ASN.1, and perhals XML/JSON/RDF schemas
2022-03-23 14:01:55 +0100 <[exa]> for shell, you'd need to _infer_ all of these very quickly
2022-03-23 14:02:06 +0100 <geekosaur> the problem with typed records is it sets limits on how you can combine programs
2022-03-23 14:02:38 +0100 <geekosaur> being able to apply grep, sort, etc. to *any* program was a major innovation
2022-03-23 14:03:36 +0100 <geekosaur> (I think we've slid offtopic again)
2022-03-23 14:04:31 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 14:05:26 +0100 <geekosaur> VM/SP had a very complicated system sort program that could via JCL be adapted to handle many (not all) program outputs and subsequent inputs; compare unix sort
2022-03-23 14:07:43 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 14:10:07 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
2022-03-23 14:10:12 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 14:12:12 +0100 <abastro[m]> I see, I disliked how unix uses string for everything but now I see the reasoning.
2022-03-23 14:12:57 +0100 <abastro[m]> (My unpopular opinion: monolithic, non-composable programs are good - but that's offtopic and also a bit nonsense)
2022-03-23 14:13:58 +0100 <[exa]> abastro[m]: the point of unix is mostly "this is the fastest implementable, vital tradeoff of simple and universal" and it still can support big monolithic stuff if anyone really needs to, for any reason
2022-03-23 14:14:28 +0100 <[exa]> man, "non-composable programs are good" is highly offtopic :D :D
2022-03-23 14:14:41 +0100 <abastro[m]> Yep, sorry about that
2022-03-23 14:14:55 +0100 <geekosaur> keep in mind also that unix was a research OS that slipped int production, not unlike ghc
2022-03-23 14:15:29 +0100 <geekosaur> bell labs needed a cheap, compact OS for its phone switches and found unix in its own research arm
2022-03-23 14:15:51 +0100elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
2022-03-23 14:16:47 +0100 <geekosaur> just bell, I guess, bell labs was the research arm
2022-03-23 14:17:35 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
2022-03-23 14:17:41 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 14:18:22 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-03-23 14:18:28 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 14:18:52 +0100alMalsamolumberjack123
2022-03-23 14:21:57 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 14:22:04 +0100benin(~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 14:22:05 +0100cfricke(~cfricke@user/cfricke)
2022-03-23 14:23:16 +0100 <[exa]> that's one way to produce quality software, look into the room that contains the bunch of geeks and just find it. :D
2022-03-23 14:24:05 +0100 <geekosaur> unless you're microsoft. (sharepoint was a much better piece of software before the business side go ttheir hands on it, reportedly)
2022-03-23 14:24:52 +0100 <abastro[m]> Hm actually, the objection I heard was more of "lack of capability" in unix system
2022-03-23 14:25:25 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-03-23 14:25:35 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 260 seconds)
2022-03-23 14:26:12 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si)
2022-03-23 14:27:01 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 14:27:25 +0100 <abastro[m]> That and unified File system described as streams
2022-03-23 14:28:23 +0100chenqisu1(~chenqisu1@183.217.201.47) (Ping timeout: 260 seconds)
2022-03-23 14:29:03 +0100abradabara(~abradabar@185.183.97.187)
2022-03-23 14:29:30 +0100 <abradabara> why does printing [5..1] does not work, but [5,4..1] work
2022-03-23 14:29:48 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 14:30:05 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-03-23 14:30:33 +0100 <[exa]> abradabara: the semantics of [5..1] is captured as `enumFromTo`, which assumes a default step of +1 and continues until the result is (<=1)
2022-03-23 14:30:58 +0100 <dminuoso> Its interesting this produces a result at all
2022-03-23 14:31:00 +0100jakalx(~jakalx@base.jakalx.net)
2022-03-23 14:31:08 +0100 <dminuoso> Id have expected it to bottom out
2022-03-23 14:31:17 +0100 <dminuoso> > [5..1]
2022-03-23 14:31:19 +0100 <lambdabot> []
2022-03-23 14:31:26 +0100 <abradabara> [exa]: oh I see, but isn't enumFromTo applies to second part 4..1
2022-03-23 14:31:35 +0100 <abastro[m]> Oh, it checks smaller than 1 I guess
2022-03-23 14:31:46 +0100 <abradabara> >[5,4..1]
2022-03-23 14:31:50 +0100 <abradabara> > [5,4..1]
2022-03-23 14:31:51 +0100 <dminuoso> [exa]: Presumably its rather it produces *while* the opposite holds.
2022-03-23 14:31:51 +0100 <lambdabot> [5,4,3,2,1]
2022-03-23 14:31:55 +0100 <dminuoso> rather than "doing until"
2022-03-23 14:32:26 +0100 <[exa]> abradabara: I'd explain it like that the assumption taken there is the "less surprising" of the two possibilities (the other one being [5,4,3,2,1]) because people usually don't want decreasing sentences appearing from nowhere
2022-03-23 14:32:59 +0100 <[exa]> uh yes and the terminating condition there is somewhat shady for sure, check this:
2022-03-23 14:33:16 +0100 <[exa]> > [1,1.1..2]
2022-03-23 14:33:18 +0100 <lambdabot> [1.0,1.1,1.2000000000000002,1.3000000000000003,1.4000000000000004,1.50000000...
2022-03-23 14:33:22 +0100 <[exa]> ayay
2022-03-23 14:33:38 +0100 <[exa]> > reverse [1,1.1..2]
2022-03-23 14:33:40 +0100 <lambdabot> [2.000000000000001,1.9000000000000008,1.8000000000000007,1.7000000000000006,...
2022-03-23 14:33:59 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out)
2022-03-23 14:34:36 +0100 <abradabara> [exa]: I don't even know haskell much, just used xmonad for some time, and was taking a look at short learnxinyminutes haskell page, what is haskell mainly used for? I am guessing it's some type of very robust, strict, very precise language
2022-03-23 14:34:55 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-03-23 14:34:56 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-03-23 14:35:27 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 14:35:36 +0100 <abradabara> what if i do "lambda>[1..]" here
2022-03-23 14:35:43 +0100 <[exa]> well, you see precision has practical limits. :D
2022-03-23 14:36:13 +0100 <dminuoso> abradabara: its mainly used for all kinds of things.
2022-03-23 14:36:37 +0100bahamas(~lucian@86.120.77.115)
2022-03-23 14:36:42 +0100 <Unicorn_Princess> i'm using ghcup. how do i install e.g. the random package, so that is it accessible to ghci? sticking build-depends: random into the project .cabal file seems to suffice to get the project itself to use the package
2022-03-23 14:36:55 +0100 <Unicorn_Princess> so that it is*
2022-03-23 14:37:08 +0100 <abradabara> dminuoso: could you give some mainstream examples if you don't mind?
2022-03-23 14:37:12 +0100 <dminuoso> Facebook uses Haskell for their entire spam classification (which evaluates every single interaction any user can does, every click).
2022-03-23 14:37:31 +0100 <dminuoso> We use Haskell to build a network description and compile it into hardware configuration as part of our SDN automation
2022-03-23 14:37:39 +0100 <dminuoso> We also use Haskell in various other places
2022-03-23 14:37:44 +0100acidjnk(~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de)
2022-03-23 14:37:50 +0100 <dminuoso> GHC uses Haskell to compile Haskell
2022-03-23 14:37:52 +0100 <geekosaur> Unicorn_Princess, cabal repl --build-depends random
2022-03-23 14:38:01 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e)
2022-03-23 14:38:08 +0100 <dminuoso> abradabara: You might have come across pandoc, which is also written in Haskell by the way. :)
2022-03-23 14:38:10 +0100 <maerwald> Unicorn_Princess: in an empty directory do `cabal install --lib --package-env=. <pkg>`, then run `ghci`
2022-03-23 14:38:11 +0100 <Hecate> We use Haskell to make our various products at work, mainly web APIs, business domain modeling and database interactions
2022-03-23 14:38:28 +0100 <dminuoso> abradabara: the question isnt as much about what it can do, but rather what it cant do
2022-03-23 14:38:30 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net)
2022-03-23 14:38:36 +0100 <dminuoso> real time/low latency systems is where haskell is not ideal
2022-03-23 14:38:57 +0100 <Hecate> yup'
2022-03-23 14:39:05 +0100 <Hecate> or your Haskell code produces C code that does it ;-)
2022-03-23 14:39:12 +0100 <maerwald> Unicorn_Princess: that will create a file like `.ghc.environment.x86_64-linux-8.10.7` in that dir, which ghc/ghci will pick up
2022-03-23 14:39:20 +0100 <dminuoso> and anything where your domain mandates a wealth of existing libraries
2022-03-23 14:39:35 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection)
2022-03-23 14:39:40 +0100 <dminuoso> like say in data science or bio informatics you usually mandate particular libraries to exist already
2022-03-23 14:40:03 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 260 seconds)
2022-03-23 14:40:13 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net)
2022-03-23 14:40:23 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 14:40:33 +0100haritz(~hrtz@62.3.70.206)
2022-03-23 14:40:33 +0100haritz(~hrtz@62.3.70.206) (Changing host)
2022-03-23 14:40:33 +0100haritz(~hrtz@user/haritz)
2022-03-23 14:40:33 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection)
2022-03-23 14:42:05 +0100 <Unicorn_Princess> ah. thanks maerwald, geekosaur. looks like `cabal repl` in my project dir suffices to pick up the dependencies of that project :)
2022-03-23 14:42:14 +0100 <geekosaur> yes
2022-03-23 14:42:31 +0100Ren5050(~Ren5050@190-199-106-227.dyn.dsl.cantv.net)
2022-03-23 14:42:38 +0100Ren5050(~Ren5050@190-199-106-227.dyn.dsl.cantv.net) ()
2022-03-23 14:42:44 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net)
2022-03-23 14:43:11 +0100benin(~benin@183.82.207.30)
2022-03-23 14:43:22 +0100lainon(~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection)
2022-03-23 14:44:17 +0100lagash(lagash@lagash.shelltalk.net) (Remote host closed the connection)
2022-03-23 14:45:18 +0100lagash(lagash@lagash.shelltalk.net)
2022-03-23 14:45:43 +0100 <abradabara> dminuoso: Hecate: thanks, if you don't mind also what top 5 things that makes haskell different than other popular languages for the use cases you listed?
2022-03-23 14:46:35 +0100 <abradabara> for example rust is better than c/c++ (?) because of memory management or something like that
2022-03-23 14:48:28 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-03-23 14:48:43 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 14:48:48 +0100 <abradabara> dminuoso: probably stupid question, gonna do some reading :)
2022-03-23 14:49:01 +0100 <abradabara> learnyouahaskell seems like nice resource
2022-03-23 14:49:33 +0100dextaa_(~dextaa@user/dextaa)
2022-03-23 14:49:40 +0100benin(~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
2022-03-23 14:49:49 +0100 <lortabac> abradabara: for me it's mostly ease of refactoring. When I work with other languages (especially dynamically-typed), code quality tends to decrease with time, whereas with Haskell this doesn't happen
2022-03-23 14:50:33 +0100 <lortabac> of course this only applies to medium/big projects, when you can't keep everything in your head
2022-03-23 14:50:42 +0100 <dminuoso> 1. Lack of parenthesis in function application, 2. Clean readable/defineable ADTs, 3. Highly reusable ADTs (You get a lot of reuse from Maybe), 4. Robust type system that improves confidence of rewrites, and 5. IO expressed at the type level improves reasoning about where side effects can happen and where not.
2022-03-23 14:51:22 +0100benin(~benin@183.82.207.30)
2022-03-23 14:51:32 +0100 <Hecate> I agree with lortabac (and especially since we're colleagues). abradabara you can also get some of my opinions from this talk https://www.youtube.com/watch?v=2JB1_e5wZmU
2022-03-23 14:51:56 +0100 <dminuoso> But yeah, in ease of code refactoring haskell is easily at the top
2022-03-23 14:52:03 +0100 <dminuoso> Especially for non-trivial code bases.
2022-03-23 14:52:08 +0100 <Hecate> and this joins what dminuoso at a higher-level: Your ubiquitous language, with which you speak to the machine and the business people, is really, really efficient at speaking to both parties
2022-03-23 14:52:14 +0100 <Hecate> and this ubiquitous language is Haskell
2022-03-23 14:52:18 +0100 <[exa]> abradabara: top differences (my take): writing parsers is fun, insane abstractions and custom sublanguages are easy to do right, it's pretty fast, types actually help you instead of restricting you
2022-03-23 14:53:19 +0100 <abradabara> lortabac: thanks sir
2022-03-23 14:53:21 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-03-23 14:53:30 +0100 <dminuoso> Be sure to also ask about the dark sides.
2022-03-23 14:54:02 +0100 <dminuoso> Like "What do you curse about when writing Haskell?"
2022-03-23 14:54:46 +0100Sgeo(~Sgeo@user/sgeo)
2022-03-23 14:54:47 +0100ec(~ec@gateway/tor-sasl/ec)
2022-03-23 14:55:04 +0100 <abradabara> dminuoso: [exa]: thanks! what is the reason for it being read from right to left though
2022-03-23 14:55:13 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 14:55:47 +0100 <dminuoso> What do you mean "read from left to right"?
2022-03-23 14:55:58 +0100 <geekosaur> I'm guessing function composition
2022-03-23 14:56:11 +0100 <abradabara> dminuoso: nice one?
2022-03-23 14:56:19 +0100 <dminuoso> Sorry I dont understand.
2022-03-23 14:56:38 +0100 <boxscape_> dminuoso you wrote "left to right", but the question was "right to left"
2022-03-23 14:56:54 +0100 <abradabara> dminuoso: I thought you were making a joke reading what I wrote from right to left
2022-03-23 14:57:08 +0100 <dminuoso> Oh no, that must have been a typo
2022-03-23 14:57:22 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-03-23 14:57:22 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-03-23 14:57:22 +0100wroathe(~wroathe@user/wroathe)
2022-03-23 14:59:42 +0100 <boxscape_> abradabara if you do mean function composition, the reason `f . g` is read from right to left is ultimately because it mirrors the math notation `f ∘ g`, which is in that order so that `(f ∘ g)(x) = f(g(x))`
2022-03-23 14:59:50 +0100 <abradabara> for example myLayouts = avoidStruts . minimize . B.BoringWindows $ perWS, is avoidStruts applied at last here?
2022-03-23 15:00:24 +0100 <abradabara> boxscape_: yep that explains it thanks!
2022-03-23 15:02:45 +0100 <abradabara> Hecate: thanks for the video
2022-03-23 15:03:58 +0100 <boxscape_> abradabara there are composition operators going the other way around as well btw, but they're not as commonly used. In that case you'd have `perWS & (B.BoringWindows >>> mimimize >>> avoidStruts)`
2022-03-23 15:04:03 +0100xff0x(~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Quit: xff0x)
2022-03-23 15:04:23 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 15:05:30 +0100kaph(~kaph@net-109-116-124-149.cust.vodafonedsl.it)
2022-03-23 15:06:30 +0100 <abradabara> boxscape_: good to know, thank you
2022-03-23 15:07:31 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-03-23 15:07:42 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-03-23 15:08:12 +0100Orbstheorem(~orbstheor@2001:470:69fc:105::a56)
2022-03-23 15:08:31 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2022-03-23 15:11:11 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 15:11:15 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
2022-03-23 15:13:11 +0100mrkajetanp(~mrkajetan@88.98.245.28) (Ping timeout: 256 seconds)
2022-03-23 15:13:18 +0100shriekingnoise(~shrieking@201.231.16.156)
2022-03-23 15:13:24 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-03-23 15:15:55 +0100hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-03-23 15:16:48 +0100hololeap(~hololeap@user/hololeap)
2022-03-23 15:19:56 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 252 seconds)
2022-03-23 15:20:29 +0100k8yun(~k8yun@user/k8yun)
2022-03-23 15:22:00 +0100 <hololeap> how does the hackage server calculate code coverage?
2022-03-23 15:23:27 +0100zmt00(~zmt00@user/zmt00)
2022-03-23 15:23:34 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 15:24:14 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 15:24:28 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 15:24:30 +0100ccntrq(~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2) (Remote host closed the connection)
2022-03-23 15:24:31 +0100 <hololeap> here's an example: https://hackage.haskell.org/package/turtle
2022-03-23 15:24:40 +0100nsyd(~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net)
2022-03-23 15:24:48 +0100ccntrq(~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2)
2022-03-23 15:26:33 +0100abradabara(~abradabar@185.183.97.187) (Ping timeout: 256 seconds)
2022-03-23 15:30:44 +0100 <exarkun> Does that page say something about coverage?
2022-03-23 15:32:22 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-03-23 15:32:38 +0100 <hololeap> there's a badge that says "Coverage | 20%"
2022-03-23 15:32:52 +0100 <hololeap> I'm really just curious
2022-03-23 15:35:15 +0100 <boxscape_> hololeap looks like hpc https://github.com/haskell/hackage-server/blob/a6e570a7ba47256267e8cdd7658163740123e7d5/exes/Build…
2022-03-23 15:36:30 +0100 <hololeap> huh ok
2022-03-23 15:36:37 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-03-23 15:36:59 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2022-03-23 15:39:53 +0100 <abastro[m]> Hm actually, what does left application do good for programming
2022-03-23 15:39:56 +0100 <abastro[m]> Never thought about this
2022-03-23 15:40:12 +0100 <hololeap> that actually looks pretty thorough
2022-03-23 15:41:00 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out)
2022-03-23 15:41:17 +0100 <abastro[m]> Actually I learned of a case where right multiplication is great
2022-03-23 15:41:27 +0100 <boxscape_> left application as in f(x)?
2022-03-23 15:41:34 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 15:41:35 +0100 <boxscape_> i.e. f is to the left of x?
2022-03-23 15:41:36 +0100 <abastro[m]> In mathematics, so maybe left application is not that great in math as well
2022-03-23 15:41:50 +0100 <abastro[m]> Yes, f (x)
2022-03-23 15:42:18 +0100 <boxscape_> Yeah I'm not sure there's a good reason for it other than for consistency with everything else
2022-03-23 15:42:24 +0100 <hololeap> it's just a convention
2022-03-23 15:43:00 +0100 <abastro[m]> In programming, desire of reading from left to right def makes sense
2022-03-23 15:43:05 +0100 <hololeap> it could be top application and it would work the same
2022-03-23 15:43:18 +0100 <geekosaur> math has x^f too, although it's not widely used
2022-03-23 15:43:33 +0100 <abastro[m]> Yea, never seen that used personally
2022-03-23 15:44:46 +0100 <abastro[m]> Oh wait. Currying requires to left application to look pretty
2022-03-23 15:44:54 +0100 <boxscape_> does it though?
2022-03-23 15:45:00 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-03-23 15:45:58 +0100 <abastro[m]> Yea, with right application, you get (z (y (x f)))
2022-03-23 15:46:05 +0100 <boxscape_> seems fine to me
2022-03-23 15:46:19 +0100 <abastro[m]> ..and you have to read right to left for curried parameters
2022-03-23 15:46:41 +0100 <hololeap> something something arabic
2022-03-23 15:47:12 +0100 <boxscape_> no, just do `(x (y (z f)))` and get used to being able to partially apply the rightmost argument rather than the leftmost argument
2022-03-23 15:47:41 +0100 <boxscape_> or wait would that work out with the type signature...
2022-03-23 15:47:56 +0100 <geekosaur> you'd write the type signature in reverse as well
2022-03-23 15:47:56 +0100 <boxscape_> f :: z -> y -> x -> ...
2022-03-23 15:47:59 +0100 <boxscape_> :/
2022-03-23 15:48:22 +0100 <geekosaur> f :: res <- z <- y <- x
2022-03-23 15:48:34 +0100 <geekosaur> might even reverse it fully
2022-03-23 15:48:39 +0100 <boxscape_> I don't like that you have to read that from right to left now though
2022-03-23 15:48:39 +0100bahamas(~lucian@86.120.77.115) (Ping timeout: 260 seconds)
2022-03-23 15:48:43 +0100 <geekosaur> res <- z <- y <- x :: f
2022-03-23 15:49:12 +0100 <abastro[m]> Hahahah
2022-03-23 15:50:24 +0100 <abastro[m]> Pipe operator is a good middle ground after all
2022-03-23 15:50:51 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 15:51:15 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 15:52:06 +0100k8yun(~k8yun@user/k8yun) (Read error: Connection reset by peer)
2022-03-23 15:52:30 +0100k8yun(~k8yun@user/k8yun)
2022-03-23 15:52:39 +0100Pickchea(~private@user/pickchea)
2022-03-23 15:55:07 +0100 <boxscape_> though if you write it in reverse, `x (y (z f))` actually corresponds to `f :: ((res <- x) <- y) <- z`, which you *can* read from left to right
2022-03-23 15:55:20 +0100 <boxscape_> if you accept that the result comes first
2022-03-23 15:56:01 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 256 seconds)
2022-03-23 15:56:33 +0100winstonsmith_(~winston@2a02:c98:1003:8000:6106:3ff0:197d:fcd2) (Quit: Leaving)
2022-03-23 15:57:09 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 256 seconds)
2022-03-23 15:58:31 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-03-23 16:03:15 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 16:04:10 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 16:04:13 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-03-23 16:05:05 +0100acidjnk(~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-03-23 16:06:13 +0100CiaoSen(~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-03-23 16:06:29 +0100 <abastro[m]> Hmm if you think of it, monadic bind is left to right, right?
2022-03-23 16:06:40 +0100 <abastro[m]> We apply monadic function to the left
2022-03-23 16:06:46 +0100leungbk(~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com)
2022-03-23 16:07:05 +0100 <boxscape_> yep but that's why we also have =<<, to mirror the order of function application
2022-03-23 16:07:09 +0100 <boxscape_> though we only have >>, not <<
2022-03-23 16:08:00 +0100 <geekosaur> these days we do have <*
2022-03-23 16:08:14 +0100 <boxscape_> yeah but << would be flip (>>), which is different from <*
2022-03-23 16:08:36 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-03-23 16:08:54 +0100 <abastro[m]> Yep, it follows the order of effect
2022-03-23 16:09:16 +0100 <abastro[m]> It makes me crave more for pipe operator
2022-03-23 16:10:38 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 16:10:38 +0100acidjnk(~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de)
2022-03-23 16:11:23 +0100k8yun_(~k8yun@user/k8yun)
2022-03-23 16:14:04 +0100dcoutts_(~duncan@host86-167-90-249.range86-167.btcentralplus.com)
2022-03-23 16:14:15 +0100lumberjack123(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-03-23 16:14:57 +0100k8yun(~k8yun@user/k8yun) (Ping timeout: 252 seconds)
2022-03-23 16:15:25 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
2022-03-23 16:15:26 +0100 <kuribas> :t (<*)
2022-03-23 16:15:27 +0100 <lambdabot> Applicative f => f a -> f b -> f a
2022-03-23 16:15:29 +0100 <kuribas> :t (>>)
2022-03-23 16:15:30 +0100 <lambdabot> Monad m => m a -> m b -> m b
2022-03-23 16:15:49 +0100 <kuribas> :t (<$)
2022-03-23 16:15:50 +0100 <lambdabot> Functor f => a -> f b -> f a
2022-03-23 16:16:06 +0100 <kuribas> :t (*>)
2022-03-23 16:16:06 +0100 <lambdabot> Applicative f => f a -> f b -> f b
2022-03-23 16:16:17 +0100dcoutts__(~duncan@host86-167-206-34.range86-167.btcentralplus.com) (Ping timeout: 240 seconds)
2022-03-23 16:19:26 +0100 <abastro[m]> I heard that monad was initially introduced in haskell due to user interest
2022-03-23 16:19:32 +0100 <abastro[m]> What kind of interest was it?
2022-03-23 16:19:50 +0100 <c_wraith> not having to use the previous IO system
2022-03-23 16:20:03 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 16:21:30 +0100 <abastro[m]> Ouch
2022-03-23 16:21:45 +0100 <c_wraith> What's funny about the history of Haskell there is that the IO type, the Monad class, and the ability to define classes on higher-kinded types were all added to Haskell at the same time
2022-03-23 16:22:21 +0100 <abastro[m]> Oh, i did not know haskell used to not have HKT
2022-03-23 16:22:38 +0100 <abastro[m]> I guess HKT would be a tough concept even for haskell
2022-03-23 16:23:09 +0100 <abastro[m]> Perhaps that is why many modern languages are not following HKT then
2022-03-23 16:23:10 +0100 <dminuoso> Higher kinded types are not the biggest thing here.
2022-03-23 16:23:16 +0100 <dminuoso> But rather typeclasses over higher kinded types.
2022-03-23 16:23:39 +0100 <c_wraith> I don't actually know if it had parametric polymorphism over higher-kinded types before that.
2022-03-23 16:23:40 +0100 <dminuoso> One of the things that makes grokking `Monad` or say `Applicative` confusing, is that they are an interface on `Type -> Type` kinded things, not `Type` things.
2022-03-23 16:23:53 +0100 <dminuoso> And its also something very few languages support.
2022-03-23 16:23:57 +0100 <abastro[m]> Noo I misread :<
2022-03-23 16:24:24 +0100 <abastro[m]> Tbh next to no language implements bare HKT either
2022-03-23 16:24:50 +0100 <c_wraith> admittedly, when most languages talk about higher-kinded types, they are ignoring the fact that they already have them, they just provide no polymorphism over them
2022-03-23 16:24:59 +0100 <dminuoso> Well the idea is present in multiple languages, but not necessarily as first-class types.
2022-03-23 16:25:19 +0100 <c_wraith> which is why I usually say things like "higher-kinded polymorphism"
2022-03-23 16:25:20 +0100 <abastro[m]> I mean the ability to reference the HKT level thing itself
2022-03-23 16:25:37 +0100 <c_wraith> because that's the important part
2022-03-23 16:26:14 +0100 <abastro[m]> Really IIRC with generics in other langs, you'd have List represent List<Any>
2022-03-23 16:27:31 +0100 <c_wraith> Well, that's a bit different.
2022-03-23 16:28:19 +0100 <c_wraith> I think Scala is roughly the only language that's made higher-kinded polymorphism work with that kind of syntax, with Foo[_] stuff
2022-03-23 16:29:05 +0100 <c_wraith> It's still not ideal, but at least it makes it clear that the type argument is unnamed
2022-03-23 16:30:13 +0100 <c_wraith> Which means it has to be treated polymorphically
2022-03-23 16:31:17 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 16:31:23 +0100 <dminuoso> With a bit of twisting you can make it happen in rust
2022-03-23 16:31:28 +0100 <dminuoso> But its rather gross
2022-03-23 16:31:40 +0100 <dminuoso> And certainly doesnt look remotely similar at first glance
2022-03-23 16:32:00 +0100 <Sqaure> I remember reading about GHC adding substantial changes to make it more practical for emitting .js/wasm. I wonder if this is labeled something or if someone has a link to a place where that is detailed?
2022-03-23 16:32:26 +0100 <dminuoso> Sqaure: mpickering mentioned it on the haskell mailing lists a few weeks ago
2022-03-23 16:32:37 +0100 <dminuoso> Might want to poke him in #ghc
2022-03-23 16:32:45 +0100 <dminuoso> Think he's shepharding it
2022-03-23 16:32:58 +0100 <Sqaure> oh ok. Thanks. Ill follow that lead
2022-03-23 16:33:05 +0100 <c_wraith> dminuoso: last I heard, the methods of doing that in Rust break down when you have something like traverse, which is both polytypic and makes use of bounded polymorphism
2022-03-23 16:34:34 +0100mvk(~mvk@2607:fea8:5cc3:7e00::7980)
2022-03-23 16:37:35 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 16:37:39 +0100yauhsien(~Yau-Hsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 16:37:42 +0100vysn(~vysn@user/vysn)
2022-03-23 16:40:33 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it) (Read error: Connection reset by peer)
2022-03-23 16:43:11 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it)
2022-03-23 16:45:18 +0100bahamas(~lucian@84.232.140.158)
2022-03-23 16:47:45 +0100zebrag(~chris@user/zebrag)
2022-03-23 16:48:23 +0100acidjnk(~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-03-23 16:49:17 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds)
2022-03-23 16:49:57 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-03-23 16:51:12 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit)
2022-03-23 16:52:15 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 16:59:11 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2022-03-23 16:59:22 +0100 <Zemyla> There should be a class Profunctor p => Contraclosed p where contraclosed :: p a b -> p (b -> x) (a -> x)
2022-03-23 17:01:25 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2022-03-23 17:04:44 +0100vglfr(~vglfr@88.155.109.98)
2022-03-23 17:05:41 +0100 <geekosaur> that looks suspiciously arrow-like…
2022-03-23 17:06:07 +0100 <[exa]> Zemyla: any example instances?
2022-03-23 17:06:23 +0100 <c_wraith> the instance for (->) follows directly from the type
2022-03-23 17:06:56 +0100 <c_wraith> and most Profunctor instances are for some wrapped variation on (->)
2022-03-23 17:07:24 +0100 <Zemyla> The only instances I can think of are (->) and Indexed i.
2022-03-23 17:10:12 +0100bahamas(~lucian@84.232.140.158) (Ping timeout: 240 seconds)
2022-03-23 17:10:13 +0100 <c_wraith> You should be able to write an instance for every Profunctor where the type variables belong to the same function.
2022-03-23 17:11:20 +0100 <c_wraith> which is certainly the most common shape for a Profunctor instance, though not the only one
2022-03-23 17:13:38 +0100xff0x(~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp)
2022-03-23 17:15:01 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-03-23 17:17:39 +0100vysn(~vysn@user/vysn) (Ping timeout: 252 seconds)
2022-03-23 17:18:21 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 17:20:56 +0100napping(~brandon@65.128.43.198)
2022-03-23 17:21:29 +0100benin(~benin@183.82.207.30) (Ping timeout: 252 seconds)
2022-03-23 17:22:03 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 252 seconds)
2022-03-23 17:22:20 +0100benin(~benin@183.82.207.30)
2022-03-23 17:22:23 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-03-23 17:26:40 +0100Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2022-03-23 17:29:06 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:9be3:3a9c:fd6c:bab4) (Quit: WeeChat 2.8)
2022-03-23 17:32:43 +0100vglfr(~vglfr@88.155.109.98) (Ping timeout: 260 seconds)
2022-03-23 17:33:43 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-03-23 17:33:58 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-03-23 17:38:49 +0100cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2022-03-23 17:41:52 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-03-23 17:43:31 +0100dextaa_(~dextaa@user/dextaa)
2022-03-23 17:44:03 +0100boxscape_(~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-03-23 17:45:14 +0100ubert(~Thunderbi@p200300ecdf1588c644ba34ac9ed54fc8.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-03-23 17:47:25 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 17:47:40 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-03-23 17:50:59 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2022-03-23 17:51:45 +0100Tuplanolla(~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
2022-03-23 17:52:03 +0100 <janus> what is a quick and dirty way to indent a default Show instance of a record?
2022-03-23 17:52:22 +0100 <janus> like, increase indention on '{', newlines after commas, stuff like taht
2022-03-23 17:52:57 +0100deadmarshal_(~deadmarsh@95.38.114.161)
2022-03-23 17:53:06 +0100 <janus> i don't wanna change the code because i have many record nested in one another and i will only use this for debugging anyway
2022-03-23 17:53:56 +0100bahamas(~lucian@84.232.140.158)
2022-03-23 17:55:31 +0100 <sm> janus: use pretty-show package
2022-03-23 17:55:35 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
2022-03-23 17:56:04 +0100Guest21(~Guest21@2408:846a:200:2177:9ee:b4ee:80a3:4cfb)
2022-03-23 17:56:09 +0100 <sm> pretty-simple is another one, slightly different
2022-03-23 17:56:34 +0100 <sm> g'day all
2022-03-23 17:56:53 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-03-23 17:57:02 +0100deadmars-(~deadmarsh@95.38.230.213)
2022-03-23 17:57:17 +0100deadmarshal_(~deadmarsh@95.38.114.161) (Ping timeout: 256 seconds)
2022-03-23 17:58:21 +0100bahamas(~lucian@84.232.140.158) (Ping timeout: 250 seconds)
2022-03-23 17:58:34 +0100Guest21(~Guest21@2408:846a:200:2177:9ee:b4ee:80a3:4cfb) (Client Quit)
2022-03-23 17:59:51 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 250 seconds)
2022-03-23 18:00:11 +0100 <janus> nice, thanks, this seems to work
2022-03-23 18:02:24 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
2022-03-23 18:03:11 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-03-23 18:03:26 +0100razetime(~quassel@117.207.18.88) (Remote host closed the connection)
2022-03-23 18:04:10 +0100gues44081(~username@2408:846a:200:2177:9ee:b4ee:80a3:4cfb)
2022-03-23 18:04:46 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it)
2022-03-23 18:06:16 +0100lumberjack123(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-03-23 18:07:07 +0100gues44081(~username@2408:846a:200:2177:9ee:b4ee:80a3:4cfb) ()
2022-03-23 18:08:16 +0100boxscape_(~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
2022-03-23 18:08:55 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-03-23 18:12:33 +0100abradabara(~abradabar@185.183.97.187)
2022-03-23 18:14:57 +0100Kaipi(~Kaiepi@156.34.47.253) (Ping timeout: 240 seconds)
2022-03-23 18:15:25 +0100MaterazziSan(~Materazzi@139.22.44.89.dynamic.jazztel.es)
2022-03-23 18:16:05 +0100sridaran(~sridaran@c-68-83-24-37.hsd1.nj.comcast.net)
2022-03-23 18:18:50 +0100ccntrq(~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2) (Remote host closed the connection)
2022-03-23 18:18:57 +0100sridaran(~sridaran@c-68-83-24-37.hsd1.nj.comcast.net) (Client Quit)
2022-03-23 18:20:53 +0100deadmars-(~deadmarsh@95.38.230.213) (Ping timeout: 250 seconds)
2022-03-23 18:21:05 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 18:23:14 +0100segfaultfizzbuzz(~segfaultf@2602:306:cd3c:9350:4828:b9b3:658f:35bc)
2022-03-23 18:23:35 +0100sloorush(~sloorush@136.233.9.99) (Ping timeout: 256 seconds)
2022-03-23 18:24:03 +0100 <segfaultfizzbuzz> so i am trying to push myself to jump beyond what i currently understand... i saw a discussion of the yoneda lemma of category theory and i might have understood it
2022-03-23 18:24:43 +0100 <segfaultfizzbuzz> which is to say that if you have a bunch of functors mapping a variety of things onto X, once you have a great enough variety of those functors are you have completely determined what X is
2022-03-23 18:25:13 +0100 <segfaultfizzbuzz> i know that the yoneda lemma has some kind of relevance to haskell... can anyone help me bridge this? or am i way off base here
2022-03-23 18:25:51 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 256 seconds)
2022-03-23 18:27:52 +0100bahamas(~lucian@84.232.140.158)
2022-03-23 18:28:12 +0100 <geekosaur> I'd say the only relevance it has is that a small subset of Haskellers who understand it make use of it
2022-03-23 18:29:11 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-03-23 18:29:42 +0100 <segfaultfizzbuzz> i see... is that "essential" usage or is it "decorative" or "sophisticated"
2022-03-23 18:30:29 +0100 <geekosaur> depends on who's using it, I think
2022-03-23 18:30:44 +0100 <geekosaur> btw I am not one of those who understands yoneda
2022-03-23 18:30:47 +0100MajorBiscuit(~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl) (Ping timeout: 252 seconds)
2022-03-23 18:30:59 +0100 <geekosaur> except insofar as I know it's related to functors in some way
2022-03-23 18:31:21 +0100econo(uid147250@user/econo)
2022-03-23 18:32:27 +0100bahamas(~lucian@84.232.140.158) (Ping timeout: 260 seconds)
2022-03-23 18:35:27 +0100 <janus> does anybody care about getting aeson 1.5 running on ghc 9.2 (nightly)? if so, i have sent a PR out for that, would appreciate any reviews: https://github.com/haskell/aeson/pull/935
2022-03-23 18:36:53 +0100sloorush(~sloorush@136.233.9.99)
2022-03-23 18:37:49 +0100Akiva(~Akiva@user/Akiva)
2022-03-23 18:41:31 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e)
2022-03-23 18:41:57 +0100y04nn(~y04nn@2a03:1b20:1:e011::a19e) (Remote host closed the connection)
2022-03-23 18:50:36 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-03-23 18:59:45 +0100MaterazziSan(~Materazzi@139.22.44.89.dynamic.jazztel.es) (ERC (IRC client for Emacs 27.1))
2022-03-23 18:59:58 +0100bahamas(~lucian@84.232.140.158)
2022-03-23 19:00:10 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-03-23 19:00:10 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-03-23 19:00:10 +0100wroathe(~wroathe@user/wroathe)
2022-03-23 19:04:29 +0100nf(~n@monade.li) (Quit: Fairfarren.)
2022-03-23 19:05:22 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 19:06:19 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 19:06:50 +0100mrkajetanp(~mrkajetan@2a01:4b00:ea36:6c00:7994:941c:3f5d:2b88)
2022-03-23 19:07:21 +0100mbuf(~Shakthi@223.178.96.253) (Quit: Leaving)
2022-03-23 19:09:38 +0100nf(~n@monade.li)
2022-03-23 19:10:15 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-03-23 19:13:44 +0100 <boxscape_> segfaultfizzbuzz IIRC one use of the Yoneda lemma in Haskell is that you can you use to transform multiple fmap invocations into a single fmap invocation, potentially improving performance
2022-03-23 19:14:20 +0100 <dminuoso> Well, it's not really a "usage" of the yoneda lemma.
2022-03-23 19:14:42 +0100 <boxscape_> I suppose maybe it's more accurate to say it's a usage of the Yoneda newtype
2022-03-23 19:16:44 +0100 <dminuoso> In a lot of ways I think making these connections to category theory is cute, but it scares users away.
2022-03-23 19:16:47 +0100 <segfaultfizzbuzz> boxscape_: so the yoneda lemma is useful in proving the equivalence between function applications?
2022-03-23 19:17:12 +0100 <dminuoso> segfaultfizzbuzz: So assume you have some repeated applications of fmap
2022-03-23 19:17:19 +0100 <dminuoso> `fmap f . fmap g . fmap h . fmap i`
2022-03-23 19:17:20 +0100 <segfaultfizzbuzz> i am not interested in being "scared away" or "not scared away", i am interested in "effective abstractions which are not masturbatory"
2022-03-23 19:17:37 +0100 <dminuoso> So by fmap laws you have:
2022-03-23 19:17:48 +0100 <dminuoso> fmap f . fmap g . fmap h . fmap i = fmap (f . g . h . i)
2022-03-23 19:18:01 +0100 <dminuoso> But GHC cant make that transformation itself
2022-03-23 19:18:10 +0100 <segfaultfizzbuzz> ...wow really? heh
2022-03-23 19:18:22 +0100 <dminuoso> It cant know functor laws are respected in the first place.
2022-03-23 19:18:43 +0100 <segfaultfizzbuzz> aren't f g h i declared as functors...?
2022-03-23 19:18:44 +0100 <dminuoso> And it would need a special cased simplifier routine to recognize this. But we have neither
2022-03-23 19:19:00 +0100 <dminuoso> With Yoneda you can sort of enforce this transformation itself
2022-03-23 19:19:29 +0100 <dminuoso> % newtype Yoneda f a = Yoneda { runYoneda :: forall b. (a -> b) -> f b }
2022-03-23 19:19:29 +0100 <yahb> dminuoso:
2022-03-23 19:19:34 +0100 <dminuoso> % :t fmap
2022-03-23 19:19:34 +0100 <yahb> dminuoso: Functor f => (a -> b) -> f a -> f b
2022-03-23 19:19:56 +0100 <dminuoso> So Yoneda will, by convention, contain fmap partially applied to something
2022-03-23 19:20:10 +0100 <dminuoso> % x = Yoneda (`fmap` [1,2,3])
2022-03-23 19:20:10 +0100 <yahb> dminuoso:
2022-03-23 19:20:15 +0100 <dminuoso> Then you just write:
2022-03-23 19:20:25 +0100 <dminuoso> instance Functor (Yoneda f) where fmap f m = Yoneda (\k -> runYoneda m (k . f))
2022-03-23 19:20:27 +0100 <dminuoso> % instance Functor (Yoneda f) where fmap f m = Yoneda (\k -> runYoneda m (k . f))
2022-03-23 19:20:27 +0100 <yahb> dminuoso:
2022-03-23 19:20:42 +0100vglfr(~vglfr@46.96.156.93)
2022-03-23 19:20:44 +0100 <dminuoso> For convenience we now write
2022-03-23 19:20:47 +0100 <dminuoso> % liftYoneda a = Yoneda (\f -> fmap f a)
2022-03-23 19:20:47 +0100 <yahb> dminuoso:
2022-03-23 19:21:02 +0100 <dminuoso> Then you can take some arbitrary functorial value, like [1,2,3], liftYoneda (partially apply to fmap)
2022-03-23 19:21:10 +0100 <dminuoso> Then if you use `fmap` on the Yoneda wrapper, it will automatically do the fusion
2022-03-23 19:21:18 +0100 <dminuoso> And then you lowerYoneda, get your list back
2022-03-23 19:21:39 +0100 <dminuoso> Some people think its cute to explain this in terms of category theory, I prefer just looking at what this does.
2022-03-23 19:21:55 +0100 <boxscape_> (so `fmap f . fmap g . fmap h . fmap i` becomes `lowerYoneda . fmap f . fmap g . fmap h . fmap i . liftYoneda`)
2022-03-23 19:22:51 +0100 <boxscape_> segfaultfizzbuzz the Yoneda lemma here is reflected in the definition of the newtype, f a ~= forall b . (a -> b) -> f b
2022-03-23 19:23:14 +0100 <dminuoso> segfaultfizzbuzz: by the way, Codensity is the exact same story except with (>>=) :)
2022-03-23 19:24:16 +0100 <segfaultfizzbuzz> it's a little bit far beyond where i am but thanks for trying to help me catch a glimpse of things. something about proving equality of fmap compositions
2022-03-23 19:24:30 +0100zincy_(~zincy@2a00:23c8:970c:4801:a9ba:a14e:e332:b83f)
2022-03-23 19:29:57 +0100 <dminuoso> segfaultfizzbuzz: By the way, its usually easier to prove `fmap id = id`
2022-03-23 19:30:03 +0100 <boxscape_> ugh I keep getting the wrong one of these when searching in Hoogle. I was thinking "hmm it seems really strange that Codensity doesn't have have a Monad instance", but of course that's because the first result in hoogle is for profunctors
2022-03-23 19:30:17 +0100 <dminuoso> due to the way our type system works, if you prove `fmap id = id`, `fmap f . fmap g = fmap (f . g)` automatically holds
2022-03-23 19:30:40 +0100 <segfaultfizzbuzz> dminuso: ah interesting
2022-03-23 19:31:05 +0100deadmarshal_(~deadmarsh@95.38.230.213)
2022-03-23 19:32:27 +0100 <dminuoso> So yeah, it might be obvious how if you do `fmap f . fmap g . fmap h` on a list that this will generate intermediate lists
2022-03-23 19:32:32 +0100 <dminuoso> Which is a bit unfortunate
2022-03-23 19:32:42 +0100kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
2022-03-23 19:33:26 +0100 <dminuoso> If you have a list of non-trivial size (say a few million elements), and you want to fmap a bunch of times over that, it's clearly faster and better to just compose the functions and fmap once, generating millions cons cells just once, not a bunch of times
2022-03-23 19:34:02 +0100 <dminuoso> Sometimes your code structure lets you just express that, but sometimes it's not as easy or as expressive
2022-03-23 19:34:39 +0100 <dminuoso> It's often more convenient to just wrap it with Yoneda, and then just write naive `fmap` a bunch of times, knowing that the Yoneda Functor implementation will compose (fuse) the functions together.
2022-03-23 19:35:24 +0100deadmarshal_(~deadmarsh@95.38.230.213) (Ping timeout: 240 seconds)
2022-03-23 19:36:04 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-03-23 19:37:24 +0100segfaultfizzbuzz(~segfaultf@2602:306:cd3c:9350:4828:b9b3:658f:35bc) (Ping timeout: 240 seconds)
2022-03-23 19:38:10 +0100cheater(~Username@user/cheater)
2022-03-23 19:40:03 +0100k8yun_(~k8yun@user/k8yun) (Quit: Leaving)
2022-03-23 19:40:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-03-23 19:43:00 +0100Kaipi(~Kaiepi@156.34.47.253)
2022-03-23 19:43:35 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
2022-03-23 19:44:27 +0100jakalx(~jakalx@base.jakalx.net)
2022-03-23 19:44:42 +0100Benzi-Junior(~BenziJuni@88-149-64-179.du.xdsl.is)
2022-03-23 19:45:58 +0100vglfr(~vglfr@46.96.156.93) (Read error: Connection reset by peer)
2022-03-23 19:46:07 +0100vglfr(~vglfr@46.96.156.93)
2022-03-23 19:46:49 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-03-23 19:47:00 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-03-23 19:49:09 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
2022-03-23 19:50:02 +0100unyu(~pyon@user/pyon) (Ping timeout: 240 seconds)
2022-03-23 19:50:28 +0100justOkay(~justache@user/justache) (Read error: Connection reset by peer)
2022-03-23 19:51:27 +0100justOkay(~justache@user/justache)
2022-03-23 19:52:33 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 256 seconds)
2022-03-23 19:56:36 +0100vglfr(~vglfr@46.96.156.93) (Ping timeout: 245 seconds)
2022-03-23 19:59:43 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 20:02:03 +0100phma(~phma@host-67-44-208-58.hnremote.net) (Read error: Connection reset by peer)
2022-03-23 20:03:18 +0100phma(phma@2001:5b0:2172:dab8:f6f:c543:829a:340a)
2022-03-23 20:03:32 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-03-23 20:05:17 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-03-23 20:08:59 +0100sloorush(~sloorush@136.233.9.99) (Ping timeout: 256 seconds)
2022-03-23 20:09:35 +0100 <tomsmeding> it seems I cannot open file descriptors other than 0,1,2 for a child process with 'process'; is it correct that this is just omitted functionality or am I missing something?
2022-03-23 20:11:39 +0100jakalx(~jakalx@base.jakalx.net)
2022-03-23 20:13:58 +0100 <monochrom> In the CreateProcess record, the field "close_fds" may help.
2022-03-23 20:14:21 +0100 <tomsmeding> oh wait
2022-03-23 20:14:31 +0100 <tomsmeding> heh
2022-03-23 20:14:37 +0100 <tomsmeding> monochrom++
2022-03-23 20:14:40 +0100 <monochrom> But it sounds very indirectly like False is already the default.
2022-03-23 20:15:42 +0100unyu(~pyon@user/pyon)
2022-03-23 20:15:56 +0100 <tomsmeding> hm, but the workaround of writing a shell script for this is probably a better idea anyway, so I don't even need the functionality anymore :)
2022-03-23 20:16:26 +0100 <geekosaur> using fds other than those is highly nonstandard behavior
2022-03-23 20:16:47 +0100 <monochrom> Yeah, give Caeser what belongs to Caeser, give shell what belongs to shell. >:)
2022-03-23 20:17:02 +0100 <tomsmeding> man 1 bwrap: "--file FD DEST - Copy from the file descriptor FD to DEST."
2022-03-23 20:17:05 +0100 <tomsmeding> I didn't invent the API
2022-03-23 20:17:24 +0100 <tomsmeding> I agree it's weird
2022-03-23 20:17:25 +0100 <geekosaur> timeto use /proc/self/fds
2022-03-23 20:17:42 +0100 <monochrom> Give Caeser a shell, and he can script for a day. Show him Haskell, and he has galaxy brain for life or something.
2022-03-23 20:18:58 +0100 <geekosaur> oh, that might not even work
2022-03-23 20:19:03 +0100 <geekosaur> bubblewrap stuff
2022-03-23 20:19:59 +0100 <geekosaur> anyway it is nonstandard whereas process has to be as standard as possible to work on both unix and windows. you may find something more flexible in the unix package
2022-03-23 20:20:32 +0100 <geekosaur> (in particular at least some versions of windows use fds 3 and 4 already)
2022-03-23 20:21:10 +0100 <tomsmeding> ah right, good point about portability
2022-03-23 20:23:22 +0100oooottoo(~oooottoo@c-24-9-197-96.hsd1.co.comcast.net)
2022-03-23 20:23:25 +0100 <geekosaur> (and yet still runs into problems. #ghc has seen several rants about both os x and windows portability gotchas)
2022-03-23 20:26:29 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 20:27:10 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 20:37:18 +0100briandaed(~root@109.95.142.93.r.toneticgroup.pl) (Ping timeout: 252 seconds)
2022-03-23 20:38:44 +0100Guest27(~Guest27@c-174-63-99-174.hsd1.ma.comcast.net) (Quit: Client closed)
2022-03-23 20:41:48 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-03-23 20:42:08 +0100Giovanni(~Giovanni@176.67.166.45) (Remote host closed the connection)
2022-03-23 20:44:36 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 20:49:17 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-03-23 20:51:02 +0100Codaraxis__(~Codaraxis@user/codaraxis) (Quit: Leaving)
2022-03-23 20:51:29 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 256 seconds)
2022-03-23 20:53:44 +0100vorpuni(~pvorp@2001:861:3881:c690:653f:80d3:c158:3650)
2022-03-23 20:54:35 +0100xcmw(~textual@dyn-72-33-0-152.uwnet.wisc.edu)
2022-03-23 21:02:32 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-03-23 21:04:48 +0100bahamas(~lucian@84.232.140.158) (Ping timeout: 252 seconds)
2022-03-23 21:06:38 +0100Guest84(~Guest84@2601:602:87f:4220:33a4:a2a9:5b0:4f1e)
2022-03-23 21:07:17 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 21:07:49 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-03-23 21:07:51 +0100Pickchea(~private@user/pickchea)
2022-03-23 21:07:55 +0100 <Guest84> Hello! I was wondering how I would make a list by doing something like: [16,8..0] but rather than returning [16,8,0] it would return [16,8,4,2,0].... I want the decrement to be division
2022-03-23 21:08:51 +0100 <geekosaur> you can't do that automagically
2022-03-23 21:09:03 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-03-23 21:09:12 +0100 <Guest84> How would you suggest it be done?
2022-03-23 21:09:13 +0100 <geekosaur> the various list iteration syntaxes are all invocation of Enum methods
2022-03-23 21:09:25 +0100 <Guest84> Right
2022-03-23 21:09:37 +0100 <geekosaur> also you're not getting 0 from a division, did you mean 1?
2022-03-23 21:10:02 +0100 <Guest84> Yes
2022-03-23 21:10:33 +0100Lord_of_Life_Lord_of_Life
2022-03-23 21:10:54 +0100 <geekosaur> mmm
2022-03-23 21:11:50 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-03-23 21:12:19 +0100 <geekosaur> > let divs 1 = [1]; divs x = x : divs (x `div` 2) in divs 16
2022-03-23 21:12:20 +0100 <lambdabot> [16,8,4,2,1]
2022-03-23 21:13:05 +0100 <Guest84> Awesome!
2022-03-23 21:13:15 +0100 <Guest84> Thank you!!
2022-03-23 21:14:08 +0100pgib(~textual@173.38.117.90)
2022-03-23 21:14:22 +0100Techcable(~Techcable@user/Techcable) (Remote host closed the connection)
2022-03-23 21:14:29 +0100Techcable(~Techcable@user/Techcable)
2022-03-23 21:15:41 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 21:15:51 +0100 <tomsmeding> > takeWhile (> 0) (iterate (`div` 2) 16)
2022-03-23 21:15:52 +0100 <lambdabot> [16,8,4,2,1]
2022-03-23 21:16:45 +0100 <abastro[m]> > map (shiftL 2) [4..0]
2022-03-23 21:16:46 +0100 <lambdabot> []
2022-03-23 21:17:00 +0100 <tomsmeding> > map (shiftL 2) [4,3..0]
2022-03-23 21:17:01 +0100 <lambdabot> [32,16,8,4,2]
2022-03-23 21:17:05 +0100 <abastro[m]> Duh me
2022-03-23 21:17:14 +0100 <tomsmeding> > map (shiftL 1) [4,3..0]
2022-03-23 21:17:15 +0100 <lambdabot> [16,8,4,2,1]
2022-03-23 21:17:32 +0100 <tomsmeding> > map bit [4,3..0]
2022-03-23 21:17:34 +0100 <lambdabot> [16,8,4,2,1]
2022-03-23 21:17:41 +0100 <tomsmeding> that may be the shortest you're going to get
2022-03-23 21:17:48 +0100 <abastro[m]> Oh right, shiftL 1.
2022-03-23 21:17:54 +0100 <Guest84> that is awesome
2022-03-23 21:18:05 +0100 <abastro[m]> `bit` is indeed better
2022-03-23 21:18:11 +0100 <tomsmeding> but only works for powers of 2, these last ones :p
2022-03-23 21:18:18 +0100 <Guest84> what does bit do?
2022-03-23 21:18:18 +0100 <abastro[m]> I hope it is also faster than division
2022-03-23 21:18:33 +0100 <tomsmeding> Guest84: https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Bits.html#v:bit
2022-03-23 21:18:35 +0100mohy(~mohy@2001:718:1e03:5128:9f94:1a5f:91e3:d539)
2022-03-23 21:18:49 +0100jakalx(~jakalx@base.jakalx.net)
2022-03-23 21:18:59 +0100 <abastro[m]> " bit i is a value with the ith bit set and all other bits clear. "
2022-03-23 21:19:10 +0100 <geekosaur> should be for Int, not guaranteed fr nteger which is what this will be using by default
2022-03-23 21:19:10 +0100 <tomsmeding> abastro[m]: meh, (`div` 2) is almost certainly optimised to >>1, at which point it is a while-loop until that reaches zero instead of a for-loop with a shiftL
2022-03-23 21:20:16 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-03-23 21:20:30 +0100 <abastro[m]> Hmmm. I see, but is while loop faster?
2022-03-23 21:20:56 +0100 <abastro[m]> (I did not know that ghc can perform such optimization consistently)
2022-03-23 21:20:59 +0100yauhsien_(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2022-03-23 21:21:41 +0100 <tomsmeding> a loop with known iteration bounds is usually faster than one without known iteration bounds, so from that perspective the 'map bit' one should be faster -- but this is already making quite deep assumptions on exactly what codegen is going to do
2022-03-23 21:21:44 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-03-23 21:22:01 +0100 <abastro[m]> Hm, true
2022-03-23 21:22:08 +0100 <tomsmeding> abastro[m]: (`div` 2) to (`shiftR` 1) is a standard compiler optimisation called "strength reduction"
2022-03-23 21:22:15 +0100 <tomsmeding> LLVM does it even if you pass -O0
2022-03-23 21:23:04 +0100alp(~alp@user/alp)
2022-03-23 21:23:18 +0100 <abastro[m]> TIL
2022-03-23 21:24:01 +0100 <tomsmeding> (I don't actually know anything about GHC in this regard, but I would assume and hope that it does do this :p )
2022-03-23 21:24:09 +0100yauhsien(~Yau-Hsien@61-231-38-131.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
2022-03-23 21:27:08 +0100 <abastro[m]> Hm after asking this on haskell discourse, I wonder how would this chat ppl wohld solve this problem:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/e72d79b35c54430ff6544b9ec3fe62e87d9a…)
2022-03-23 21:28:12 +0100 <abastro[m]> (I mean exhaustively pairing the list into (n, n+k) pairs)
2022-03-23 21:28:24 +0100 <tomsmeding> what is the intended time complexity :p
2022-03-23 21:29:20 +0100 <abastro[m]> Well, O(n)
2022-03-23 21:29:39 +0100 <abastro[m]> Seems like O(n^2) is easier going declarative style
2022-03-23 21:30:21 +0100 <tomsmeding> O(n^2) is definitely easy, O(n log n) is quite easy with a Map, O(n) is possible only if k is constant, or if you're using a constant-time-access hash map
2022-03-23 21:30:23 +0100 <tomsmeding> i think
2022-03-23 21:30:39 +0100 <tomsmeding> and if the list is sorted
2022-03-23 21:30:56 +0100 <abastro[m]> Oh right
2022-03-23 21:31:09 +0100 <abastro[m]> We assume the list is sorted
2022-03-23 21:31:39 +0100 <abastro[m]> And isn't it possible to O(n) using IntSet
2022-03-23 21:32:43 +0100 <tomsmeding> hm, right, because Int has a bounded number of bits
2022-03-23 21:32:48 +0100 <abastro[m]> Btw we can do double iterator approach to avoid usage of Map. Tho using Map is more intuitive, I guess.
2022-03-23 21:33:06 +0100 <tomsmeding> if it's sorted then yes you can do a double iterator approach ;)
2022-03-23 21:33:39 +0100 <tomsmeding> oh right, with that approach it's actually also easy
2022-03-23 21:34:32 +0100 <abastro[m]> Easy??
2022-03-23 21:34:47 +0100 <tomsmeding> ok "easy" :p
2022-03-23 21:35:38 +0100 <abastro[m]> I see, I wonder how to do double iterator approach elegantly in haskell though.
2022-03-23 21:36:42 +0100 <tomsmeding> hm
2022-03-23 21:40:31 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-03-23 21:40:34 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-03-23 21:43:23 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
2022-03-23 21:43:24 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-03-23 21:45:20 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si)
2022-03-23 21:46:05 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
2022-03-23 21:46:12 +0100oooottoo(~oooottoo@c-24-9-197-96.hsd1.co.comcast.net) (Quit: Client closed)
2022-03-23 21:46:25 +0100oooottoo(~oooottoo@c-24-9-197-96.hsd1.co.comcast.net)
2022-03-23 21:46:33 +0100xcmw(~textual@dyn-72-33-0-152.uwnet.wisc.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-03-23 21:48:00 +0100 <abastro[m]> In general, I am curious how one would encode multiple iterator approach in haskell.
2022-03-23 21:50:05 +0100Guest84(~Guest84@2601:602:87f:4220:33a4:a2a9:5b0:4f1e) (Quit: Client closed)
2022-03-23 21:52:08 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-03-23 21:52:20 +0100Pickchea(~private@user/pickchea)
2022-03-23 21:52:41 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2022-03-23 21:53:57 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-03-23 21:54:29 +0100 <tomsmeding> I may have an interesting laziness-based approach
2022-03-23 21:55:02 +0100 <tomsmeding> the need to skip with the first pointer that have been taken by the second pointer makes things complicated
2022-03-23 21:55:43 +0100 <monochrom> IMO iterators and generators are poor people's emulations of lazy lists. In Haskell, we have real lazy lists, so why want emulations.
2022-03-23 21:56:16 +0100 <tomsmeding> this one is not just a lazy list, it's a lazy list where the tail depends on the head :p
2022-03-23 21:56:29 +0100 <tomsmeding> like the classic `fix (\l -> 0 : 1 : zipWith (+) l (tail l))`
2022-03-23 21:56:38 +0100 <maerwald> if laziness was enough, there would be no streaming libraries
2022-03-23 21:56:46 +0100 <monochrom> But we have real fixed points like that, too.
2022-03-23 21:56:49 +0100 <maerwald> laziness is poor people's streaming
2022-03-23 21:56:52 +0100 <dminuoso> monochrom: Mmm, that's not entirely correct. In other languages you often interleave them with side effectsd.
2022-03-23 21:57:01 +0100 <dminuoso> Then you get something closer to ListT
2022-03-23 21:57:25 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-03-23 21:57:40 +0100 <monochrom> Yeah. Well, we have real ListT and it's a library rather than at the mercy of language builtins, too.
2022-03-23 21:57:51 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-03-23 21:59:27 +0100 <monochrom> And we have Cont (and it's also user-definable) so you can also do http://www.vex.net/~trebla/haskell/cont.xhtml#yield if you want to syntactically look like writing a loop that calls "yield".
2022-03-23 22:01:52 +0100pavonia(~user@user/siracusa)
2022-03-23 22:01:58 +0100acidjnk(~acidjnk@p200300d0c7049f94c956cb44f746ab1f.dip0.t-ipconnect.de)
2022-03-23 22:02:05 +0100unyu(~pyon@user/pyon) (Ping timeout: 250 seconds)
2022-03-23 22:02:08 +0100 <monochrom> I haven't extended that to ContT for interleaving yield with your choice of monadic effect. But you get the point.
2022-03-23 22:02:08 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-03-23 22:02:54 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
2022-03-23 22:03:10 +0100Unicorn_Princess(~Unicorn_P@46-54-248-191.static.kate-wing.si)
2022-03-23 22:03:25 +0100 <monochrom> (I hope to come back and write that in the future. But for now, learning Lean is more interesting, haha.)
2022-03-23 22:04:16 +0100 <tomsmeding> abastro[m]: https://paste.tomsmeding.com/NWCbieCw seems to work
2022-03-23 22:04:19 +0100mohy(~mohy@2001:718:1e03:5128:9f94:1a5f:91e3:d539) (Ping timeout: 260 seconds)
2022-03-23 22:06:03 +0100oooottoo(~oooottoo@c-24-9-197-96.hsd1.co.comcast.net) (Quit: Client closed)
2022-03-23 22:07:39 +0100remedan(~remedan@octo.cafe) (Remote host closed the connection)
2022-03-23 22:11:19 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds)
2022-03-23 22:12:16 +0100deadmarshal_(~deadmarsh@95.38.112.219)
2022-03-23 22:14:23 +0100 <abastro[m]> Wow, that is such a brilliant solution!
2022-03-23 22:14:36 +0100 <mon_aaraj> Hello! I've been trying to configure GHCi, but it seems that it isn't quite working how it is meant to. If I read any documentation, it says that it can read a file from ~/.config/.ghci, but it never reads the file from there. But it does work when I put it in ~/.ghci. I might already know of the source of the issue, since I had the same problem with GHCup not handling symlinks correctly, and my
2022-03-23 22:14:38 +0100 <abastro[m]> I like your use of Boolean list for stack.
2022-03-23 22:14:38 +0100 <mon_aaraj> ~/.config directory is a symlink to ~/Git, could that be the issue? If not, then I am probably doing something wrong. Here's my ~/.config/.ghci: https://bpa.st/G5LA
2022-03-23 22:14:56 +0100remedan(~remedan@octo.cafe)
2022-03-23 22:16:06 +0100 <tomsmeding> abastro[m]: it's not really a stack, rather a queue
2022-03-23 22:16:41 +0100 <tomsmeding> that's why I took the self-recursive definition here; if it was a queue I could just pass it down the iteration in 'go' like a normal value
2022-03-23 22:16:59 +0100 <abastro[m]> Oh, I meant processing inside the go function.
2022-03-23 22:17:08 +0100 <abastro[m]> Wait
2022-03-23 22:17:12 +0100deadmarshal_(~deadmarsh@95.38.112.219) (Ping timeout: 272 seconds)
2022-03-23 22:17:25 +0100 <tomsmeding> mon_aaraj: where did you read that ~/.config/.ghci should work?
2022-03-23 22:17:39 +0100 <abastro[m]> I guess I saw something wrong, yea it is queue
2022-03-23 22:18:40 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-03-23 22:18:50 +0100Pickchea(~private@user/pickchea)
2022-03-23 22:19:10 +0100 <tomsmeding> abastro[m]: producing a proper Either containing the error instead of throwing is an exercise for the reader ;p
2022-03-23 22:20:30 +0100 <abastro[m]> 👍
2022-03-23 22:20:59 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-03-23 22:21:27 +0100 <mon_aaraj> tomsmeding: https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-ghci-files
2022-03-23 22:22:08 +0100 <mon_aaraj> I also think this file is in the source of GHC, so I'm not sure, maybe there's something weird going on with the documentation
2022-03-23 22:23:57 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 22:24:28 +0100 <tomsmeding> in any case this changed in ghc 9.2, the 9.0.1 docs have "$HOME/.ghci" instead of "$XDG_CONFIG_HOME/.ghci"
2022-03-23 22:25:00 +0100nsyd(~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) (Quit: i'm still here dont worry)
2022-03-23 22:25:10 +0100karim(~karim@156.200.129.163)
2022-03-23 22:25:25 +0100 <mon_aaraj> Ah, so I am using an old version, I didn't realise. Thank you so very much!
2022-03-23 22:25:38 +0100 <tomsmeding> but it doesn't seem to work for me in 9.2.1 either :p
2022-03-23 22:25:59 +0100 <tomsmeding> mon_aaraj: not so much "old", 8.10.7 is still the "recommended" for stable production use kindof
2022-03-23 22:26:05 +0100 <monochrom> If you go for 9.2.*, please go for 9.2.2 :)
2022-03-23 22:26:59 +0100 <monochrom> In particular 9.2.2 has extra accomdation code for trying both $HOME and $XDG_whatever
2022-03-23 22:26:59 +0100 <tomsmeding> ah, "GHC now follows by default the XDG Base Directory Specification. If $HOME/.ghc is found it will fallback to the old paths to give you time to migrate. This fallback will be removed in three releases."
2022-03-23 22:27:24 +0100 <maerwald> yeah, so in order to figure out GHC behavior, you need an excel sheet
2022-03-23 22:27:35 +0100 <mon_aaraj> Definitely! Thank you so very much monochrom!
2022-03-23 22:27:39 +0100 <abastro[m]> When did GHC pick LTS scheme?
2022-03-23 22:27:49 +0100 <monochrom> 9.2.1 had "no more $HOME, exclusively XDG" hardcoded, thus the quarrel.
2022-03-23 22:28:10 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-03-23 22:28:23 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-03-23 22:28:35 +0100 <maerwald> mon_aaraj: how does ghcup not handle symlinks correctly?
2022-03-23 22:29:17 +0100lavaman(~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 240 seconds)
2022-03-23 22:29:26 +0100 <monochrom> One excel sheet is not enough. Things actually get multi-dimensional. For example here is a 3D situation: http://www.vex.net/~trebla/haskell/cabal-cabal.xhtml#shared
2022-03-23 22:29:43 +0100 <maerwald> 3d excel?
2022-03-23 22:30:12 +0100 <mon_aaraj> Oh no, it does. It just reminds me of when it didn't, a really nice person helped me to fix the issue and committed a fix into ghcup a while ago, so I thought that might've been the culprit, but I was just using the wrong GHC version
2022-03-23 22:30:27 +0100 <maerwald> surely a nice person
2022-03-23 22:30:49 +0100 <maerwald> the last bug was sed replacing symlinks (because that is sed's default behavior)
2022-03-23 22:30:52 +0100 <monochrom> "We'll see about that" :)
2022-03-23 22:31:10 +0100 <maerwald> after decades of unix, I didn't even know that one
2022-03-23 22:32:21 +0100karim(~karim@156.200.129.163) (Ping timeout: 256 seconds)
2022-03-23 22:34:41 +0100gehmehgeh(~user@user/gehmehgeh)
2022-03-23 22:35:08 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-03-23 22:35:16 +0100slack1256(~slack1256@191.125.227.76)
2022-03-23 22:37:08 +0100Pickchea(~private@user/pickchea)
2022-03-23 22:42:15 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
2022-03-23 22:43:54 +0100 <mon_aaraj> hmm, well after updating GHC and trying to use it, there's this warning which isn't bad, but it seems to be quite incorrect: ``[ Warn ] Possibly insufficient disk space on /tmp. At least 5000 MB are recommended, but only 3934.59 are free. Consider freeing up disk space or setting TMPDIR env variable.``, what could be causing this? there's tons of free space on my root partition, and also it seems
2022-03-23 22:43:56 +0100 <mon_aaraj> to work perfectly. running ``df -h /tmp`` shows that the size is 3.9 gigabytes, with only 7 megabytes being used, which I guess is the source of the error?
2022-03-23 22:44:04 +0100 <mon_aaraj> *GHCup
2022-03-23 22:44:41 +0100 <maerwald> that's not an error
2022-03-23 22:45:06 +0100cosimone(~user@93-44-187-176.ip98.fastwebnet.it) (Read error: Connection reset by peer)
2022-03-23 22:45:17 +0100 <maerwald> there's no easy way to determine exactly how much disk space you need
2022-03-23 22:45:26 +0100 <maerwald> 5GB should be enough for everyone
2022-03-23 22:46:00 +0100 <tomsmeding> mon_aaraj: /tmp is probably a tmpfs on your system (like on most), hence being a lot smaller than your root partition: it's as large as the amount of RAM, sortof
2022-03-23 22:46:49 +0100 <mon_aaraj> ah, i see. i have about 8 gigs of ram, so I guess is scales based on the amount of ram i have
2022-03-23 22:46:50 +0100 <Maxdamantus> /tmp is not usually tmpfs afaik, though it will typically be cleared on boot.
2022-03-23 22:47:05 +0100mmhat(~mmh@55d49226.access.ecotel.net) (Ping timeout: 256 seconds)
2022-03-23 22:47:10 +0100 <maerwald> It's quite annoying that some distros are advertising for /tmp to be a small partition. FHS and no other standard say this.
2022-03-23 22:47:12 +0100 <Maxdamantus> oh, on their system, nvm.
2022-03-23 22:47:30 +0100 <mon_aaraj> yeah, it is a tmpfs on my system
2022-03-23 22:47:36 +0100 <Maxdamantus> And yes, default tmpfs size is 50% of RAM.
2022-03-23 22:47:37 +0100 <tomsmeding> Maxdamantus: my arch machine has a tmpfs /shrug/
2022-03-23 22:47:47 +0100 <tomsmeding> ah TIL 50%
2022-03-23 22:48:01 +0100 <Maxdamantus> You can probably resize it using something like `mount -o remount,size=75% /tmpfs`
2022-03-23 22:48:01 +0100 <maerwald> the "clean on reboot" is exactly why we like to use /tmp instead of some custom dir
2022-03-23 22:48:18 +0100 <geekosaur> it'sa real partition on my system but I generally force that during sinstallation
2022-03-23 22:48:43 +0100 <dminuoso> We're currently evaluating switching to clean-on-reboot with tmpfs on / currently :)
2022-03-23 22:48:48 +0100 <dminuoso> For our entire server fleet
2022-03-23 22:49:24 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-03-23 22:49:59 +0100 <maerwald> small files you can just dump in /tmp and forget about it... bigger files you try to clean up, but don't need to worry if your process crashes before that
2022-03-23 22:50:16 +0100 <maerwald> for anything else, you're implementing cleanup logic manually or start getting angry user reports
2022-03-23 22:50:45 +0100 <Maxdamantus> I think I just have the default debian behaviour, which is clean-on-reboot. I don't bother separating things into different partitions. I just have a btrfs filesystem over a few SSDs, and debian is one subvolume in that, with tmp included.
2022-03-23 22:51:01 +0100 <dminuoso> Because why have any implicit state at all. Of course this only works because we have nixos, so at boot the entire system is synthesized.
2022-03-23 22:51:15 +0100 <maerwald> yeah, but some distros advertise /tmp to be a small partition (less than a gigabyte)
2022-03-23 22:51:49 +0100 <Maxdamantus> Those distros seem evil.
2022-03-23 22:52:09 +0100gdown(~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net)
2022-03-23 22:52:23 +0100 <Maxdamantus> Maybe they're just not designed for desktop use.
2022-03-23 22:52:49 +0100gnyeki(~gnyeki@user/gnyeki) (Remote host closed the connection)
2022-03-23 22:52:50 +0100 <Maxdamantus> For desktop use, I expect to be able to just chuck a 5 GiB file into /tmp, even if I've only got 8 GiB of RAM.
2022-03-23 22:53:13 +0100 <Maxdamantus> Don't have to put it somewhere persistent where I can forget to clean it up later.
2022-03-23 22:53:23 +0100 <mon_aaraj> ah, yeah, nixos seems like an interesting idea to put servers to use. it's certainly a nice concept
2022-03-23 22:53:57 +0100 <mon_aaraj> Maxdamantus: what distro don't do it, i wonder? i mean i also use arch and it does the tmpfs thing
2022-03-23 22:54:43 +0100 <Maxdamantus> mon_aaraj: afaik, debian, since I don't think I've seen that on any of my installations.
2022-03-23 22:54:46 +0100jlamothe(~jlamothe@198.251.61.229) (Remote host closed the connection)
2022-03-23 22:55:12 +0100 <mon_aaraj> ah, interestinhg
2022-03-23 22:55:51 +0100slack2414(~slack1256@186.11.117.121)
2022-03-23 22:55:54 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
2022-03-23 22:56:28 +0100slack1256(~slack1256@191.125.227.76) (Ping timeout: 272 seconds)
2022-03-23 22:57:34 +0100 <yushyin> there is also /var/tmp/ (usually cleaned up by tmpfiles.d after 30days, but `man hier' describes /var/tmp/ as a variant of /tmp, where the duration is not specified)
2022-03-23 22:58:07 +0100 <Maxdamantus> I sometimes put things in /dev/shm, if I actually want to put it on tmpfs.
2022-03-23 22:59:15 +0100 <monochrom> I don't think "desktop" implies either "large /tmp" or "small /tmp" either. Too many users with too many different prejudices.
2022-03-23 22:59:34 +0100slack2414slack1256
2022-03-23 22:59:48 +0100 <monochrom> If there are n users, you can count on having 1.5n+35 rivalling opinions.
2022-03-23 22:59:54 +0100vysn(~vysn@user/vysn)
2022-03-23 23:00:09 +0100 <monochrom> That's right, because some people actually are self-inconsistent.
2022-03-23 23:00:10 +0100 <Maxdamantus> Historically, /tmp would very likely have not been tmpfs.
2022-03-23 23:00:29 +0100 <Maxdamantus> I suspect if some distros do it, that's probably a recent thing, since people sometimes have lots of RAM now.
2022-03-23 23:00:59 +0100 <monochrom> Plus SSD has more wear-out problems.
2022-03-23 23:01:09 +0100 <monochrom> Historically, SSD did not exist.
2022-03-23 23:01:20 +0100 <dminuoso> Wear-out problems are a myth that affect virtually nobody *shrugs*
2022-03-23 23:01:23 +0100 <Maxdamantus> Right, so there probably weren't even performance expectations of /tmp
2022-03-23 23:01:24 +0100alp(~alp@user/alp) (Remote host closed the connection)
2022-03-23 23:01:32 +0100yauhsien(~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-03-23 23:01:42 +0100alp(~alp@user/alp)
2022-03-23 23:01:49 +0100 <hpc> i mean, if we're really talking history, historically /var was tape
2022-03-23 23:01:51 +0100 <Maxdamantus> It was just more harddrive space, which was conventionally able to be cleared from time to time.
2022-03-23 23:01:59 +0100 <dminuoso> We're switching to all flash storage because it turns out that spinning disks, averaged, die faster than spinning disks.
2022-03-23 23:02:08 +0100 <monochrom> Yeah, historically, what's "desktop"? >:)
2022-03-23 23:02:08 +0100 <dminuoso> *spinning disks die faster than ssds
2022-03-23 23:02:16 +0100segfaultfizzbuzz(~segfaultf@2602:306:cd3c:9350:d42a:6ce2:77df:38ee)
2022-03-23 23:02:29 +0100 <segfaultfizzbuzz> is optimization ai-hard?
2022-03-23 23:03:06 +0100 <Maxdamantus> dminuoso: that's also a fairly recent development (last 5 years or so).
2022-03-23 23:03:34 +0100 <abastro[m]> Oh I should use tmp directory more, I am sick of huge downloads
2022-03-23 23:04:09 +0100 <Maxdamantus> Though I guess SSDs have had more predictable failures than HDDs for a while.
2022-03-23 23:04:29 +0100 <monochrom> I agree that I don't worry about SSD wearing out. But there were just a couple of years when it was a valid concern. That was a historical factor of the tmpfs convention today. I mean, speaking of historical legacies.
2022-03-23 23:04:34 +0100 <Maxdamantus> (since even the SSDs from 5 years ago would be able to tell you when they're going to run out of TBW)
2022-03-23 23:04:46 +0100jlamothe(~jlamothe@198.251.61.229)
2022-03-23 23:04:46 +0100 <abastro[m]> SSDs are basically better now, then?
2022-03-23 23:04:56 +0100 <Maxdamantus> Yes.
2022-03-23 23:05:21 +0100 <Maxdamantus> Unless you actually want large amounts of storage, in which case HDDs are cheaper.
2022-03-23 23:05:28 +0100 <monochrom> There is also "when you power off, you should lose /tmp data, because better privacy".
2022-03-23 23:06:33 +0100 <Maxdamantus> Does /tmp actually store a lot of private data?
2022-03-23 23:06:52 +0100 <Maxdamantus> Presumably /home would be a bigger concern.
2022-03-23 23:06:53 +0100 <monochrom> I guess depends on the user?
2022-03-23 23:07:19 +0100 <monochrom> I don't mean to say that I agree with the paranoid concern.
2022-03-23 23:07:42 +0100 <monochrom> But some people think like that, and they are also more vocal.
2022-03-23 23:08:11 +0100 <monochrom> Now add herding effects.
2022-03-23 23:08:15 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
2022-03-23 23:08:27 +0100 <abastro[m]> Is trying to be conscious about password choice being paranoid?
2022-03-23 23:08:45 +0100 <abastro[m]> Now I am worried if I am suffering paranoia
2022-03-23 23:08:51 +0100 <monochrom> Yes and no?
2022-03-23 23:09:18 +0100 <hpc> it's not paranoia if the clowns really are trying to eat you :P
2022-03-23 23:09:19 +0100zincy_(~zincy@2a00:23c8:970c:4801:a9ba:a14e:e332:b83f) (Remote host closed the connection)
2022-03-23 23:09:20 +0100 <monochrom> Because if you use an automatic password randomizer, then you no longer need to be conscious about it >:)
2022-03-23 23:09:35 +0100 <abastro[m]> Oh wait
2022-03-23 23:09:36 +0100 <maerwald> abastro[m]: being paranoid about being paranoid is a classical sign of being paranoid xD
2022-03-23 23:09:36 +0100 <hpc> you do have to take care of that system though
2022-03-23 23:09:50 +0100machinedgod(~machinedg@mtrlpq02-1168108095.sdsl.bell.ca)
2022-03-23 23:09:59 +0100 <abastro[m]> Did not know about automatic pw randomizer
2022-03-23 23:10:08 +0100 <abastro[m]> Guess next time I am registering in a strange website, I should use that
2022-03-23 23:10:12 +0100 <maerwald> is it *really* random?
2022-03-23 23:10:12 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-03-23 23:10:24 +0100 <monochrom> OK, they're more commonly called "password manager".
2022-03-23 23:10:30 +0100 <maerwald> who wrote those?
2022-03-23 23:10:31 +0100 <hpc> maerwald: there's a joke about urandom in there somewhere
2022-03-23 23:10:31 +0100 <abastro[m]> Oh no I should stop being paranoid about paranoid
2022-03-23 23:10:44 +0100 <monochrom> But one of its function is to generate randomized passwords.
2022-03-23 23:11:24 +0100 <maerwald> does Kaspersky have a pssword manager?
2022-03-23 23:11:30 +0100 <abastro[m]> At least many enough ppl just use single password everywhere so that hackers would not bother to break the pseudorandom
2022-03-23 23:11:38 +0100 <segfaultfizzbuzz> lol kapersky password manager lol
2022-03-23 23:11:41 +0100 <monochrom> Is a randomizer really random? Does a programmer really program? >:)
2022-03-23 23:12:02 +0100 <segfaultfizzbuzz> kapersky bitcoin wallet lol
2022-03-23 23:12:36 +0100segfaultfizzbuzz(~segfaultf@2602:306:cd3c:9350:d42a:6ce2:77df:38ee) (Quit: segfaultfizzbuzz)
2022-03-23 23:13:49 +0100mvk(~mvk@2607:fea8:5cc3:7e00::7980) (Ping timeout: 240 seconds)
2022-03-23 23:14:06 +0100 <abastro[m]> So how secure is random number generator in haskell
2022-03-23 23:14:18 +0100unyu(~pyon@user/pyon)
2022-03-23 23:14:29 +0100 <monochrom> The compiler doesn't come with one.
2022-03-23 23:14:36 +0100 <abastro[m]> Wait, haskell base even does not have random number generator right
2022-03-23 23:14:42 +0100 <monochrom> Then you go to hackage and choose one you want.
2022-03-23 23:14:54 +0100 <abastro[m]> I can already hear ppl complaining abt it
2022-03-23 23:15:16 +0100 <abastro[m]> Anyway, how about random package?
2022-03-23 23:15:21 +0100 <abastro[m]> Is it secure?
2022-03-23 23:15:28 +0100 <monochrom> It is not cryptographic.
2022-03-23 23:16:10 +0100 <monochrom> There are some in cryptographic packages.
2022-03-23 23:16:19 +0100vysn(~vysn@user/vysn) (Ping timeout: 256 seconds)
2022-03-23 23:16:27 +0100 <maerwald> I think there is no reasonable definition of security. There's a scientific definition of insecurity though
2022-03-23 23:16:30 +0100 <monochrom> But I might just read from /dev/urandom
2022-03-23 23:16:48 +0100 <hpc> read from /dev/random, there's no difference anymore
2022-03-23 23:16:59 +0100 <abastro[m]> Thanks, I should be more careful about using random package then
2022-03-23 23:17:00 +0100 <hpc> there never really was, imo
2022-03-23 23:17:08 +0100 <monochrom> Oh heh OK I guess shorter name to type.
2022-03-23 23:17:43 +0100 <abastro[m]> Oh If /dev/random is HW-generated random
2022-03-23 23:17:45 +0100 <abastro[m]> That would be great
2022-03-23 23:17:53 +0100 <hpc> people had these really weird hangups about needing to block for randomness for a couple more bytes, but it's somehow totally fine to have a 2048-bit key encrypting gigabytes of traffic at a timme
2022-03-23 23:18:27 +0100 <monochrom> I agree. Another paranoid concern.
2022-03-23 23:18:32 +0100 <hpc> abastro[m]: /dev/random is whatever linux has to do to get you a non-blocking stream of entropy that it safe to use
2022-03-23 23:18:38 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
2022-03-23 23:18:47 +0100 <hpc> likely a mix of hw and seeded randomness
2022-03-23 23:19:19 +0100 <abastro[m]> Interesting, great one
2022-03-23 23:19:32 +0100 <abastro[m]> Finally, I do not need to use random package
2022-03-23 23:19:58 +0100 <monochrom> The random package is great for Monte Carlo purposes.
2022-03-23 23:20:26 +0100 <monochrom> But I admit that the conversation started with privacy etc.
2022-03-23 23:22:26 +0100DNH(~DNH@2a02:8108:1100:16d8:4199:73fa:f378:33d) (Ping timeout: 245 seconds)
2022-03-23 23:23:22 +0100 <maerwald> privacy is so oldschool
2022-03-23 23:26:36 +0100Sgeo_(~Sgeo@user/sgeo)
2022-03-23 23:29:01 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
2022-03-23 23:31:55 +0100deadmarshal_(~deadmarsh@95.38.112.219)
2022-03-23 23:33:37 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-03-23 23:35:59 +0100Akiva(~Akiva@user/Akiva)
2022-03-23 23:36:17 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
2022-03-23 23:36:43 +0100deadmarshal_(~deadmarsh@95.38.112.219) (Ping timeout: 260 seconds)
2022-03-23 23:36:46 +0100merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-03-23 23:38:35 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-03-23 23:40:48 +0100michalz(~michalz@185.246.204.57) (Remote host closed the connection)
2022-03-23 23:41:05 +0100 <koala_man> sm[i]: shellcheck's error IDs are 1xxx emitted by the parser, 2xxx by the AST analysis, 3xxx are individual POSIX and shell support violations (also AST analysis)
2022-03-23 23:43:30 +0100 <sm> aha, thanks
2022-03-23 23:44:15 +0100 <sm> and just numbered increasingly as you add them I guess
2022-03-23 23:51:41 +0100slac45879(~slack1256@191.126.227.64)
2022-03-23 23:53:31 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 260 seconds)
2022-03-23 23:53:33 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)
2022-03-23 23:54:00 +0100slack1256(~slack1256@186.11.117.121) (Ping timeout: 260 seconds)
2022-03-23 23:55:32 +0100kraftwerk28_kraftwerk28
2022-03-23 23:57:16 +0100Codaraxis(~Codaraxis@user/codaraxis)