2022/01/10

2022-01-10 00:00:40 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Remote host closed the connection)
2022-01-10 00:00:59 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca)
2022-01-10 00:02:27 +0100danso(~danso@d67-193-121-2.home3.cgocable.net) (Ping timeout: 268 seconds)
2022-01-10 00:02:51 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2022-01-10 00:03:30 +0100juri_(~juri@178.63.35.222) (Ping timeout: 260 seconds)
2022-01-10 00:04:37 +0100 <BrokenClutch> I must be dumb, they look the same to me
2022-01-10 00:06:18 +0100 <dibblego> > ((10 - 9) - 21)
2022-01-10 00:06:19 +0100 <lambdabot> -20
2022-01-10 00:06:20 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-01-10 00:06:25 +0100 <dibblego> > (10 - (9 - 21))
2022-01-10 00:06:26 +0100 <lambdabot> 22
2022-01-10 00:06:32 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 00:07:01 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-01-10 00:07:16 +0100 <geekosaur> you won't be able to tell with (+) because it does the same thing with either associativity
2022-01-10 00:07:32 +0100 <geekosaur> (-) shows it better, as dibblego demonstrated
2022-01-10 00:08:12 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 00:08:13 +0100 <BrokenClutch> No, this part and actually knows
2022-01-10 00:08:24 +0100 <BrokenClutch> I was talking about the scheme definition
2022-01-10 00:08:28 +0100 <BrokenClutch> looks the same to me
2022-01-10 00:08:45 +0100 <geekosaur> scheme defines them all taking the same parameters the same way, for consistency
2022-01-10 00:08:52 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Remote host closed the connection)
2022-01-10 00:09:09 +0100 <geekosaur> haskell flips things for mathematical consistency instead of programmatic
2022-01-10 00:09:40 +0100 <geekosaur> it's harder to demonstrate the things I showed earlier with the scheme definitions of fold and fold-right, vs. Haskell foldl/foldr
2022-01-10 00:10:54 +0100hololeap(~hololeap@user/hololeap) (Quit: Bye)
2022-01-10 00:12:48 +0100 <Axman6> foldr is "Replace all :'s with f, and any [] with z". Foldl is "given a starting value, pass in each element of the list to f to use as the starting value, until you find a []"
2022-01-10 00:13:18 +0100 <BrokenClutch> but like, the scheme one looks the same as the haskell one
2022-01-10 00:13:27 +0100 <BrokenClutch> I'm trying to see the difference, but i don't got it
2022-01-10 00:13:35 +0100 <Axman6> link to the scheme one?
2022-01-10 00:13:45 +0100 <BrokenClutch> https://srfi.schemers.org/srfi-1/srfi-1.html#FoldUnfoldMap
2022-01-10 00:14:16 +0100 <BrokenClutch> Is it after the compilation? Like, how scheme changes foldr to a c-loop on most compilers/transpillers?
2022-01-10 00:14:21 +0100 <geekosaur> is there supposed to be one, aside from parameter order (the "z" coming first instead of second)
2022-01-10 00:14:24 +0100 <geekosaur> ?
2022-01-10 00:15:03 +0100coot(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot)
2022-01-10 00:15:37 +0100 <Axman6> (fold kons (kons (car lis) knil) (cdr lis)) clearly isn't the same as (kons (car lis) (fold-right kons knil (cdr lis)))
2022-01-10 00:15:46 +0100notzmv(~zmv@user/notzmv) (Read error: Connection reset by peer)
2022-01-10 00:16:33 +0100 <BrokenClutch> I'm not comparing foldl to foldr
2022-01-10 00:16:43 +0100 <Axman6> ok
2022-01-10 00:16:48 +0100 <BrokenClutch> I'm comparing scheme's foldl to haskell's foldl
2022-01-10 00:17:53 +0100notzmv(~zmv@user/notzmv)
2022-01-10 00:17:56 +0100 <Axman6> they are identical, apart from the order of the arguments to f/kons
2022-01-10 00:19:02 +0100lavaman(~lavaman@98.38.249.169)
2022-01-10 00:19:38 +0100 <Axman6> myFoldl :: (b -> a -> b) -> b -> [a] -> b; myFoldl kons knil (car:cdr) = myFoldl kons (kons car knil) cdr; myFoldl kons knil [] = knil
2022-01-10 00:19:54 +0100 <BrokenClutch> the problem is with the order
2022-01-10 00:20:07 +0100 <BrokenClutch> scheme is eager, so it solves the last part first
2022-01-10 00:20:29 +0100 <BrokenClutch> while haskell will do a more "accumulative" approach, because it's lazy
2022-01-10 00:22:16 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-10 00:22:34 +0100 <BrokenClutch> like, do the foldl expansion with scheme and evaluate it. It works diffently with haskell, you gonna be evaluating the thunks
2022-01-10 00:23:21 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-10 00:23:32 +0100 <Axman6> > foldl f z [1,2,3] :: Expr -- This is exactly what foldl evaluates. the compiler may notice this should be strict depending on what f is
2022-01-10 00:23:33 +0100 <lambdabot> f (f (f z 1) 2) 3
2022-01-10 00:23:38 +0100 <EvanR> sonny, the foldl argument order seems more familiar, and makes sense since this is usually how you fold in other languages. given your accum, smush the next thing in the list into it
2022-01-10 00:23:50 +0100 <EvanR> foldr is backwards
2022-01-10 00:23:57 +0100 <EvanR> but it also makes sense
2022-01-10 00:24:04 +0100 <Axman6> foldr is constructor replacement, foldl is a loop
2022-01-10 00:24:26 +0100son0p(~ff@181.136.122.143) (Remote host closed the connection)
2022-01-10 00:24:49 +0100 <BrokenClutch> Oh, i was wrong
2022-01-10 00:24:49 +0100 <EvanR> in foldr, you have the list element itself, not the accum, and the rest of the fold is on the right (all of the above assuming we work left to right)
2022-01-10 00:24:52 +0100 <BrokenClutch> I got it now
2022-01-10 00:25:17 +0100 <Axman6> there is no difference betqeen scheme's fold and haskell's foldl. there is a big difference between foldr and fold-right though
2022-01-10 00:25:39 +0100 <EvanR> only recently I realized how "normal" foldl is xD
2022-01-10 00:25:46 +0100 <EvanR> just haskell does it weird
2022-01-10 00:26:00 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-10 00:26:42 +0100 <hpc> funny, foldr feels more natural to me
2022-01-10 00:26:54 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
2022-01-10 00:26:55 +0100 <EvanR> stockholm syndrome
2022-01-10 00:27:07 +0100 <hpc> glasgow syndrom?
2022-01-10 00:27:10 +0100 <BrokenClutch> like, I think the order of the arguments of the last f is flipped
2022-01-10 00:27:18 +0100 <EvanR> by normal I mean relative to normal programming outside haskell land
2022-01-10 00:27:19 +0100 <BrokenClutch> with scheme's foldl
2022-01-10 00:27:26 +0100 <Axman6> yes, but that's not really important, they're isomorphic
2022-01-10 00:28:31 +0100 <BrokenClutch> actually, i don't think they are flipped at all
2022-01-10 00:28:45 +0100 <BrokenClutch> man, i got confused
2022-01-10 00:28:47 +0100 <Axman6> :t foldl
2022-01-10 00:28:47 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2022-01-10 00:29:04 +0100 <Axman6> they are flipped
2022-01-10 00:29:17 +0100 <Axman6> scheme's fold is (a -> b -> b) -> b -> [a] -> b
2022-01-10 00:29:29 +0100 <Axman6> because the accumulator is passed as the second argument
2022-01-10 00:30:10 +0100 <BrokenClutch> you are right
2022-01-10 00:30:11 +0100 <BrokenClutch> thanks
2022-01-10 00:30:18 +0100 <BrokenClutch> man, never noticed that
2022-01-10 00:30:24 +0100 <EvanR> you can't use "frequency analysis" to decide which order to use since... both arguments change every step
2022-01-10 00:30:31 +0100ChanServ+o Axman6
2022-01-10 00:30:36 +0100 <Axman6> D:B
2022-01-10 00:30:43 +0100shaprgrins evilly
2022-01-10 00:30:52 +0100 <EvanR> so gotta dig deeper in the metaphor drawer
2022-01-10 00:31:00 +0100 <Axman6> I have been given great power!
2022-01-10 00:31:01 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-01-10 00:31:09 +0100 <Axman6> I am not ready for this responsibility!
2022-01-10 00:31:24 +0100 <shapr> you can handle the power!
2022-01-10 00:32:04 +0100 <EvanR> BrokenClutch, also the expansions lambdabot spits out skips over any operational issues so, looking at those doesn't make performance clear
2022-01-10 00:33:03 +0100 <EvanR> an infinitely nested application of f could work fine in haskell, but foldl on list doesn't give you that immediately, unfortunately
2022-01-10 00:33:18 +0100 <ephemient> beyond the argument order, fold in Scheme is also closer to foldl' in Haskell in terms of how it's evaluated, since it's strict in the accumulator
2022-01-10 00:34:05 +0100 <BrokenClutch> :t foldl'
2022-01-10 00:34:06 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2022-01-10 00:34:31 +0100 <BrokenClutch> ?????
2022-01-10 00:34:37 +0100 <EvanR> evaluates the b eagerly, as you go
2022-01-10 00:36:05 +0100 <BrokenClutch> ok, I will put this on my list of things I have to study
2022-01-10 00:36:16 +0100 <BrokenClutch> or I'm going to break
2022-01-10 00:37:00 +0100 <geekosaur> % :t foldl' @[]
2022-01-10 00:37:00 +0100 <yahb> geekosaur: (b -> a -> b) -> b -> [a] -> b
2022-01-10 00:37:41 +0100 <EvanR> oh right... I'm starting to not be annoyed by all the Foldable stuff and just see "list, tree, sequence" matrix style
2022-01-10 00:40:26 +0100 <Axman6> BrokenClutch: you can probably ignore Foldable for now, but it just means "the class of things which you can write foldl and foldr for", turns out it's useful for more than lists
2022-01-10 00:40:41 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2022-01-10 00:43:31 +0100 <ephemient> you can think of foldr on a foldable as equivalent to foldr on the toList of the foldable, can't you?
2022-01-10 00:43:38 +0100hololeap(~hololeap@user/hololeap)
2022-01-10 00:43:49 +0100 <monochrom> Yes.
2022-01-10 00:43:50 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
2022-01-10 00:44:01 +0100 <EvanR> that's how it should be implemented
2022-01-10 00:45:40 +0100 <geekosaur> that's the default if an instance doesn't define its own
2022-01-10 00:47:45 +0100 <monochrom> I explain Foldable by putting foldMap at the spot light, not foldl or foldr. It formalizes "aggregate queries" (if you have heard of that wording from SQL) and is why sum, product, maximum, minimum, length are all in the same type class.
2022-01-10 00:47:49 +0100max22-(~maxime@2a01cb0883359800fc4f47b740d6e929.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-10 00:48:07 +0100Kaiepi(~Kaiepi@156.34.47.253) (Quit: Leaving)
2022-01-10 00:48:18 +0100 <monochrom> And yes monoids strike again.
2022-01-10 00:48:57 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-10 00:49:01 +0100 <EvanR> :t foldMap
2022-01-10 00:49:02 +0100 <lambdabot> (Foldable t, Monoid m) => (a -> m) -> t a -> m
2022-01-10 00:49:05 +0100 <geekosaur> monoids are the secret master sof the universe
2022-01-10 00:49:24 +0100 <c_wraith> I'm really unhappy with how Foldable is documented
2022-01-10 00:49:36 +0100 <c_wraith> I tried to argue against it when they were designing it
2022-01-10 00:49:47 +0100 <c_wraith> and was told that convenient lies are better than complicated truth
2022-01-10 00:50:01 +0100 <c_wraith> (when they were designing the new documentation, that is)
2022-01-10 00:50:11 +0100 <Axman6> what would you want it to say?
2022-01-10 00:50:29 +0100 <c_wraith> foldMap' is described as a left fold, which is entirely wrong
2022-01-10 00:50:44 +0100 <Axman6> Surely we can have "Intuitive understanding" and "How it actually works" sections in the docs
2022-01-10 00:50:52 +0100 <c_wraith> it should be whatever fold gives it the strictness properties that are desired
2022-01-10 00:51:11 +0100 <c_wraith> a right fold, a left fold, a tree fold. whatever.
2022-01-10 00:51:31 +0100 <c_wraith> The important part is that it doesn't accumulate thunks
2022-01-10 00:51:44 +0100 <monochrom> In this case the "complicated" truth is not harder than the convenient lie.
2022-01-10 00:52:02 +0100 <dolio> Presumably it seqs a bunch of children when combining them or something?
2022-01-10 00:52:42 +0100 <EvanR> more like what are foldMap amd foldMap' supposed to be
2022-01-10 00:52:46 +0100 <geekosaur> uh. "convenient lies are better than the complicated truth?" that's pretty much the last thing I want in API docs
2022-01-10 00:52:59 +0100 <monochrom> Especially if I troll with "data SnocList a = Nil | Snoc (SnocList a) a" then it is right-fold that can be made efficient.
2022-01-10 00:53:04 +0100 <c_wraith> This is why I argued the new docs are really bad
2022-01-10 00:53:54 +0100 <monochrom> Well yeah there are a lot of people, mostly millenials, who mistake API docs for free tutorials.
2022-01-10 00:54:14 +0100 <monochrom> Because millenials are used to free tutorials.
2022-01-10 00:54:17 +0100 <dolio> I can buy that sometimes not being absolutely precise can be more useful for developing an understanding. But it's hard to see why saying it's like foldl is helpful.
2022-01-10 00:54:24 +0100 <c_wraith> why blame millenials? I assure you, I see that problem very broadly. :P
2022-01-10 00:55:10 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 00:55:21 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 00:55:21 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 00:55:21 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 00:55:34 +0100 <dolio> It doesn't actually seem like a convenient lie.
2022-01-10 00:56:18 +0100 <c_wraith> the people I was complaining to thought it was basically always true and I was just being contrarian by pointing out all the cases where it wasn't
2022-01-10 00:56:59 +0100 <geekosaur> *headwall*
2022-01-10 00:57:21 +0100 <dolio> What cases is it true for?
2022-01-10 00:57:34 +0100 <c_wraith> things shaped like []
2022-01-10 00:58:20 +0100 <c_wraith> including the same implied ordering
2022-01-10 00:58:52 +0100 <dibblego> yu
2022-01-10 00:59:49 +0100 <dolio> What does it mean for `null` to be left associative?
2022-01-10 00:59:56 +0100 <dibblego> sorry ^
2022-01-10 01:01:10 +0100 <dolio> Also what is the accumulator for `null`?
2022-01-10 01:01:46 +0100 <dolio> Was that language just copied from foldl or something?
2022-01-10 01:02:44 +0100 <EvanR> at one point Foldable had laws and that was the first thing in the docs, iirc
2022-01-10 01:03:16 +0100 <geekosaur> they got moved to the bottom of the docs supposedly
2022-01-10 01:03:29 +0100 <geekosaur> too confusing for newcomers or something like that
2022-01-10 01:03:30 +0100 <EvanR> now I'm don't know what's going on, and I implemented foldl strict for my structure xD
2022-01-10 01:03:36 +0100 <Axman6> what should foldl for snoclist actually do...
2022-01-10 01:04:13 +0100vglfr(~vglfr@88.155.96.35) (Ping timeout: 240 seconds)
2022-01-10 01:04:14 +0100 <c_wraith> I'd say foldl should be the catamorphism for a snoclist
2022-01-10 01:04:28 +0100 <monochrom> Yeah :)
2022-01-10 01:04:39 +0100 <EvanR> no, I hate this
2022-01-10 01:04:57 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 01:05:12 +0100 <EvanR> it's a damn list and the fact that we write things left to right has no bearing on the theory
2022-01-10 01:05:41 +0100 <Axman6> but the order matters
2022-01-10 01:06:35 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-10 01:06:54 +0100 <c_wraith> more precisely, the 'l' and 'r' in the names of foldl and foldr mean something
2022-01-10 01:07:10 +0100 <c_wraith> they tell you what side the base case goes on
2022-01-10 01:07:37 +0100 <c_wraith> when you reverse what side is the end, you reverse what side the base case goes on
2022-01-10 01:08:08 +0100 <EvanR> what
2022-01-10 01:08:17 +0100 <EvanR> side of what
2022-01-10 01:08:36 +0100 <EvanR> I took the 'r' to mean catamorphism
2022-01-10 01:08:58 +0100 <dolio> r means 'right'.
2022-01-10 01:09:03 +0100 <c_wraith> fold left = put the base case on the left (the start). fold right = put the base case on the right (the end)
2022-01-10 01:09:16 +0100vglfr(~vglfr@88.155.96.35)
2022-01-10 01:09:28 +0100 <EvanR> the left = the start?
2022-01-10 01:09:37 +0100 <c_wraith> for english speakers, yes
2022-01-10 01:09:39 +0100 <dolio> Left means left.
2022-01-10 01:09:40 +0100 <EvanR> not in arabic
2022-01-10 01:10:14 +0100 <EvanR> what if I'm communicating about this with someone who is in australia and it looks backwards from down there
2022-01-10 01:10:19 +0100 <EvanR> (in english)
2022-01-10 01:10:45 +0100 <c_wraith> then they should turn their monitor off of reverse. (australia is upside down, not backwards. get your memes organized!)
2022-01-10 01:10:46 +0100 <BrokenClutch> It will be russian, I think
2022-01-10 01:10:53 +0100 <EvanR> left and right are symmetric where as foldl and foldr are not
2022-01-10 01:10:57 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-10 01:10:59 +0100 <BrokenClutch> like, in australia, english is russian and russian is english
2022-01-10 01:11:20 +0100 <EvanR> so literal meaning of l and r are bad
2022-01-10 01:11:34 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 01:12:33 +0100 <EvanR> if your point is the Foldable docs are bad, you made it
2022-01-10 01:12:57 +0100notzmv(~zmv@user/notzmv)
2022-01-10 01:13:11 +0100 <Inst> do you know
2022-01-10 01:13:18 +0100 <sonny> someone mentioned the difference is the argument order?
2022-01-10 01:13:20 +0100 <Inst> if it's possible to code in Cmm within a .hs file?
2022-01-10 01:13:27 +0100 <dolio> It doesn't seem like your problem is that the Foldable docs are bad.
2022-01-10 01:13:29 +0100 <EvanR> it's not about argument order
2022-01-10 01:14:16 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 01:14:19 +0100DNH(~DNH@2a02:8108:1100:16d8:c0bf:721a:fdec:b791) (Quit: Textual IRC Client: www.textualapp.com)
2022-01-10 01:14:40 +0100 <sonny> this is not allowed in Haskell right []:foo
2022-01-10 01:14:55 +0100 <EvanR> > let foo = [] in []:foo
2022-01-10 01:14:57 +0100 <lambdabot> [[]]
2022-01-10 01:15:13 +0100 <EvanR> i.e. []:[]
2022-01-10 01:15:16 +0100 <sonny> brb
2022-01-10 01:15:46 +0100 <geekosaur> Inst, you can create and use .cmm files, but it's not really recommended unless you really know what you are doing
2022-01-10 01:16:05 +0100 <Inst> is .cmm incredibly hard to use?
2022-01-10 01:16:15 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e)
2022-01-10 01:16:16 +0100 <geekosaur> it's very low level
2022-01-10 01:16:35 +0100 <Inst> i mean, i'm a proponent of functional / imperative synthesis, both have their strengths
2022-01-10 01:16:40 +0100 <geekosaur> be very careful with what registers you use because it won't protect you from overwriting important ones
2022-01-10 01:17:08 +0100 <geekosaur> you can see some cmm files here https://gitlab.haskell.org/ghc/ghc/-/tree/master/rts
2022-01-10 01:17:42 +0100 <Inst> looks just like normal C
2022-01-10 01:17:50 +0100 <geekosaur> looks like it but is not
2022-01-10 01:18:30 +0100 <Inst> so, in theory, i could easily build a transpiler to cmm
2022-01-10 01:19:06 +0100 <Inst> so i could get Haskell-type syntax alongside features to make it more easily integrated into Haskell
2022-01-10 01:19:23 +0100 <EvanR> wait... that sounds like Haskell
2022-01-10 01:19:41 +0100 <geekosaur> I was thinking STG
2022-01-10 01:19:45 +0100 <EvanR> it has Haskell-like syntax and transpiles (compiles) to Cmm
2022-01-10 01:19:55 +0100 <geekosaur> which is fairly close to Core and compiles to Cmm
2022-01-10 01:21:48 +0100Tuplanolla(~Tuplanoll@91-159-69-16.elisa-laajakaista.fi) (Quit: Leaving.)
2022-01-10 01:23:26 +0100 <Inst> erm, the way I had it explained to me is that .cmm is faster than C
2022-01-10 01:24:09 +0100 <Inst> but Haskell doesn't transpile fluently into .cmm because .cmm is imperative, while Haskell is imperative
2022-01-10 01:24:13 +0100 <Inst> erm, functional
2022-01-10 01:24:25 +0100 <c_wraith> I think you've misunderstood a few steps along the way
2022-01-10 01:24:28 +0100acidjnk(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-10 01:24:28 +0100acidjnk_new(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-10 01:24:29 +0100 <Inst> probably
2022-01-10 01:24:33 +0100 <Inst> sorry for wasting your time
2022-01-10 01:24:43 +0100 <c_wraith> It's not a waste of time if you learn stuff
2022-01-10 01:24:58 +0100 <Inst> what did I misunderstand?
2022-01-10 01:26:21 +0100 <c_wraith> Well, "cmm is faster than c" is not a statement that is true or false.
2022-01-10 01:26:37 +0100 <c_wraith> cmm is *more predictable* than c
2022-01-10 01:27:15 +0100 <c_wraith> (it also has fewer constructs, which is helpful for a language that's really only intended as an intermediate compilation target)
2022-01-10 01:29:05 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds)
2022-01-10 01:31:00 +0100 <geekosaur> if you really want to be able to mix imperative and functional code, you may be interested in
2022-01-10 01:31:04 +0100 <geekosaur> @hackage inline-c
2022-01-10 01:31:05 +0100 <lambdabot> https://hackage.haskell.org/package/inline-c
2022-01-10 01:32:37 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-10 01:33:17 +0100mvk(~mvk@2607:fea8:5cdd:f000::45db) (Ping timeout: 240 seconds)
2022-01-10 01:33:51 +0100 <Inst> c_wraith: what I've read is that Cmm is designed for GHC's specialized Cmm compiler, which, because Cmm is more predictable, can do optimizations gcc or clang can't
2022-01-10 01:34:16 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca)
2022-01-10 01:34:34 +0100 <c_wraith> yes, but it also can't do some optimizations gcc or clang do, because they take advantage of that imprecision to interpret things in the way that gives the fastest code
2022-01-10 01:34:38 +0100 <sonny> EvanR: what about []:1 ?
2022-01-10 01:34:40 +0100 <geekosaur> but it also does less, which makes those optimizations easier
2022-01-10 01:35:17 +0100 <geekosaur> > []:1
2022-01-10 01:35:18 +0100 <lambdabot> error:
2022-01-10 01:35:18 +0100 <lambdabot> • No instance for (Num [[()]]) arising from a use of ‘e_11’
2022-01-10 01:35:18 +0100 <lambdabot> • In the expression: e_11
2022-01-10 01:35:34 +0100 <sonny> yes, so the second elem would have to be a list if the first is []
2022-01-10 01:35:46 +0100 <geekosaur> oh, my, lambdabot, you're being particularly obtuse today
2022-01-10 01:35:57 +0100 <EvanR> the second argument to : must be a list no matter what
2022-01-10 01:36:07 +0100 <EvanR> that's just how it's defined
2022-01-10 01:36:14 +0100 <pfurla-matrix> > flip (:) [] 1
2022-01-10 01:36:14 +0100 <geekosaur> :t (:)
2022-01-10 01:36:14 +0100 <lambdabot> a -> [a] -> [a]
2022-01-10 01:36:15 +0100 <lambdabot> [1]
2022-01-10 01:36:20 +0100 <sonny> oh
2022-01-10 01:36:25 +0100alkjdflkjs(~alkjdflkj@187.173.201.254)
2022-01-10 01:36:46 +0100 <EvanR> you always cons onto a list
2022-01-10 01:36:47 +0100 <Inst> : I believe, is a type constructor, right?
2022-01-10 01:36:51 +0100 <Inst> erm, data constructor
2022-01-10 01:36:57 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-10 01:36:57 +0100 <Axman6> data constreuctor, yes
2022-01-10 01:37:01 +0100 <Axman6> -e
2022-01-10 01:37:08 +0100 <pfurla-matrix> data, yeah
2022-01-10 01:38:12 +0100 <Inst> c_wraith: has anyone ever tested it, like, attempted to outperform gcc etc using just .cmm?
2022-01-10 01:38:34 +0100 <alkjdflkjs> s
2022-01-10 01:38:51 +0100 <Axman6> well over a decade ago people were writing faster haskell than equivalent C - see Don Stewart's work
2022-01-10 01:39:00 +0100 <c_wraith> I doubt it. cmm is not really intended to be a user interface. It's only very recently that ghc added support for using it in libraries other than the RTS at all
2022-01-10 01:39:29 +0100 <geekosaur> .cmm is not really suitable for writing production code; it's intended to be a compiler intermediate language, which is a rather different use case
2022-01-10 01:39:31 +0100 <c_wraith> ... Ok, my age might be getting to me. "very recently" might be as much as like 8 years ago. :)
2022-01-10 01:39:39 +0100 <Inst> Axman6: iirc, GHC compares favorably to Clang in benchmarks
2022-01-10 01:40:01 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-10 01:40:01 +0100 <geekosaur> I think the old C-- (standalone cmm) sitew got archived a couple years back
2022-01-10 01:40:05 +0100 <Inst> it's that gcc is just so superior (i.e, has been able to get high-quality talent and labor) to Clang that makes Haskell work hard to compete in performance
2022-01-10 01:40:11 +0100 <geekosaur> it might have had some useful comparisons
2022-01-10 01:40:11 +0100 <pfurla-matrix> c_wraith: shut up, Sinclair Spectrum is still very recent
2022-01-10 01:40:23 +0100 <Inst> lol
2022-01-10 01:40:36 +0100 <Axman6> https://donsbot.com/2008/06/04/haskell-as-fast-as-c-working-at-a-high-altitude-for-low-level-perfo… is an example from 2008
2022-01-10 01:40:49 +0100 <sonny> EvanR: (cons 3 (cons 2 (cons 1 []))) = [3, 2, 1]. I'm going to guess this is not in the right order, what should it be?
2022-01-10 01:41:06 +0100 <EvanR> that looks right
2022-01-10 01:41:14 +0100 <Axman6> why would that not be the right order?
2022-01-10 01:41:16 +0100 <monochrom> \∩/ Sinclair Spectrum :)
2022-01-10 01:41:31 +0100 <geekosaur> > let cons = (:) in (cons 3 (cons 2 (cons 1 [])))
2022-01-10 01:41:32 +0100 <lambdabot> [3,2,1]
2022-01-10 01:41:34 +0100 <sonny> Axman6: well if it is, I'm not sure where flip happens
2022-01-10 01:41:38 +0100 <pfurla-matrix> > let cons = (:) in (cons 3 (cons 2 (cons 1 [])))
2022-01-10 01:41:39 +0100 <lambdabot> [3,2,1]
2022-01-10 01:41:44 +0100 <Axman6> what flip?
2022-01-10 01:41:45 +0100 <monochrom> I have a retired prof who owns a PDP-11.
2022-01-10 01:42:06 +0100 <sonny> Axman6: when you define reverse with foldl, it requires flip
2022-01-10 01:42:08 +0100 <Inst> https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/haskell-beats-C.pdf?from=http%…
2022-01-10 01:42:13 +0100 <Axman6> monochrom: pretty sure there's one or two at my uni's CS department too
2022-01-10 01:42:30 +0100 <Axman6> sonny: do you understand what flip does?
2022-01-10 01:42:39 +0100 <Axman6> > flip f x y :: Expr
2022-01-10 01:42:40 +0100 <Inst> is sonny new to Haskell?
2022-01-10 01:42:40 +0100 <pfurla-matrix> monochrom: I was dying to play with one of these when I learned they existed (back in the '90s)
2022-01-10 01:42:40 +0100 <lambdabot> f y x
2022-01-10 01:42:59 +0100 <sonny> yeah
2022-01-10 01:43:15 +0100xb0o2(~xb0o2@user/xb0o2) (Quit: Client closed)
2022-01-10 01:43:17 +0100 <sonny> Inst: yes
2022-01-10 01:43:20 +0100 <EvanR> ah a good use of Expr xD
2022-01-10 01:43:25 +0100 <Axman6> and did you follow the whole conversation we've been havving about the order of arguments for the function passed to foldl?
2022-01-10 01:43:41 +0100 <Inst> do you know what a data declaration looks like?
2022-01-10 01:43:43 +0100 <Axman6> :t foldl
2022-01-10 01:43:44 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2022-01-10 01:43:46 +0100 <Axman6> :t (:)
2022-01-10 01:43:47 +0100 <lambdabot> a -> [a] -> [a]
2022-01-10 01:43:56 +0100 <Inst> in Haskell, of course
2022-01-10 01:43:58 +0100 <sonny> yeah, but I thought the problem wasn't the order?
2022-01-10 01:44:08 +0100 <pfurla-matrix> :t foldr -- compare with foldr
2022-01-10 01:44:09 +0100 <lambdabot> Foldable t => (a -> b -> b) -> b -> t a -> b
2022-01-10 01:44:31 +0100 <pfurla-matrix> > foldr (:) [] [1,2,3]
2022-01-10 01:44:33 +0100 <lambdabot> [1,2,3]
2022-01-10 01:44:33 +0100 <Axman6> we need the b's to be [a], so we need a function with type ([a] -> a -> [a]). (:) has type a -> [a] -> [a], so if we apply flip, we get [a] -> a -> [a]
2022-01-10 01:44:37 +0100 <sonny> Inst: data foo = bar ?
2022-01-10 01:44:40 +0100 <alkjdflkjs> Hi, I've been trying to install GHCup but when I run the command of the page  (curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh) I get the next error, what's the problem?
2022-01-10 01:44:41 +0100 <alkjdflkjs> Warning: ~/.ghcup/cache/ghcup-0.0.6.yaml.tmp: Permission denied
2022-01-10 01:44:41 +0100 <alkjdflkjs>   0  139k    0   909    0     0   4024      0  0:00:35 --:--:--  0:00:35  4040
2022-01-10 01:44:42 +0100 <alkjdflkjs> curl: (23) Failure writing output to destination
2022-01-10 01:44:42 +0100 <alkjdflkjs> [ Warn  ] Could not get download info, trying cached version (this may not be r>
2022-01-10 01:44:43 +0100 <alkjdflkjs> [ ...   ] If this problem persists, consider switching downloader via:
2022-01-10 01:44:43 +0100 <alkjdflkjs> [ ...   ]     ghcup config set downloader Wget
2022-01-10 01:44:44 +0100 <alkjdflkjs> [ Error ] JSON decoding failed with: YAML exception:
2022-01-10 01:44:44 +0100 <alkjdflkjs> [ ...   ] Yaml file not found: ~/.ghcup/cache/ghcup-0.0.6.yaml
2022-01-10 01:44:45 +0100 <alkjdflkjs> [ ...   ] Consider removing ~/.ghcup/cache/ghcup-0.0.6.yaml manually.
2022-01-10 01:44:45 +0100 <alkjdflkjs> [ ...   ]
2022-01-10 01:44:46 +0100 <alkjdflkjs> "_eghcup upgrade" failed!
2022-01-10 01:44:46 +0100 <Axman6> alkjdflkjs: stop
2022-01-10 01:44:56 +0100 <Axman6> @where paste
2022-01-10 01:44:56 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-01-10 01:45:02 +0100 <monochrom> . o O ( good timing )
2022-01-10 01:45:02 +0100 <Inst> sonny: more like data [] a = [] | a | [a] iirc
2022-01-10 01:45:09 +0100 <Inst> erm, not that
2022-01-10 01:45:13 +0100 <geekosaur> you have a permission problem somewhere
2022-01-10 01:45:23 +0100 <Inst> data [] a = [] | a : [a]
2022-01-10 01:45:54 +0100 <geekosaur> alkjdflkjs, you have a permission problem somewhere. perhaps at some point you tried to run ghcup as root?
2022-01-10 01:46:12 +0100 <Inst> there
2022-01-10 01:46:13 +0100 <Inst> data [] a = [] | a : [a]
2022-01-10 01:46:17 +0100 <geekosaur> ls -ld ~/.ghcup
2022-01-10 01:46:26 +0100 <Inst> the version you get if you do :i []
2022-01-10 01:46:35 +0100 <Inst> do you know how to read this, sonny?
2022-01-10 01:46:50 +0100 <sonny> Axman6: (b -> {a -> b}) right?
2022-01-10 01:47:20 +0100 <Axman6> the definition of list in Haskell is quite magical and not really a good example of defining data types, because _you_ are not allowed to write that definition
2022-01-10 01:47:32 +0100 <Inst> yeah, iirc, it's a primitive
2022-01-10 01:47:33 +0100 <Axman6> sonny: I don't understand what the question is
2022-01-10 01:47:43 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-01-10 01:47:43 +0100 <Inst> i'd have to drag out a custom implementation of list
2022-01-10 01:47:44 +0100 <Axman6> b -> a -> b is the same as b -> (a -> b)
2022-01-10 01:47:44 +0100 <sonny> the order to read the signature
2022-01-10 01:48:28 +0100 <Inst> and tbh, that's why I think it might be worthwhile to set up own pedagogy, i.e, people don't spend enough time being taught how type signatures work, how to read it, took me weeks before I had a sufficient understanding of it
2022-01-10 01:48:29 +0100 <geekosaur> alkjdflkjs, can you join #haskell-beginners instead? it's a bit noisy in here currently, as you've probably noticed
2022-01-10 01:48:56 +0100 <ephemient> % :i ->
2022-01-10 01:48:56 +0100 <yahb> ephemient: type (->) :: * -> * -> *; type (->) = FUN 'Many :: * -> * -> *; -- Defined in `GHC.Types'; infixr -1 ->; instance Applicative ((->) r) -- Defined in `GHC.Base'; instance Functor ((->) r) -- Defined in `GHC.Base'; instance Monad ((->) r) -- Defined in `GHC.Base'; instance Monoid b => Monoid (a -> b) -- Defined in `GHC.Base'; instance Semigroup b => Semigroup (a -> b) -- Defined in `GHC.Base'; instance [s
2022-01-10 01:48:59 +0100 <Inst> i'll read up
2022-01-10 01:48:59 +0100 <alkjdflkjs> ok, thanks
2022-01-10 01:49:03 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-10 01:49:16 +0100 <ephemient> oh I was hoping that would print out "infixr -1 ->"
2022-01-10 01:49:23 +0100 <sonny> haskell uses * and letters?
2022-01-10 01:49:35 +0100 <EvanR> Inst, all that is really not helping the original problem of why flip is required
2022-01-10 01:49:40 +0100 <Axman6> c_wraith: I've spent too much time reading low level haskell and my brain keeps trying to figure out what the "wraith" function in C would be for
2022-01-10 01:49:51 +0100 <c_wraith> it makes your data vanish
2022-01-10 01:49:57 +0100 <Axman6> D:
2022-01-10 01:50:01 +0100 <Axman6> likeMongoDB?
2022-01-10 01:50:05 +0100xkuru(~xkuru@user/xkuru)
2022-01-10 01:50:08 +0100 <c_wraith> like /dev/null
2022-01-10 01:50:09 +0100 <pfurla-matrix> > data List a = EmptyList | a :. (List a) deriving Show; infixr 5 :.
2022-01-10 01:50:10 +0100 <lambdabot> <hint>:1:1: error: parse error on input ‘data’
2022-01-10 01:50:16 +0100 <Axman6> yeah, so like MongoDB
2022-01-10 01:50:23 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 01:50:33 +0100 <Axman6> pfurla-matrix: use % for yahb, it'll remember
2022-01-10 01:50:37 +0100 <geekosaur> pfurla-matrix, use @let for definitions
2022-01-10 01:50:43 +0100 <Axman6> or that
2022-01-10 01:50:43 +0100 <geekosaur> or yahb, yeh
2022-01-10 01:51:16 +0100 <pfurla-matrix> @let data List a = EmptyList | a :. (List a) deriving Show; infixr 5 :.
2022-01-10 01:51:17 +0100 <lambdabot> Defined.
2022-01-10 01:51:25 +0100 <sonny> so in this case b is the list and a is the numbers?
2022-01-10 01:51:29 +0100 <pfurla-matrix> > 1 :. 2 :. 3 :. EmptyList
2022-01-10 01:51:30 +0100 <lambdabot> 1 :. (2 :. (3 :. EmptyList))
2022-01-10 01:51:50 +0100 <pfurla-matrix> sonny: y
2022-01-10 01:52:23 +0100 <pfurla-matrix> :t foldr (.:) EmptyList [1,2,3]
2022-01-10 01:52:24 +0100 <lambdabot> error:
2022-01-10 01:52:24 +0100 <lambdabot> • Variable not in scope: (.:) :: a0 -> List a -> List a
2022-01-10 01:52:24 +0100 <lambdabot> • Perhaps you meant one of these:
2022-01-10 01:52:41 +0100 <EvanR> oof
2022-01-10 01:52:46 +0100 <Axman6> :.
2022-01-10 01:52:53 +0100 <pfurla-matrix> s/.:/:./
2022-01-10 01:52:54 +0100 <Axman6> constructors start with :
2022-01-10 01:53:01 +0100 <Axman6> small oof
2022-01-10 01:53:10 +0100 <sonny> pfurla-matrix: I'm talking about Foldable t => (b -> a -> b) -> b -> t a -> b and foldl (flip(:)) []
2022-01-10 01:53:12 +0100 <pfurla-matrix> :t foldr (:.) EmptyList [1,2,3]
2022-01-10 01:53:13 +0100 <lambdabot> Num a => List a
2022-01-10 01:53:28 +0100 <EvanR> sonny, yeah, b = [Int], a = Int, in your examples
2022-01-10 01:53:50 +0100 <EvanR> and t = [], if you are looking at that Foldable version
2022-01-10 01:53:57 +0100 <Axman6> :t foldl -- here, all the b's are the type we want to return
2022-01-10 01:53:58 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2022-01-10 01:54:15 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-10 01:54:16 +0100 <Axman6> % :t foldl @[]
2022-01-10 01:54:16 +0100 <yahb> Axman6: (b -> a -> b) -> b -> [a] -> b
2022-01-10 01:54:59 +0100 <sonny> EvanR: ok, so is the scheme version (a->a->b) ?
2022-01-10 01:55:09 +0100 <EvanR> no...
2022-01-10 01:55:17 +0100juri_(~juri@178.63.35.222)
2022-01-10 01:55:23 +0100 <Axman6> it's (a -> b -> b)
2022-01-10 01:55:33 +0100 <sonny> one sec
2022-01-10 01:55:35 +0100 <Axman6> ... I think, I've already forgotten!
2022-01-10 01:55:53 +0100 <Inst> wait, does sonny understand operators and operator sections?
2022-01-10 01:55:56 +0100 <sonny> ok ok ok
2022-01-10 01:56:06 +0100 <sonny> someone do the lambda bot on :
2022-01-10 01:56:07 +0100 <ephemient> the accumulator has to be an input to the function being used to fold; whether it's the first argument or the second varies by language
2022-01-10 01:56:15 +0100 <EvanR> :t (:)
2022-01-10 01:56:16 +0100 <lambdabot> a -> [a] -> [a]
2022-01-10 01:56:20 +0100 <sonny> ohhhh
2022-01-10 01:56:25 +0100 <sonny> hmm
2022-01-10 01:57:06 +0100 <EvanR> if you rename the variables, foldl is
2022-01-10 01:57:14 +0100 <Inst> so what i'm assuming is happening with foldl is that (:) can't get its arguments in the right order, so flip is being used to reverse the order (:) is taking its arguments in
2022-01-10 01:57:52 +0100 <Axman6> exactly
2022-01-10 01:57:55 +0100 <pfurla-matrix> This is eye-opener https://wiki.haskell.org/Fold#List_folds_as_structural_transformations
2022-01-10 01:57:57 +0100 <Axman6> nothing more, nothing less
2022-01-10 01:57:59 +0100wagle(~wagle@quassel.wagle.io) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
2022-01-10 01:58:07 +0100 <Inst> user-defined list: members of the type UDF can either be of value (nil), which is a root that starts the list
2022-01-10 01:58:14 +0100 <EvanR> belaying that
2022-01-10 01:58:14 +0100 <Inst> UDF -> user-defined list
2022-01-10 01:58:17 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Ping timeout: 240 seconds)
2022-01-10 01:58:30 +0100wagle(~wagle@quassel.wagle.io)
2022-01-10 01:58:42 +0100 <Inst> or, a construction of some value (of the same type as existing values in the list) appended to an existing list type
2022-01-10 01:59:17 +0100 <Inst> you can't just have the second, because then there's no existing list value to append to
2022-01-10 01:59:23 +0100 <pfurla-matrix> I'd rather talk about PDP-11 than Scheme (although Scheme is awesome too)
2022-01-10 02:00:00 +0100 <Inst> but when you have the second, the list is composed out of stuff of type a being appended to existing values of type list a
2022-01-10 02:00:13 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-10 02:00:13 +0100 <ephemient> or you could have a list type that can only represent infinite lists :)
2022-01-10 02:00:23 +0100 <Inst> i've never seen that
2022-01-10 02:00:24 +0100 <c_wraith> we usually call that Stream
2022-01-10 02:00:24 +0100 <sonny> Axman6: do you say (a -> b -> b) because of how cons in scheme is defined?
2022-01-10 02:00:49 +0100 <sonny> iirc it is not as strict as haskell
2022-01-10 02:01:21 +0100 <Inst> why i'm full of shit / utterly nuts: want students to define a custom list type (while being hand-held) on the first problem set
2022-01-10 02:01:41 +0100 <pfurla-matrix> @let ListInf a = a ::. ListInf a
2022-01-10 02:01:42 +0100 <lambdabot> /sandbox/tmp/.L.hs:170:1: error:
2022-01-10 02:01:42 +0100 <lambdabot> Not in scope: data constructor ‘ListInf’
2022-01-10 02:01:42 +0100 <lambdabot> |
2022-01-10 02:01:43 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-01-10 02:01:55 +0100 <pfurla-matrix> @let data ListInf a = a ::. ListInf a
2022-01-10 02:01:56 +0100 <lambdabot> Defined.
2022-01-10 02:02:16 +0100 <Inst> ah, and how does that work?
2022-01-10 02:02:25 +0100 <Inst> will that toss out an infinite type error any time you try to use it?
2022-01-10 02:02:31 +0100 <c_wraith> sonny: (a -> b -> b) is closely related to lists. In particular, it's closely related to the church encoding of the (:) constructor
2022-01-10 02:02:43 +0100 <ephemient> > fix (1 ::.)
2022-01-10 02:02:44 +0100 <lambdabot> error:
2022-01-10 02:02:44 +0100 <lambdabot> • No instance for (Show (ListInf Integer))
2022-01-10 02:02:44 +0100 <lambdabot> arising from a use of ‘show_M85587785111551100718’
2022-01-10 02:02:49 +0100 <Inst> whoops
2022-01-10 02:02:49 +0100califax(~califax@user/califx)
2022-01-10 02:02:52 +0100 <Inst> forgot to derive show
2022-01-10 02:03:11 +0100 <pfurla-matrix> that was on purpose :P
2022-01-10 02:03:32 +0100 <ephemient> it's fine to derive Show, lambdabot will truncate
2022-01-10 02:03:50 +0100 <pfurla-matrix> @def infconst a = a ::. (infconst a)
2022-01-10 02:03:51 +0100 <lambdabot> Defined.
2022-01-10 02:04:04 +0100 <sonny> pfurla-matrix: the mystery lies here "Note that the parameters to cons must be flipped, because the element to add is now the right hand parameter of the combining function."
2022-01-10 02:04:43 +0100gallup(~gallup@192-222-138-215.qc.cable.ebox.net)
2022-01-10 02:04:46 +0100 <Inst> a : b = (:) a b
2022-01-10 02:04:50 +0100gallup(~gallup@192-222-138-215.qc.cable.ebox.net) (Client Quit)
2022-01-10 02:04:58 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net) (Quit: leaving)
2022-01-10 02:05:05 +0100 <Inst> b has to be an existing list type
2022-01-10 02:05:15 +0100 <geekosaur> value
2022-01-10 02:05:19 +0100 <Inst> list value, sorry
2022-01-10 02:05:20 +0100 <Inst> ;_;
2022-01-10 02:06:15 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net)
2022-01-10 02:08:05 +0100 <sonny> so what I don't get is that it's like if the param list is x y, the zero value get's sent to x first in haskell and y first in scheme
2022-01-10 02:08:30 +0100 <geekosaur> I told you that earlier, it's just an arbitrary choice each language made
2022-01-10 02:08:42 +0100 <sonny> from there, I need to get to (a -> b -> b)
2022-01-10 02:08:44 +0100 <geekosaur> scheme went for programmer convenience by having them match
2022-01-10 02:09:01 +0100 <sonny> geekosaur: I understand but I don't understand
2022-01-10 02:09:06 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 02:09:06 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 02:09:06 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 02:09:08 +0100 <geekosaur> haskell went for mathematical convenience with how the functions naturally associate
2022-01-10 02:09:20 +0100 <sonny> ok
2022-01-10 02:09:24 +0100 <geekosaur> each has arguments for and against
2022-01-10 02:09:46 +0100 <sonny> so what haskell does, is that it allows for left association to work properly right?
2022-01-10 02:09:52 +0100 <geekosaur> you'd have to hunt down the scheme and haskell language designers to find out why they made those choices
2022-01-10 02:10:20 +0100 <geekosaur> it just makes left associativity match up with a natural left-associative function
2022-01-10 02:10:30 +0100 <sonny> so fold can be universal, and when you use - it will keep the properties
2022-01-10 02:10:38 +0100 <geekosaur> > foldr (*) z [a,b,c]
2022-01-10 02:10:39 +0100 <lambdabot> a * (b * (c * z))
2022-01-10 02:10:45 +0100 <geekosaur> > foldl (*) z [a,b,c]
2022-01-10 02:10:46 +0100 <lambdabot> z * a * b * c
2022-01-10 02:11:02 +0100 <Axman6> > foldl (\accumlatingList headValue -> headValue : accumulatingList) [] [1,2,3]
2022-01-10 02:11:03 +0100 <lambdabot> error:
2022-01-10 02:11:03 +0100 <lambdabot> • Variable not in scope: accumulatingList :: [a]
2022-01-10 02:11:03 +0100 <lambdabot> • Perhaps you meant ‘accumlatingList’ (line 1)
2022-01-10 02:11:06 +0100 <sonny> err I don't actually remember - associativity
2022-01-10 02:11:25 +0100 <Axman6> > foldl (\accumulatingList headValue -> headValue : accumulatingList) [] [1,2,3]
2022-01-10 02:11:26 +0100 <lambdabot> [3,2,1]
2022-01-10 02:11:27 +0100 <sonny> + is left but it doesn't matter
2022-01-10 02:11:30 +0100 <geekosaur> see how nicely those both come out in Haskell? in Scheme the corresponding expansions are uglier because fold flips the argument order
2022-01-10 02:11:49 +0100 <geekosaur> but it's more convenient for most programmers to remember
2022-01-10 02:11:56 +0100 <sonny> ok
2022-01-10 02:12:08 +0100 <sonny> much thanks
2022-01-10 02:12:18 +0100hololeap_(~hololeap@user/hololeap)
2022-01-10 02:12:45 +0100 <dolio> I don't see how these conveniences are more or less 'programmer' oriented.
2022-01-10 02:12:58 +0100 <Inst> also, a question, is it useful to speak of FAM instead of Monad?
2022-01-10 02:13:25 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-10 02:13:34 +0100 <dolio> It's convenient to be able to remember that the argument types are the same order in both, and it's convenient to remember a simple rule for what the result of the function will actually be.
2022-01-10 02:13:34 +0100 <pfurla-matrix> you guys are almost going bananas and barbed wire
2022-01-10 02:13:47 +0100 <dolio> Those are both convenient when programming.
2022-01-10 02:14:12 +0100 <pfurla-matrix> what is FAM?
2022-01-10 02:14:17 +0100 <sonny> dolio: (a->b->b) is probably what'd you do if you defined it though
2022-01-10 02:14:21 +0100 <Inst> functor - applicative - monad
2022-01-10 02:14:23 +0100 <pfurla-matrix> Functor-Applicative-Monad?
2022-01-10 02:14:34 +0100 <Inst> then again, for a lot of types you might end up with FAMTSM or something like that
2022-01-10 02:14:56 +0100 <Inst> just a way to avoid saying the M word, as well as making it clear you're talking about typeclasses
2022-01-10 02:15:16 +0100 <geekosaur> Inst, to most of us FAM refers to the proposal to make Applicative (and thereby Functor) a "superclass" of Monad
2022-01-10 02:15:22 +0100 <Inst> i see
2022-01-10 02:15:27 +0100 <Inst> which went through
2022-01-10 02:15:27 +0100 <geekosaur> because Applicative didn't exist when Monad was invented
2022-01-10 02:15:39 +0100 <geekosaur> yes, some years back
2022-01-10 02:15:45 +0100hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2022-01-10 02:15:46 +0100 <Inst> so functor only became a superclass of monad when applicative became a superclass of monad?
2022-01-10 02:16:14 +0100 <dolio> sonny: I would probably do what is done in Haskell, because I'm used to it, and have no problems remembering how it is.
2022-01-10 02:16:24 +0100 <geekosaur> yes
2022-01-10 02:16:55 +0100 <geekosaur> there's even an old holdover, liftM should be fmap but because Functor was not a superclass of Monad it had to be "rebuilt" from >>=
2022-01-10 02:18:24 +0100 <Inst> yeah i thought monads became a subclass of functor before then
2022-01-10 02:18:42 +0100 <geekosaur> it really needs Applicative in between
2022-01-10 02:18:52 +0100 <pfurla-matrix> does "being lazy with class" cover these?
2022-01-10 02:19:03 +0100 <Inst> i actually don't see how monads are a subclass of applicative, tbh
2022-01-10 02:19:15 +0100 <Inst> return = pure is natural
2022-01-10 02:19:24 +0100 <geekosaur> because Monad claims to have two methods, return and (>>=) — but "return" is actually "pure" from Applicative, in the same way "liftM" is really "fmap"
2022-01-10 02:19:40 +0100alekhine(~alekhine@c-73-38-152-33.hsd1.ma.comcast.net)
2022-01-10 02:19:44 +0100 <Inst> but why monads need <*> is more questionable
2022-01-10 02:19:52 +0100 <geekosaur> they have it
2022-01-10 02:19:57 +0100 <c_wraith> It's not so much that they need it as they have it
2022-01-10 02:19:59 +0100 <c_wraith> :t ap
2022-01-10 02:20:00 +0100 <lambdabot> Monad m => m (a -> b) -> m a -> m b
2022-01-10 02:20:01 +0100 <geekosaur> we called it "ap" before Applicative
2022-01-10 02:20:06 +0100 <c_wraith> :t (<*>)
2022-01-10 02:20:07 +0100 <lambdabot> Applicative f => f (a -> b) -> f a -> f b
2022-01-10 02:21:10 +0100alekhine(~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) (Client Quit)
2022-01-10 02:21:24 +0100 <EvanR> sonny, I recently defined something with argument order like (b -> a -> b) instead of (a -> b -> b) because I forsaw myself wanting to partial the b alot, and so tried to avoid a lot of flips
2022-01-10 02:21:36 +0100 <EvanR> still questioning my sanity
2022-01-10 02:22:47 +0100 <Inst> i'm wondering, why can't monads and applicatives both have pure and return as separate methods?
2022-01-10 02:22:53 +0100 <Inst> or is this something with the instance system?
2022-01-10 02:23:43 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 02:23:46 +0100 <Inst> i.e, have them both be subclasses of fmap, but not subclasses of each other
2022-01-10 02:23:48 +0100 <sonny> EvanR: I don't know what partial means there :(
2022-01-10 02:23:54 +0100 <Inst> partial application
2022-01-10 02:23:58 +0100 <Inst> did you learn about currying yet?
2022-01-10 02:24:08 +0100 <Inst> (also planning to put that on first problem set)
2022-01-10 02:24:08 +0100 <sonny> yeah, but I don't think about it
2022-01-10 02:24:18 +0100 <Axman6> Inst: I use <*> _all_ the time, probably more often than I use anything from Monad
2022-01-10 02:24:22 +0100kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net)
2022-01-10 02:24:27 +0100 <pfurla-matrix> :t (1 :)
2022-01-10 02:24:28 +0100 <lambdabot> Num a => [a] -> [a]
2022-01-10 02:24:31 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 02:24:46 +0100 <Axman6> "the function which adds 1 to the front of any lists of numbers"
2022-01-10 02:24:47 +0100 <lyxia> It would subvert established expectations and you would have to have two parallel sets of combinators for Monad and Applicative
2022-01-10 02:25:13 +0100 <Inst> i see
2022-01-10 02:25:16 +0100 <sonny> EvanR: that is a dilema then :/
2022-01-10 02:25:18 +0100 <jackdk> every monad is an applicative, so there's no point having `return` (apart from historical baggage)
2022-01-10 02:25:26 +0100 <pfurla-matrix> would the laws hold for anything but return = pure?
2022-01-10 02:25:42 +0100 <lyxia> Requiring that the Applicative instance agree with the Monad instance means you can freely use applicative combinators for monads.
2022-01-10 02:25:52 +0100 <Axman6> Inst: all Monads are Applicatives, which implies Monad is a subclass of Applicative. it is a monad law that <*> and ap behave the same
2022-01-10 02:26:03 +0100 <Inst> i know
2022-01-10 02:26:09 +0100 <Inst> or wait, is ap defined in monad?
2022-01-10 02:26:13 +0100kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
2022-01-10 02:26:15 +0100 <Axman6> no
2022-01-10 02:26:43 +0100 <pfurla-matrix> :i ap
2022-01-10 02:26:43 +0100 <Axman6> but it is defined for all monads as: ap mf ma = mf >>= \f -> f <$> ma
2022-01-10 02:27:00 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 02:27:00 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 02:27:00 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 02:27:17 +0100 <Inst> tbh i sort of hate the applicative class, courtesy Hutton, I know what it's for
2022-01-10 02:27:34 +0100 <Inst> *typeclass
2022-01-10 02:27:36 +0100 <geekosaur> pfurla-matrix, :i doesn't work in lambdabot. it does in yahb but you probably want to use %% :i <whatever> so it'll pastebin the response
2022-01-10 02:27:51 +0100 <Inst> but I can't figure out how to work with dissimilar nested monads in applicative
2022-01-10 02:28:10 +0100 <pfurla-matrix> geekosaur: thanks
2022-01-10 02:28:21 +0100 <Inst> yes yes, go learn monad transformers and i won't have this problem
2022-01-10 02:28:27 +0100 <EvanR> sonny, not really
2022-01-10 02:28:48 +0100 <sonny> what is the solution then?
2022-01-10 02:28:54 +0100 <pfurla-matrix> Inst: keep doing what you are doing and you probably going to invent transformers yourself
2022-01-10 02:29:11 +0100 <EvanR> sonny, pick argument order that makes usage most convenient
2022-01-10 02:29:20 +0100 <Inst> i'm not that comfortable with the type system
2022-01-10 02:29:39 +0100 <Inst> i.e, taking a function type as an argument in data / newtype? That's wild.
2022-01-10 02:29:45 +0100 <sonny> good point
2022-01-10 02:30:04 +0100 <Inst> with hutton, i think it's the first time anyone teaches you you can put in a function type as an argument in data /newtype
2022-01-10 02:30:23 +0100 <Axman6> Inst: Applicative is probably one of the most useful type classes we have in Haskell, it is difficult to describe just how useful it is, and how pleasant it is to use once you know the pattern
2022-01-10 02:30:50 +0100 <Inst> as far as i understand it, it's only useful with single layer applicative types
2022-01-10 02:30:53 +0100 <Axman6> and it's one of the reasons why Facebook's Sigma spam filtering system can run as fast as it does
2022-01-10 02:31:15 +0100 <Axman6> Inst: then I guess you don't understand it :)
2022-01-10 02:31:23 +0100 <Inst> ;___;
2022-01-10 02:31:31 +0100 <Inst> (emoticon denotes tears)
2022-01-10 02:31:54 +0100Guest2113(~Guest21@2a00:23c8:1510:8b01:f5c5:cd35:22b1:ed5c)
2022-01-10 02:32:23 +0100 <pfurla-matrix> Axman6: very true... parsec *sigh*
2022-01-10 02:32:37 +0100 <Inst> i can't figure out what it should look like, say, <*> <*> if I have two layers
2022-01-10 02:32:42 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 02:33:04 +0100 <Inst> and iirc operators (or functions) can't take operators as arguments
2022-01-10 02:33:06 +0100 <c_wraith> if you have two layers and want to stay sane, use Compose
2022-01-10 02:33:08 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (Remote host closed the connection)
2022-01-10 02:33:14 +0100 <Inst> i don't want to stay sane!
2022-01-10 02:33:28 +0100 <c_wraith> and you can pass an operator as an argument by putting it in parens
2022-01-10 02:33:37 +0100 <Inst> which converts it to a function
2022-01-10 02:33:42 +0100 <Inst> so <*> (<*>)?
2022-01-10 02:33:43 +0100 <Axman6> % getCompose $ (+) <$> Compose [Just 1, Just 2, Nothing] <*> Compose [Just 10, Nothing, Just 30]
2022-01-10 02:33:43 +0100 <yahb> Axman6: [Just 11,Nothing,Just 31,Just 12,Nothing,Just 32,Nothing,Nothing,Nothing]
2022-01-10 02:33:45 +0100 <c_wraith> what's the difference?
2022-01-10 02:33:59 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 02:34:16 +0100 <Inst> the exact reason ($) is useful?
2022-01-10 02:34:25 +0100 <Inst> I never learned evaluation order properly
2022-01-10 02:34:27 +0100 <Axman6> :t liftA2 (<*>)
2022-01-10 02:34:27 +0100 <Inst> need exercises for that
2022-01-10 02:34:28 +0100 <lambdabot> (Applicative f1, Applicative f2) => f1 (f2 (a -> b)) -> f1 (f2 a) -> f1 (f2 b)
2022-01-10 02:34:30 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-10 02:34:41 +0100 <c_wraith> ($) isn't about evaluation order, it's about parsing
2022-01-10 02:34:47 +0100 <Inst> the way I understand it is that functions of infix need to be ( ... )
2022-01-10 02:34:49 +0100 <geekosaur> ($) can reduce the number of parentheses you need
2022-01-10 02:34:49 +0100 <Inst> parsing, I guess
2022-01-10 02:34:50 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 02:34:58 +0100 <Inst> $ works because the function can't take $ as an argument
2022-01-10 02:35:03 +0100burnsidesLlama(~burnsides@client-8-64.eduroam.oxuni.org.uk)
2022-01-10 02:35:17 +0100 <Inst> and $ has infix (l or r? I forget) of 0
2022-01-10 02:35:20 +0100 <Inst> so it gets parsed last
2022-01-10 02:35:35 +0100 <Inst> parsing is a better term than evaluation, since trying to use evaluation gets confused with lazy evaluation, which is a whole another beast
2022-01-10 02:35:53 +0100 <geekosaur> it's about associativity
2022-01-10 02:36:06 +0100 <geekosaur> normal function application is left-associative and highest precedence
2022-01-10 02:36:15 +0100 <geekosaur> \($) is right-associative and lowest precedence
2022-01-10 02:36:26 +0100 <geekosaur> so it kinda acts like inside-out parentheses
2022-01-10 02:36:38 +0100 <Inst> which is why you see it everywhere in Haskell code and people get confused
2022-01-10 02:36:48 +0100vysn(~vysn@user/vysn)
2022-01-10 02:37:00 +0100 <Inst> iirc infixl / infixr only throws errors if they have the same precedence, right?
2022-01-10 02:37:05 +0100Guest2113(~Guest21@2a00:23c8:1510:8b01:f5c5:cd35:22b1:ed5c) (Ping timeout: 256 seconds)
2022-01-10 02:37:21 +0100 <ephemient> also infix (without infixl/infixr)
2022-01-10 02:38:00 +0100 <Inst> a ^^l b ^^r c, assuming ^^r and l are user-defined operators
2022-01-10 02:38:05 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
2022-01-10 02:38:14 +0100 <Inst> that only blows up if they have the same precedence level?
2022-01-10 02:38:52 +0100 <Axman6> I;d love to have an infixb for balanced, so a * b * b * d = (a * b) * (c * d), but that would be a very weird feature
2022-01-10 02:39:01 +0100burnsidesLlama(~burnsides@client-8-64.eduroam.oxuni.org.uk) (Ping timeout: 240 seconds)
2022-01-10 02:39:16 +0100 <c_wraith> that would confuse the heck out of people
2022-01-10 02:39:32 +0100 <Axman6> the fixity number would be "n" where only * has n, you can't mix with other operators
2022-01-10 02:39:35 +0100 <Inst> only if anyone actually uses it
2022-01-10 02:39:48 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 02:39:48 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 02:39:48 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 02:40:39 +0100 <lyxia> Have you heard about our lord and savior Agda
2022-01-10 02:41:03 +0100 <Axman6> "If a shitty feature exists and no one uses it, is it really a problem?"
2022-01-10 02:41:03 +0100 <Inst> parsing still has a problem, tbh, as a term
2022-01-10 02:41:07 +0100 <Inst> since you'll confuse it with parsers
2022-01-10 02:41:09 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com)
2022-01-10 02:41:22 +0100 <Axman6> mixfix+-_+
2022-01-10 02:41:34 +0100 <lyxia> <3
2022-01-10 02:42:22 +0100 <Inst> so, i'll treat it as a homework assignment from you, axman6
2022-01-10 02:42:50 +0100 <Inst> the reason i had that openfiledialog crap was because i was trying to set up an environment where learning haskell would be "user friendly", for some definition of user and friendly
2022-01-10 02:42:57 +0100euandreh(~euandreh@2804:14c:33:9fe5:f755:55d9:216b:76f6) (Ping timeout: 240 seconds)
2022-01-10 02:43:11 +0100 <Inst> learning IO, the biggest thing that pops to mind is "why do I have to specify the filepath in code?"
2022-01-10 02:43:24 +0100 <Inst> "if i specify it with a user prompt, why does it have to be command line?"
2022-01-10 02:43:31 +0100 <Axman6> I believe several people have encouraged to learn haskell first, then you can try and make it easier, once you know why things are the way they are
2022-01-10 02:43:45 +0100 <Inst> yeah, i'm learning haskell right now
2022-01-10 02:43:57 +0100 <Inst> my time for deployment is delayed to late march at the earliest, but i wouldn't be surprised if it were june
2022-01-10 02:44:05 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8)
2022-01-10 02:44:23 +0100 <Inst> but sorry, i guess i'm using you guys as a public journal of "why the hell is this so hard?"
2022-01-10 02:44:31 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 02:44:35 +0100 <Inst> the homework assignment is:
2022-01-10 02:44:36 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 02:44:36 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-01-10 02:44:56 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e)
2022-01-10 02:45:18 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 02:45:21 +0100 <Inst> I've figured out how to use >>= \foo -> ... as a way to feed openFile a type of IO Maybe [Text]
2022-01-10 02:45:27 +0100shriekingnoise(~shrieking@186.137.144.80)
2022-01-10 02:45:34 +0100 <Inst> I've figured out how to use fmap to do so
2022-01-10 02:45:40 +0100 <Inst> now I need to figure out how to use pure / <*>
2022-01-10 02:45:44 +0100 <Inst> I was thinking it wasn't possible
2022-01-10 02:45:51 +0100 <Inst> openFile, in this context, requires String
2022-01-10 02:46:03 +0100 <Axman6> you need to stop forgetting the parens :)
2022-01-10 02:46:09 +0100 <Inst> ;___;
2022-01-10 02:46:24 +0100 <Inst> why do the parens matter?
2022-01-10 02:46:48 +0100 <Axman6> because what you wrote is ((IO Maybe) [Text]), which is a kind error
2022-01-10 02:47:02 +0100 <Inst> why do we default to this?
2022-01-10 02:47:07 +0100 <Axman6> :kind IO
2022-01-10 02:47:14 +0100 <Axman6> % :kind IO
2022-01-10 02:47:14 +0100 <yahb> Axman6: * -> *
2022-01-10 02:47:20 +0100 <Axman6> % :kind Maybe
2022-01-10 02:47:20 +0100 <yahb> Axman6: * -> *
2022-01-10 02:47:27 +0100 <Axman6> * /= * -> *
2022-01-10 02:47:31 +0100 <Inst> other than perhaps laziness (type-level function application follows the same rules as function application)
2022-01-10 02:47:52 +0100 <Inst> Is there actually a context where (TC1 TC2) TC3 is useful as a series of type constructors?
2022-01-10 02:47:57 +0100azimut_(~azimut@gateway/tor-sasl/azimut)
2022-01-10 02:48:14 +0100 <Axman6> it's for exactly the same reason as we do the same thing for function, " " is function and type application, so it associates to the left
2022-01-10 02:48:14 +0100 <dolio> It works exactly like `f x y z` at the term level.
2022-01-10 02:48:15 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2022-01-10 02:48:28 +0100 <Inst> i mean why does it need to left associate as opposed to right associate?
2022-01-10 02:48:32 +0100 <Axman6> % :kind Either
2022-01-10 02:48:32 +0100 <yahb> Axman6: * -> * -> *
2022-01-10 02:48:46 +0100 <Axman6> which is * -> (* -> *)
2022-01-10 02:49:11 +0100 <Axman6> that means we can talk about Either Int, which is something of kind * -> *, we have partially applied the Either constructor
2022-01-10 02:49:15 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-10 02:49:35 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-10 02:49:36 +0100 <Axman6> :t fmap @(Either Int)
2022-01-10 02:49:36 +0100 <lambdabot> error:
2022-01-10 02:49:37 +0100 <lambdabot> Pattern syntax in expression context: fmap@(Either Int)
2022-01-10 02:49:37 +0100 <lambdabot> Did you mean to enable TypeApplications?
2022-01-10 02:49:38 +0100 <Inst> (Either Int) String
2022-01-10 02:49:41 +0100 <Axman6> % :t fmap @(Either Int)
2022-01-10 02:49:41 +0100 <yahb> Axman6: (a -> b) -> Either Int a -> Either Int b
2022-01-10 02:49:59 +0100 <Axman6> so, we can talk about Either where f = Either Int
2022-01-10 02:50:22 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-01-10 02:50:39 +0100 <Inst> hence why I suspect it's reasonable to introduce early "Haskell has a powerful type system", except I don't know what a type system is and why it's powerful
2022-01-10 02:51:33 +0100 <Inst> but w/e, that's my problem, at this point, I've already found Haskell in Depth and they discuss (in something I can almost understand) the type system
2022-01-10 02:52:39 +0100 <Inst> thanks for humoring me, have a good night
2022-01-10 02:53:29 +0100 <Axman6> o/
2022-01-10 02:55:03 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 02:55:44 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 02:56:04 +0100alkjdflkjs(~alkjdflkj@187.173.201.254) (Quit: Connection closed)
2022-01-10 03:00:00 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 03:00:00 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 03:00:00 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 03:01:20 +0100boletales(~boletales@p98076-ipoefx.ipoe.ocn.ne.jp)
2022-01-10 03:05:33 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 03:06:12 +0100 <monochrom> "powerful" is a very vague and much abused word.
2022-01-10 03:06:24 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 03:06:30 +0100 <monochrom> "expressive" is how I would describe Haskell's type system.
2022-01-10 03:07:27 +0100 <qrpnxz> it's also powerful
2022-01-10 03:09:01 +0100 <EvanR> C++ is powerful
2022-01-10 03:09:09 +0100 <EvanR> in the shoot yourself in the foot sense
2022-01-10 03:09:18 +0100 <EvanR> i.e. high voltage
2022-01-10 03:09:59 +0100 <jackson99> not sure I'd associate power of the type system with its unsoundness
2022-01-10 03:10:44 +0100 <EvanR> wouldn't an unsound logic be the strongest of all? xD
2022-01-10 03:11:19 +0100 <jackson99> that being said C++ has a pretty expressive type system as well, most of the unsafety was inherited from C
2022-01-10 03:11:57 +0100 <geekosaur> .oO { Paul Lynde singing "I'm my own grandmother" }
2022-01-10 03:13:23 +0100califax-(~califax@user/califx)
2022-01-10 03:14:01 +0100 <sonny> it's a type system that meets the programmers expectations
2022-01-10 03:14:37 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-01-10 03:16:06 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 03:16:12 +0100califax(~califax@user/califx) (Ping timeout: 276 seconds)
2022-01-10 03:16:12 +0100califax-califax
2022-01-10 03:16:57 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 03:17:45 +0100lavaman(~lavaman@98.38.249.169)
2022-01-10 03:19:36 +0100 <sonny> are n+k patterns gone?
2022-01-10 03:21:49 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-10 03:24:37 +0100mbuf(~Shakthi@182.77.103.82)
2022-01-10 03:25:57 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-10 03:26:22 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-01-10 03:26:39 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 03:27:20 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 03:29:05 +0100neurocyte09172(~neurocyte@IP-094046066140.dynamic.medianet-world.de)
2022-01-10 03:29:05 +0100neurocyte09172(~neurocyte@IP-094046066140.dynamic.medianet-world.de) (Changing host)
2022-01-10 03:29:05 +0100neurocyte09172(~neurocyte@user/neurocyte)
2022-01-10 03:30:37 +0100neurocyte0917(~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
2022-01-10 03:30:37 +0100neurocyte09172neurocyte0917
2022-01-10 03:31:30 +0100emf(~emf@2620:10d:c090:400::5:b9c2)
2022-01-10 03:31:36 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-01-10 03:31:37 +0100xff0x(~xff0x@2001:1a81:52d4:9900:5627:62b8:c837:dd4a) (Ping timeout: 240 seconds)
2022-01-10 03:31:48 +0100sunarch(uid526836@user/sunarch)
2022-01-10 03:33:06 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-10 03:33:45 +0100xff0x(~xff0x@2001:1a81:5310:700:7a4c:f58f:8e12:e28b)
2022-01-10 03:37:09 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 03:38:00 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 03:38:52 +0100 <Inst> https://stackoverflow.com/questions/3748592/what-are-nk-patterns-and-why-are-they-banned-from-hask… sonny
2022-01-10 03:39:08 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-10 03:39:26 +0100 <EvanR> banned patterns
2022-01-10 03:39:46 +0100 <sonny> was super easy to define stirling numbers with them
2022-01-10 03:42:13 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2022-01-10 03:42:58 +0100 <Inst> you can still do n+k
2022-01-10 03:43:02 +0100 <Inst> just have to be a bit creative
2022-01-10 03:43:11 +0100 <Inst> *Main> factorial (n) =( \k -> ((*) (k+1) (factorial k))) (n+1)
2022-01-10 03:43:21 +0100 <Inst> inner parens are not needed
2022-01-10 03:43:45 +0100 <Inst> at least, in the lambda, other than to specify arguments for (*) and to sectionize *
2022-01-10 03:44:03 +0100 <Inst> oh derp, that code doesn't work
2022-01-10 03:45:13 +0100 <EvanR> I saw a proposal to remove numeric literals from patterns
2022-01-10 03:45:40 +0100 <sonny> sometimes you just want to copy the formula into Haskell you know? ;)
2022-01-10 03:46:29 +0100 <Inst> factorial 0 = 1
2022-01-10 03:46:29 +0100 <Inst> factorial (n) = (\n -> (*) (n+1) (factorial n)) (n-1)
2022-01-10 03:47:16 +0100 <EvanR> factorial n = product [1..n] -- xD
2022-01-10 03:47:41 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 03:48:19 +0100jakalx(~jakalx@base.jakalx.net)
2022-01-10 03:48:31 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 03:48:49 +0100 <Inst> but that's equivalent to an n+k pattern, except without the wonkiness
2022-01-10 03:49:08 +0100 <sonny> EvanR: lol
2022-01-10 03:49:30 +0100 <sonny> afk
2022-01-10 03:49:37 +0100sabx(~sabbas@user/sabbas) (Ping timeout: 256 seconds)
2022-01-10 03:50:08 +0100stef204(~stef204@user/stef204) (Quit: WeeChat 3.4)
2022-01-10 03:51:13 +0100 <Inst> sonny: even if it worked, if you check the link
2022-01-10 03:51:39 +0100 <Inst> it'd probably end up bugging out, and tbh i don't get why ghc isn't smart enough to avoid bugging out
2022-01-10 03:52:37 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-01-10 03:57:33 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds)
2022-01-10 03:58:14 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 03:58:54 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 04:00:04 +0100 <Inst> apparently n+k was defined to bug out
2022-01-10 04:00:05 +0100 <Inst> https://sites.google.com/site/haskell/notes/nkpatterns
2022-01-10 04:00:38 +0100 <Inst> sort of wish haskell was smart enough that n+k or, for that matter, an arbitrary expression in pattern matching, would be processed correctly
2022-01-10 04:00:57 +0100sabx(~sabbas@user/sabbas)
2022-01-10 04:01:16 +0100 <jackson99> I thought n+k pattern is no longer supported?
2022-01-10 04:01:33 +0100 <Inst> it's gone
2022-01-10 04:01:43 +0100 <EvanR> pattern matching isn't some AI thing, it's part of a carefully defined calculus related to ADTs
2022-01-10 04:02:25 +0100 <EvanR> there are cool new kind of patterns out there but it's not a thing to understand arbitrary expressions
2022-01-10 04:03:00 +0100 <EvanR> e.g. patterns for list could be converted to a fold
2022-01-10 04:03:34 +0100 <EvanR> for any Num, that's not the case for +
2022-01-10 04:04:45 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
2022-01-10 04:06:08 +0100 <Inst> + on fixed precision integral messes up once you get close enough to overflow
2022-01-10 04:06:49 +0100 <Inst> besides, i've shown the workaround to produce something roughly equivalent to n+k
2022-01-10 04:06:54 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-10 04:06:55 +0100 <EvanR> does Int mess up or does the programmer xD
2022-01-10 04:07:02 +0100 <Inst> without the wonkiness
2022-01-10 04:07:12 +0100 <Inst> is the self-other dichotomy real or fictive? :)
2022-01-10 04:07:45 +0100 <EvanR> true the user and the computer probably have irreversible entanglement
2022-01-10 04:08:45 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 04:09:35 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 04:11:17 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca)
2022-01-10 04:12:41 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-01-10 04:14:16 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-01-10 04:14:16 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-01-10 04:14:16 +0100finn_elijaFinnElija
2022-01-10 04:17:54 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-10 04:18:21 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-01-10 04:18:31 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds)
2022-01-10 04:19:15 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 04:19:56 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 04:19:59 +0100 <Inst> erm, could someone explain Type to me?
2022-01-10 04:20:33 +0100 <Inst> the problem is, my orientation is, well, "you don't understand anything unless you can derive it yourself" -> comp sci version: "you don't understand anything unless you can implement it yourself"
2022-01-10 04:20:43 +0100 <Inst> erm, not Type
2022-01-10 04:20:45 +0100 <Inst> Text
2022-01-10 04:20:54 +0100 <Inst> String is bad because it's linked lists and thus not performant
2022-01-10 04:21:02 +0100 <Inst> but then what is Text? Is it some hack to produce arrays?
2022-01-10 04:21:43 +0100 <EvanR> lists are bad if they are big and stick around
2022-01-10 04:21:53 +0100 <EvanR> which is not necessarily the case
2022-01-10 04:22:15 +0100 <EvanR> Text is implemented as an array
2022-01-10 04:22:42 +0100 <EvanR> you could make it yourself if you really wanted, it's just a library
2022-01-10 04:25:36 +0100 <EvanR> one issue with String is, a lot of processing goes into each Char when they go through Handles. If you use packed encoded text it is faster
2022-01-10 04:27:56 +0100 <Inst> i guess it's my problem, i.e, how do you implement arrays in haskell
2022-01-10 04:29:15 +0100 <EvanR> for performance there are GHC primitives
2022-01-10 04:29:37 +0100 <EvanR> but several libraries exist which put a nice API on top
2022-01-10 04:29:46 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 04:30:25 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 04:30:43 +0100 <EvanR> and set you up for fusion
2022-01-10 04:31:06 +0100 <EvanR> see `vector'
2022-01-10 04:35:49 +0100BrokenClutch(~pioneer@2804:d41:c292:6c00:33d8:d2f1:d8af:153e) (Read error: Connection reset by peer)
2022-01-10 04:41:35 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-10 04:41:45 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
2022-01-10 04:44:10 +0100td_(~td@muedsl-82-207-238-021.citykom.de) (Ping timeout: 256 seconds)
2022-01-10 04:44:29 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 04:45:49 +0100td_(~td@94.134.91.23)
2022-01-10 04:46:21 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit)
2022-01-10 04:46:42 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 04:48:00 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-01-10 04:49:16 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Remote host closed the connection)
2022-01-10 04:50:11 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e)
2022-01-10 05:00:00 +0100Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Quit: I seem to have stopped.)
2022-01-10 05:01:07 +0100Taneb(~Taneb@runciman.hacksoc.org)
2022-01-10 05:04:59 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
2022-01-10 05:05:06 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-01-10 05:05:12 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
2022-01-10 05:05:13 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-10 05:08:02 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-01-10 05:10:03 +0100 <albet70> how to construct ExceptT e IO a? IO isn't a constructor
2022-01-10 05:10:42 +0100thejuan24f[m](~thejuan2m@2001:470:69fc:105::1:6569)
2022-01-10 05:10:54 +0100 <dibblego> given which?
2022-01-10 05:12:53 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-10 05:13:57 +0100 <albet70> any
2022-01-10 05:16:00 +0100 <albet70> :t ExceptT $ print $ Left 3
2022-01-10 05:16:01 +0100 <lambdabot> error:
2022-01-10 05:16:01 +0100 <lambdabot> • Couldn't match type ‘()’ with ‘Either e a’
2022-01-10 05:16:01 +0100 <lambdabot> Expected type: IO (Either e a)
2022-01-10 05:16:42 +0100ensyde(~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Quit: Leaving)
2022-01-10 05:16:57 +0100 <Axman6> :t ExceptT $ print (Left 3 :: Either String Int)
2022-01-10 05:16:58 +0100 <lambdabot> error:
2022-01-10 05:16:58 +0100 <lambdabot> • Couldn't match type ‘()’ with ‘Either e a’
2022-01-10 05:16:58 +0100 <lambdabot> Expected type: IO (Either e a)
2022-01-10 05:17:05 +0100 <Axman6> :t ExceptT
2022-01-10 05:17:06 +0100 <lambdabot> m (Either e a) -> ExceptT e m a
2022-01-10 05:17:11 +0100 <Axman6> uh, of course
2022-01-10 05:17:36 +0100 <Axman6> :t ExceptT $ fmap Left $ print "foo"
2022-01-10 05:17:36 +0100 <lambdabot> ExceptT () IO a
2022-01-10 05:17:43 +0100 <Axman6> :t print
2022-01-10 05:17:44 +0100 <lambdabot> Show a => a -> IO ()
2022-01-10 05:18:30 +0100 <EvanR> :t throw
2022-01-10 05:18:31 +0100 <lambdabot> Exception e => e -> a
2022-01-10 05:18:52 +0100 <EvanR> :t throwError
2022-01-10 05:18:53 +0100 <lambdabot> MonadError e m => e -> m a
2022-01-10 05:19:01 +0100 <EvanR> ExceptT is a MonadError
2022-01-10 05:19:32 +0100 <EvanR> a non-error result of ExceptT can be created with pure / return
2022-01-10 05:20:02 +0100 <EvanR> so basically, pure/return or throwError are two good ways to construct an ExceptT
2022-01-10 05:20:55 +0100 <EvanR> albet70, to print from ExceptT e IO... use liftIO
2022-01-10 05:22:21 +0100 <EvanR> :t liftIO
2022-01-10 05:22:22 +0100 <lambdabot> MonadIO m => IO a -> m a
2022-01-10 05:22:33 +0100 <albet70> "🟢 EvanR :albet70, to print from ExceptT e IO... use liftIO", but I want to construct with Left way
2022-01-10 05:22:51 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca)
2022-01-10 05:23:31 +0100 <EvanR> well, then you have use Axman6's :t ExceptT directly
2022-01-10 05:23:38 +0100[_](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-10 05:23:56 +0100 <EvanR> irl you probably want to stick to the API though
2022-01-10 05:26:13 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
2022-01-10 05:27:39 +0100 <EvanR> :t ExceptT (return (Left (userError "I'm out")))
2022-01-10 05:27:40 +0100 <lambdabot> Monad m => ExceptT IOError m a
2022-01-10 05:28:03 +0100 <EvanR> :t runExceptT $ ExceptT (return (Left (userError "I'm out")))
2022-01-10 05:28:04 +0100 <lambdabot> Monad m => m (Either IOError a)
2022-01-10 05:28:45 +0100 <EvanR> e.g. m=IO
2022-01-10 05:28:46 +0100notzmv(~zmv@user/notzmv)
2022-01-10 05:31:13 +0100 <EvanR> :t ExceptT (throwError (userError "I'm out"))
2022-01-10 05:31:14 +0100 <lambdabot> MonadError IOError m => ExceptT e m a
2022-01-10 05:31:38 +0100 <EvanR> :t throwError (userError "I'm out")
2022-01-10 05:31:39 +0100 <lambdabot> MonadError IOError m => m a
2022-01-10 05:31:49 +0100 <EvanR> ignore second to last one
2022-01-10 05:36:53 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Quit: leaving)
2022-01-10 05:39:17 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 05:40:16 +0100razetime(~quassel@49.207.213.63)
2022-01-10 05:42:00 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit)
2022-01-10 05:42:14 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 05:43:44 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit)
2022-01-10 05:43:58 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 05:46:11 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 05:47:18 +0100 <Axman6> albet70: are you sure that's the beaviour you want?That would ve a very unusual thing to do
2022-01-10 05:47:23 +0100 <Axman6> be*
2022-01-10 05:48:27 +0100 <hololeap_> albet70: normally you use throwError to get a Left value, regardless of what your MonadExcept is
2022-01-10 05:48:37 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds)
2022-01-10 05:48:59 +0100hololeap_hololeap
2022-01-10 05:49:16 +0100 <Axman6> liftIO (print Something) >> throwError SomethingWentWrong feels mor elike maybe what you want?
2022-01-10 05:49:36 +0100 <Inst> also lol
2022-01-10 05:49:39 +0100 <Inst> this is an absolute treasure
2022-01-10 05:49:48 +0100 <Inst> "that feel when you know what monads are but not what objects are"
2022-01-10 05:49:48 +0100 <Axman6> I thought you were going to sleep :P
2022-01-10 05:49:59 +0100 <Inst> have a fwb i'm helping with her python
2022-01-10 05:50:00 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Quit: leaving)
2022-01-10 05:50:15 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 05:50:20 +0100 <Inst> they're literally teaching "stack four if statements" in her python class, but we're paranoid she'll have objects dumped on her lap
2022-01-10 05:50:24 +0100 <hololeap> :t liftEither -- albet70: you can also use this
2022-01-10 05:50:25 +0100 <lambdabot> MonadError e m => Either e a -> m a
2022-01-10 05:50:29 +0100 <Axman6> Not sure your sexual history was necessary there
2022-01-10 05:50:47 +0100 <Inst> sorry!
2022-01-10 05:50:59 +0100 <Axman6> also, the hoist-errors package is fantastic for working with ExceptT
2022-01-10 05:51:15 +0100 <EvanR> Inst, since this is haskell and not python... I think of this picture from the cover of Theory of Objects http://lucacardelli.name/Topics/TheoryOfObjects/ObjectSubject.html
2022-01-10 05:51:48 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2022-01-10 05:52:40 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit)
2022-01-10 05:52:53 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 05:53:00 +0100 <Inst> well, tbh, it's just funny when you know what monads are and you're trying to understand objects in the context of monads
2022-01-10 05:53:59 +0100 <Inst> at some point someone is going to write a coherent comparison between monads and objects as concepts
2022-01-10 05:54:05 +0100 <hololeap> aren't objects just data with extra steps?
2022-01-10 05:54:07 +0100 <EvanR> no, please don'
2022-01-10 05:54:11 +0100 <Inst> okay, i'll stop
2022-01-10 05:55:08 +0100 <EvanR> unlike objects, monads have a very precise description with very little in the way of "remixing" of interpretation xD
2022-01-10 05:55:36 +0100 <EvanR> leibniz notwithstanding
2022-01-10 05:56:04 +0100 <Inst> i'd see them both as ways of data encapsulation. in certain areas, monads are more flexible, in others, less flexible
2022-01-10 05:56:12 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit)
2022-01-10 05:56:13 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca)
2022-01-10 05:56:14 +0100 <EvanR> no monads aren't about data encapsulation
2022-01-10 05:56:26 +0100 <Inst> a type constructor is about data encapsulation
2022-01-10 05:57:01 +0100 <EvanR> your data encapsulation scheme may be described with types, but not nearly all types are about data encapsulation
2022-01-10 05:57:17 +0100 <dibblego> I thought they were about constructing types
2022-01-10 05:57:36 +0100 <EvanR> actually, most basic types in haskell intentionally tell you everything that is going on, (), Bool, Either, Maybe, etc
2022-01-10 05:57:47 +0100 <EvanR> cards on the table
2022-01-10 05:58:03 +0100shriekingnoise(~shrieking@186.137.144.80)
2022-01-10 05:58:12 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x)
2022-01-10 05:58:24 +0100 <hololeap> monads need a join function. can you do that with any object?
2022-01-10 05:58:29 +0100 <EvanR> and the monad instance for the basic types just formalize certain operations
2022-01-10 05:58:34 +0100x88x88x_(~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit)
2022-01-10 05:59:48 +0100 <EvanR> (that already existed and didn't need monads to do)
2022-01-10 06:00:09 +0100 <hololeap> if I have a car in my car, so I can drive while I drive... can that be joined into a single car?
2022-01-10 06:00:31 +0100 <Inst> hololeap: i mean that's where i see monads as more flexible if you see them as a set of methods for dealing with types that have been placed into a monadic type, but the monad typeclass is useful for more than just containerizing types
2022-01-10 06:00:52 +0100 <Inst> hololeap: the real reason people love Haskell xD
2022-01-10 06:01:27 +0100 <hololeap> it's a very limited set of methods, namely return and join/bind
2022-01-10 06:01:40 +0100 <EvanR> class Circle a => Ellipse a
2022-01-10 06:01:44 +0100 <EvanR> class Ellipse a => Circle a
2022-01-10 06:02:10 +0100 <Inst> and it's actually possible to instance into that!
2022-01-10 06:02:41 +0100 <EvanR> in before the "monads are just spreadsheets" blog post
2022-01-10 06:03:00 +0100 <hololeap> but ultimately monads are about composition of functions with extra "stuff"
2022-01-10 06:03:14 +0100 <hololeap> monads are much closer to functions than they are to objects
2022-01-10 06:03:17 +0100 <Inst> i don't think it's possible to create a monads are just (monads are just (monads are just...) blog posts
2022-01-10 06:03:36 +0100 <Inst> but given the recursion, it'd be very haskell
2022-01-10 06:05:33 +0100 <EvanR> monad is an algebraic structure, like monoid or semigroup. It doesn't make sense to talk about containerization in general. But the other way around, many containers can be flattened and this is monadic. Also many other phenomena fit the same shape
2022-01-10 06:05:45 +0100 <Inst> sorry, i'll run off, i do need to get objects though, although, it gets me wondering, since monads are implementable in languages with interfaces and algebraic data types
2022-01-10 06:05:59 +0100 <Inst> what would a monadic structure over an object look like?
2022-01-10 06:06:09 +0100 <Inst> OCaml / C++ / Java etc
2022-01-10 06:06:25 +0100 <EvanR> monadic structure pertains to a Functor, not an object
2022-01-10 06:07:38 +0100 <EvanR> but there have been monad interfaces in those languages
2022-01-10 06:07:59 +0100 <EvanR> without syntax sugar it's a bit annoying
2022-01-10 06:08:03 +0100 <hololeap> if you're thinking of generic "objects" in other langauges, the monad interface is how to string them together, not how to construct them in general
2022-01-10 06:08:37 +0100 <Inst> >>= is about composability of functions that are a -> m a, the join cancels out of the m
2022-01-10 06:08:45 +0100 <EvanR> no join doesn't
2022-01-10 06:08:57 +0100 <EvanR> you stay in the m
2022-01-10 06:09:01 +0100 <Inst> it cancels out m (m a) into (m a)
2022-01-10 06:09:07 +0100 <Inst> otherwise you'd end up with monadic stacking
2022-01-10 06:09:11 +0100 <EvanR> monad's don't let you leave, unlike comonads
2022-01-10 06:09:26 +0100 <EvanR> which don't let you enter
2022-01-10 06:09:34 +0100 <hololeap> and the basic monads in haskell are very close to the complete set of all possible monads available in any language. Maybe, State, Reader, Writer, Cont... it's very difficult to find a monad that isn't expressible as (a combination of) any of these
2022-01-10 06:10:08 +0100 <Inst> EvanR: yeah, I'm aware, and that's been annoying at times
2022-01-10 06:10:13 +0100 <Inst> would be nice to just kill the monad sometimes
2022-01-10 06:11:13 +0100 <Inst> except, of course :)
2022-01-10 06:11:24 +0100 <EvanR> maybe you'd like comonads then, you can leave any time
2022-01-10 06:11:25 +0100 <Inst> what happens if it's a maybe type with a value constructor of Nothing?
2022-01-10 06:11:43 +0100 <Inst> how could you intelligibly define a extract against Nothing?
2022-01-10 06:11:51 +0100 <EvanR> Maybe isn't a Comonad
2022-01-10 06:11:55 +0100 <hololeap> you can't because Maybe is not a comonad
2022-01-10 06:11:58 +0100 <Inst> because of that reason
2022-01-10 06:11:58 +0100 <Axman6> > join Nothing
2022-01-10 06:11:59 +0100 <lambdabot> Nothing
2022-01-10 06:12:00 +0100 <dibblego> it's a semi-comonad though
2022-01-10 06:12:11 +0100 <Axman6> > join (Just Nothing)
2022-01-10 06:12:12 +0100 <lambdabot> Nothing
2022-01-10 06:12:17 +0100 <dibblego> @type fmap Just
2022-01-10 06:12:18 +0100 <hololeap> a properly defined comonad always needs a value to extract
2022-01-10 06:12:18 +0100 <lambdabot> Functor f => f a -> f (Maybe a)
2022-01-10 06:13:26 +0100 <dibblego> we gettin' the annual monad anti-tutorial outta the way early? :)
2022-01-10 06:13:48 +0100 <EvanR> at some point was there comonadic IO called OI floating around?
2022-01-10 06:14:13 +0100sonny(~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) ()
2022-01-10 06:14:22 +0100 <hololeap> no, because a comonad needs a natural transformation back to Identity, and IO doesn't have that
2022-01-10 06:14:36 +0100 <dolio> People floated the idea, but it doesn't make a lot of sense.
2022-01-10 06:14:48 +0100 <dibblego> OI was discussed a while back
2022-01-10 06:14:59 +0100 <hololeap> unsafePerformIO?
2022-01-10 06:15:07 +0100 <EvanR> oh
2022-01-10 06:15:39 +0100 <Inst> also, just to make it simple, Identity monad: just a type constructor that does nothing but block a -> a functions?
2022-01-10 06:15:47 +0100 <Inst> without fmap / bind, of course
2022-01-10 06:16:26 +0100 <hololeap> it doesn't do anything but wrap any value in the Identity constructor
2022-01-10 06:17:09 +0100 <hololeap> it's supposed to be a way of describing pure values in the context of something that needs a functor/monad
2022-01-10 06:17:39 +0100 <hololeap> like how id doesn't do anything but return the value you give it
2022-01-10 06:18:17 +0100xff0x(~xff0x@2001:1a81:5310:700:7a4c:f58f:8e12:e28b) (Ping timeout: 240 seconds)
2022-01-10 06:18:29 +0100jakalx(~jakalx@base.jakalx.net)
2022-01-10 06:18:58 +0100 <hololeap> which seems useless until you need something that takes an (a -> a) function and you need the most basic case
2022-01-10 06:19:35 +0100xff0x(~xff0x@port-92-193-159-86.dynamic.as20676.net)
2022-01-10 06:22:51 +0100 <EvanR> you need something takes a resistor, so you give it a zero ohm link in a resistor package xD
2022-01-10 06:23:00 +0100 <hololeap> this is why State = StateT s Identity -- `StateT s` takes a type constructor as an argument, so if you don't need one, you pass it Identity
2022-01-10 06:23:02 +0100 <EvanR> you have something that takes a resistor
2022-01-10 06:23:26 +0100 <hololeap> *State s = StateT s Identity
2022-01-10 06:26:54 +0100 <hololeap> the zero ohm link is the zero element in the monoid of resistor arrays
2022-01-10 06:32:30 +0100nunggu(~q@gateway/tor-sasl/nunggu) (Ping timeout: 276 seconds)
2022-01-10 06:32:52 +0100sagax(~sagax_nb@user/sagax)
2022-01-10 06:33:00 +0100s2k(~textual@122.172.234.134)
2022-01-10 06:35:03 +0100 <Axman6> EvanR: OI is what we call ExceptT in Australia, OI YouFuckedUpMate IO a
2022-01-10 06:35:25 +0100 <EvanR> oof
2022-01-10 06:36:36 +0100 <Axman6> OI YouFuckedUpMate IO eh* which when runs gives you back IO (Either YouFuckedUpMate eh)
2022-01-10 06:39:17 +0100Jing(~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a)
2022-01-10 06:47:33 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-10 06:48:57 +0100arahael(~arahael@203.158.51.1)
2022-01-10 06:49:29 +0100nunggu(~q@gateway/tor-sasl/nunggu)
2022-01-10 06:54:44 +0100ymirhotfoot55(~ymirhotfo@user/ymirhotfoot)
2022-01-10 06:56:34 +0100little_mac(~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Remote host closed the connection)
2022-01-10 06:57:27 +0100 <albet70> "🟢 Axman6 :albet70: are you sure that's the beaviour you want?That would ve a very unusual thing to do", yes
2022-01-10 06:58:04 +0100 <Axman6> so, you specifically want to print the result, and then produce something of type ExceptT () IO a?
2022-01-10 06:58:28 +0100 <Axman6> far out, what's going on with my typing today
2022-01-10 06:59:03 +0100 <Axman6> "So you specifically want to print the result, and produce something of type ExceptT () IO a?"
2022-01-10 07:00:44 +0100 <albet70> "Axman6 :so, you specifically want to print the result, and then produce something of type ExceptT () IO a?", paste.tomsmeding.com/DQWLn8rX
2022-01-10 07:01:47 +0100 <ymirhotfoot55> Dear Haskellers, the picture is wonderful:
2022-01-10 07:01:49 +0100 <albet70> short circuit a IO action list
2022-01-10 07:01:53 +0100 <ymirhotfoot55> http://lucacardelli.name/Topics/TheoryOfObjects/ObjectSubject.html
2022-01-10 07:02:46 +0100 <ymirhotfoot55> I am glad to see that John Stewart Bell's is finally making it through to
2022-01-10 07:03:10 +0100nhatanh02(~satori@123.24.172.30)
2022-01-10 07:03:34 +0100 <ymirhotfoot55> the great Tribe of Objectivists!
2022-01-10 07:04:05 +0100 <ymirhotfoot55> Jogn Stewart Bell's Second Theorem.
2022-01-10 07:04:14 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 07:05:00 +0100 <ymirhotfoot55> Naturally, a beginner in Haskell will ask:
2022-01-10 07:05:04 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 07:05:23 +0100 <ymirhotfoot55> Can all the three views be consistent?
2022-01-10 07:05:44 +0100 <ymirhotfoot55> John, not Jogn.
2022-01-10 07:07:03 +0100 <Axman6> albet70: personally, I would use liftIO $ do print "greater ..." >> print x; throwE (). reusing the () from the print feels awkward to me
2022-01-10 07:10:22 +0100 <Axman6> ymirhotfoot55: What does this have to do with HAskell?
2022-01-10 07:11:25 +0100 <ymirhotfoot55> Well, I think Chris Penners inytoduction to a planned, ah,
2022-01-10 07:12:14 +0100 <ymirhotfoot55> I will not say, a Lisp, but a more flexiible Haskell, as proposed in
2022-01-10 07:12:21 +0100 <ymirhotfoot55> https://www.youtube.com/watch?v=xZmPuz9m2t0
2022-01-10 07:13:17 +0100shapr(~user@2601:7c0:c202:5190:ed4f:33d2:c7d1:3eb) (Ping timeout: 240 seconds)
2022-01-10 07:13:48 +0100 <ymirhotfoot55> One famous case of the General Problem of Consistency
2022-01-10 07:14:15 +0100 <ymirhotfoot55> is Bell's Second Theorem.
2022-01-10 07:14:45 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 07:15:03 +0100 <ymirhotfoot55> I do not know haskell, I have actually written 'hello world',
2022-01-10 07:15:25 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 07:15:32 +0100 <ymirhotfoot55> well, no, but I once wrote 'hello Penrose Inverse' in Haskell.
2022-01-10 07:16:58 +0100 <ymirhotfoot55> 'hello world' was a mite offputting, with the giant builtin Monad
2022-01-10 07:17:09 +0100 <ymirhotfoot55> IO beging required.
2022-01-10 07:18:04 +0100 <Axman6> "giant"
2022-01-10 07:18:06 +0100 <Axman6> @src IO
2022-01-10 07:18:06 +0100 <lambdabot> Source not found. There are some things that I just don't know.
2022-01-10 07:18:09 +0100 <Axman6> :(
2022-01-10 07:18:33 +0100 <Axman6> @hoogle IO
2022-01-10 07:18:34 +0100 <lambdabot> Prelude data IO a
2022-01-10 07:18:34 +0100 <lambdabot> module System.IO
2022-01-10 07:18:34 +0100 <lambdabot> System.IO data IO a
2022-01-10 07:18:48 +0100 <ymirhotfoot55> Conjecture: the type guessing and type checking of Haskell uses something like\
2022-01-10 07:18:49 +0100 <ymirhotfoot55> a (very special) SAT solver.
2022-01-10 07:19:14 +0100 <c_wraith> nah. It's way simpler than that
2022-01-10 07:19:32 +0100lavaman(~lavaman@98.38.249.169)
2022-01-10 07:19:43 +0100 <Axman6> just plain old hindley-milner
2022-01-10 07:20:01 +0100 <Axman6> https://en.wikipedia.org/wiki/Hindley–Milner_type_system
2022-01-10 07:20:34 +0100 <ymirhotfoot55> Yes, I supected it to be special, and in many cases, quick and easy.
2022-01-10 07:20:55 +0100 <Axman6> it's about as simple as a useful type system can get
2022-01-10 07:21:06 +0100 <Axman6> not always quick though
2022-01-10 07:22:08 +0100modnar(~quassel@162.195.88.254) (Remote host closed the connection)
2022-01-10 07:22:12 +0100 <ymirhotfoot55> O was impressed with Loader's result that the for real simply typed lambda calculus
2022-01-10 07:22:29 +0100modnar(~modnar@shell.sonic.net)
2022-01-10 07:22:48 +0100 <ymirhotfoot55> with some specal concret types added, also with actual elements of the rtpes specified,
2022-01-10 07:23:25 +0100 <ymirhotfoot55> gets you  to Turing Machines Unlimited.
2022-01-10 07:23:47 +0100 <razetime> anyone program haskell on vim?
2022-01-10 07:23:49 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-10 07:24:26 +0100 <razetime> i've been trying to use vim with vim-haskell plugin lately and it often flubs on indentation.
2022-01-10 07:24:34 +0100 <ymirhotfoot55> I have heard that when K. Goedel was presented with
2022-01-10 07:26:28 +0100 <ymirhotfoot55> Alonzo Church's proof that Herbrand-Goedel style "recursive function computer systems"
2022-01-10 07:27:33 +0100 <ymirhotfoot55> compited the same set of functions as Church's "lambda calculus" machine,
2022-01-10 07:27:52 +0100s2k(~textual@122.172.234.134) (Quit: Textual IRC Client: www.textualapp.com)
2022-01-10 07:28:25 +0100 <ymirhotfoot55> Goedel saw that Church's machine was
2022-01-10 07:28:39 +0100 <ymirhotfoot55> a weird machine.
2022-01-10 07:29:11 +0100 <ymirhotfoot55> loke unto the dirty page macgine on x86 computer chips.
2022-01-10 07:29:28 +0100 <ymirhotfoot55> Phil Wadler tells the story.
2022-01-10 07:30:25 +0100 <ymirhotfoot55> Goedel no doubted that Herbrand-Foeded could be right, as an
2022-01-10 07:31:05 +0100 <ymirhotfoot55> analysis of compiyability.
2022-01-10 07:31:20 +0100 <ymirhotfoot55> No compuled, computed.
2022-01-10 07:32:00 +0100 <ymirhotfoot55> Not "compiled", "computed".
2022-01-10 07:32:57 +0100 <ymirhotfoot55> now doubted
2022-01-10 07:33:56 +0100 <ymirhotfoot55> Oi, I must be more careful with this hard to use keyboard.
2022-01-10 07:35:53 +0100 <ymirhotfoot55> @Axman6 thank you for reference!
2022-01-10 07:35:53 +0100 <lambdabot> Unknown command, try @list
2022-01-10 07:38:46 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-01-10 07:41:22 +0100 <ymirhotfoot55> '@Axman6' conceptually giant.
2022-01-10 07:41:55 +0100 <ymirhotfoot55> The dread Input-Output!
2022-01-10 07:42:45 +0100 <Axman6> I have absolutely no idea what you're on about ymirhotfoot55
2022-01-10 07:43:14 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2022-01-10 07:44:15 +0100 <ymirhotfoot55> Dear '@Axman6', I am just happy to be in IRC again, so
2022-01-10 07:44:19 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-01-10 07:45:00 +0100 <Axman6> ok, well you're not making much sense. Do you have any questions about Haskell?
2022-01-10 07:45:43 +0100 <ymirhotfoot55> perhaps I am a mite loose in my associations and a mite obscure in my speech.
2022-01-10 07:46:13 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2022-01-10 07:46:40 +0100 <ymirhotfoot55> Well, I suspect that a "type class", when, as happens sometimes,
2022-01-10 07:47:13 +0100 <ymirhotfoot55> "automayically" hands you an instance, that we are close to the
2022-01-10 07:47:45 +0100 <ymirhotfoot55> universal algebra mecganism of giving
2022-01-10 07:47:57 +0100 <ymirhotfoot55> an algebra by giving
2022-01-10 07:48:05 +0100 <ymirhotfoot55> generators and relations.
2022-01-10 07:48:06 +0100 <Axman6> Are you a markov chain trained on #haskell and Elizabethan English?
2022-01-10 07:48:11 +0100 <ymirhotfoot55> Is this so?
2022-01-10 07:48:45 +0100 <Axman6> I genuinely have no idea what you're trying to ask
2022-01-10 07:48:47 +0100 <ymirhotfoot55> No.  Or if I am I am iperate with unkimited k-feams, and
2022-01-10 07:49:11 +0100 <ymirhotfoot55> I have enough dinebstions that I am not boind by by Earth's
2022-01-10 07:49:20 +0100 <Axman6> I'm getting pretty close to using my new found OP powers to kick you ymirhotfoot55
2022-01-10 07:49:41 +0100 <ymirhotfoot55> speed of signal 3+1 dimension limitations.
2022-01-10 07:49:47 +0100 <hololeap> I'm getting some new vocab here... "dinebstions" "boind"
2022-01-10 07:50:17 +0100 <ymirhotfoot55> as pelling: Please accept apologies!
2022-01-10 07:51:07 +0100 <ymirhotfoot55> as spelling, that is better.
2022-01-10 07:51:55 +0100 <ymirhotfoot55> '@Axman6' serious question, why no mention of
2022-01-10 07:52:29 +0100 <ymirhotfoot55> Galois correpondeces in the beginnersl literature on type classes?
2022-01-10 07:53:21 +0100 <Axman6> I've been programming in Haskell for over a decade and never heard of "Galois correpondeces", so I suspect because no one needs to know what they are to use Haskell
2022-01-10 07:53:29 +0100 <hololeap> because deep theory is irrelevant to most newcomers looking to learn a language?
2022-01-10 07:53:46 +0100 <ymirhotfoot55> '@Axman5' I will ask ny type class question again.
2022-01-10 07:54:00 +0100cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2022-01-10 07:54:06 +0100 <hololeap> just write it yourself if you think it needs to exist so badly
2022-01-10 07:55:04 +0100 <ymirhotfoot55> Hololeap, thank you for suggestion!
2022-01-10 07:55:09 +0100 <ymirhotfoot55> No josh.
2022-01-10 07:55:31 +0100 <hololeap> there are tutorials on category theory for haskell programmers that exist because someone decided to make them
2022-01-10 07:55:59 +0100 <ymirhotfoot55> Rtpe class question: Sometimes, a declaration of a type class results is a sibfle
2022-01-10 07:56:12 +0100 <ymirhotfoot55> most geberal instance being defined.
2022-01-10 07:56:22 +0100 <ymirhotfoot55> Defined automatically.
2022-01-10 07:56:22 +0100 <Axman6> "rtpe"? "sibfle"?
2022-01-10 07:56:30 +0100 <ymirhotfoot55> Wgeb does this happen?
2022-01-10 07:56:36 +0100 <ymirhotfoot55> Thanks.
2022-01-10 07:57:13 +0100 <ymirhotfoot55> When, not Wgeb.
2022-01-10 07:57:17 +0100michalz(~michalz@185.246.204.126)
2022-01-10 07:57:53 +0100 <Axman6> rtpe = type? sibfle = ?
2022-01-10 07:58:03 +0100 <ymirhotfoot55> single most general
2022-01-10 07:58:45 +0100 <ymirhotfoot55> Yes, Type class question
2022-01-10 07:59:09 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2022-01-10 08:00:07 +0100 <hololeap> can you give an example that illustrates your question?
2022-01-10 08:00:18 +0100 <Axman6> ok, so we've got to a point where that sentense's words are understandable, now to try and decipher what you're actually trying to say
2022-01-10 08:01:17 +0100Garbanzo(~Garbanzo@2602:304:6eac:dc10::46) (Ping timeout: 240 seconds)
2022-01-10 08:03:25 +0100 <ymirhotfoot55> Consider giving a group by giving
2022-01-10 08:04:04 +0100 <ymirhotfoot55> three generators a, b, c; then giving some relations, say
2022-01-10 08:04:33 +0100 <Axman6> please stop using the return key as punctuation, if you look at the lasy hour's history of this channel, it's almost all you saying half sentenses with typos. at least make typos on one line
2022-01-10 08:04:41 +0100 <ymirhotfoot55> a^-1 * b * a = c^17
2022-01-10 08:04:57 +0100 <ymirhotfoot55> Thanks, '@Axman6'.
2022-01-10 08:06:08 +0100 <ymirhotfoot55> Though are many froups geberated by am bm c, which satisft the relation, there is one that is special, namely the least constrained sych group.
2022-01-10 08:06:48 +0100 <ymirhotfoot55> Does an analogue if this happen with type classes?
2022-01-10 08:07:04 +0100 <ymirhotfoot55> groups, not froups.
2022-01-10 08:07:40 +0100boletales(~boletales@p98076-ipoefx.ipoe.ocn.ne.jp) (Quit: Leaving)
2022-01-10 08:08:06 +0100 <hololeap> I'm not sure how type classes relate to groups. for instance, there is no notion of an inverse for type classes
2022-01-10 08:09:23 +0100 <ymirhotfoot55> hololeap, here is the sort of onkects that I think may come in here:
2022-01-10 08:09:34 +0100 <ymirhotfoot55> https://en.wikipedia.org/wiki/Horn_clause
2022-01-10 08:10:04 +0100 <ymirhotfoot55> Oi, Sorry for linefeed!
2022-01-10 08:12:12 +0100 <hololeap> there is also no disjunction for typeclasses, unfortunately. you can't specify that a type is either a member of Show _or_ Eq in practice
2022-01-10 08:12:25 +0100 <ymirhotfoot55> Here is a pdf on the sort of thating that reading about type classes suggested to me; https://core.ac.uk/download/pdf/82190596.pdf  I wish there were ab arXive version, and I will look now.
2022-01-10 08:12:34 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2022-01-10 08:14:58 +0100razetime(~quassel@49.207.213.63) (Read error: Connection reset by peer)
2022-01-10 08:15:45 +0100cheater(~Username@user/cheater)
2022-01-10 08:16:21 +0100 <ymirhotfoot55> hololeap, yes, that meta-constraint on the allowable constraints of a type class definition is in part what makes me suspect that often one does get a "most free" instance.
2022-01-10 08:22:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-10 08:23:34 +0100 <ymirhotfoot55> hololeap and '@Axman6' I began to write out a note for this IRC session, but I realized 1. that note would be a bit long, and 2. I should look at some published stuff.
2022-01-10 08:24:44 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2022-01-10 08:30:29 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 08:30:29 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 08:30:29 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 08:35:22 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 08:35:57 +0100 <ymirhotfoot55> The paper by Makowski looks very good, and seems to have most of what led me to think about "automatic instances" if type classes.  IWJKNAL OF COMPUTER AND SYSTEM SCIENCES 34,  266-292 (1987)
2022-01-10 08:35:57 +0100 <ymirhotfoot55> Why Horn Formulas Matter in Computer Science:
2022-01-10 08:35:58 +0100 <ymirhotfoot55> Initial Structures and Generic Examples
2022-01-10 08:35:58 +0100 <ymirhotfoot55> J.  A. MAKOWSKY
2022-01-10 08:35:59 +0100 <ymirhotfoot55> The Encyclopedia of Mathematics article looks useful too: https://encyclopediaofmath.org/wiki/Horn_clauses,_theory_of
2022-01-10 08:36:34 +0100ParsaAlizadeh[m](~lizadehma@2001:470:69fc:105::1:65a4)
2022-01-10 08:37:18 +0100 <ymirhotfoot55> Dear Haskell folk, thank you!  and Heaven forwarding, I will be back before the snows melt.
2022-01-10 08:37:22 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 08:37:41 +0100 <hololeap> speaking independently, there are a _lot_ of references in that paper you linked that I would have to read through to get an understanding sufficient to even attempt to answer your question
2022-01-10 08:40:54 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 08:40:54 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 08:40:54 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 08:41:41 +0100 <ymirhotfoot55> hololeap, I am not joking when I say that I  think, for some folk, starting with the sort of stuff in that paper is the right way to learn Haskell.  Basic, which I like has, or had wgeb I was in grade school in the middle of the last century, one big advantage: most people already, if they got to high school, already had a command of the
2022-01-10 08:41:42 +0100 <ymirhotfoot55> presenting ideas.
2022-01-10 08:43:37 +0100 <hololeap> it seems like something that is worth looking into, but I can't give you any answers with my current knowledge. maybe someone else can, but you'll have better luck formulating your question with specific examples most haskellers will understand
2022-01-10 08:44:26 +0100timCF(~timCF@m91-129-100-224.cust.tele2.ee) (Ping timeout: 256 seconds)
2022-01-10 08:44:40 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-10 08:45:25 +0100 <ymirhotfoot55> But for Haskell I might start with the elementary theory of Galois connections, then do the Conpleteness Theorem for the lower predicate calculus, then, ah, well then set them down at the repl.  Of course, talking to people who know, and practice, are the most important things.
2022-01-10 08:46:05 +0100 <ymirhotfoot55> hololeap, I am actually leaving now.  Good night!
2022-01-10 08:46:08 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 08:46:23 +0100ymirhotfoot55(~ymirhotfo@user/ymirhotfoot) ()
2022-01-10 08:46:46 +0100razetime(~quassel@49.207.213.63)
2022-01-10 08:53:32 +0100cfricke(~cfricke@user/cfricke)
2022-01-10 08:57:14 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 08:58:59 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-10 09:06:57 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-10 09:07:04 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-10 09:09:01 +0100glguy(x@libera/staff/glguy) (*.net *.split)
2022-01-10 09:09:01 +0100litharge(litharge@libera/bot/litharge) (*.net *.split)
2022-01-10 09:09:01 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (*.net *.split)
2022-01-10 09:09:01 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (*.net *.split)
2022-01-10 09:09:01 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (*.net *.split)
2022-01-10 09:09:01 +0100td_(~td@94.134.91.23) (*.net *.split)
2022-01-10 09:09:01 +0100Kaiepi(~Kaiepi@156.34.47.253) (*.net *.split)
2022-01-10 09:09:01 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (*.net *.split)
2022-01-10 09:09:01 +0100juhp(~juhp@128.106.188.82) (*.net *.split)
2022-01-10 09:09:01 +0100AlexNoo(~AlexNoo@178.34.162.219) (*.net *.split)
2022-01-10 09:09:01 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (*.net *.split)
2022-01-10 09:09:01 +0100Erutuon(~Erutuon@user/erutuon) (*.net *.split)
2022-01-10 09:09:01 +0100xsperry(~xs@user/xsperry) (*.net *.split)
2022-01-10 09:09:01 +0100mstksg(~jle`@cpe-23-240-75-236.socal.res.rr.com) (*.net *.split)
2022-01-10 09:09:01 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (*.net *.split)
2022-01-10 09:09:01 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (*.net *.split)
2022-01-10 09:09:01 +0100tremon(~tremon@217-120-53-183.cable.dynamic.v4.ziggo.nl) (*.net *.split)
2022-01-10 09:09:01 +0100kawpuh(~kawpuh@66.42.81.80) (*.net *.split)
2022-01-10 09:09:01 +0100n3t(n3t@user/n3t) (*.net *.split)
2022-01-10 09:09:01 +0100xsarnik(xsarnik@lounge.fi.muni.cz) (*.net *.split)
2022-01-10 09:09:01 +0100polux(~polux@51.15.169.172) (*.net *.split)
2022-01-10 09:09:01 +0100wrengr(~wrengr@150.12.83.34.bc.googleusercontent.com) (*.net *.split)
2022-01-10 09:09:01 +0100simpleauthority(~simpleaut@user/simpleauthority) (*.net *.split)
2022-01-10 09:09:01 +0100motherfsck(~motherfsc@user/motherfsck) (*.net *.split)
2022-01-10 09:09:01 +0100nurupo(~nurupo.ga@user/nurupo) (*.net *.split)
2022-01-10 09:09:02 +0100puke(~puke@user/puke) (*.net *.split)
2022-01-10 09:09:02 +0100Codaraxis_(~Codaraxis@user/codaraxis) (*.net *.split)
2022-01-10 09:09:02 +0100hyiltiz(~quassel@31.220.5.250) (*.net *.split)
2022-01-10 09:09:02 +0100gentauro(~gentauro@user/gentauro) (*.net *.split)
2022-01-10 09:09:02 +0100ishutin(~ishutin@178-164-188-6.pool.digikabel.hu) (*.net *.split)
2022-01-10 09:09:02 +0100byorgey(~byorgey@155.138.238.211) (*.net *.split)
2022-01-10 09:09:02 +0100forell(~forell@user/forell) (*.net *.split)
2022-01-10 09:09:02 +0100koolazer(~koo@user/koolazer) (*.net *.split)
2022-01-10 09:09:02 +0100remedan(~remedan@octo.cafe) (*.net *.split)
2022-01-10 09:09:02 +0100SoF(~skius@user/skius) (*.net *.split)
2022-01-10 09:09:02 +0100emergence(~emergence@vm0.max-p.me) (*.net *.split)
2022-01-10 09:09:02 +0100biberu(~biberu@user/biberu) (*.net *.split)
2022-01-10 09:09:02 +0100bliminse(~bliminse@host86-186-17-7.range86-186.btcentralplus.com) (*.net *.split)
2022-01-10 09:09:02 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (*.net *.split)
2022-01-10 09:09:02 +0100tristanC(~tristanC@user/tristanc) (*.net *.split)
2022-01-10 09:09:02 +0100drewr(~drew@user/drewr) (*.net *.split)
2022-01-10 09:09:02 +0100hueso(~root@user/hueso) (*.net *.split)
2022-01-10 09:09:02 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (*.net *.split)
2022-01-10 09:09:02 +0100mrmr(~mrmr@user/mrmr) (*.net *.split)
2022-01-10 09:09:02 +0100aku(~aku@163.172.137.34) (*.net *.split)
2022-01-10 09:09:02 +0100Jing(~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a) (*.net *.split)
2022-01-10 09:09:02 +0100notzmv(~zmv@user/notzmv) (*.net *.split)
2022-01-10 09:09:02 +0100[_](~itchyjunk@user/itchyjunk/x-7353470) (*.net *.split)
2022-01-10 09:09:02 +0100dyeplexer(~dyeplexer@user/dyeplexer) (*.net *.split)
2022-01-10 09:09:02 +0100sabx(~sabbas@user/sabbas) (*.net *.split)
2022-01-10 09:09:02 +0100emf(~emf@2620:10d:c090:400::5:b9c2) (*.net *.split)
2022-01-10 09:09:02 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8) (*.net *.split)
2022-01-10 09:09:02 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (*.net *.split)
2022-01-10 09:09:02 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net) (*.net *.split)
2022-01-10 09:09:02 +0100vglfr(~vglfr@88.155.96.35) (*.net *.split)
2022-01-10 09:09:02 +0100remexre(~remexre@user/remexre) (*.net *.split)
2022-01-10 09:09:02 +0100kimjetwav(~user@2607:fea8:2363:8f00:62f3:c8e:2d83:a34f) (*.net *.split)
2022-01-10 09:09:02 +0100johnw(~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) (*.net *.split)
2022-01-10 09:09:02 +0100econo(uid147250@user/econo) (*.net *.split)
2022-01-10 09:09:02 +0100zaquest(~notzaques@5.130.79.72) (*.net *.split)
2022-01-10 09:09:02 +0100cls(~cls@chalk.lubutu.com) (*.net *.split)
2022-01-10 09:09:02 +0100sprout_(~quassel@2a02:a467:ccd6:1:d9b7:23d6:79dd:2e64) (*.net *.split)
2022-01-10 09:09:03 +0100aeka(~aeka@user/hiruji) (*.net *.split)
2022-01-10 09:09:03 +0100xlei(~akans@pool-71-125-19-142.nycmny.fios.verizon.net) (*.net *.split)
2022-01-10 09:09:03 +0100elvishjerricco(sid237756@id-237756.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:03 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (*.net *.split)
2022-01-10 09:09:03 +0100choucavalier(~choucaval@peanutbuttervibes.com) (*.net *.split)
2022-01-10 09:09:03 +0100Alex_test(~al_test@178.34.162.219) (*.net *.split)
2022-01-10 09:09:03 +0100jrm(~jrm@156.34.249.199) (*.net *.split)
2022-01-10 09:09:03 +0100Hafydd(~Hafydd@user/hafydd) (*.net *.split)
2022-01-10 09:09:03 +0100stefan-_(~cri@42dots.de) (*.net *.split)
2022-01-10 09:09:03 +0100jespada(~jespada@87.74.36.188) (*.net *.split)
2022-01-10 09:09:03 +0100haasn(~nand@haasn.dev) (*.net *.split)
2022-01-10 09:09:03 +0100EvanR(~EvanR@user/evanr) (*.net *.split)
2022-01-10 09:09:03 +0100dextaa(~DV@user/dextaa) (*.net *.split)
2022-01-10 09:09:03 +0100jinsun(~quassel@user/jinsun) (*.net *.split)
2022-01-10 09:09:03 +0100Hash(~Hash@hashsecurity.org) (*.net *.split)
2022-01-10 09:09:03 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001) (*.net *.split)
2022-01-10 09:09:03 +0100jushur(~human@user/jushur) (*.net *.split)
2022-01-10 09:09:03 +0100mud(~mud@user/kadoban) (*.net *.split)
2022-01-10 09:09:03 +0100Megant(megant@user/megant) (*.net *.split)
2022-01-10 09:09:03 +0100incertia(~incertia@24.42.241.219) (*.net *.split)
2022-01-10 09:09:03 +0100caubert(~caubert@136.244.111.235) (*.net *.split)
2022-01-10 09:09:03 +0100rubin55(sid175221@id-175221.hampstead.irccloud.com) (*.net *.split)
2022-01-10 09:09:03 +0100sander(~sander@user/sander) (*.net *.split)
2022-01-10 09:09:03 +0100absence(torgeihe@hildring.pvv.ntnu.no) (*.net *.split)
2022-01-10 09:09:03 +0100infinity0(~infinity0@occupy.ecodis.net) (*.net *.split)
2022-01-10 09:09:03 +0100sus(zero@user/zeromomentum) (*.net *.split)
2022-01-10 09:09:03 +0100yaroot(~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (*.net *.split)
2022-01-10 09:09:03 +0100ddb(~ddb@ipv6two.tilde.club) (*.net *.split)
2022-01-10 09:09:03 +0100tito(tito@tilde.team) (*.net *.split)
2022-01-10 09:09:03 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:03 +0100theproffesor(~theproffe@user/theproffesor) (*.net *.split)
2022-01-10 09:09:03 +0100carbolymer(~carbolyme@dropacid.net) (*.net *.split)
2022-01-10 09:09:03 +0100hrdl(~hrdl@mail.hrdl.eu) (*.net *.split)
2022-01-10 09:09:03 +0100mrmonday(~robert@what.i.hope.is.not.a.tabernaevagant.es) (*.net *.split)
2022-01-10 09:09:03 +0100obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl) (*.net *.split)
2022-01-10 09:09:03 +0100lagash(lagash@lagash.shelltalk.net) (*.net *.split)
2022-01-10 09:09:03 +0100Techcable(~Techcable@168.235.93.147) (*.net *.split)
2022-01-10 09:09:03 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100neverwas(jpneverwas@swissbox.unperson.link) (*.net *.split)
2022-01-10 09:09:04 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd) (*.net *.split)
2022-01-10 09:09:04 +0100opqdonut(opqdonut@pseudo.fixme.fi) (*.net *.split)
2022-01-10 09:09:04 +0100nisstyre(~wes@user/nisstyre) (*.net *.split)
2022-01-10 09:09:04 +0100greyrat(~greyrat@ip202.ip-51-178-215.eu) (*.net *.split)
2022-01-10 09:09:04 +0100Clint(~Clint@user/clint) (*.net *.split)
2022-01-10 09:09:04 +0100kristjansson(sid126207@id-126207.tinside.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100hexology(~hexology@user/hexology) (*.net *.split)
2022-01-10 09:09:04 +0100landonf(landonf@mac68k.info) (*.net *.split)
2022-01-10 09:09:04 +0100Logio(em@kapsi.fi) (*.net *.split)
2022-01-10 09:09:04 +0100raghavgururajan(ea769b8000@user/raghavgururajan) (*.net *.split)
2022-01-10 09:09:04 +0100totte(~totte@h-82-196-112-155.A166.priv.bahnhof.se) (*.net *.split)
2022-01-10 09:09:04 +0100w1gz(~do@159.89.11.133) (*.net *.split)
2022-01-10 09:09:04 +0100In0perable(~PLAYER_1@fancydata.science) (*.net *.split)
2022-01-10 09:09:04 +0100iteratee_(~kyle@162.218.222.107) (*.net *.split)
2022-01-10 09:09:04 +0100ridcully(~ridcully@p57b52a9a.dip0.t-ipconnect.de) (*.net *.split)
2022-01-10 09:09:04 +0100dolio(~dolio@130.44.130.54) (*.net *.split)
2022-01-10 09:09:04 +0100stilgart(~Christoph@chezlefab.net) (*.net *.split)
2022-01-10 09:09:04 +0100enikar(~enikar@user/enikar) (*.net *.split)
2022-01-10 09:09:04 +0100farn(~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505) (*.net *.split)
2022-01-10 09:09:04 +0100andjjj23(~irc@107.170.228.47) (*.net *.split)
2022-01-10 09:09:04 +0100tubogram4(~tubogram@user/tubogram) (*.net *.split)
2022-01-10 09:09:04 +0100Axman6(~Axman6@user/axman6) (*.net *.split)
2022-01-10 09:09:04 +0100Boarders_(sid425905@id-425905.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100JSharp(sid4580@id-4580.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100ysh(sid6017@id-6017.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100saolsen(sid26430@id-26430.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100tapas(sid467876@id-467876.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100cbarrett(sid192934@id-192934.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100enemeth79(sid309041@id-309041.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100bjs(sid190364@user/bjs) (*.net *.split)
2022-01-10 09:09:04 +0100sclv(sid39734@haskell/developer/sclv) (*.net *.split)
2022-01-10 09:09:04 +0100mrianbloom(sid350277@id-350277.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100dmj`(sid72307@id-72307.hampstead.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100acertain(sid470584@id-470584.hampstead.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100gaze___(sid387101@id-387101.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100V(~v@anomalous.eu) (*.net *.split)
2022-01-10 09:09:04 +0100SethTisue__(sid14912@id-14912.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100hongminhee(sid295@id-295.tinside.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100modnar(~modnar@shell.sonic.net) (*.net *.split)
2022-01-10 09:09:04 +0100sunarch(uid526836@user/sunarch) (*.net *.split)
2022-01-10 09:09:04 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (*.net *.split)
2022-01-10 09:09:04 +0100kronicma1(user27604@neotame.csclub.uwaterloo.ca) (*.net *.split)
2022-01-10 09:09:04 +0100riatre(~quassel@2001:310:6000:f::5198:1) (*.net *.split)
2022-01-10 09:09:04 +0100polyphem(~rod@2a02:810d:640:776c:e450:3ca3:b389:687a) (*.net *.split)
2022-01-10 09:09:04 +0100noddy(~user@user/noddy) (*.net *.split)
2022-01-10 09:09:04 +0100sphynx(~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (*.net *.split)
2022-01-10 09:09:04 +0100siers(~ij@user/ij) (*.net *.split)
2022-01-10 09:09:04 +0100sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (*.net *.split)
2022-01-10 09:09:04 +0100retro_(~retro@2e40edd9.skybroadband.com) (*.net *.split)
2022-01-10 09:09:04 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (*.net *.split)
2022-01-10 09:09:04 +0100lally(sid388228@id-388228.uxbridge.irccloud.com) (*.net *.split)
2022-01-10 09:09:04 +0100hugo(znc@verdigris.lysator.liu.se) (*.net *.split)
2022-01-10 09:09:04 +0100megaTherion(~therion@unix.io) (*.net *.split)
2022-01-10 09:09:04 +0100dagit(~dagit@2001:558:6025:38:6476:a063:d05a:44da) (*.net *.split)
2022-01-10 09:09:05 +0100berberman(~berberman@user/berberman) (*.net *.split)
2022-01-10 09:09:05 +0100adamCS(~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (*.net *.split)
2022-01-10 09:09:05 +0100fjmorazan(~quassel@user/fjmorazan) (*.net *.split)
2022-01-10 09:09:05 +0100xdej(~xdej@quatramaran.salle-s.org) (*.net *.split)
2022-01-10 09:09:05 +0100eco_(~ubuntu@ec2-54-201-230-197.us-west-2.compute.amazonaws.com) (*.net *.split)
2022-01-10 09:09:05 +0100ldlework(~hexeme@user/hexeme) (*.net *.split)
2022-01-10 09:09:05 +0100MasseR(~MasseR@51.15.143.128) (*.net *.split)
2022-01-10 09:09:05 +0100Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (*.net *.split)
2022-01-10 09:09:05 +0100synthmeat(~synthmeat@user/synthmeat) (*.net *.split)
2022-01-10 09:09:05 +0100hubvu(sid495858@user/hubvu) (*.net *.split)
2022-01-10 09:09:05 +0100burakcank(~burakcank@has.arrived.and.is.ready-to.party) (*.net *.split)
2022-01-10 09:09:05 +0100statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (*.net *.split)
2022-01-10 09:09:05 +0100feetwind(~mike@user/feetwind) (*.net *.split)
2022-01-10 09:09:05 +0100Ranhir(~Ranhir@157.97.53.139) (*.net *.split)
2022-01-10 09:09:05 +0100robbert-vdh(~robbert@robbertvanderhelm.nl) (*.net *.split)
2022-01-10 09:09:05 +0100Firedancer(sid336191@id-336191.hampstead.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100degraafk(sid71464@id-71464.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100glowcoil(sid3405@id-3405.tinside.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100carter(sid14827@id-14827.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (*.net *.split)
2022-01-10 09:09:05 +0100pie_(~pie_bnc@user/pie/x-2818909) (*.net *.split)
2022-01-10 09:09:05 +0100[exa](exa@user/exa/x-3587197) (*.net *.split)
2022-01-10 09:09:05 +0100derelict(derelict@user/derelict) (*.net *.split)
2022-01-10 09:09:05 +0100ystael(~ystael@user/ystael) (*.net *.split)
2022-01-10 09:09:05 +0100ts2(~ts@46.101.20.9) (*.net *.split)
2022-01-10 09:09:05 +0100g(x@libera/staff/glguy) (*.net *.split)
2022-01-10 09:09:05 +0100swistak(~swistak@185.21.216.141) (*.net *.split)
2022-01-10 09:09:05 +0100Arsen(arsen@managarm/dev/Arsen) (*.net *.split)
2022-01-10 09:09:05 +0100nrr__(sid20938@id-20938.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100integral(sid296274@user/integral) (*.net *.split)
2022-01-10 09:09:05 +0100gmc(sid58314@id-58314.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100dispater(~dispater@user/brprice) (*.net *.split)
2022-01-10 09:09:05 +0100jamestmartin(~james@jtmar.me) (*.net *.split)
2022-01-10 09:09:05 +0100vjoki(~vjoki@2a00:d880:3:1::fea1:9ae) (*.net *.split)
2022-01-10 09:09:05 +0100ehamberg(sid18208@id-18208.hampstead.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100TimWolla(~timwolla@2a01:4f8:150:6153:beef::6667) (*.net *.split)
2022-01-10 09:09:05 +0100TMA(tma@twin.jikos.cz) (*.net *.split)
2022-01-10 09:09:05 +0100iphy(sid67735@id-67735.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100whez(sid470288@id-470288.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100_0x47_(sid508683@id-508683.tinside.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100teehemkay_(sid14792@id-14792.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100gregberns__(sid315709@id-315709.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100MironZ(~MironZ@nat-infra.ehlab.uk) (*.net *.split)
2022-01-10 09:09:05 +0100micro(~micro@user/micro) (*.net *.split)
2022-01-10 09:09:05 +0100russruss(~russruss@my.russellmcc.com) (*.net *.split)
2022-01-10 09:09:05 +0100S11001001(sid42510@id-42510.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:05 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100tnks(sid412124@id-412124.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100marienz(~marienz@libera/staff/marienz) (*.net *.split)
2022-01-10 09:09:06 +0100davetapley(sid666@id-666.uxbridge.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100rtpg(sid443069@id-443069.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100b20n(sid115913@id-115913.uxbridge.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100lightandlight(sid135476@id-135476.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100caasih(sid13241@id-13241.ilkley.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100edmundnoble(sid229620@id-229620.helmsley.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100PotatoGim(sid99505@id-99505.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100travv0(sid293381@user/travv0) (*.net *.split)
2022-01-10 09:09:06 +0100philpax_(sid516926@id-516926.lymington.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100jakesyl_(sid56879@id-56879.hampstead.irccloud.com) (*.net *.split)
2022-01-10 09:09:06 +0100Ekho(~Ekho@user/ekho) (*.net *.split)
2022-01-10 09:09:06 +0100bbear(~znc@21212.s.t4vps.eu) (*.net *.split)
2022-01-10 09:09:06 +0100dragestil(~znc@user/dragestil) (*.net *.split)
2022-01-10 09:09:06 +0100welterde(welterde@thinkbase.srv.welterde.de) (*.net *.split)
2022-01-10 09:09:06 +0100earthy(~arthurvl@2001:984:275b:1:ba27:ebff:fea0:40b0) (*.net *.split)
2022-01-10 09:09:06 +0100cawfee(~root@2406:3003:2077:2758::babe) (*.net *.split)
2022-01-10 09:09:06 +0100liskin(~liskin@xmonad/liskin) (*.net *.split)
2022-01-10 09:09:06 +0100defanor(~defanor@tart.uberspace.net) (*.net *.split)
2022-01-10 09:09:06 +0100codedmart(codedmart@2600:3c01::f03c:92ff:fefe:8511) (*.net *.split)
2022-01-10 09:09:06 +0100xnbya(~xnbya@2a01:4f8:c17:cbdd::1) (*.net *.split)
2022-01-10 09:09:06 +0100bastelfreak(~bastelfre@basteles-bastelknecht.bastelfreak.org) (*.net *.split)
2022-01-10 09:09:06 +0100Adran(~adran@botters/adran) (*.net *.split)
2022-01-10 09:09:06 +0100energizer(~energizer@user/energizer) (*.net *.split)
2022-01-10 09:09:06 +0100tomjaguarpaw(~tom@li367-225.members.linode.com) (*.net *.split)
2022-01-10 09:09:06 +0100immae(~immae@2a01:4f8:141:53e7::) (*.net *.split)
2022-01-10 09:09:06 +0100cross(~cross@spitfire.i.gajendra.net) (*.net *.split)
2022-01-10 09:09:06 +0100janus(janus@anubis.0x90.dk) (*.net *.split)
2022-01-10 09:09:06 +0100dixie(~dixie@real.wilbury.sk) (*.net *.split)
2022-01-10 09:09:06 +0100dunj3(~dunj3@kingdread.de) (*.net *.split)
2022-01-10 09:09:06 +0100cpape(~user@2a01:4f9:c010:632d::1) (*.net *.split)
2022-01-10 09:09:06 +0100sm[i](~user@plaintextaccounting/sm) (*.net *.split)
2022-01-10 09:09:15 +0100biberu\(~biberu@user/biberu)
2022-01-10 09:10:06 +0100yauhsien_(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 09:10:06 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
2022-01-10 09:10:43 +0100biberu\biberu
2022-01-10 09:11:10 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-01-10 09:11:33 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-10 09:11:49 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-01-10 09:12:37 +0100yahb(xsbot@user/mniip/bot/yahb) (Ping timeout: 256 seconds)
2022-01-10 09:13:45 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-01-10 09:14:45 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-10 09:16:55 +0100litharge(litharge@libera/bot/litharge)
2022-01-10 09:17:45 +0100yahb(xsbot@user/mniip/bot/yahb)
2022-01-10 09:20:44 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 09:20:44 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2022-01-10 09:20:44 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c274:f734:3361:cf1c)
2022-01-10 09:20:44 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2022-01-10 09:20:44 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2022-01-10 09:20:44 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-01-10 09:20:44 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-01-10 09:20:44 +0100modnar(~modnar@shell.sonic.net)
2022-01-10 09:20:44 +0100Jing(~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a)
2022-01-10 09:20:44 +0100notzmv(~zmv@user/notzmv)
2022-01-10 09:20:44 +0100[_](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-10 09:20:44 +0100td_(~td@94.134.91.23)
2022-01-10 09:20:44 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-10 09:20:44 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-01-10 09:20:44 +0100sabx(~sabbas@user/sabbas)
2022-01-10 09:20:44 +0100sunarch(uid526836@user/sunarch)
2022-01-10 09:20:44 +0100emf(~emf@2620:10d:c090:400::5:b9c2)
2022-01-10 09:20:44 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8)
2022-01-10 09:20:44 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com)
2022-01-10 09:20:44 +0100ouestbillie(~gallup@192-222-138-215.qc.cable.ebox.net)
2022-01-10 09:20:44 +0100vglfr(~vglfr@88.155.96.35)
2022-01-10 09:20:44 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-10 09:20:44 +0100kronicma1(user27604@neotame.csclub.uwaterloo.ca)
2022-01-10 09:20:44 +0100juhp(~juhp@128.106.188.82)
2022-01-10 09:20:44 +0100remexre(~remexre@user/remexre)
2022-01-10 09:20:44 +0100kimjetwav(~user@2607:fea8:2363:8f00:62f3:c8e:2d83:a34f)
2022-01-10 09:20:44 +0100AlexNoo(~AlexNoo@178.34.162.219)
2022-01-10 09:20:44 +0100johnw(~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
2022-01-10 09:20:44 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-01-10 09:20:44 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-10 09:20:44 +0100econo(uid147250@user/econo)
2022-01-10 09:20:44 +0100zaquest(~notzaques@5.130.79.72)
2022-01-10 09:20:44 +0100xsperry(~xs@user/xsperry)
2022-01-10 09:20:44 +0100mstksg(~jle`@cpe-23-240-75-236.socal.res.rr.com)
2022-01-10 09:20:44 +0100cls(~cls@chalk.lubutu.com)
2022-01-10 09:20:44 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-01-10 09:20:44 +0100sprout_(~quassel@2a02:a467:ccd6:1:d9b7:23d6:79dd:2e64)
2022-01-10 09:20:44 +0100aeka(~aeka@user/hiruji)
2022-01-10 09:20:44 +0100Hash(~Hash@hashsecurity.org)
2022-01-10 09:20:44 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-01-10 09:20:44 +0100tremon(~tremon@217-120-53-183.cable.dynamic.v4.ziggo.nl)
2022-01-10 09:20:44 +0100xlei(~akans@pool-71-125-19-142.nycmny.fios.verizon.net)
2022-01-10 09:20:44 +0100elvishjerricco(sid237756@id-237756.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100kawpuh(~kawpuh@66.42.81.80)
2022-01-10 09:20:44 +0100n3t(n3t@user/n3t)
2022-01-10 09:20:44 +0100xsarnik(xsarnik@lounge.fi.muni.cz)
2022-01-10 09:20:44 +0100polux(~polux@51.15.169.172)
2022-01-10 09:20:44 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-01-10 09:20:44 +0100riatre(~quassel@2001:310:6000:f::5198:1)
2022-01-10 09:20:44 +0100choucavalier(~choucaval@peanutbuttervibes.com)
2022-01-10 09:20:44 +0100Alex_test(~al_test@178.34.162.219)
2022-01-10 09:20:44 +0100wrengr(~wrengr@150.12.83.34.bc.googleusercontent.com)
2022-01-10 09:20:44 +0100simpleauthority(~simpleaut@user/simpleauthority)
2022-01-10 09:20:44 +0100polyphem(~rod@2a02:810d:640:776c:e450:3ca3:b389:687a)
2022-01-10 09:20:44 +0100motherfsck(~motherfsc@user/motherfsck)
2022-01-10 09:20:44 +0100glguy(x@libera/staff/glguy)
2022-01-10 09:20:44 +0100jrm(~jrm@156.34.249.199)
2022-01-10 09:20:44 +0100nurupo(~nurupo.ga@user/nurupo)
2022-01-10 09:20:44 +0100Hafydd(~Hafydd@user/hafydd)
2022-01-10 09:20:44 +0100stefan-_(~cri@42dots.de)
2022-01-10 09:20:44 +0100noddy(~user@user/noddy)
2022-01-10 09:20:44 +0100jespada(~jespada@87.74.36.188)
2022-01-10 09:20:44 +0100puke(~puke@user/puke)
2022-01-10 09:20:44 +0100Codaraxis_(~Codaraxis@user/codaraxis)
2022-01-10 09:20:44 +0100haasn(~nand@haasn.dev)
2022-01-10 09:20:44 +0100EvanR(~EvanR@user/evanr)
2022-01-10 09:20:44 +0100hyiltiz(~quassel@31.220.5.250)
2022-01-10 09:20:44 +0100gentauro(~gentauro@user/gentauro)
2022-01-10 09:20:44 +0100dextaa(~DV@user/dextaa)
2022-01-10 09:20:44 +0100ishutin(~ishutin@178-164-188-6.pool.digikabel.hu)
2022-01-10 09:20:44 +0100byorgey(~byorgey@155.138.238.211)
2022-01-10 09:20:44 +0100jinsun(~quassel@user/jinsun)
2022-01-10 09:20:44 +0100sphynx(~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288)
2022-01-10 09:20:44 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001)
2022-01-10 09:20:44 +0100jushur(~human@user/jushur)
2022-01-10 09:20:44 +0100mud(~mud@user/kadoban)
2022-01-10 09:20:44 +0100forell(~forell@user/forell)
2022-01-10 09:20:44 +0100Megant(megant@user/megant)
2022-01-10 09:20:44 +0100incertia(~incertia@24.42.241.219)
2022-01-10 09:20:44 +0100caubert(~caubert@136.244.111.235)
2022-01-10 09:20:44 +0100koolazer(~koo@user/koolazer)
2022-01-10 09:20:44 +0100remedan(~remedan@octo.cafe)
2022-01-10 09:20:44 +0100siers(~ij@user/ij)
2022-01-10 09:20:44 +0100rubin55(sid175221@id-175221.hampstead.irccloud.com)
2022-01-10 09:20:44 +0100SoF(~skius@user/skius)
2022-01-10 09:20:44 +0100sander(~sander@user/sander)
2022-01-10 09:20:44 +0100absence(torgeihe@hildring.pvv.ntnu.no)
2022-01-10 09:20:44 +0100infinity0(~infinity0@occupy.ecodis.net)
2022-01-10 09:20:44 +0100sim590(~simon@modemcable090.207-203-24.mc.videotron.ca)
2022-01-10 09:20:44 +0100sus(zero@user/zeromomentum)
2022-01-10 09:20:44 +0100emergence(~emergence@vm0.max-p.me)
2022-01-10 09:20:44 +0100bliminse(~bliminse@host86-186-17-7.range86-186.btcentralplus.com)
2022-01-10 09:20:44 +0100retro_(~retro@2e40edd9.skybroadband.com)
2022-01-10 09:20:44 +0100yaroot(~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953)
2022-01-10 09:20:44 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2022-01-10 09:20:44 +0100ddb(~ddb@ipv6two.tilde.club)
2022-01-10 09:20:44 +0100tristanC(~tristanC@user/tristanc)
2022-01-10 09:20:44 +0100drewr(~drew@user/drewr)
2022-01-10 09:20:44 +0100hueso(~root@user/hueso)
2022-01-10 09:20:44 +0100tito(tito@tilde.team)
2022-01-10 09:20:44 +0100awpr(uid446117@id-446117.lymington.irccloud.com)
2022-01-10 09:20:44 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
2022-01-10 09:20:44 +0100theproffesor(~theproffe@user/theproffesor)
2022-01-10 09:20:44 +0100carbolymer(~carbolyme@dropacid.net)
2022-01-10 09:20:44 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-01-10 09:20:44 +0100mrmr(~mrmr@user/mrmr)
2022-01-10 09:20:44 +0100hrdl(~hrdl@mail.hrdl.eu)
2022-01-10 09:20:44 +0100aku(~aku@163.172.137.34)
2022-01-10 09:20:44 +0100mrmonday(~robert@what.i.hope.is.not.a.tabernaevagant.es)
2022-01-10 09:20:44 +0100obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl)
2022-01-10 09:20:44 +0100lagash(lagash@lagash.shelltalk.net)
2022-01-10 09:20:44 +0100Techcable(~Techcable@168.235.93.147)
2022-01-10 09:20:44 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-01-10 09:20:44 +0100neverwas(jpneverwas@swissbox.unperson.link)
2022-01-10 09:20:44 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd)
2022-01-10 09:20:44 +0100opqdonut(opqdonut@pseudo.fixme.fi)
2022-01-10 09:20:44 +0100nisstyre(~wes@user/nisstyre)
2022-01-10 09:20:44 +0100greyrat(~greyrat@ip202.ip-51-178-215.eu)
2022-01-10 09:20:44 +0100Clint(~Clint@user/clint)
2022-01-10 09:20:44 +0100lally(sid388228@id-388228.uxbridge.irccloud.com)
2022-01-10 09:20:44 +0100kristjansson(sid126207@id-126207.tinside.irccloud.com)
2022-01-10 09:20:44 +0100hugo(znc@verdigris.lysator.liu.se)
2022-01-10 09:20:44 +0100landonf(landonf@mac68k.info)
2022-01-10 09:20:44 +0100hexology(~hexology@user/hexology)
2022-01-10 09:20:44 +0100Logio(em@kapsi.fi)
2022-01-10 09:20:44 +0100raghavgururajan(ea769b8000@user/raghavgururajan)
2022-01-10 09:20:44 +0100totte(~totte@h-82-196-112-155.A166.priv.bahnhof.se)
2022-01-10 09:20:44 +0100megaTherion(~therion@unix.io)
2022-01-10 09:20:44 +0100dagit(~dagit@2001:558:6025:38:6476:a063:d05a:44da)
2022-01-10 09:20:44 +0100berberman(~berberman@user/berberman)
2022-01-10 09:20:44 +0100In0perable(~PLAYER_1@fancydata.science)
2022-01-10 09:20:44 +0100adamCS(~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com)
2022-01-10 09:20:44 +0100fjmorazan(~quassel@user/fjmorazan)
2022-01-10 09:20:44 +0100w1gz(~do@159.89.11.133)
2022-01-10 09:20:44 +0100xdej(~xdej@quatramaran.salle-s.org)
2022-01-10 09:20:44 +0100eco_(~ubuntu@ec2-54-201-230-197.us-west-2.compute.amazonaws.com)
2022-01-10 09:20:44 +0100ldlework(~hexeme@user/hexeme)
2022-01-10 09:20:44 +0100iteratee_(~kyle@162.218.222.107)
2022-01-10 09:20:44 +0100MasseR(~MasseR@51.15.143.128)
2022-01-10 09:20:44 +0100ridcully(~ridcully@p57b52a9a.dip0.t-ipconnect.de)
2022-01-10 09:20:44 +0100Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net)
2022-01-10 09:20:44 +0100travv0(sid293381@user/travv0)
2022-01-10 09:20:44 +0100synthmeat(~synthmeat@user/synthmeat)
2022-01-10 09:20:44 +0100dolio(~dolio@130.44.130.54)
2022-01-10 09:20:44 +0100stilgart(~Christoph@chezlefab.net)
2022-01-10 09:20:44 +0100hubvu(sid495858@user/hubvu)
2022-01-10 09:20:44 +0100enikar(~enikar@user/enikar)
2022-01-10 09:20:44 +0100burakcank(~burakcank@has.arrived.and.is.ready-to.party)
2022-01-10 09:20:44 +0100farn(~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505)
2022-01-10 09:20:44 +0100Axman6(~Axman6@user/axman6)
2022-01-10 09:20:44 +0100statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
2022-01-10 09:20:44 +0100tubogram4(~tubogram@user/tubogram)
2022-01-10 09:20:44 +0100feetwind(~mike@user/feetwind)
2022-01-10 09:20:44 +0100Ranhir(~Ranhir@157.97.53.139)
2022-01-10 09:20:44 +0100robbert-vdh(~robbert@robbertvanderhelm.nl)
2022-01-10 09:20:44 +0100Firedancer(sid336191@id-336191.hampstead.irccloud.com)
2022-01-10 09:20:44 +0100degraafk(sid71464@id-71464.lymington.irccloud.com)
2022-01-10 09:20:44 +0100glowcoil(sid3405@id-3405.tinside.irccloud.com)
2022-01-10 09:20:44 +0100carter(sid14827@id-14827.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100andjjj23(~irc@107.170.228.47)
2022-01-10 09:20:44 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com)
2022-01-10 09:20:44 +0100pie_(~pie_bnc@user/pie/x-2818909)
2022-01-10 09:20:44 +0100[exa](exa@user/exa/x-3587197)
2022-01-10 09:20:44 +0100derelict(derelict@user/derelict)
2022-01-10 09:20:44 +0100g(x@libera/staff/glguy)
2022-01-10 09:20:44 +0100ystael(~ystael@user/ystael)
2022-01-10 09:20:44 +0100ts2(~ts@46.101.20.9)
2022-01-10 09:20:44 +0100swistak(~swistak@185.21.216.141)
2022-01-10 09:20:44 +0100Arsen(arsen@managarm/dev/Arsen)
2022-01-10 09:20:44 +0100nrr__(sid20938@id-20938.lymington.irccloud.com)
2022-01-10 09:20:44 +0100gmc(sid58314@id-58314.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100integral(sid296274@user/integral)
2022-01-10 09:20:44 +0100dispater(~dispater@user/brprice)
2022-01-10 09:20:44 +0100jamestmartin(~james@jtmar.me)
2022-01-10 09:20:44 +0100vjoki(~vjoki@2a00:d880:3:1::fea1:9ae)
2022-01-10 09:20:44 +0100ehamberg(sid18208@id-18208.hampstead.irccloud.com)
2022-01-10 09:20:44 +0100TimWolla(~timwolla@2a01:4f8:150:6153:beef::6667)
2022-01-10 09:20:44 +0100TMA(tma@twin.jikos.cz)
2022-01-10 09:20:44 +0100iphy(sid67735@id-67735.lymington.irccloud.com)
2022-01-10 09:20:44 +0100_0x47_(sid508683@id-508683.tinside.irccloud.com)
2022-01-10 09:20:44 +0100whez(sid470288@id-470288.lymington.irccloud.com)
2022-01-10 09:20:44 +0100teehemkay_(sid14792@id-14792.lymington.irccloud.com)
2022-01-10 09:20:44 +0100gregberns__(sid315709@id-315709.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100MironZ(~MironZ@nat-infra.ehlab.uk)
2022-01-10 09:20:44 +0100micro(~micro@user/micro)
2022-01-10 09:20:44 +0100sm[i](~user@plaintextaccounting/sm)
2022-01-10 09:20:44 +0100russruss(~russruss@my.russellmcc.com)
2022-01-10 09:20:44 +0100mercury.libera.chat+o Axman6
2022-01-10 09:20:44 +0100hongminhee(sid295@id-295.tinside.irccloud.com)
2022-01-10 09:20:44 +0100SethTisue__(sid14912@id-14912.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100V(~v@anomalous.eu)
2022-01-10 09:20:44 +0100gaze___(sid387101@id-387101.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100acertain(sid470584@id-470584.hampstead.irccloud.com)
2022-01-10 09:20:44 +0100dmj`(sid72307@id-72307.hampstead.irccloud.com)
2022-01-10 09:20:44 +0100mrianbloom(sid350277@id-350277.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100sclv(sid39734@haskell/developer/sclv)
2022-01-10 09:20:44 +0100bjs(sid190364@user/bjs)
2022-01-10 09:20:44 +0100enemeth79(sid309041@id-309041.lymington.irccloud.com)
2022-01-10 09:20:44 +0100cbarrett(sid192934@id-192934.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100tapas(sid467876@id-467876.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100saolsen(sid26430@id-26430.lymington.irccloud.com)
2022-01-10 09:20:44 +0100ysh(sid6017@id-6017.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100JSharp(sid4580@id-4580.lymington.irccloud.com)
2022-01-10 09:20:44 +0100Boarders_(sid425905@id-425905.lymington.irccloud.com)
2022-01-10 09:20:44 +0100S11001001(sid42510@id-42510.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100tnks(sid412124@id-412124.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100marienz(~marienz@libera/staff/marienz)
2022-01-10 09:20:44 +0100davetapley(sid666@id-666.uxbridge.irccloud.com)
2022-01-10 09:20:44 +0100rtpg(sid443069@id-443069.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100b20n(sid115913@id-115913.uxbridge.irccloud.com)
2022-01-10 09:20:44 +0100lightandlight(sid135476@id-135476.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100caasih(sid13241@id-13241.ilkley.irccloud.com)
2022-01-10 09:20:44 +0100edmundnoble(sid229620@id-229620.helmsley.irccloud.com)
2022-01-10 09:20:44 +0100PotatoGim(sid99505@id-99505.lymington.irccloud.com)
2022-01-10 09:20:44 +0100philpax_(sid516926@id-516926.lymington.irccloud.com)
2022-01-10 09:20:44 +0100jakesyl_(sid56879@id-56879.hampstead.irccloud.com)
2022-01-10 09:20:44 +0100Ekho(~Ekho@user/ekho)
2022-01-10 09:20:44 +0100bbear(~znc@21212.s.t4vps.eu)
2022-01-10 09:20:44 +0100dragestil(~znc@user/dragestil)
2022-01-10 09:20:44 +0100welterde(welterde@thinkbase.srv.welterde.de)
2022-01-10 09:20:44 +0100earthy(~arthurvl@2001:984:275b:1:ba27:ebff:fea0:40b0)
2022-01-10 09:20:44 +0100cawfee(~root@2406:3003:2077:2758::babe)
2022-01-10 09:20:44 +0100liskin(~liskin@xmonad/liskin)
2022-01-10 09:20:44 +0100defanor(~defanor@tart.uberspace.net)
2022-01-10 09:20:44 +0100codedmart(codedmart@2600:3c01::f03c:92ff:fefe:8511)
2022-01-10 09:20:44 +0100xnbya(~xnbya@2a01:4f8:c17:cbdd::1)
2022-01-10 09:20:44 +0100bastelfreak(~bastelfre@basteles-bastelknecht.bastelfreak.org)
2022-01-10 09:20:44 +0100Adran(~adran@botters/adran)
2022-01-10 09:20:44 +0100energizer(~energizer@user/energizer)
2022-01-10 09:20:44 +0100tomjaguarpaw(~tom@li367-225.members.linode.com)
2022-01-10 09:20:44 +0100immae(~immae@2a01:4f8:141:53e7::)
2022-01-10 09:20:44 +0100cross(~cross@spitfire.i.gajendra.net)
2022-01-10 09:20:44 +0100janus(janus@anubis.0x90.dk)
2022-01-10 09:20:44 +0100dixie(~dixie@real.wilbury.sk)
2022-01-10 09:20:44 +0100cpape(~user@2a01:4f9:c010:632d::1)
2022-01-10 09:20:44 +0100dunj3(~dunj3@kingdread.de)
2022-01-10 09:21:25 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
2022-01-10 09:22:52 +0100litharge(litharge@libera/bot/litharge) (Remote host closed the connection)
2022-01-10 09:22:55 +0100litharge(litharge@libera/bot/litharge)
2022-01-10 09:24:55 +0100[_](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-01-10 09:25:53 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-01-10 09:28:05 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-10 09:28:12 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-10 09:30:52 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-01-10 09:33:10 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-10 09:33:42 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-10 09:39:47 +0100nunggu(~q@gateway/tor-sasl/nunggu) (Remote host closed the connection)
2022-01-10 09:40:16 +0100nunggu(~q@gateway/tor-sasl/nunggu)
2022-01-10 09:41:31 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 256 seconds)
2022-01-10 09:44:47 +0100d0ku(~d0ku@178.43.3.56.ipv4.supernova.orange.pl)
2022-01-10 09:46:55 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 09:52:34 +0100nhatanh02(~satori@123.24.172.30)
2022-01-10 09:54:00 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 276 seconds)
2022-01-10 09:54:11 +0100Topsi(~Tobias@dyndsl-095-033-093-212.ewe-ip-backbone.de)
2022-01-10 09:54:43 +0100chele(~chele@user/chele)
2022-01-10 09:54:53 +0100acidjnk(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de)
2022-01-10 09:54:53 +0100acidjnk_new(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de)
2022-01-10 09:55:18 +0100gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 276 seconds)
2022-01-10 09:56:22 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-10 10:01:30 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-10 10:07:50 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-01-10 10:08:09 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-01-10 10:09:06 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-10 10:09:42 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-01-10 10:11:08 +0100MajorBiscuit(~MajorBisc@c-001-032-022.client.tudelft.eduvpn.nl)
2022-01-10 10:13:25 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-10 10:17:36 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2022-01-10 10:17:36 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2022-01-10 10:17:39 +0100allbery_bgeekosaur
2022-01-10 10:21:52 +0100Jing(~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-10 10:32:25 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-01-10 10:33:17 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-10 10:34:45 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Quit: Leaving)
2022-01-10 10:36:32 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2022-01-10 10:44:41 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it)
2022-01-10 10:49:37 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8) (Ping timeout: 240 seconds)
2022-01-10 10:54:00 +0100__monty__(~toonn@user/toonn)
2022-01-10 10:55:30 +0100acidjnk(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-10 10:55:30 +0100acidjnk_new(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-10 10:59:24 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-01-10 11:02:07 +0100Jing(~hedgehog@240e:390:7c53:a7e1:ede2:45ee:21e7:7941)
2022-01-10 11:03:55 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2022-01-10 11:06:40 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 256 seconds)
2022-01-10 11:08:18 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-01-10 11:12:11 +0100xff0x(~xff0x@port-92-193-159-86.dynamic.as20676.net) (Ping timeout: 256 seconds)
2022-01-10 11:12:16 +0100juhp(~juhp@128.106.188.82) (Quit: juhp)
2022-01-10 11:14:22 +0100jackson99(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2022-01-10 11:17:31 +0100xff0x(~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51)
2022-01-10 11:18:39 +0100dyniec(~dyniec@mail.dybiec.info) (Quit: WeeChat 3.0)
2022-01-10 11:21:11 +0100dyniec(~dyniec@mail.dybiec.info)
2022-01-10 11:28:56 +0100juhp(~juhp@128.106.188.82)
2022-01-10 11:30:06 +0100yauhsien_(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 11:30:46 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 11:33:53 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 11:36:42 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-01-10 11:37:22 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-01-10 11:38:13 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2022-01-10 11:38:35 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-01-10 11:38:44 +0100acidjnk_new(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de)
2022-01-10 11:38:45 +0100acidjnk(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de)
2022-01-10 11:52:20 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-10 11:54:57 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-01-10 11:55:26 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-01-10 12:06:21 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 12:07:01 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 12:11:36 +0100DNH(~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d)
2022-01-10 12:13:17 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-01-10 12:16:51 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-10 12:17:38 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net)
2022-01-10 12:20:26 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2022-01-10 12:25:22 +0100max22-(~maxime@2a01cb088335980038ab69ec4eae31f4.ipv6.abo.wanadoo.fr)
2022-01-10 12:36:29 +0100ubert(~Thunderbi@p200300ecdf0994f82db7d35c756e5286.dip0.t-ipconnect.de)
2022-01-10 12:39:25 +0100MajorBiscuit(~MajorBisc@c-001-032-022.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-10 12:41:42 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-10 12:44:45 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-10 12:48:09 +0100max22-(~maxime@2a01cb088335980038ab69ec4eae31f4.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-10 12:56:02 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-10 13:00:17 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-01-10 13:02:41 +0100Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 256 seconds)
2022-01-10 13:07:16 +0100ubert1(~Thunderbi@p200300ecdf0994f8385203c98e392e3c.dip0.t-ipconnect.de)
2022-01-10 13:11:32 +0100 <Benzi-Junior> hey, I'm having trouble with stack, and I think the documentation is out of date
2022-01-10 13:12:11 +0100 <Benzi-Junior> I have a file Foo.hs in src and stack finds it but doesn't expose the module
2022-01-10 13:12:38 +0100 <Benzi-Junior> i.e. it puts it under "other modules"
2022-01-10 13:13:00 +0100 <Benzi-Junior> the documentation says I should edit the .cabal file
2022-01-10 13:13:02 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-10 13:13:13 +0100Maxdamantus(~Maxdamant@user/maxdamantus)
2022-01-10 13:13:34 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-10 13:13:45 +0100 <polyphem> stack uses <project>.cabal to build, you have to add Foo.hs in .cabal under executable/library stanza under exposed modules
2022-01-10 13:13:53 +0100 <Benzi-Junior> but as far as I can tell, stack nowadays writes the .cabal file before doing anything with it
2022-01-10 13:16:19 +0100 <polyphem> stack generates a <project>.cabal file with only standard Main.hs and MyLib.hs files, you have to add your files manually
2022-01-10 13:17:13 +0100 <Benzi-Junior> polyphem, I tried editing the .cabal file but when I run "stack build" it stack writes over it
2022-01-10 13:17:15 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2022-01-10 13:17:39 +0100 <polyphem> what ?
2022-01-10 13:18:10 +0100 <yushyin> do you maybe have a package.yaml hpack file?
2022-01-10 13:18:26 +0100 <polyphem> haven't seen this behavior of stack
2022-01-10 13:19:03 +0100 <Benzi-Junior> yushyin, yes,
2022-01-10 13:19:21 +0100 <Benzi-Junior> polyphem, it's something that changed a while back
2022-01-10 13:19:31 +0100 <Benzi-Junior> polyphem, it's been bothering me ever since
2022-01-10 13:19:55 +0100 <yushyin> yeah, i guess stack uses hpack to generate your cabal file from the package.yaml
2022-01-10 13:20:22 +0100 <polyphem> yushyin, Benzi-Junior : this has to to with hpack , right , stack alone wouldnt overwrite its .cabal file
2022-01-10 13:20:37 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-10 13:21:01 +0100acidjnk(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-10 13:21:01 +0100acidjnk_new(~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-10 13:21:12 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 13:22:31 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2022-01-10 13:23:50 +0100 <polyphem> Benzi-Junior: when you stack init , do you give a project template ?
2022-01-10 13:24:11 +0100 <Benzi-Junior> polyphem, no
2022-01-10 13:25:30 +0100 <yushyin> edit package.yaml to your needs
2022-01-10 13:26:13 +0100 <polyphem> how , yushyin said if you have package.yaml from hpack it will generate your .cabal from it, why you have hpack in the first place ? Do you need it ?
2022-01-10 13:26:36 +0100 <Benzi-Junior> yushyin, "rm package.yaml"
2022-01-10 13:26:37 +0100 <polyphem> yushyin: is hpack standard with stack now ?
2022-01-10 13:27:22 +0100 <yushyin> dunno, i don't use stack
2022-01-10 13:29:28 +0100 <polyphem> i have latest stack : Version 2.7.3, Git revision 7927a3aec32e2b2e5e4fb5be76d0d50eddcc197f x86_64 hpack-0.34.4 on debian, and it does not create package.yaml/uses hpack for my projects !?
2022-01-10 13:32:41 +0100 <yushyin> polyphem: 'Since Stack 1.6.1, the package.yaml is the preferred package format that is provided built-in by stack through the hpack tool. The default behaviour is to generate the .cabal file from this package.yaml, and accordingly you should not modify the .cabal file.' -- https://docs.haskellstack.org/en/stable/GUIDE/#stacks-functions
2022-01-10 13:36:04 +0100 <polyphem> i have never seen an hpack/package.yaml in one of my projects !?
2022-01-10 13:38:31 +0100 <polyphem> what are you using yushyin ? plain cabal ? or nix ?
2022-01-10 13:39:07 +0100 <yushyin> ghcup+cabal
2022-01-10 13:39:40 +0100phuegrvs[m](~phuegrvsm@2001:470:69fc:105::1:65e4)
2022-01-10 13:41:04 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-01-10 13:41:10 +0100alx741(~alx741@157.100.93.160)
2022-01-10 13:41:16 +0100 <polyphem> usually, i start with cabal init -i , then later i switch to stack with stack new , maybe stack sees my .cabal and in order to not overwrite it , doesnt generate package.yaml/juses hpack ... , maybe
2022-01-10 13:41:49 +0100 <yushyin> maybe
2022-01-10 13:41:54 +0100little_mac(~little_ma@2601:410:4300:3ce0:254c:b3ad:2ae7:82d7)
2022-01-10 13:43:19 +0100 <maerwald> trash package.yaml
2022-01-10 13:43:39 +0100 <polyphem> Benzi-Junior: if your project is relativly fresh , only that foo.hs , try to rm all stack artifacts , then do cabal init -i (interactive) to generate your initial cabal file and then run stack new , that might work out not having to deal with hpack/package.yaml
2022-01-10 13:43:42 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 13:43:57 +0100vglfr(~vglfr@88.155.96.35) (Read error: Connection reset by peer)
2022-01-10 13:44:37 +0100 <polyphem> i like stacks support for different resolvers/ghc versions , and externel packages and git source packages
2022-01-10 13:45:00 +0100vglfr(~vglfr@88.155.96.35)
2022-01-10 13:46:11 +0100 <polyphem> havent had the need to tryout ghcup
2022-01-10 13:46:37 +0100 <yushyin> https://cabal.readthedocs.io/en/3.6/cabal-project.html#specifying-the-local-packages
2022-01-10 13:46:46 +0100 <yushyin> https://cabal.readthedocs.io/en/3.6/cabal-project.html#specifying-packages-from-remote-version-con…
2022-01-10 13:47:17 +0100 <maerwald> stack doesn't have any significant feature that you can't have in cabal... it's just a different usability approach
2022-01-10 13:47:46 +0100 <polyphem> yushyin: i erelativly often end up in a cabal state where it cant resolve dependencies , then i switch to stack
2022-01-10 13:49:18 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-10 13:49:59 +0100 <polyphem> maerwald: yeah , i know cabal stepped up quite a bit , still i sometimes use stack sometimes only cabal , but cabal uses systeminstallation of ghc, and debian usually is not uptodate
2022-01-10 13:50:09 +0100 <yushyin> if you really wanted to, you could use the constraints file from stackage e.g. https://www.stackage.org/lts-18.21/cabal.config
2022-01-10 13:50:21 +0100 <maerwald> polyphem: then use ghcup to install a recent GHC
2022-01-10 13:50:28 +0100xb0o2(~xb0o2@user/xb0o2)
2022-01-10 13:50:29 +0100 <yushyin> cabal can use any ghc you like
2022-01-10 13:50:49 +0100 <yushyin> and ghcup makes it easy to install many ghcs
2022-01-10 13:51:03 +0100 <polyphem> when i need some new ghc feature that debian doesnt have yet , i switch to stack and an different resolver
2022-01-10 13:51:13 +0100 <maerwald> sound complicated
2022-01-10 13:52:25 +0100 <polyphem> hmm , at least i do not have to learn yeat another tool, no offence against ghcup , havent used it once
2022-01-10 13:53:19 +0100 <maerwald> there's no learning curve
2022-01-10 13:53:28 +0100 <polyphem> but fp is flatly focusing more and more towards rust, dont they? wonder how long they will continue stack anyway
2022-01-10 13:53:39 +0100 <maerwald> stack is already abandoned by fp
2022-01-10 13:54:02 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2022-01-10 13:54:11 +0100 <maerwald> https://www.snoyman.com/blog/babies-oss-maintenance/
2022-01-10 13:54:20 +0100 <polyphem> maerwald: oh, is it ?
2022-01-10 13:54:55 +0100 <yushyin> polyphem: in my experience haskell package from linux distributions are not for development, thus i use ghcup. i usually end up with many ghcs anyway so why bother with the ghc from the distribution
2022-01-10 13:55:21 +0100 <yushyin> IMO ;)
2022-01-10 13:55:24 +0100alx741(~alx741@157.100.93.160)
2022-01-10 13:57:47 +0100 <polyphem> maerwald: i see
2022-01-10 13:59:13 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-10 13:59:33 +0100 <polyphem> so ghcup installs different ghc versions per user or system wide , do i have to bend my links aka update-aletrnatives on debian ? ist it also managing cabal versions ?
2022-01-10 14:00:01 +0100 <maerwald> polyphem: ghcup installs into ~/.ghcup only and requires that you add ~/.ghcup/bin to PATH
2022-01-10 14:00:14 +0100 <maerwald> so you just prepend it to your path
2022-01-10 14:00:29 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 256 seconds)
2022-01-10 14:01:13 +0100euandreh(~euandreh@2804:14c:33:9fe5:cb46:c04b:665a:c687)
2022-01-10 14:01:40 +0100 <polyphem> maerwald: and ghc is to be fully quallified then like ghc-9.xy right or has ghcup like a subcomand to specifie wich ghc version ghc points to ?
2022-01-10 14:02:29 +0100alx741(~alx741@157.100.93.160)
2022-01-10 14:02:33 +0100 <maerwald> polyphem: yes, it allows to set the default ghc symlinks
2022-01-10 14:02:58 +0100 <polyphem> oh cool , what about cabal versions, same there ?
2022-01-10 14:03:25 +0100 <maerwald> https://www.haskell.org/ghcup/about/#how
2022-01-10 14:03:30 +0100 <maerwald> it's all in the documentation
2022-01-10 14:04:16 +0100 <polyphem> sure , will have a look then to check it out , youre the author right ?
2022-01-10 14:06:19 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 14:09:01 +0100 <maerwald> yes
2022-01-10 14:09:20 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-10 14:09:45 +0100 <polyphem> maerwald: thank you
2022-01-10 14:10:33 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-10 14:10:48 +0100alx741(~alx741@157.100.93.160)
2022-01-10 14:12:18 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-01-10 14:12:41 +0100Vajb(~Vajb@2001:999:50:e6be:1e98:9376:d93e:4506)
2022-01-10 14:13:05 +0100Guest17(~Guest17@wificampus-097061.grenet.fr)
2022-01-10 14:13:49 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2022-01-10 14:14:37 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-10 14:15:47 +0100JimL(~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 256 seconds)
2022-01-10 14:16:34 +0100alx741(~alx741@157.100.93.160)
2022-01-10 14:17:25 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 240 seconds)
2022-01-10 14:17:28 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-10 14:17:58 +0100slack1256(~slack1256@191.125.99.214)
2022-01-10 14:18:45 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-10 14:19:15 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-10 14:20:37 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-10 14:21:07 +0100alx741(~alx741@157.100.93.160)
2022-01-10 14:21:59 +0100 <janus> does anyone use tzdata? i want to make a game plan to make sure it is updated (maybe taken over) before daylight saving is due
2022-01-10 14:22:42 +0100 <janus> because the trustee guidelines say there must be a waiting period of 6 weeks, and daylight savings is due in ~24 weeks we may as well start planning now
2022-01-10 14:22:58 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-01-10 14:23:34 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2022-01-10 14:25:52 +0100 <polyphem> SPJ said in a talk , they released a ghc version wich wen you had a type error would delete your source file , who got hit by that ?
2022-01-10 14:26:42 +0100little_mac(~little_ma@2601:410:4300:3ce0:254c:b3ad:2ae7:82d7) (Remote host closed the connection)
2022-01-10 14:28:02 +0100 <fizbin> Hey, when doing advent-of-code last month, on one of the days I came up with this: https://paste.tomsmeding.com/DuK1vFhS -- I know I've seen something like it somewhere before, but can't remember the name. Anyone else know the thing I'm thinking of?
2022-01-10 14:29:17 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-10 14:29:43 +0100max22-(~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr)
2022-01-10 14:30:11 +0100 <[exa]> fizbin: looks bifunctorish or arrowish
2022-01-10 14:30:36 +0100lavaman(~lavaman@98.38.249.169)
2022-01-10 14:31:53 +0100alx741(~alx741@157.100.93.160)
2022-01-10 14:32:01 +0100 <[exa]> and the actual type Both might be defined somewhere, perhaps in the vicinity of `Solo`
2022-01-10 14:32:08 +0100 <geekosaur> polyphem, https://gitlab.haskell.org/ghc/ghc/-/issues/163
2022-01-10 14:32:26 +0100Guest17(~Guest17@wificampus-097061.grenet.fr) (Quit: Client closed)
2022-01-10 14:33:32 +0100 <polyphem> geekosaur: hahaha
2022-01-10 14:34:56 +0100 <polyphem> when creating a library , is it idiomatic to start with typeclasses that cork together and have differerent implementations for different backends ?
2022-01-10 14:35:08 +0100 <polyphem> s/cork/work/
2022-01-10 14:35:08 +0100alx741(~alx741@157.100.93.160) (Client Quit)
2022-01-10 14:35:52 +0100MajorBiscuit(~MajorBisc@c-001-032-008.client.tudelft.eduvpn.nl)
2022-01-10 14:36:58 +0100 <fizbin> [exa], The only pre-existing thing I can find called Both is in the both library, where it's just Maybe with a different Semigroup instance.
2022-01-10 14:37:20 +0100 <polyphem> or does it scare users away if they have to write instances for their type to use that library ?
2022-01-10 14:39:04 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-10 14:39:32 +0100 <[exa]> fizbin: perhaps https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Functor-Product.html#t:Product ?
2022-01-10 14:39:36 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 14:39:57 +0100 <[exa]> (tried an oldschool search for 'pair' :D )
2022-01-10 14:42:37 +0100 <fizbin> [exa], Yeah, that looks like it. I suspect that before I had seen this as :*: in GHC.Generics or the functor-combinators library.
2022-01-10 14:42:50 +0100 <polyphem> fizbin: i was latly thinking about parallel composition as contrasted to Compose serial functor composition
2022-01-10 14:44:05 +0100 <fizbin> polyphem, you mean like the difference between (&&&) and (>>>) ?
2022-01-10 14:44:16 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2022-01-10 14:44:49 +0100 <polyphem> yeah , but (&&&) works on functions , or does it work also for functors
2022-01-10 14:44:55 +0100 <fizbin> I mean, in advent-of-code I just used Both for Both Min Max on day 24.
2022-01-10 14:45:15 +0100 <fizbin> polyphem: functions only. It's the wrong kind to work on functors.
2022-01-10 14:45:59 +0100 <polyphem> what about n-ary parallel composition , instead of pairing , like mappending multiple functors parallelly so noth Both but Many
2022-01-10 14:46:29 +0100 <polyphem> i like your Both class
2022-01-10 14:46:59 +0100neverfindme(~hayden@158.123.160.43)
2022-01-10 14:47:27 +0100 <fizbin> Well, as [exa] found it's just a restatement of Data.Functor.Product.Product
2022-01-10 14:49:58 +0100 <geekosaur> 162 was also some poor soul who discovered it in ghci
2022-01-10 14:50:47 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-10 14:52:46 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
2022-01-10 14:54:33 +0100 <polyphem> geekosaur: its not funny when it hapens to you, afterall
2022-01-10 14:55:02 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-10 14:59:12 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-01-10 14:59:16 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 15:00:26 +0100neverfindme(~hayden@158.123.160.43) (Quit: Leaving)
2022-01-10 15:02:28 +0100 <Benzi-Junior> I have a type "Foo b a" and have been asked to provide an instance for "Applicative (Foo b)" and quite frankly I'm at a loss, there is no restriction on the type b
2022-01-10 15:04:20 +0100cfricke(~cfricke@user/cfricke)
2022-01-10 15:06:18 +0100 <geekosaur> there's no restriction on ExceptT e, either
2022-01-10 15:08:16 +0100slack1256(~slack1256@191.125.99.214) (Remote host closed the connection)
2022-01-10 15:09:29 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-10 15:10:08 +0100 <geekosaur> start by writing a Functor instance, then write `pure` for it
2022-01-10 15:10:42 +0100matrox(~bc8147f2@cerf.good1.com)
2022-01-10 15:10:46 +0100 <geekosaur> this should give you enough of a feel for it that you can write <*>
2022-01-10 15:12:53 +0100 <hud> Hi trying to turn a function that takes two arguments and returns some operation into a bytecode stack, I understand from sample-code how to generate bytecode for mathematical ops, but what about defining variables and returning values? https://paste.tomsmeding.com/RNK6Qv6Q
2022-01-10 15:13:16 +0100 <Benzi-Junior> geekosaur, I have the functor instance, and actually <*> as well, the issue I'm having is how to write pure
2022-01-10 15:14:23 +0100notzmv(~zmv@user/notzmv)
2022-01-10 15:16:51 +0100 <polyphem> installed ghcup and latest ghc , now warp doesnt compile anymore with this error , any suggestions : https://paste.tomsmeding.com/CBI6zmW6
2022-01-10 15:18:28 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-01-10 15:18:43 +0100shapr(~user@2601:7c0:c202:5190:b29e:1cbf:e21f:c653)
2022-01-10 15:18:53 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-01-10 15:18:56 +0100 <jneira[m]> maybe the package does not support ghc-9.2.1 yet
2022-01-10 15:19:17 +0100 <jneira[m]> did you get to build it with ghc-9.2.1 at some point?
2022-01-10 15:20:09 +0100 <geekosaur> try head.hackage? that looks consistent with the changes in 9.2.1
2022-01-10 15:20:20 +0100 <polyphem> jneira[m]: yea, but this error is about primitive types , that would affect a lot of packages , right , is there such a big breaking api change
2022-01-10 15:20:32 +0100 <geekosaur> yes, because of Apple
2022-01-10 15:20:37 +0100 <polyphem> geekosaur: how so ?
2022-01-10 15:20:59 +0100 <polyphem> as a version constraint in cabal file ?
2022-01-10 15:21:00 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2022-01-10 15:21:09 +0100 <geekosaur> ghc used to treat all sized types internally as full CPU words. but the M1 requires all types to be their correct native sizes
2022-01-10 15:21:10 +0100cfricke(~cfricke@user/cfricke)
2022-01-10 15:21:15 +0100 <geekosaur> in its ABI
2022-01-10 15:21:38 +0100 <geekosaur> so Woord8# is actually 8 bits, and ghc can't get away with tossing around Word#s for them any more
2022-01-10 15:21:39 +0100 <Benzi-Junior> I feel like I'm missing some key insight, there is no way to default on the type "b" but I need to have "pure :: a -> Foo b a"
2022-01-10 15:21:49 +0100 <jneira[m]> the error looks similar to https://github.com/yesodweb/wai/issues/867
2022-01-10 15:22:11 +0100 <jneira[m]> oops already linked
2022-01-10 15:22:53 +0100xsperry(~xs@user/xsperry) (Remote host closed the connection)
2022-01-10 15:23:08 +0100 <geekosaur> and yes, it causes a fair amount of breakage, but not as much as you might think because it's transparent if you're not actually operating on MagicHash-ed types
2022-01-10 15:23:29 +0100xsperry(~xs@user/xsperry)
2022-01-10 15:23:39 +0100 <polyphem> geekosaur: how do i use the head.hackage , what do y you mean by that ?
2022-01-10 15:23:51 +0100 <lortabac> Benzi-Junior: can you share the definition of Foo?
2022-01-10 15:24:06 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-10 15:24:07 +0100 <geekosaur> http://head.hackage.haskell.org/
2022-01-10 15:24:21 +0100 <geekosaur> has a snippet for adding the repository to a cabal file
2022-01-10 15:24:36 +0100 <geekosaur> this repo is just patches to hackage packages to support 9.2.1 and HEAD
2022-01-10 15:24:38 +0100 <jneira[m]> yeah only a relative small number of packages deal directly with primitive types (and some of them are boot libs)
2022-01-10 15:25:14 +0100 <polyphem> .cabal or cabal.project ?
2022-01-10 15:25:27 +0100 <geekosaur> I think either
2022-01-10 15:25:38 +0100 <polyphem> geekosaur: will try
2022-01-10 15:26:26 +0100 <geekosaur> Benzi-Junior, there's an obvious way to deal if it's an Either-like type. if it's not, you need to state the problem (I presume this is homework and/or an exercise from the web) in more detail
2022-01-10 15:29:50 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 15:29:50 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 15:29:50 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 15:31:18 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-10 15:31:33 +0100 <geekosaur> also I think a lot of package maintainers are waiting for 9.2.2 to drop later this month before adding support for it
2022-01-10 15:31:42 +0100 <geekosaur> especially so soon after 9.0.2
2022-01-10 15:32:34 +0100 <geekosaur> (and even more espeically since that dropped on Christmas so I bet a lot of maintainers didn't even get to look at it until January 3 or so)
2022-01-10 15:33:35 +0100 <Benzi-Junior> geekosaur, "Foo b a" should be a messaging agent that sends and receives messages of type "b" and at the end of communications should return a type "a"
2022-01-10 15:34:08 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-10 15:34:10 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-10 15:34:48 +0100 <polyphem> warp works now , but now ther is this error https://paste.tomsmeding.com/k5mVUVO8 ; guess if have to stap back from latest and go to 9.0.2 with older base , no problem thanks to ghcup :)
2022-01-10 15:35:49 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 240 seconds)
2022-01-10 15:36:19 +0100shriekingnoise(~shrieking@186.137.144.80)
2022-01-10 15:36:24 +0100 <yushyin> i guess 8.10.7 is still the recommended ghc for a reason ^^
2022-01-10 15:37:50 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2022-01-10 15:38:55 +0100 <Hecate> yes it is
2022-01-10 15:39:06 +0100 <Hecate> 9.0 should be more advertised as a dev preview imo
2022-01-10 15:39:59 +0100fjmorazan(~quassel@user/fjmorazan) (Quit: fjmorazan)
2022-01-10 15:40:15 +0100fjmorazan(~quassel@user/fjmorazan)
2022-01-10 15:46:35 +0100 <jneira[m]> and 9.2 to live in the bleeding edge 😜
2022-01-10 15:46:50 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 15:47:54 +0100 <geekosaur> 9.0.2 seems fine. 9.2.1 seems the dev preview
2022-01-10 15:47:54 +0100Vajb(~Vajb@2001:999:50:e6be:1e98:9376:d93e:4506) (Read error: Connection reset by peer)
2022-01-10 15:48:22 +0100 <geekosaur> (arguably all x.y.1 releases are dev previews, but that's more or less true of every piece of software :)
2022-01-10 15:52:04 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com)
2022-01-10 15:54:06 +0100Sgeo(~Sgeo@user/sgeo)
2022-01-10 15:54:37 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 240 seconds)
2022-01-10 15:58:50 +0100 <janus> the next stackage nightly will have 9.0.2! yaay
2022-01-10 16:02:06 +0100 <matrox> 9.0.2, not 9.2.1?
2022-01-10 16:03:29 +0100 <geekosaur> still too early for 9.2.1
2022-01-10 16:03:48 +0100 <geekosaur> and it's been stuck on 9.0.1 for a couple months now, waiting for 9.0.2 to drop
2022-01-10 16:04:30 +0100 <geekosaur> hopefully this means we will rapidly progress to having a useful 9.0.2 ecosystem
2022-01-10 16:04:55 +0100xkuru(~xkuru@user/xkuru)
2022-01-10 16:05:08 +0100 <geekosaur> the earliest 9.2.x I would expect them to support is 9.2.2, scheduled for later this month
2022-01-10 16:05:30 +0100max22-(~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-10 16:05:40 +0100jkaye(~jkaye@2601:281:8300:7530:d171:6c14:e395:f91b)
2022-01-10 16:05:41 +0100 <geekosaur> but various maintainers are moving slowly enough that I thing even 9.0.2 will be pushing things a bit
2022-01-10 16:05:42 +0100max22-(~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr)
2022-01-10 16:05:46 +0100 <geekosaur> *think
2022-01-10 16:06:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 16:07:01 +0100 <yushyin> ghc9.2.1 is no fun without hls :/
2022-01-10 16:07:58 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 16:09:07 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
2022-01-10 16:11:45 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 250 seconds)
2022-01-10 16:14:54 +0100gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 276 seconds)
2022-01-10 16:16:21 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-10 16:18:04 +0100 <jneira[m]> we are on it 😅
2022-01-10 16:24:22 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 16:26:37 +0100razetime(~quassel@49.207.213.63) (Ping timeout: 240 seconds)
2022-01-10 16:31:31 +0100nhatanh02(~satori@123.24.172.30)
2022-01-10 16:32:12 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-10 16:35:42 +0100fjmorazan(~quassel@user/fjmorazan) (Quit: fjmorazan)
2022-01-10 16:36:16 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-01-10 16:36:20 +0100fjmorazan(~quassel@user/fjmorazan)
2022-01-10 16:40:59 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 16:40:59 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 16:40:59 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 16:46:06 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 16:49:40 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-01-10 16:56:20 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 17:03:42 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2022-01-10 17:04:21 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 17:04:58 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 17:04:58 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 17:04:58 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 17:09:15 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-01-10 17:09:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-10 17:10:09 +0100 <polyphem> geekosaur: stack is discontinued but stackage is still maintained ?
2022-01-10 17:10:19 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-01-10 17:10:38 +0100 <geekosaur> stack is not discontinued, it is community-maintained instead of being an fpco "product"
2022-01-10 17:10:53 +0100 <polyphem> ah ,ok
2022-01-10 17:14:14 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-10 17:17:28 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 17:18:32 +0100a6a45081-2b83(~aditya@pal-210-106-57.itap.purdue.edu)
2022-01-10 17:25:59 +0100 <tomsmeding> my mind made a little jump at reading "stack is discontinued", half the haskell community would be in a frenzy
2022-01-10 17:26:29 +0100 <tomsmeding> never mind half, the whole haskell community -- the other half would just be gleeful instead of panicking
2022-01-10 17:27:39 +0100_xor(~xor@dsl-50-5-233-169.fuse.net) (Quit: brb)
2022-01-10 17:28:00 +0100 <Taneb> I'm sure there's a handful of people out there who think "cabal? stack? Why would I need something like that, when there's wget and make"
2022-01-10 17:29:25 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-01-10 17:29:47 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-10 17:29:53 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 17:30:01 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c274:f734:3361:cf1c) (Quit: WeeChat 2.8)
2022-01-10 17:31:31 +0100zaquest(~notzaques@5.130.79.72)
2022-01-10 17:32:44 +0100DNH(~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-10 17:33:07 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
2022-01-10 17:33:56 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 17:36:31 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Quit: Leaving)
2022-01-10 17:40:30 +0100 <tomsmeding> I mean, I made do with just make (without wget) for AOC, but that's hardly a production codebase
2022-01-10 17:40:31 +0100Everything(~Everythin@37.115.210.35)
2022-01-10 17:40:49 +0100 <polyphem> tomsmeding: sorry for the shocks
2022-01-10 17:43:56 +0100 <mjrosenb> I've yet to understand stack, and in general hate the idea of languages having their own package managers, so am 100% fine with this.
2022-01-10 17:45:03 +0100 <geekosaur> even C sort-of has one these days (pkgconfig)
2022-01-10 17:45:32 +0100 <geekosaur> libraries get ever more complex and just chucking a -lfoo on the end of a link command increasingly doesn't work
2022-01-10 17:45:44 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-01-10 17:48:50 +0100 <dolio> Stack and cabal aren't package managers.
2022-01-10 17:49:08 +0100 <mjrosenb> pkgconfig is just a database that your one true package manager should be calling to update, like ghc-pkg
2022-01-10 17:49:55 +0100motherfsck(~motherfsc@user/motherfsck) (Quit: quit)
2022-01-10 17:51:48 +0100motherfsck(~motherfsc@user/motherfsck)
2022-01-10 17:54:00 +0100 <mjrosenb> dolio: it may not be a package manager, but I'm pretty sure a package manager should be able to do everything that stack does, so whether it is or it sin't becomes a moot point.
2022-01-10 17:55:53 +0100 <geekosaur> package managers should be able to do more than stack or cabal do
2022-01-10 17:56:01 +0100 <geekosaur> try removing a package with either
2022-01-10 17:56:11 +0100 <geekosaur> they're build managers
2022-01-10 17:56:30 +0100a6a45081-2b83(~aditya@pal-210-106-57.itap.purdue.edu) (Remote host closed the connection)
2022-01-10 17:56:53 +0100 <dolio> Well, that seems like an odd expectation to me. Package managers are built as infrastructure for (un)installing pre-built software for users. They're not build tools for programmers.
2022-01-10 17:57:30 +0100 <janus> can you remove a nix package? you just remove your dependency on it. with cabal it works the same way, no? so if cabal isn't a package manager, isn't nix one either?
2022-01-10 17:58:19 +0100 <geekosaur> many people use nix as a build manager instead of a package manager, yes. one could even argue that nixos is taking the path of abusing a build manager as a package manager\
2022-01-10 17:58:34 +0100 <geekosaur> how often do you have to "gc" your package manager?
2022-01-10 17:58:37 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2022-01-10 17:59:03 +0100 <mjrosenb> dunno, apt tells me there are lots of pacakges that it can uninstall pretty frequently.
2022-01-10 17:59:45 +0100 <mjrosenb> there's even a flag that collects garbage, but they call it 'autoremove' or some such.
2022-01-10 17:59:46 +0100timCF(~timCF@m91-129-100-224.cust.tele2.ee)
2022-01-10 18:00:39 +0100 <mjrosenb> but in order to be able to build C programs, you normally need the -dev version of a library to be installed via apt
2022-01-10 18:00:56 +0100 <mjrosenb> or in gentoo, you just need the library present in order to get the necessary header files.
2022-01-10 18:02:04 +0100little_mac(~little_ma@2601:410:4300:3ce0:90ce:993d:d223:5eab)
2022-01-10 18:03:32 +0100 <janus> another gc for dpkg is called deborphan. there is also debfoster which is semi-automatic, asks you for every 'root' whether the whole tree can be uninstalled or pruned
2022-01-10 18:04:10 +0100 <mjrosenb> portage also has a GC built in, and recommends that you run it semi-frequently.
2022-01-10 18:04:27 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-10 18:04:29 +0100 <janus> i run deborphan typically after each OS version upgrade since you'll have libraries laying around that autoremove somehow didn't pick up on
2022-01-10 18:04:36 +0100k``(~user@152.1.137.158)
2022-01-10 18:05:46 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-01-10 18:06:52 +0100 <sclv> i think if cabal-install ever gets the proper gc feature that mirrors that in nix, tracking roots, etc, then it'll be fair to call it a package manager
2022-01-10 18:06:59 +0100 <sclv> until then its a build system, which is fine
2022-01-10 18:07:01 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-10 18:07:04 +0100 <sclv> that's what developers need :-P
2022-01-10 18:08:05 +0100 <k``> Is there a way to dispatch on whether there's an in-scope constraint? Like `case ifConstraint (Proxy (Show a)) of{ True -> show ; False -> \_-> "unshowable" }` ?
2022-01-10 18:08:13 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 18:08:56 +0100 <geekosaur> there are ways but they're ugly and not something you should rely upon
2022-01-10 18:09:00 +0100 <k``> or like `case maybeContext (Proxy (Show a)) of { Just Dict -> show ; Nothing -> "unshowable" }` ?
2022-01-10 18:10:17 +0100 <k``> That's a shame.
2022-01-10 18:10:57 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-01-10 18:11:38 +0100 <k``> I understand that you can't get proof that you don't have an instance globally, but it would be nice to determine whether there's one in scope
2022-01-10 18:11:55 +0100 <mjrosenb> would `class MaybeShow a where mshow :: Maybe (a -> String); instance Show a => MaybeShow where mshow = Just show; instance MaybeShow a where mshow = Nothing` work
2022-01-10 18:12:03 +0100 <mjrosenb> with some level of undecidable instances?
2022-01-10 18:12:23 +0100 <mjrosenb> like it would be perfectly reasonable for ghc to always choose the Nothing instance, but *shrug*
2022-01-10 18:12:32 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-01-10 18:12:40 +0100 <k``> mjrosenb: When I've tried to create instances like that, GHC has complained that they are not just overlapping but identical, and refused to allow them.
2022-01-10 18:12:49 +0100 <mjrosenb> hah.
2022-01-10 18:13:00 +0100 <k``> Which, fair enough.
2022-01-10 18:13:02 +0100 <geekosaur> right, constraints don't take part in instance selection
2022-01-10 18:13:10 +0100 <mjrosenb> makes sense, since they're both more or less global.
2022-01-10 18:14:17 +0100timCF(~timCF@m91-129-100-224.cust.tele2.ee) (Quit: leaving)
2022-01-10 18:16:46 +0100 <geekosaur> https://hackage.haskell.org/package/ifcxt
2022-01-10 18:17:09 +0100 <geekosaur> whether it works with recent ghc is a question, since this seems like it's skating on very thin ice
2022-01-10 18:17:28 +0100 <polyphem> do you have to Data.Typable.cast to a concrete type or can you cast to an constrained polymorphic type ?
2022-01-10 18:17:34 +0100 <k``> Yeah, from the one issue it seems abandoned.
2022-01-10 18:18:08 +0100 <geekosaur> I thought there was anothjer one but I can't find it :(
2022-01-10 18:18:50 +0100 <mjrosenb> https://i.imgur.com/9f8x6MF.mp4
2022-01-10 18:19:29 +0100 <geekosaur> polyphem, pretty sure Typeable only does concrete types
2022-01-10 18:19:50 +0100 <geekosaur> but these days it is based on something that can do indexed types, I think?
2022-01-10 18:20:16 +0100 <polyphem> latest ghc has support for impredicativity , does that change somthing
2022-01-10 18:20:51 +0100 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/libraries/base-4.16.0.0/Type-Reflection.html
2022-01-10 18:21:51 +0100 <geekosaur> no, impredicativity doesn't change anything, Typeable is just too simple to handle anything but concrete types. see the module I just pointed to for the indexed version, it might do what you want
2022-01-10 18:23:53 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 18:25:57 +0100little_mac(~little_ma@2601:410:4300:3ce0:90ce:993d:d223:5eab) (Remote host closed the connection)
2022-01-10 18:26:52 +0100little_mac(~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744)
2022-01-10 18:27:25 +0100pgib(~textual@173.38.117.74)
2022-01-10 18:29:57 +0100sander(~sander@user/sander) (Ping timeout: 240 seconds)
2022-01-10 18:31:22 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-10 18:32:15 +0100sander(~sander@user/sander)
2022-01-10 18:35:33 +0100husixu(~husixu@137.132.119.2)
2022-01-10 18:40:17 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it)
2022-01-10 18:42:31 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-01-10 18:44:56 +0100 <k``> It is possible to do something like `foo :: proxy c -> Maybe (Dict c) ; foo = Nothing ; {-# RULES "c" forall (p :: c => proxy c). foo p = Just Dict #-}` -- but as far as I can tell, the rule never fires...
2022-01-10 18:44:57 +0100xb0o2(~xb0o2@user/xb0o2) (Quit: Client closed)
2022-01-10 18:46:20 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-01-10 18:48:56 +0100 <[itchyjunk]> Are list comprehensions always a syntactic sugar for some other thing?
2022-01-10 18:49:31 +0100mbuf(~Shakthi@182.77.103.82) (Quit: Leaving)
2022-01-10 18:50:34 +0100 <geekosaur> yes
2022-01-10 18:50:36 +0100 <[exa]> [itchyjunk]: they can be translated to list monads and `guard` and AFAIK there's even extension to allow the same for anything that allows these two
2022-01-10 18:51:02 +0100 <tomsmeding> % :set -XMonadComprehensions
2022-01-10 18:51:02 +0100 <yahb> tomsmeding:
2022-01-10 18:51:07 +0100 <[itchyjunk]> ah
2022-01-10 18:51:09 +0100 <geekosaur> they also can be translated to map and filter, although I think modern ghc always uses the list (or other) monad
2022-01-10 18:51:40 +0100 <geekosaur> @undo [ f x | x <- xs, bar x ]
2022-01-10 18:51:40 +0100 <lambdabot> concatMap (\ x -> if bar x then [f x] else []) xs
2022-01-10 18:51:40 +0100 <tomsmeding> running `ghc -ddump-simpl` without optimisations on a file containing a list comprehension just gives me a plain-old recursive function
2022-01-10 18:52:11 +0100 <tomsmeding> so I guess you could say they just desugar to a normal recursive implementation?
2022-01-10 18:52:45 +0100 <[itchyjunk]> I think there is a very minor error here : https://wiki.haskell.org/List_comprehension
2022-01-10 18:52:49 +0100 <[itchyjunk]> "In the #haskell channel, or in a private message, say @undo and then your list comprehension, it will should you how it expands:"
2022-01-10 18:53:00 +0100 <[itchyjunk]> it will show you or it should show you, right?
2022-01-10 18:53:14 +0100 <geekosaur> I did that just above
2022-01-10 18:53:33 +0100 <tomsmeding> it will should be incorrect English indeed
2022-01-10 18:53:43 +0100_xor(~xor@dsl-50-5-233-169.fuse.net)
2022-01-10 18:53:43 +0100 <bjs> I recall from my old supervisor hearing of discussions early on about making comprehensions be generic over Monad
2022-01-10 18:53:45 +0100 <geekosaur> will show, I think
2022-01-10 18:54:01 +0100 <[itchyjunk]> so s/should/show/
2022-01-10 18:54:13 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-10 18:54:45 +0100 <tomsmeding> % [x | x <- Just 42, y <- Nothing]
2022-01-10 18:54:45 +0100 <yahb> tomsmeding: Nothing
2022-01-10 18:54:49 +0100 <tomsmeding> % [x | x <- Just 42]
2022-01-10 18:54:49 +0100 <yahb> tomsmeding: Just 42
2022-01-10 18:54:56 +0100 <[itchyjunk]> Needs verified account so some of you should fix it? :x
2022-01-10 18:56:13 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 18:56:14 +0100 <geekosaur> done
2022-01-10 18:56:26 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Ping timeout: 256 seconds)
2022-01-10 18:56:41 +0100 <[itchyjunk]> \o/
2022-01-10 18:59:27 +0100benin(~benin@183.82.176.241)
2022-01-10 19:00:25 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-10 19:00:37 +0100infinity0(~infinity0@occupy.ecodis.net) (Ping timeout: 240 seconds)
2022-01-10 19:00:42 +0100infinity0_(~infinity0@occupy.ecodis.net)
2022-01-10 19:00:45 +0100DNH(~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d)
2022-01-10 19:00:46 +0100infinity0_infinity0
2022-01-10 19:01:32 +0100raoul(~raoul@95.179.203.88) (Ping timeout: 240 seconds)
2022-01-10 19:02:22 +0100Jing(~hedgehog@240e:390:7c53:a7e1:ede2:45ee:21e7:7941) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-10 19:02:39 +0100max22-(~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-10 19:03:33 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2022-01-10 19:05:57 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2022-01-10 19:06:56 +0100mbuf(~Shakthi@182.77.103.82)
2022-01-10 19:08:14 +0100xff0x(~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51) (Ping timeout: 252 seconds)
2022-01-10 19:10:19 +0100 <[itchyjunk]> So it says some consider list comphrension unnecessary now because of "list monad" and it gives examples
2022-01-10 19:10:29 +0100 <[itchyjunk]> but what part of that code is the "list monad" ?
2022-01-10 19:10:46 +0100 <[itchyjunk]> Example : do c <- s return (toUpper c)
2022-01-10 19:10:50 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8)
2022-01-10 19:10:52 +0100 <[itchyjunk]> the whole thing is a monad?
2022-01-10 19:11:22 +0100 <[itchyjunk]> https://wiki.haskell.org/List_comprehension#List_monad
2022-01-10 19:11:26 +0100 <[itchyjunk]> first example there
2022-01-10 19:13:29 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-10 19:13:58 +0100 <polyphem> [] a is a monad ; the effect is nondeterminism;
2022-01-10 19:14:21 +0100 <[itchyjunk]> hmmmmm
2022-01-10 19:14:22 +0100vysn(~vysn@user/vysn)
2022-01-10 19:15:29 +0100 <polyphem> do c::Char <- s::[Char] ; return (toUpper c) == map toUpper s
2022-01-10 19:16:20 +0100 <polyphem> for each c in s do an operation on c and assamble a list of all transformed cs
2022-01-10 19:17:48 +0100 <polyphem> [c' | c <- s , let c' = toUpper c]
2022-01-10 19:18:16 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Read error: Connection reset by peer)
2022-01-10 19:19:48 +0100 <polyphem> you perform operations on a single element and the (nondeterminism effective) list monad gives you all possible solutions for all combinations
2022-01-10 19:21:21 +0100 <polyphem> > let go = do x <- [1..5] ; y <- [6..10] ; return (x,y) in go
2022-01-10 19:21:22 +0100 <lambdabot> [(1,6),(1,7),(1,8),(1,9),(1,10),(2,6),(2,7),(2,8),(2,9),(2,10),(3,6),(3,7),(...
2022-01-10 19:21:25 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-01-10 19:21:28 +0100johnw(~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) (Quit: ZNC - http://znc.in)
2022-01-10 19:21:29 +0100 <[itchyjunk]> So monads map one type to another type
2022-01-10 19:21:49 +0100 <[itchyjunk]> and whenever you do such things, you have to list all possible resulting types?
2022-01-10 19:22:07 +0100 <polyphem> you lift a type in a monad (context/effectfull computation)
2022-01-10 19:22:28 +0100zincy(~zincy@2a00:23c8:970c:4801:8d43:554e:d62c:915d)
2022-01-10 19:22:44 +0100 <polyphem> list monad -> nondeterminism ==> a "lifted to" [a]
2022-01-10 19:22:55 +0100 <[itchyjunk]> in that go example, we go from type Int to type (Int,Int) ?
2022-01-10 19:23:13 +0100 <polyphem> maybe monad -> failure ==> a "lifted to" Maybe a
2022-01-10 19:23:15 +0100 <polyphem> ...
2022-01-10 19:23:21 +0100 <k``> Int to [Int].
2022-01-10 19:23:36 +0100 <[itchyjunk]> ahh "lift", this is category theory lingo?
2022-01-10 19:23:47 +0100 <xerox> gym rat lingo
2022-01-10 19:23:48 +0100 <polyphem> go :: [(Int,Int)]
2022-01-10 19:23:51 +0100MajorBiscuit(~MajorBisc@c-001-032-008.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.3)
2022-01-10 19:24:05 +0100 <[itchyjunk]> Hmm, why is it Int to [Int] and not Int to [(Int,Int)] ?
2022-01-10 19:24:24 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-01-10 19:24:53 +0100 <polyphem> [itchyjunk]: map for example "lifts" a function a -> b to a context [a] -> [b]
2022-01-10 19:25:19 +0100 <polyphem> go ist just [(Int,Int)]
2022-01-10 19:25:29 +0100 <[itchyjunk]> oh i think i kinda understand that last example
2022-01-10 19:25:29 +0100 <polyphem> go doesnt take a parameter
2022-01-10 19:25:49 +0100 <[itchyjunk]> you have a `a -> b` but after application of map, we have a `[a] -> [b]`
2022-01-10 19:25:55 +0100 <[itchyjunk]> so map is some type of a monad
2022-01-10 19:26:10 +0100 <polyphem> fmap in general "lifts" a function a->b to a functorial context f like f a -> f b
2022-01-10 19:26:19 +0100 <EvanR> hey, [itchyjunk] have you heard of Functors
2022-01-10 19:26:35 +0100 <[itchyjunk]> I've heard of them but nothing more, they are maps between categories right?
2022-01-10 19:26:36 +0100 <polyphem> it transforms te function to work in a enriched setting
2022-01-10 19:26:38 +0100 <EvanR> like, list is a functor, Maybe is a functor
2022-01-10 19:26:53 +0100 <geekosaur> don't worry about categories for now
2022-01-10 19:28:02 +0100 <EvanR> probably better to sort out the ontological status of how a type (constructor) can be a Functor, before moving to monads
2022-01-10 19:28:35 +0100 <EvanR> for reasons
2022-01-10 19:28:54 +0100 <[itchyjunk]> Hmm, and to understand how type constructors can be Functors, i need to understand why there are categories in a programming language :s
2022-01-10 19:29:00 +0100 <EvanR> no not really
2022-01-10 19:29:05 +0100 <[itchyjunk]> I can imagine all the possible types forming a category
2022-01-10 19:29:07 +0100 <EvanR> in haskell Functor has a more limited scope
2022-01-10 19:29:13 +0100 <[itchyjunk]> oh i see
2022-01-10 19:29:26 +0100 <monochrom> I happen to be not convinced that you should care about the "list monad" part now.
2022-01-10 19:29:28 +0100 <polyphem> a haskell functor is a type that has a type variable, eg. [a] (List of a) and it exists a way to modifay the inner type via fmap , eg. for list: map toUpper ['h','i'] === "HI"
2022-01-10 19:29:28 +0100 <k``> I may be wrong about this, but I think when folks talk about 'lifting' they usually mean types. So when you apply `[]` to `Int` you get `[Int]` -- you've 'lifted' `Int` into `[]` (which is a Monad).
2022-01-10 19:29:49 +0100 <[itchyjunk]> lol haskell wiki defines it as
2022-01-10 19:29:50 +0100 <[itchyjunk]> "The Functor typeclass represents the mathematical functor: a mapping between categories in the context of category theory."
2022-01-10 19:30:00 +0100 <geekosaur> there is only one category here, so all Functors are endofunctors on that category. which is why I said don't worry about categories for now
2022-01-10 19:30:04 +0100 <EvanR> at the same time you lift your type using F, you lift functions with fmap
2022-01-10 19:30:05 +0100 <monochrom> And list comprehension is hear to stay. You are not learning an obsolete construct if you learn list comprehension.
2022-01-10 19:30:11 +0100 <monochrom> s/hear/here/
2022-01-10 19:30:12 +0100 <[itchyjunk]> geekosaur, ah okay
2022-01-10 19:30:27 +0100 <geekosaur> (the category is Hask, the category of Haskell types ignoring bottoms)
2022-01-10 19:30:40 +0100 <[itchyjunk]> well, i am looking at random list comprehension articles and they all bring up list monad :x
2022-01-10 19:30:40 +0100econo(uid147250@user/econo)
2022-01-10 19:30:54 +0100 <geekosaur> right, but Monad is just as limited as Functor is
2022-01-10 19:31:12 +0100 <monochrom> So this is the difference between educational material and everything else.
2022-01-10 19:31:23 +0100 <k``> #HaskIsn'tACategory
2022-01-10 19:31:23 +0100 <geekosaur> the concept is from CT, but you can ignore that for all practical purposes. it's just a convenient pattern
2022-01-10 19:31:25 +0100lavaman(~lavaman@98.38.249.169)
2022-01-10 19:31:31 +0100 <monochrom> Educational material does not sidetrack you.
2022-01-10 19:31:53 +0100 <monochrom> Encyclopedic material and blogs are all about sidetracking.
2022-01-10 19:32:04 +0100 <[itchyjunk]> lifting reminds me of yoenda theorem or somesuch that i can't remember anymore
2022-01-10 19:32:24 +0100 <EvanR> really? I barely understand, mainly don't understand yoneda xD
2022-01-10 19:32:48 +0100 <monochrom> Clearly, the web is full of the non-educational kind. The "clearly" can be seen once you consider the incentives for why people write and post on the Internet.
2022-01-10 19:32:50 +0100little_mac(~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744) (Remote host closed the connection)
2022-01-10 19:32:56 +0100 <[itchyjunk]> monochrom, oh so learning list comprehension is good. got it. the "some think its irrelevent and can be replaced" part made me question it all
2022-01-10 19:33:05 +0100 <[itchyjunk]> EvanR, well we had to learn that theorem in algebra
2022-01-10 19:33:21 +0100 <EvanR> dang... your algebra class beats mine
2022-01-10 19:33:22 +0100little_mac(~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744)
2022-01-10 19:34:06 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-10 19:34:21 +0100 <[itchyjunk]> I think you could figure out all mappings between rings by knowing some limited information or somesuch.. man i can't remember anything
2022-01-10 19:34:44 +0100little_mac(~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744) (Remote host closed the connection)
2022-01-10 19:34:45 +0100 <geekosaur> [itchyjunk], in the end I'd say list comprehensions are convenient, so there's no reason for them to go away
2022-01-10 19:34:55 +0100 <geekosaur> half of Haskell is such conveniences
2022-01-10 19:35:15 +0100 <EvanR> my score on advent of code would have been much worse without them
2022-01-10 19:35:16 +0100 <[itchyjunk]> true, the set builder notation is what made me think of haskell being cool at some point
2022-01-10 19:35:20 +0100 <shapr> has anyone used the morpheus graphql library with the github API?
2022-01-10 19:35:23 +0100 <geekosaur> you could write something very close to what ghc calls Core, it'd just be fairly annoying.
2022-01-10 19:35:34 +0100little_mac(~little_ma@2601:410:4300:3ce0:5835:5767:1aa7:b5ec)
2022-01-10 19:35:49 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-10 19:36:03 +0100 <[itchyjunk]> yeah i saw the syntax for core.. i should really learn to read the notation for simply typed lambda calculus. last time i tried, i failed
2022-01-10 19:36:16 +0100 <[itchyjunk]> https://aosabook.org/en/ghc.html#s:core
2022-01-10 19:36:28 +0100 <[itchyjunk]> looks like hieroglyph to me
2022-01-10 19:37:04 +0100 <geekosaur> it's not as bad as it seems, mostly it's all the compiler-generated symbols that make it look like Greek
2022-01-10 19:37:16 +0100mbuf(~Shakthi@182.77.103.82) (Quit: Leaving)
2022-01-10 19:37:16 +0100 <monochrom> I don't have data, but if you collected data, you would find that no production code actually uses the list monad way where list comprehension could be used.
2022-01-10 19:37:52 +0100 <monochrom> Perhaps I should go ahead and delete that false sentence on the haskell wiki.
2022-01-10 19:38:12 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-01-10 19:38:12 +0100 <geekosaur> go for it
2022-01-10 19:38:29 +0100 <k``> Core's prefix use of operators always gives me pause.
2022-01-10 19:38:45 +0100 <[itchyjunk]> well the statement says some people think that :P
2022-01-10 19:38:59 +0100 <[itchyjunk]> guess the "some people" is more rare than i though
2022-01-10 19:39:06 +0100 <monochrom> It probably was true like 20 years ago.
2022-01-10 19:39:29 +0100 <[itchyjunk]> Oh, the use of list comprehension grew rather than shrunk?
2022-01-10 19:39:34 +0100 <EvanR> back when IO was implemented as two sticks rubbing together
2022-01-10 19:39:36 +0100 <geekosaur> 20 years ago they thought Num was a good idea. they tought Monad not having Functor as a superclass was a good idea
2022-01-10 19:40:05 +0100 <monochrom> I can't say it grew. But it is the alternative that died.
2022-01-10 19:40:10 +0100 <k``> Firsh it shrunk, then it grew.
2022-01-10 19:40:16 +0100 <k``> *first
2022-01-10 19:41:21 +0100 <k``> Since we have MonadComprehensions again?
2022-01-10 19:41:44 +0100 <int-e> EvanR: [Reply] -> [Request] is rubbing two sticks together?
2022-01-10 19:41:49 +0100 <monochrom> I think people don't use MonadComprehension that much either.
2022-01-10 19:42:00 +0100 <EvanR> yeah
2022-01-10 19:42:14 +0100 <polyphem> syntax got even extended some years ago , not ?, by groupings and such
2022-01-10 19:42:48 +0100xff0x(~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51)
2022-01-10 19:42:55 +0100 <int-e> I don't even use the parallel list comprehension thing, much less the weird sql-like stuff.
2022-01-10 19:43:22 +0100 <int-e> and I merrily mix list comprehensions and do notation when working with list
2022-01-10 19:43:37 +0100pgib(~textual@173.38.117.74) (Ping timeout: 240 seconds)
2022-01-10 19:43:39 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-10 19:43:50 +0100 <int-e> (do notation looks nicer when it's several lines... oh and having the end result, you know, at the end, is a benefit too)
2022-01-10 19:44:52 +0100pgib(~textual@173.38.117.77)
2022-01-10 19:46:28 +0100 <polyphem> int-e: comprehensions have a rather declarative feel as contrasted bey do's imperative feel , not ?
2022-01-10 19:46:37 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-01-10 19:46:49 +0100jakalx(~jakalx@base.jakalx.net)
2022-01-10 19:46:52 +0100 <polyphem> *by*
2022-01-10 19:47:07 +0100 <int-e> polyphem: there is that, yeah
2022-01-10 19:47:24 +0100 <[itchyjunk]> I was told "imperative" language is when you tell a language what to do and so haskell is "declarative". now we have a literal "do" :D
2022-01-10 19:47:49 +0100xff0x(~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51) (Ping timeout: 240 seconds)
2022-01-10 19:48:03 +0100 <EvanR> we also have don't
2022-01-10 19:48:05 +0100motherfsck(~motherfsc@user/motherfsck) (Quit: quit)
2022-01-10 19:48:20 +0100 <EvanR> so that's about as anti-imperative as possible
2022-01-10 19:48:26 +0100motherfsck(~motherfsc@user/motherfsck)
2022-01-10 19:49:00 +0100xff0x(~xff0x@2001:1a81:5310:700:c5b4:7757:92cc:e34)
2022-01-10 19:49:06 +0100 <monochrom> Haskell is somewhat declarative but not very.
2022-01-10 19:49:19 +0100 <polyphem> haskell is the best imprative language thanks to do notation
2022-01-10 19:49:48 +0100 <EvanR> haskell should decline that award
2022-01-10 19:50:02 +0100 <polyphem> EvanR: hehe
2022-01-10 19:50:21 +0100 <int-e> Ah are we making bold declarations now?
2022-01-10 19:50:31 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 19:50:56 +0100 <monochrom> Declarative is when you just say "in this graph find a node that stores an odd number" and you don't even say whether it's BFS or DFS.
2022-01-10 19:51:52 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-10 19:51:53 +0100 <EvanR> sqrt x = the (\y -> y * y == x)
2022-01-10 19:52:00 +0100 <monochrom> Yeah, like that.
2022-01-10 19:52:29 +0100 <monochrom> To be fair, Haskell is a bit closer to that than most languages.
2022-01-10 19:52:42 +0100 <dolio> So you need to move to abstract stone duality.
2022-01-10 19:52:49 +0100 <[itchyjunk]> Oh, i thought declarative was when you say this is a graph and this has a node that stores an odd number
2022-01-10 19:52:54 +0100 <[itchyjunk]> Like you declare things to be so
2022-01-10 19:53:11 +0100 <ephemient> https://hackage.haskell.org/package/acme-dont
2022-01-10 19:53:35 +0100 <int-e> . o O ( PLEASE DONT MENTION INTERCAL )
2022-01-10 19:53:56 +0100 <polyphem> [itchyjunk]: a list comprehension declares what the list is , wheras in de list monad yout tell how to construct the list
2022-01-10 19:54:24 +0100 <[itchyjunk]> hmm
2022-01-10 19:56:05 +0100 <int-e> polyphem: but if it were properly declaritive, the order of the items (constraints) in the list comprehension wouldn't matter...
2022-01-10 19:56:09 +0100 <ephemient> https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/generalised_list_comprehensions.html are not trivial to translate into list monad. not sure how often that is used though
2022-01-10 19:56:37 +0100 <polyphem> [itchyjunk]: the <- in the do notation feels more like an := in imperative languages, the <- in list comprehension resembles ∈ from math notation
2022-01-10 19:57:04 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-10 19:57:13 +0100vicfred(~vicfred@user/vicfred)
2022-01-10 19:57:23 +0100 <[itchyjunk]> yes the ∈ is really nice for set builder
2022-01-10 19:57:25 +0100 <int-e> "declaritive" is a burned term anyway... hmm. "constraint programming" exists as an umbrella term, apparently?
2022-01-10 19:57:53 +0100 <[itchyjunk]> Tied to a chair while programming?
2022-01-10 19:58:13 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 240 seconds)
2022-01-10 19:58:13 +0100 <int-e> no, that would be restrained.
2022-01-10 19:58:13 +0100 <monochrom> you're thinking "constrained" :)
2022-01-10 19:58:20 +0100 <[itchyjunk]> ah
2022-01-10 19:59:03 +0100 <int-e> also bad for circulation
2022-01-10 19:59:10 +0100 <monochrom> Pleasing a static type system can also be described as "constrained".
2022-01-10 20:01:00 +0100 <k``> Please a dynamic type system can be described as "constrained and blindfolded".
2022-01-10 20:02:20 +0100 <polyphem> int-e: order matters because they are list comprehensions wich have a notion of order instead of unorderd sets
2022-01-10 20:02:56 +0100 <polyphem> int-e: but you are right they are not 100% declarative
2022-01-10 20:03:43 +0100xff0x(~xff0x@2001:1a81:5310:700:c5b4:7757:92cc:e34) (Ping timeout: 268 seconds)
2022-01-10 20:04:03 +0100 <polyphem> int-e: but they feel more declarative then the "do list monad"
2022-01-10 20:04:09 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-10 20:04:23 +0100xff0x(~xff0x@2001:1a81:5310:700:28af:ed1a:1e0a:acc)
2022-01-10 20:08:18 +0100jgeerds(~jgeerds@55d4bbed.access.ecotel.net)
2022-01-10 20:13:07 +0100 <k``> Wait, is there any point at which do notation and monad comprehension notation aren't equivalent?
2022-01-10 20:13:41 +0100 <dolio> Comprehensions have a built-in notation for `guard`.
2022-01-10 20:14:18 +0100 <geekosaur> the fancy version of comprehensions ephemient pointed out above don't translate well
2022-01-10 20:19:23 +0100 <monochrom> You can and need to go up to MonadPlus to match guards in list comprehension.
2022-01-10 20:21:20 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
2022-01-10 20:21:45 +0100 <glguy> It's a shame guards aren't translated to fail, instead
2022-01-10 20:22:20 +0100 <janus> how can comprehensions translate stuff to guard if they don't require Alternative?
2022-01-10 20:22:32 +0100 <monochrom> Hrm, maybe fail and MonadFail suffices.
2022-01-10 20:23:02 +0100 <geekosaur> should be, the [] translation is just fail
2022-01-10 20:23:25 +0100 <glguy> (\m -> [x | x <- m, x]) :: (Monad m, GHC.Base.Alternative m) => m Bool -> m Bool
2022-01-10 20:23:40 +0100 <monochrom> But MonadComprehension chose MonadPlus, yeah.
2022-01-10 20:23:49 +0100 <glguy> So at least on ghc 9.0.1, they switched to Alternative
2022-01-10 20:23:54 +0100 <monochrom> Some kind of overkill.
2022-01-10 20:24:45 +0100 <monochrom> I guess I am not innocent in this, I used to tell people "use MonadPlus's guard" too, perhaps that seeded this.
2022-01-10 20:24:58 +0100 <glguy> janus: both do-notation and monad comprehensions only require the constraints for things you actually use in the translation
2022-01-10 20:25:15 +0100 <glguy> do-notation doesn't even require Monad in the trivial case
2022-01-10 20:25:26 +0100 <glguy> :t \m -> do m
2022-01-10 20:25:27 +0100 <janus> right ok. and guard can only be used with MonadComprehensions surely
2022-01-10 20:25:27 +0100 <lambdabot> p -> p
2022-01-10 20:25:46 +0100 <glguy> (\m -> [x | x <- m]) :: Monad m => m b -> m b
2022-01-10 20:25:52 +0100 <janus> so if i don't use that (don't think i am convinced of its utility yet), guards only appear when written
2022-01-10 20:26:08 +0100 <mjrosenb> ahh, monad comprehension guards, not pattern guards. I was trying to figure out how pattern guards would translate to fail.
2022-01-10 20:26:09 +0100 <monochrom> Right.
2022-01-10 20:26:38 +0100 <glguy> (\m -> [x | Just x <- m]) :: MonadFail m => m (Maybe b) -> m b
2022-01-10 20:29:11 +0100 <glguy> we can recover the MonadFail translation with some extra mess <_< (\m -> [x | x <- m, True <- pure x]) :: MonadFail m => m Bool -> m Bool
2022-01-10 20:29:26 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: The Lounge - https://thelounge.chat)
2022-01-10 20:29:44 +0100 <janus> why does the monad comprehension users guide claim that 'guard' requires MonadPlus? https://downloads.haskell.org/ghc/8.10.7/docs/html/users_guide/glasgow_exts.html#monad-comprehensi…
2022-01-10 20:29:59 +0100 <janus> we just saw above that Alternative is sufficeint
2022-01-10 20:30:00 +0100 <glguy> janus: because it used ot
2022-01-10 20:30:06 +0100 <glguy> to*
2022-01-10 20:30:08 +0100 <janus> so the docs are just outdated?
2022-01-10 20:30:25 +0100 <glguy> Applicative and Alternative were late additions
2022-01-10 20:31:02 +0100 <janus> i am a late addition :O
2022-01-10 20:32:22 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-01-10 20:32:22 +0100 <monochrom> You are looking at the doc for 8.10.7.
2022-01-10 20:32:44 +0100 <monochrom> The doc for 8.10.7 is, clearly, not outdated wrt 8.10.7 itself.
2022-01-10 20:32:52 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 20:32:52 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 20:32:52 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 20:33:26 +0100 <janus> Alternative existed in 8.10's base. and even in ghc master this is the wording
2022-01-10 20:33:52 +0100 <monochrom> Oh oops the doc is outdated wrt the actual compiler.
2022-01-10 20:34:17 +0100 <janus> i dunno when exactly it could type as Alternative instead of MonadPlus or if it just looks at the signature of 'guard'. either way seems like a bug
2022-01-10 20:35:08 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-10 20:35:38 +0100 <monochrom> The type of guard also says Alternative.
2022-01-10 20:36:10 +0100 <monochrom> Oh well social constructs need social maintenance.
2022-01-10 20:36:44 +0100 <janus> seems like Alternative was added in base 4.4 (ghc 7.2.1, released in aug 2011)
2022-01-10 20:37:16 +0100 <EvanR> the coffee must be weak today because I can't figure out how the function passed to 2nd extend in the definition of extend for StoreT here takes 2 arguments... https://paste.tomsmeding.com/v6ZZeIid
2022-01-10 20:37:23 +0100 <janus> oh no, it is also in base 4.3 (ghc 7.0 from nov 2010)
2022-01-10 20:37:41 +0100 <EvanR> where the heck is s' coming from
2022-01-10 20:38:02 +0100 <EvanR> oh... b is a function type...
2022-01-10 20:38:03 +0100xb0o2(~xb0o2@user/xb0o2)
2022-01-10 20:38:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 20:38:35 +0100 <EvanR> 🦆
2022-01-10 20:38:55 +0100 <int-e> quack
2022-01-10 20:40:47 +0100 <janus> 'guard' was only changed to use the Alternative class in base 4.8 (ghc 7.10 from apr 2015)
2022-01-10 20:43:32 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-10 20:45:21 +0100 <janus> ok i made an issue it is ghc issue 20928
2022-01-10 20:46:26 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-10 20:49:17 +0100husixu(~husixu@137.132.119.2) (Remote host closed the connection)
2022-01-10 20:49:46 +0100d0ku(~d0ku@178.43.3.56.ipv4.supernova.orange.pl) (Ping timeout: 256 seconds)
2022-01-10 21:02:04 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 21:02:04 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 21:02:04 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 21:04:49 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-01-10 21:05:29 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 256 seconds)
2022-01-10 21:06:50 +0100juhp(~juhp@128.106.188.82)
2022-01-10 21:07:23 +0100matrox(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2022-01-10 21:08:29 +0100Tuplanolla(~Tuplanoll@91-159-69-16.elisa-laajakaista.fi)
2022-01-10 21:08:29 +0100aforemny(~aforemny@static.248.158.34.188.clients.your-server.de) (Quit: ZNC 1.8.2 - https://znc.in)
2022-01-10 21:10:17 +0100shapr(~user@2601:7c0:c202:5190:b29e:1cbf:e21f:c653) (Ping timeout: 240 seconds)
2022-01-10 21:10:29 +0100aforemny(~aforemny@static.248.158.34.188.clients.your-server.de)
2022-01-10 21:10:35 +0100raym(~raym@user/raym) (Ping timeout: 256 seconds)
2022-01-10 21:12:24 +0100deadmarshal(~deadmarsh@95.38.231.124)
2022-01-10 21:13:34 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-10 21:13:54 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 21:13:54 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 21:13:54 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 21:14:18 +0100 <maerwald> I'm trying to debug a program time execution with '+RTS -p -l-au', but the callstack depth is main -> somefunc and it stops after that
2022-01-10 21:16:49 +0100deadmarshal(~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds)
2022-01-10 21:17:32 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-10 21:18:22 +0100 <maerwald> I guess excessive inlining can do that?
2022-01-10 21:18:57 +0100vysn(~vysn@user/vysn)
2022-01-10 21:22:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-10 21:25:17 +0100 <byorgey> anyone aware of algorithms for solving sets inequalities over a free idempotent commutative monoid? i.e. imagine you have a bunch of constraints, where each constraint is of the form U1 \subseteq U2, and the U's are arbitrary finite unions of variables and constants
2022-01-10 21:26:17 +0100 <byorgey> so e.g. you might have x `union` C `union` D \subseteq y `union` z `union` F and so on. And you want to find some solution for the variables, ideally some kind of 'least' solution, identifying each variable with a set of constants
2022-01-10 21:26:47 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-01-10 21:26:52 +0100 <byorgey> I guess I can probably work it out but just thought I'd ask in case anyone has seen anything like this before.
2022-01-10 21:31:38 +0100 <EvanR> was that on day twenty-x of advent of code last month
2022-01-10 21:32:51 +0100 <monochrom> Allow me to transform and distort your problem.
2022-01-10 21:33:33 +0100Topsi(~Tobias@dyndsl-095-033-093-212.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-01-10 21:33:46 +0100 <monochrom> We can always reduce set theory to propositional logic, (x or C or D) implies (y or z or F).
2022-01-10 21:39:18 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-10 21:39:18 +0100gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2022-01-10 21:39:47 +0100 <monochrom> Then the resolution algorithm says, if you want to find a way to satisfy that, give me the negation instead, (x or C or D) and not (y or z or F). If the negation is doomed to be false, I will find a counterexample (therefore a solution to the unnegated sentence), or die trying.
2022-01-10 21:41:54 +0100 <monochrom> This plot may or may not work. But we'd never know if I didn't suggest it.
2022-01-10 21:42:51 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-10 21:43:23 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 21:44:43 +0100benin(~benin@183.82.176.241) (Quit: The Lounge - https://thelounge.chat)
2022-01-10 21:45:12 +0100 <byorgey> monochrom: oh, very good suggestion, thanks! The connection to propositional logic had not yet occurred to me.
2022-01-10 21:45:16 +0100gentauro(~gentauro@user/gentauro)
2022-01-10 21:45:46 +0100Guest72(~Guest72@82-132-214-147.dab.02.net)
2022-01-10 21:45:59 +0100 <byorgey> EvanR: no, this is something I think I'm going to need for implementing a certain type checker.
2022-01-10 21:47:25 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-01-10 21:47:55 +0100 <byorgey> monochrom: hmm, one problem is that just gives me T/F values for the variables, but I want values corresponding to sets of constants. e.g. one solution for this example would be x -> {}, y -> {C,D}, z -> {}
2022-01-10 21:48:08 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 256 seconds)
2022-01-10 21:49:09 +0100 <monochrom> Yeah, in truth, predicates are involved. A set S is a predicate \v -> is v in S?
2022-01-10 21:49:36 +0100 <monochrom> (x(v) or C(v) or D(v)) implies (y(v) or z(v) or F(v)).
2022-01-10 21:49:59 +0100 <monochrom> Fortunately, resolution is about that, too, finding a value for v.
2022-01-10 21:50:31 +0100 <EvanR> that kind of reminds me of clicking on a screen painted with monoids and wanting to know which one you clicked on
2022-01-10 21:51:20 +0100 <byorgey> EvanR: https://diagrams.github.io/blog/2015-04-30-GTK-coordinates.html ? =)
2022-01-10 21:52:05 +0100 <EvanR> that actually exists
2022-01-10 21:52:13 +0100 <monochrom> onoes
2022-01-10 21:53:56 +0100cemguresci(~cemguresc@2001:a61:11ff:a001:9a1b:dd7d:413d:f699)
2022-01-10 21:53:57 +0100 <byorgey> monochrom: hmm, interesting, I have not seen resolution in the context of second-order logic before.
2022-01-10 21:54:07 +0100cemgurescicemg
2022-01-10 21:59:48 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-10 22:00:47 +0100 <Guest72> A haskell set is a Hask of course
2022-01-10 22:02:01 +0100 <Guest72> You can't ask are you undecidable
2022-01-10 22:05:41 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 22:06:18 +0100Guest|58(~Guest|58@host-137-205-1-17.warwick.ac.uk)
2022-01-10 22:06:46 +0100Guest|58(~Guest|58@host-137-205-1-17.warwick.ac.uk) (Client Quit)
2022-01-10 22:07:45 +0100gdd(~gdd@129.199.146.230) (Ping timeout: 250 seconds)
2022-01-10 22:08:10 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2022-01-10 22:11:55 +0100gdd(~gdd@129.199.146.230)
2022-01-10 22:13:01 +0100lechner(~lechner@debian/lechner) (Ping timeout: 240 seconds)
2022-01-10 22:15:20 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 22:16:03 +0100acidjnk_new(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de)
2022-01-10 22:16:03 +0100acidjnk(~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de)
2022-01-10 22:16:34 +0100 <tomsmeding> monochrom: sounds like the problem was finding x,y,z, not v in your re-written version
2022-01-10 22:18:28 +0100 <int-e> Guest72: This is very off season, but would you write Huskell programs for Halloween?
2022-01-10 22:20:18 +0100 <Guest72> Sure
2022-01-10 22:21:00 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2022-01-10 22:25:42 +0100k``(~user@152.1.137.158) (Remote host closed the connection)
2022-01-10 22:29:30 +0100yauhsien(~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-10 22:31:42 +0100lechner(~lechner@debian/lechner)
2022-01-10 22:34:53 +0100michalz(~michalz@185.246.204.126) (Remote host closed the connection)
2022-01-10 22:35:15 +0100yauhsien(~yauhsien@61-231-29-214.dynamic-ip.hinet.net)
2022-01-10 22:40:40 +0100random-jellyfish(~random-je@user/random-jellyfish)
2022-01-10 22:41:09 +0100HashPCLoadLetter
2022-01-10 22:45:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-10 22:45:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-10 22:45:03 +0100wroathe(~wroathe@user/wroathe)
2022-01-10 22:46:13 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Ping timeout: 240 seconds)
2022-01-10 22:53:00 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-10 22:53:46 +0100ymirhotfoot(~ymirhotfo@user/ymirhotfoot)
2022-01-10 22:55:33 +0100 <random-jellyfish> can I ask questions related to the euterpea music library here?
2022-01-10 22:57:26 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-01-10 23:03:53 +0100 <monochrom> Yes but probably very few of us can answer.
2022-01-10 23:07:51 +0100 <random-jellyfish> ##MusicTheory is invite only for some reason
2022-01-10 23:07:58 +0100 <random-jellyfish> would've been a better channel
2022-01-10 23:08:24 +0100 <glguy> no, it's not invite only
2022-01-10 23:08:53 +0100 <glguy> but it is *empty* so not much better
2022-01-10 23:09:20 +0100 <random-jellyfish> I was automatically banned from it when I joined: × ChanServ kicked you from ##MusicTheory (You are not authorized to be on this channel)
2022-01-10 23:09:25 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-01-10 23:10:06 +0100 <random-jellyfish> anyway
2022-01-10 23:10:09 +0100 <glguy> ah, I guess the founders decided to close it
2022-01-10 23:10:15 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-10 23:10:19 +0100 <random-jellyfish> [11:56:59 PM] <random-jellyfish> I have the following rhythm: qn qn den den qn en qn den den en
2022-01-10 23:10:19 +0100 <random-jellyfish> [11:57:32 PM] <random-jellyfish> where qn=quarter note, en=eight note, den=dotted eighth note
2022-01-10 23:10:20 +0100 <random-jellyfish> [11:57:42 PM] <random-jellyfish> what's the time signature for it?
2022-01-10 23:10:37 +0100Inst(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 240 seconds)
2022-01-10 23:11:26 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-01-10 23:11:41 +0100 <polyphem> is it 11/4 ?
2022-01-10 23:12:37 +0100 <monochrom> Damn those prime-numbered time signatures like 5/4, 7/4, 11/4, 13/8...
2022-01-10 23:13:10 +0100 <monochrom> Tchaikovsky and/or Mahler had some 5/4 sheninigans...
2022-01-10 23:13:51 +0100 <polyphem> 16/8 or 8/4
2022-01-10 23:14:30 +0100 <random-jellyfish> yeah the fractions add up to 2/1
2022-01-10 23:14:32 +0100zincy(~zincy@2a00:23c8:970c:4801:8d43:554e:d62c:915d) (Remote host closed the connection)
2022-01-10 23:15:06 +0100 <random-jellyfish> so it's probably 16/8 or 8/4
2022-01-10 23:15:24 +0100infinity0(~infinity0@occupy.ecodis.net) (Ping timeout: 256 seconds)
2022-01-10 23:16:04 +0100infinity0(~infinity0@occupy.ecodis.net)
2022-01-10 23:16:32 +0100 <polyphem> or 4/4 with "borrowed time"
2022-01-10 23:17:01 +0100burnsidesLlama(~burnsides@dhcp168-013.wadham.ox.ac.uk)
2022-01-10 23:17:09 +0100 <polyphem> two bars of 4/4
2022-01-10 23:17:42 +0100 <hpc> i like my time signatures with a positive weyl curvature
2022-01-10 23:18:59 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-10 23:20:43 +0100 <random-jellyfish> "borrowed time"? is that an actual concept in music?
2022-01-10 23:21:28 +0100 <random-jellyfish> you can't make a "clean" 4/4 bar with those notes in that order
2022-01-10 23:21:44 +0100PCLoadLetterHash
2022-01-10 23:22:15 +0100 <Clint> pick-up notes are an actual concept in music
2022-01-10 23:22:39 +0100 <polyphem> random-jellyfish: https://www.youtube.com/watch?v=kCQfekVrSAA
2022-01-10 23:23:54 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-10 23:26:25 +0100 <random-jellyfish> thanks!
2022-01-10 23:26:50 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-10 23:28:00 +0100ymirhotfoot(~ymirhotfo@user/ymirhotfoot) (Quit: Client closed)
2022-01-10 23:31:02 +0100 <EvanR> in Data.Category you have this class called Category for types of kind * -> * -> *. Say you have some type ctor f which is a Category. Exactly what "category theory category" is this referring to
2022-01-10 23:31:49 +0100 <EvanR> er, Control.Category
2022-01-10 23:32:16 +0100 <EvanR> is f literally some category, or what
2022-01-10 23:32:25 +0100 <dolio> It's a category whose objects are types, and whose arrows are given by the instance.
2022-01-10 23:33:03 +0100lavaman(~lavaman@98.38.249.169)
2022-01-10 23:33:32 +0100 <awpr> IIRC it's poly-kinded, so actually the instance head is `cat :: k -> k -> Type`. then, for a given instance, the objects are the "types" of kind `k`, and the morphisms from `a :: k` to `b :: k` are the values of type `cat a b`
2022-01-10 23:34:10 +0100 <awpr> and the `Category` instance methods provide the identity morphisms and composition
2022-01-10 23:35:47 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-10 23:36:00 +0100Akiva(~Akiva@user/Akiva)
2022-01-10 23:36:29 +0100 <EvanR> oh that makes sense now
2022-01-10 23:37:01 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-01-10 23:37:30 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-10 23:37:31 +0100 <EvanR> while fmap lifts a function from a to b to f a to f b, (.) does combining of morphisms directly
2022-01-10 23:38:23 +0100 <EvanR> and the category objects are really determined by k
2022-01-10 23:39:30 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-10 23:40:06 +0100 <EvanR> so f is like the arrow, and we don't have a name for the category itself
2022-01-10 23:44:58 +0100ubert1(~Thunderbi@p200300ecdf0994f8385203c98e392e3c.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2022-01-10 23:46:31 +0100 <Raito_Bezarius> I'm trying to do simple i18n with Hakyll, so I tried to use Shakespeare, but I'm unsure how to understand https://hackage.haskell.org/package/shakespeare-2.0.25.1/docs/Text-Shakespeare-I18N.html#mkMessage function which seems to create instances
2022-01-10 23:46:42 +0100 <Raito_Bezarius> can I call it at the top level of my application to generate my instances or does it need to be scoped?
2022-01-10 23:47:04 +0100 <Raito_Bezarius> the Q [Dec] seems to be related to QuasiQuoter stuff, do I need to enable QuasiQuoter in my file?
2022-01-10 23:48:06 +0100 <Raito_Bezarius> and if someone have better suggestions to get type-based translations with a gettext-style, without getting onboard Yesod or other framework, that would be awesome :)
2022-01-10 23:50:20 +0100raoul(~raoul@95.179.203.88)
2022-01-10 23:55:17 +0100 <Raito_Bezarius> ha, it seems like it is required to put under some instance Yesod App where ...
2022-01-10 23:56:36 +0100raoul(~raoul@95.179.203.88) (Quit: The Lounge - https://thelounge.chat)
2022-01-10 23:57:13 +0100raoul(~raoul@95.179.203.88)
2022-01-10 23:57:29 +0100 <glguy> Raito_Bezarius: I don't know much about Hakyll, but if you're looking at Q [Dec] stuff, the search term is TemplateHaskell. QuasiQuoters are related to but not this
2022-01-10 23:57:42 +0100 <Raito_Bezarius> Alright, thanks glguy !
2022-01-10 23:58:12 +0100xb0o2(~xb0o2@user/xb0o2) (Quit: Client closed)
2022-01-10 23:59:21 +0100 <glguy> Raito_Bezarius: but if mkMessage generates instances, then it would need to be at the top-level of your module
2022-01-10 23:59:49 +0100 <glguy> and mkMessage does appear to generate data type declarations and instance declarations, so top-level