2021/03/21

2021-03-21 00:01:18 +0100 <ski> the next line
2021-03-21 00:04:56 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 240 seconds)
2021-03-21 00:06:17 +0100 <monochrom> As usual, my theory of () vs $ is of enjoying algebraic formulas vs resenting (even dissenting) algebraic formulas.
2021-03-21 00:06:52 +0100andreas31(~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
2021-03-21 00:07:32 +0100Tario(~Tario@37.218.244.251)
2021-03-21 00:07:33 +0100andreas31(~andreas@gateway/tor-sasl/andreas303)
2021-03-21 00:09:29 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 00:09:57 +0100 <mniip> locality, eye travel distance, edit distance
2021-03-21 00:10:50 +0100 <monochrom> You will find that, even in the imperative programming world, even 60 years after Fortran, there are still programmers who insist that "tmp1 = x+y; tmp2 = a-b; z = tmp1 * tmp2" is more readable [sic] than "z = (x+y)*(a-b)". Or bigger versions of that.
2021-03-21 00:11:21 +0100 <mniip> that's let k = g x in f x k
2021-03-21 00:11:27 +0100 <mniip> not f x (g x) versus f x $ g x
2021-03-21 00:12:19 +0100codygman`(~user@47.186.207.161)
2021-03-21 00:12:28 +0100 <mniip> if your x,y,a,b have a bunch of parentheses in them as well, such that you cannot fast-seek over them to discover the top level structure of (_ + _) * (_ - _)
2021-03-21 00:12:30 +0100 <mniip> then that's your problem
2021-03-21 00:14:17 +0100myShoggoth(~myShoggot@75.164.81.55)
2021-03-21 00:17:29 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 00:19:26 +0100Tario(~Tario@37.218.244.251) (Read error: Connection reset by peer)
2021-03-21 00:20:00 +0100Tario(~Tario@201.192.165.173)
2021-03-21 00:20:48 +0100frozenErebus(~frozenEre@94.129.70.18) (Ping timeout: 256 seconds)
2021-03-21 00:21:26 +0100 <__minoru__shirae> so "foo x $ bar baz <|> quux" translates to "foo x (bar baz <|> quux)" instead of "(foo x (bar baz)) <|> quux", right?
2021-03-21 00:21:46 +0100 <__minoru__shirae> I see "infixl 3" in front of <|> in documentation
2021-03-21 00:22:06 +0100 <__minoru__shirae> how to read that?
2021-03-21 00:22:15 +0100chenshen(~chenshen@2620:10d:c090:400::5:d9c5) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 00:22:28 +0100 <__minoru__shirae> it is left-associative and has precedence of 3
2021-03-21 00:23:04 +0100Ishutin(~ishutin@84-236-21-59.pool.digikabel.hu)
2021-03-21 00:24:25 +0100cartwright(~chatting@gateway/tor-sasl/cantstanya) (Remote host closed the connection)
2021-03-21 00:24:37 +0100 <ski> yes
2021-03-21 00:25:34 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 00:25:53 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 00:26:40 +0100 <mniip> high precedence means it binds tighter
2021-03-21 00:26:45 +0100cartwright(~chatting@gateway/tor-sasl/cantstanya)
2021-03-21 00:27:02 +0100 <mniip> juxtaposition (function application) has precedence of 10
2021-03-21 00:28:22 +0100 <__minoru__shirae> ok, I see that $ operator's precedence is 0 and it means that it binds less tightly
2021-03-21 00:29:03 +0100 <__minoru__shirae> I found a weird page while looking for that information
2021-03-21 00:29:09 +0100 <__minoru__shirae> look at this: http://amityskills.com/dr-oetker-dlum/haskell-operator-precedence-36cf63
2021-03-21 00:29:22 +0100 <__minoru__shirae> some garbage text
2021-03-21 00:29:33 +0100 <mniip> looks like SEO
2021-03-21 00:31:34 +0100 <mniip> shower thought: what is instead of syntax that forces tighter binding (parentheses) we had syntax that forces less tight binding
2021-03-21 00:31:38 +0100 <mniip> what if*
2021-03-21 00:32:53 +0100 <__minoru__shirae> like, starting a new line with an operator decreases its precendence
2021-03-21 00:33:15 +0100 <mniip> I was thinking say `+` is + whose precedence has been reduced by 10
2021-03-21 00:33:18 +0100 <mniip> ``+`` so on
2021-03-21 00:33:20 +0100 <bbhoss> is it possible to pattern match against something using an existing assignment? any special operator or will it just work?
2021-03-21 00:33:36 +0100 <mniip> bbhoss, you mean like f x x = ... ?
2021-03-21 00:33:43 +0100 <mniip> then no
2021-03-21 00:33:48 +0100 <ski> bbhoss : only if it's a data constructor (or pattern synonym)
2021-03-21 00:33:58 +0100 <e> mniip: why not just have [f x] can't be f x, [x + 1] can't be x + 1, etc
2021-03-21 00:34:08 +0100RandomArcher(~isho@90.153.235.252) (Ping timeout: 240 seconds)
2021-03-21 00:34:09 +0100 <ski> for non-linear patterns like what mniip showed, you need `f x0 x1 | x0 == x1 = ...'
2021-03-21 00:34:24 +0100myShoggoth(~myShoggot@75.164.81.55) (Ping timeout: 256 seconds)
2021-03-21 00:34:26 +0100 <bbhoss> in this case I'd like to match on an argument value inside of a case
2021-03-21 00:34:33 +0100 <mniip> e, what do you mean
2021-03-21 00:34:51 +0100 <e> mniip: so [a b] c would be a (b c) since you've forbidden (a b) c
2021-03-21 00:35:01 +0100 <ski> similarly, if `x' is already bound, and you want `f x = ...' to only match on that value of `x', rather than binding a new `x' (shadowing the old one), you need `f y | x == y = ...'
2021-03-21 00:35:18 +0100 <ski> bbhoss ^
2021-03-21 00:35:23 +0100 <mniip> I... don't have an intuitive way of reading that
2021-03-21 00:35:42 +0100 <e> it's a completely ridiculous idea
2021-03-21 00:35:51 +0100 <mniip> I wanted mine to not be
2021-03-21 00:36:05 +0100 <e> maybe there's a non-ridiculous interpretation, that's just what it made me think of
2021-03-21 00:36:13 +0100 <e> instead of specifying the grouping you want, specify the groupings you don't want
2021-03-21 00:36:28 +0100 <ski> (in Erlang (borrowing this from Prolog), mentioning an already bound variable `X' in a pattern would match on its current value. and in Oz, there's a syntax to achieve this, too)
2021-03-21 00:36:53 +0100 <mniip> e, when flattening a tree into a list, I think there's too many trees in the fiber for your idea to work
2021-03-21 00:37:14 +0100chenshen(~chenshen@2620:10d:c090:400::5:d9c5)
2021-03-21 00:37:42 +0100 <e> you might need to be able to specify multiple overlapping disallowed groupings
2021-03-21 00:37:44 +0100 <ski> bbhoss : anyway, you can use guards inside of `case'-`of', as well
2021-03-21 00:37:52 +0100 <mniip> anyway I'm talking about like
2021-03-21 00:37:53 +0100hackagehiggledy 0.4.1.1 - Partial types as a type constructor. https://hackage.haskell.org/package/higgledy-0.4.1.1 (i_am_tom)
2021-03-21 00:38:31 +0100 <mniip> a / b `/` c ``/`` d, a / b `/` c / d, a ``/`` b `/` c / d
2021-03-21 00:38:34 +0100chenshen(~chenshen@2620:10d:c090:400::5:d9c5) (Client Quit)
2021-03-21 00:38:36 +0100 <monochrom> There are too many groups I don't want, and only one grouping I want.
2021-03-21 00:39:09 +0100 <ski> i wonder if there's any implemented language that adopts the dot convention, from e.g. early papers by Peano, et al.
2021-03-21 00:39:12 +0100 <mniip> it's like reverse parenthesizing
2021-03-21 00:39:36 +0100 <monochrom> Moreoever, in practice, if you spend 10 pages to rule out what you don't want instead of one sentence saying what you want, your reader would be rightful in thinking that you're trolling.
2021-03-21 00:39:43 +0100 <mniip> ski, which dot?
2021-03-21 00:40:11 +0100 <ski> a + b .*: c - d ./ e
2021-03-21 00:40:13 +0100 <ski> meaning
2021-03-21 00:40:24 +0100 <ski> (a + b) * ((c - d) / e)
2021-03-21 00:40:30 +0100 <mniip> oh
2021-03-21 00:40:33 +0100 <mniip> I remember that
2021-03-21 00:40:38 +0100 <olligobber> wtf is that
2021-03-21 00:40:52 +0100 <ski> olligobber : notation from before there were any (machine) computers
2021-03-21 00:40:56 +0100 <__minoru__shirae> monochrom: I heard some word and forgot it, it means describing god by saying what it's not (and what it's not like). like a "negative description" or something
2021-03-21 00:41:06 +0100 <mniip> basically instead of having fixed precedences for operators, you say
2021-03-21 00:41:33 +0100 <mniip> if you encouter <n dots> operator <m dots>, then the LHS is parsed at precedence n, and the RHS at precedence m
2021-03-21 00:42:08 +0100 <e> ((a / b) / c) / d == a / [b / [c / d]]; (a / b) / (c / d) == a / [b / c] / d; a / (b / (c / d)) == [[a / b] / c] / d
2021-03-21 00:42:13 +0100 <ski> (in practice, it was even a bit more involved, since they also used a bare `.' for multiplication/conjunction)
2021-03-21 00:42:16 +0100 <e> maybe it doesn't work on longer expressions
2021-03-21 00:42:26 +0100 <mniip> controversial but
2021-03-21 00:42:29 +0100 <mniip> I like that dot notation
2021-03-21 00:43:26 +0100 <ski> olligobber : it's used in some early papers on logic
2021-03-21 00:44:15 +0100 <monochrom> I independently invented that dot notation many years ago when replying on haskell-cafe a beginner's flawed wish "how to get rid of parentheses".
2021-03-21 00:44:37 +0100 <mniip> I feel like I've just invented it here above
2021-03-21 00:44:45 +0100 <monochrom> And if I were not so lazy, I would have made a package of it on hackage on an April 1, too.
2021-03-21 00:44:49 +0100 <mniip> except my operators always have the same number of dots on the left and right
2021-03-21 00:44:58 +0100 <monochrom> Yeah me too.
2021-03-21 00:45:09 +0100 <e> it's not too late to change that
2021-03-21 00:45:21 +0100 <mniip> GHC only has 10 precedences
2021-03-21 00:45:23 +0100 <mniip> :(
2021-03-21 00:45:24 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 00:45:27 +0100 <monochrom> But I really have better things to do.
2021-03-21 00:45:47 +0100 <mniip> you don't prepare for april fools for years in advance?
2021-03-21 00:45:50 +0100 <ski> absolute precedence levels is the wrong thing anyway, i think
2021-03-21 00:46:27 +0100 <ski> Prolog has 1200 (or maybe it's 1201 ?) precedence levels
2021-03-21 00:46:45 +0100 <mniip> ski, are you suggesting precedence levels settled by inequality constraints?
2021-03-21 00:46:59 +0100 <__minoru__shirae> why not just use fractions for precedence levels instead of 1200 levels
2021-03-21 00:47:12 +0100 <mniip> with A ? B ! C declined as ambiguous if ? and ! aren't (transitively) related
2021-03-21 00:47:13 +0100 <e> mniip: i mean that's how languages with BNF operator definitions do it (effectively)
2021-03-21 00:47:38 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2021-03-21 00:47:42 +0100 <ski> mniip : i think, there should probably be a way of specifying abstractly named groups / precedence levels, and to specify individual operators as belonging to such a group
2021-03-21 00:47:45 +0100 <mniip> BNF operator definitions means you have a baked in fixed number of operators
2021-03-21 00:47:52 +0100 <ski> mniip : yea, something like that
2021-03-21 00:48:16 +0100 <e> mniip: not if you allow code to change the BNF at parse time
2021-03-21 00:48:32 +0100 <ski> (semirelatedly, i've toyed a little bit with what would happen if we give up transitivity)
2021-03-21 00:48:51 +0100slack1256(~slack1256@dvc-186-186-101-190.movil.vtr.net)
2021-03-21 00:49:04 +0100 <mniip> you mean explicit productions for going between expr_i and expr_j?
2021-03-21 00:49:44 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
2021-03-21 00:49:58 +0100 <glguy> I'd like to be able to have a collection of disjoint precedences rather than all operations having to share some common numbering
2021-03-21 00:50:00 +0100 <ski> it seems to me that if `a op0 b op1 c op2 d' parses as `a op0 (b op1 (c op2 d))', then it's reasonable to expect `a op0 bc op2 d' to parse as `a op0 (bc op2 d)' (assuming `a',`b',`bc',`c',`d' are all atomic, say)
2021-03-21 00:50:01 +0100MarcelineVQ(~anja@198.254.208.159)
2021-03-21 00:50:07 +0100 <e> mniip: yeah
2021-03-21 00:50:38 +0100codygman`(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 00:50:50 +0100 <ski> mniip : in a sense, brackets are already a (blessed) way of putting transitivity aside
2021-03-21 00:51:02 +0100codygman`(~user@47.186.207.161)
2021-03-21 00:51:03 +0100 <mniip> brackets are the reverse kind of
2021-03-21 00:51:11 +0100 <mniip> it's like you're in a derived category
2021-03-21 00:51:31 +0100 <ski> glguy : yes, please
2021-03-21 00:51:51 +0100 <glguy> How far back to I have to read to see the original idea/question? :)
2021-03-21 00:51:58 +0100 <e> what happens when you mix disconnect precedence levels?
2021-03-21 00:52:13 +0100 <mniip> glguy, my issue is that parentheses are circumfix notation and require a lot of eye travel and edit distance
2021-03-21 00:52:27 +0100 <glguy> mniip, if things get hard to read you name things
2021-03-21 00:52:38 +0100 <mniip> cope
2021-03-21 00:52:38 +0100 <e> names are for the weak
2021-03-21 00:53:10 +0100 <glguy> e, you use parentheses to be explicit when the implicitness of precedences isn't available due to them being disjoint for any particular pair of operators
2021-03-21 00:53:17 +0100 <monochrom> Time to admit that serialized linear stream of ASCII bytes fails to preserve even the static, lexical structure of a program.
2021-03-21 00:53:41 +0100 <e> so far everything else does it worse
2021-03-21 00:53:52 +0100 <mniip> formal systems weren't supposed to be based on lists of symbols
2021-03-21 00:53:56 +0100 <mniip> they're trees!
2021-03-21 00:54:11 +0100 <glguy> e, like I'd prefer that bit-wise and arithemtic operators were simply incomparable and you had to use parentheses to mix them, or name stuff
2021-03-21 00:54:13 +0100 <mniip> but mathematicians are too fixated on natural numbers to see other, equally valid inductive constructions
2021-03-21 00:54:36 +0100 <mniip> glguy, also disconnect arithmetic and control flow operators
2021-03-21 00:54:49 +0100 <glguy> && being a control-flow operator?
2021-03-21 00:54:55 +0100 <mniip> I was thinking >>=
2021-03-21 00:54:57 +0100 <monochrom> True that. Mathematicians haven't even caught up to serialized linear stream of ASCII bytes.
2021-03-21 00:54:58 +0100 <glguy> ah, yeah, that too
2021-03-21 00:55:01 +0100ski. o O ( "Precedences in Specifications and Implementations of Programming Languages" by Annika Aasa in 1991,1995 at <https://web.archive.org/web/20070701130745/http://www.cs.chalmers.se/~annika/plilp91.ps>,<https://web.archive.org/web/20070701130745/http://www.cs.chalmers.se/~annika/tcs95.ps> ; <https://web.archive.org/web/20070701130745/http://www.cs.chalmers.se/~annika/> )
2021-03-21 00:55:24 +0100 <mniip> monochrom, I mean there's Sigma^*
2021-03-21 00:55:35 +0100 <mniip> the set of words in alphabet Sigma
2021-03-21 00:55:46 +0100 <monochrom> I love it when Scott Aaronson made a joke about Gödel numbering.
2021-03-21 00:56:02 +0100 <mniip> somehow mathematically it makes more sense to consider it as a fibration over lengths
2021-03-21 00:56:09 +0100 <mniip> rather than the (obvious) inductive list
2021-03-21 00:56:23 +0100 <mniip> and with inductive lists you're one degree away from inductive trees
2021-03-21 00:57:15 +0100quinn(~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
2021-03-21 00:57:47 +0100 <monochrom> Not exact wording but: "I have a math friend who was learning programming and needed to use an array. He hadn't learned that arrays were already provided. So he invented arrays himself: represent <a, b, c> by 2^a 3^b 5^c."
2021-03-21 00:58:10 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 00:58:30 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 00:58:34 +0100 <slack1256> Nice
2021-03-21 00:58:42 +0100 <monochrom> (In the book Quantum Computing Since Democritus)
2021-03-21 00:58:49 +0100 <ski> should have used diagonals
2021-03-21 00:59:06 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.1)
2021-03-21 01:00:26 +0100 <monochrom> It's full of fun. When discussing free will: "My brain makes me say that I believe in free will. What choice do I have?"
2021-03-21 01:02:43 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
2021-03-21 01:03:15 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds)
2021-03-21 01:03:18 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: Textual IRC Client: www.textualapp.com)
2021-03-21 01:03:35 +0100 <ski> hehe :)
2021-03-21 01:03:53 +0100dunj3(~dunj3@2001:16b8:3058:3200:341d:cba6:b01f:d85d) (Quit: Leaving)
2021-03-21 01:05:00 +0100matryoshka`(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-03-21 01:05:04 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
2021-03-21 01:06:48 +0100codygman`(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 01:07:30 +0100codygman`(~user@47.186.207.161)
2021-03-21 01:07:59 +0100mouseghost(~draco@wikipedia/desperek) (Quit: mew wew)
2021-03-21 01:08:16 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2021-03-21 01:08:34 +0100 <__minoru__shirae> maybe it's like an infinite list ...a,b,a,b...
2021-03-21 01:09:01 +0100 <__minoru__shirae> where a translates to "I made my brain to ..."
2021-03-21 01:09:08 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-03-21 01:09:14 +0100 <__minoru__shirae> and b translates to "my brain made me ..."
2021-03-21 01:09:26 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
2021-03-21 01:10:10 +0100 <__minoru__shirae> so you have something like "I made my brain to make me say that I believe in free will"
2021-03-21 01:11:17 +0100 <__minoru__shirae> and if you go deeper you have "my brain made make my brain to make me say ..."
2021-03-21 01:11:38 +0100ski. o O ( "Zhuangzi, butterfly and referential transparency" by Maria Kovalyova,Roman Cheplyaka in 2010-05-15 at <https://ro-che.info/ccc/9> )
2021-03-21 01:11:46 +0100 <monochrom> Yeah, that. :)
2021-03-21 01:12:22 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 01:12:46 +0100ski. o O ( <https://en.wikipedia.org/wiki/Rectification_of_names> )
2021-03-21 01:12:55 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net)
2021-03-21 01:16:34 +0100chenshen(~chenshen@2620:10d:c090:400::5:d9c5)
2021-03-21 01:16:54 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 246 seconds)
2021-03-21 01:17:44 +0100chenshen(~chenshen@2620:10d:c090:400::5:d9c5) (Client Quit)
2021-03-21 01:18:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 01:19:25 +0100 <slack1256> https://ro-che.info/ccc/21 haha
2021-03-21 01:22:59 +0100 <monochrom> heh
2021-03-21 01:25:12 +0100cabpa(~cabpa@180.190.168.108)
2021-03-21 01:25:34 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 01:25:53 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 01:26:05 +0100 <__minoru__shirae> ski: how is "rectification of names" related to the subject of infinite lists of propositions?
2021-03-21 01:26:26 +0100aarvar(~foewfoiew@2601:602:a080:fa0:114e:cbb2:413:961f) (Ping timeout: 264 seconds)
2021-03-21 01:27:57 +0100 <ski> only very indirectly
2021-03-21 01:28:11 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection)
2021-03-21 01:28:33 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2021-03-21 01:29:56 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 01:32:18 +0100conal(~conal@64.71.133.70)
2021-03-21 01:33:47 +0100niHiggim(~niHiggim@99-140-243-194.lightspeed.rlghnc.sbcglobal.net)
2021-03-21 01:34:45 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
2021-03-21 01:36:09 +0100niHiggim(~niHiggim@99-140-243-194.lightspeed.rlghnc.sbcglobal.net) (Remote host closed the connection)
2021-03-21 01:36:51 +0100cyberlard(~cyberlard@unaffiliated/jludwig) (Ping timeout: 246 seconds)
2021-03-21 01:37:26 +0100cyberlard(~cyberlard@unaffiliated/jludwig)
2021-03-21 01:38:07 +0100acidjnk_new(~acidjnk@p200300d0c72b959874ac6c8157d63e67.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-03-21 01:40:26 +0100aarvar(~foewfoiew@2601:602:a080:fa0:75fb:cea1:4d26:9157)
2021-03-21 01:43:00 +0100 <__minoru__shirae> ski: what is this indirect relation? idk, sounds like it has nothing to do with the subject of free will or infinite lists.
2021-03-21 01:45:17 +0100W3BV1P3R(~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net)
2021-03-21 01:48:23 +0100twk-(~thewormki@unaffiliated/twk-) (Ping timeout: 272 seconds)
2021-03-21 01:48:38 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2021-03-21 01:52:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-03-21 01:54:17 +0100W3BV1P3R(~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net) (Quit: Igloo IRC: https://iglooirc.com)
2021-03-21 01:54:51 +0100 <ski> __minoru__shirae : being related to chinese culture. also being (slightly) related to earlier topics of length of identifiers, and of clearing up terminological and conceptual confusion
2021-03-21 01:54:57 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 01:57:15 +0100ezrakilty(~ezrakilty@97-113-58-224.tukw.qwest.net) (Remote host closed the connection)
2021-03-21 01:59:44 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-03-21 02:01:00 +0100dhil(~dhil@80.208.56.181) (Ping timeout: 246 seconds)
2021-03-21 02:01:22 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 02:01:26 +0100twk-(~thewormki@unaffiliated/twk-)
2021-03-21 02:03:13 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2021-03-21 02:09:20 +0100 <hololeap> i'm thinking about an API written in haskell, which would be the backend for a collaborative to-do list, accessed through a browser. when an item is in the process of being edited, access to the item should be restricted to that person.
2021-03-21 02:09:56 +0100 <hololeap> my question is: would STM be suitable for locking items in the backend or would i need to use a more traditional locking system
2021-03-21 02:10:14 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 02:10:41 +0100forgottenone(~forgotten@176.42.24.127) (Quit: Konversation terminated!)
2021-03-21 02:12:08 +0100 <__minoru__shirae> hololeap: how would you detect getting in and out of an editing process?
2021-03-21 02:12:34 +0100cartwright(~chatting@gateway/tor-sasl/cantstanya) (Quit: WeeChat 2.5)
2021-03-21 02:12:47 +0100 <__minoru__shirae> if you decide to add a button called "start editing", then you could just store the status in a db
2021-03-21 02:13:40 +0100 <__minoru__shirae> and reject later attempts to edit that item based on that value extracted from db
2021-03-21 02:14:37 +0100cantstanya(~chatting@gateway/tor-sasl/cantstanya)
2021-03-21 02:14:38 +0100 <__minoru__shirae> that would mean that you delegated the task of managing concurrency to the db
2021-03-21 02:14:56 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
2021-03-21 02:15:08 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2021-03-21 02:15:10 +0100 <bbhoss> ski: sorry I stepped away, thanks for clarifying. I am coming from Elixir/Erlang so that's the sort of thing I am used to. With elixir there is the pin operator ^ that allows you to specify you want matching instead of shadowing. But it seems like in Haskell's case, it will just shadow and there is no pin operator, so it's probably best to use a guard?
2021-03-21 02:16:12 +0100 <ski> yes
2021-03-21 02:16:31 +0100 <hololeap> __minoru__shirae: it would probably be triggered by clicking on an item, but i see now that i need to flesh out all the details
2021-03-21 02:16:46 +0100 <ski> (technically, you could also use a view pattern .. but it would be a bit ugly .. `(x ==) -> True')
2021-03-21 02:16:47 +0100nf(~n@monade.li) (Remote host closed the connection)
2021-03-21 02:16:56 +0100nf(~n@monade.li)
2021-03-21 02:17:17 +0100LogicUpgrade(57e3c46d@87.227.196.109)
2021-03-21 02:17:25 +0100 <hololeap> because if someone started editing but didn't make changes or cancelled, then it would make sense to give the priority to someone who simultaneously made changes and saved them
2021-03-21 02:17:27 +0100maerwald(~maerwald@mail.hasufell.de) (Ping timeout: 246 seconds)
2021-03-21 02:18:21 +0100LittleFox94(~littlefox@rondra.lf-net.org)
2021-03-21 02:18:32 +0100maerwald(~maerwald@mail.hasufell.de)
2021-03-21 02:18:34 +0100Benett(~Benett@unaffiliated/benett) (Quit:  )
2021-03-21 02:18:38 +0100LittleFox(~littlefox@rondra.lf-net.org) (Ping timeout: 264 seconds)
2021-03-21 02:18:49 +0100Benett(~Benett@unaffiliated/benett)
2021-03-21 02:18:52 +0100lisq(~quassel@lis.moe) (Quit: No Ping reply in 180 seconds.)
2021-03-21 02:19:09 +0100xelxebar_(~xelxebar@gateway/tor-sasl/xelxebar)
2021-03-21 02:19:26 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 268 seconds)
2021-03-21 02:19:26 +0100xelxebar(~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 268 seconds)
2021-03-21 02:20:07 +0100 <__minoru__shirae> that's optimistic locking
2021-03-21 02:20:09 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2021-03-21 02:20:11 +0100lisq(~quassel@lis.moe)
2021-03-21 02:20:40 +0100cabpa_(~cabpa@180.190.165.139)
2021-03-21 02:20:57 +0100cabpa(~cabpa@180.190.168.108) (Ping timeout: 246 seconds)
2021-03-21 02:21:09 +0100 <__minoru__shirae> the one that you described in the original question is pessimistic
2021-03-21 02:24:31 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2021-03-21 02:24:31 +0100zerok(~user@115-186-141-88.nayatel.pk)
2021-03-21 02:24:38 +0100Wuzzy(~Wuzzy@p57a2ecf2.dip0.t-ipconnect.de) (Quit: Wuzzy)
2021-03-21 02:27:43 +0100z0k(~user@115.186.141.88) (Ping timeout: 260 seconds)
2021-03-21 02:30:06 +0100 <__minoru__shirae> if you have a db to delegate dealing with concurrency, then you can do everything in IO
2021-03-21 02:31:39 +0100 <__minoru__shirae> but if you don't have a db, in other words, you are implementing the db functionality in your backend, then you can ask about whether STM is a good fit or not
2021-03-21 02:33:55 +0100 <LogicUpgrade> Hi, I'm curious if mutation is an upcoming feature of haskell because most languages have it and it doesn't
2021-03-21 02:34:19 +0100 <dolio> Haskell already has mutation.
2021-03-21 02:35:22 +0100 <ski> it's in a library
2021-03-21 02:35:54 +0100 <pjb> controled by monoids in the category of endofunctors.
2021-03-21 02:36:05 +0100skismiles
2021-03-21 02:37:25 +0100rajivr(uid269651@gateway/web/irccloud.com/x-tunnvuktqcelikkp)
2021-03-21 02:38:26 +0100 <LogicUpgrade> Actually how does the entire sequence look when you 1) read initial state 2) transform it 3) use io monad to direct some side effect 4) now you need to read some NEW state
2021-03-21 02:38:34 +0100 <LogicUpgrade> Endless streams?
2021-03-21 02:39:00 +0100 <LogicUpgrade> This is in effect like a CQRS model
2021-03-21 02:39:03 +0100 <LogicUpgrade> A bit
2021-03-21 02:39:11 +0100 <ski> (3) seems possibly unrelated to the other parts
2021-03-21 02:40:14 +0100 <ski> (1) read initial state - pass an initial parameter; (2) transform it - apply a function to it; (4) read some new state - pass in the new state as the parameter
2021-03-21 02:43:25 +0100MarcelineVQ(~anja@198.254.208.159) (Remote host closed the connection)
2021-03-21 02:43:42 +0100 <LogicUpgrade> ski, the trick is when the new state was affected by your own side-effects
2021-03-21 02:43:59 +0100 <monochrom> "4)" equals "1)" if after "3)" you just recurse.
2021-03-21 02:44:01 +0100 <ski> thread the state through your computation
2021-03-21 02:44:16 +0100 <LogicUpgrade> 1) read directory 2) product a new file in it 3) read it again
2021-03-21 02:44:21 +0100 <LogicUpgrade> produce*
2021-03-21 02:44:40 +0100 <ski> "read directory" involves communicating with the external world, not just dealing with an internal state
2021-03-21 02:44:50 +0100 <ski> so that would be `IO', then, (3)
2021-03-21 02:45:00 +0100 <monochrom> System.Directory has functions for reading directories.
2021-03-21 02:45:23 +0100 <LogicUpgrade> Should I have said "emit command to get directory and magically get it on a global stream somewhere"
2021-03-21 02:45:41 +0100MarcelineVQ(~anja@198.254.208.159)
2021-03-21 02:45:42 +0100 <ski> how does the magic work ?
2021-03-21 02:46:31 +0100 <LogicUpgrade> Mostly things like constructing objects/functions that go nowhere but have a side-effect, and endless streams, or recursion which doesn't recurse:P  stuff like that
2021-03-21 02:46:43 +0100zerok(~user@115-186-141-88.nayatel.pk) (Ping timeout: 245 seconds)
2021-03-21 02:47:12 +0100 <ski> @quote -fmagic
2021-03-21 02:47:12 +0100 <lambdabot> mrd says: interesting things happen when you enable -fmagic!
2021-03-21 02:47:21 +0100renzhi(~renzhi@modemcable070.17-177-173.mc.videotron.ca) (Ping timeout: 264 seconds)
2021-03-21 02:47:28 +0100 <bbhoss> I'm a haskell n00b but generally I like to push IO to the very edge of the program
2021-03-21 02:47:43 +0100ntjns_(~jones@167.88.120.129) (Quit: leaving)
2021-03-21 02:47:53 +0100 <ski> that's generally good advice, in many languages
2021-03-21 02:47:55 +0100 <bbhoss> so have some function to get the updates to be made from the outside world them feed them into the pure system
2021-03-21 02:48:08 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 240 seconds)
2021-03-21 02:48:16 +0100 <ski> LogicUpgrade : i'm not following
2021-03-21 02:48:26 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2021-03-21 02:48:41 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net)
2021-03-21 02:48:41 +0100 <LogicUpgrade> ski, nah in some languages it's OK to put it right in the center of the program
2021-03-21 02:48:51 +0100zerok(~user@101.50.108.120)
2021-03-21 02:48:54 +0100forgottenone(~forgotten@176.42.24.127)
2021-03-21 02:49:14 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-03-21 02:49:47 +0100Beetstra1(~Beetstra@185.204.1.185) (Remote host closed the connection)
2021-03-21 02:49:53 +0100 <ski> "many" doesn't contradict "some"
2021-03-21 02:50:25 +0100 <dolio> A language allowing it doesn't make it a good idea.
2021-03-21 02:50:26 +0100 <LogicUpgrade> ski yeah
2021-03-21 02:51:25 +0100 <monochrom> Control inversion proves the equivalence between putting it at the centre and putting it at the edge.
2021-03-21 02:51:47 +0100 <LogicUpgrade> dolio, it's complicated. We have movements like Data Oriented Programming, where interacting with the de-facto hardware form and function is the recommended technique
2021-03-21 02:52:01 +0100 <bbhoss> hah yeah I was just thinking all the different possibilities someone could mean by "edge"
2021-03-21 02:52:01 +0100 <MarcelineVQ> yet style inversion means always living on the edge
2021-03-21 02:52:13 +0100 <monochrom> :)
2021-03-21 02:52:45 +0100 <__minoru__shirae> so edgy
2021-03-21 02:52:55 +0100 <__minoru__shirae> just kidding
2021-03-21 02:52:56 +0100 <ski> yes, bbhoss
2021-03-21 02:53:20 +0100 <monochrom> Your favourite stream model is passe.
2021-03-21 02:53:35 +0100 <monochrom> 20 years ago Haskell did use a stream model for I/O.
2021-03-21 02:53:42 +0100skienters a dialogue
2021-03-21 02:54:11 +0100 <ski> (longer ago, actually)
2021-03-21 02:55:10 +0100 <monochrom> And in the early days of switching over to a monad model, people still imagine the monad to be a "state of the world" monad. A state model would be equivalent to a stream model by a final algebra.
2021-03-21 02:55:51 +0100 <monochrom> Both have been long abandoned because in the face of concurrent programming, and one day even distributed computing, they are completely broken.
2021-03-21 02:56:16 +0100 <dolio> Is that actually true? hbc didn't use the fake state implementation.
2021-03-21 02:56:17 +0100 <sim590> Everytime I come back to my haskell code base after a while, I find myself with these dependencies that can't be resolved for base which advanced on my system and I get errors like: "Could not find module ‘Prelude’
2021-03-21 02:56:18 +0100 <sim590> There are files missing in the ‘base-4.14.1.0’ package"
2021-03-21 02:56:51 +0100 <monochrom> I was referring to what people told each other, not what compilers did.
2021-03-21 02:56:54 +0100 <sim590> My project was configured for base >=4.12 && <4.13
2021-03-21 02:57:04 +0100 <sim590> And now I can't compile on 4.14...
2021-03-21 02:57:05 +0100 <dolio> And prior to monads, there was the list thing, and continuation wrappers, which are pretty close to monads.
2021-03-21 02:57:35 +0100 <dolio> I'm asking if they actually told each other that, since it was completely different than what they had all been doing up to that point.
2021-03-21 02:58:14 +0100 <dolio> They already had ready made explanations that weren't the 'state of the world' thing that doesn't really make sense.
2021-03-21 02:58:29 +0100 <monochrom> "Tackling The Awkward Squad" began with the world-state monad story.
2021-03-21 02:58:33 +0100 <MarcelineVQ> sim590: archlinux?
2021-03-21 02:58:36 +0100 <__minoru__shirae> how does concurrency break the "state of the world" or a "stream" model?
2021-03-21 02:58:37 +0100 <sim590> MarcelineVQ: Yeah
2021-03-21 02:59:12 +0100 <MarcelineVQ> that error typically comes from having pacman installed haskell libs since they have dynamicly linked libs and static is typically expected for haskell projects, easiest to rid yourself of them and install things via ghcup or stack
2021-03-21 03:00:01 +0100 <sim590> My project uses cabal. Shouldn't simply cabal new-build get the dependencies?
2021-03-21 03:00:03 +0100 <MarcelineVQ> could try installing ghc-static first but I'd still reccomend ghcup
2021-03-21 03:00:51 +0100 <__minoru__shirae> because from the inside of a thread you can talk about state of the world, or a stream, no?
2021-03-21 03:01:09 +0100 <sim590> So it's because I did install the "ghc" package?
2021-03-21 03:01:37 +0100 <MarcelineVQ> It might not be up to cabal at that point. and probably yes
2021-03-21 03:02:03 +0100 <monochrom> And https://wiki.haskell.org/IO_inside#Running_with_the_RealWorld still hasn't been deleted.
2021-03-21 03:02:12 +0100 <hololeap> __minoru__shirae: i would assume that it breaks when two or more entities try to update the "state of the world" where there is a conflict and one state has to be chosen, or the two are merged monoidally
2021-03-21 03:02:54 +0100 <sim590> MarcelineVQ: is cabal-install also a problem? It does depend on ghc-libs
2021-03-21 03:03:10 +0100 <MarcelineVQ> possibly, ghcup can install that for you too though
2021-03-21 03:03:11 +0100 <__minoru__shirae> hololeap: one could interpret it as world rejecting their update
2021-03-21 03:03:16 +0100 <dolio> Takling the Awkward Squad was 5 years after monads in Haskell, apparently.
2021-03-21 03:03:19 +0100 <MarcelineVQ> many worlds theory doesn't extend to PL? truly the ivory tower is too tall
2021-03-21 03:03:42 +0100 <sim590> MarcelineVQ: OK. Would it be bad to install ghcup through pacman? Or is it even not possible?
2021-03-21 03:04:02 +0100 <__minoru__shirae> or their update "failiing" or something like that. you already have a notion of failure in state-of-the-world or stream model
2021-03-21 03:04:12 +0100 <MarcelineVQ> sim590: that's fine, but it's on the AUR
2021-03-21 03:04:26 +0100 <sim590> MarcelineVQ: ghcup-hs-bin ?
2021-03-21 03:04:49 +0100 <MarcelineVQ> sim590: should be
2021-03-21 03:04:54 +0100conal(~conal@64.71.133.70)
2021-03-21 03:05:07 +0100 <sim590> Alright. I'll remove everything and try to use ghcup.
2021-03-21 03:05:15 +0100 <hololeap> __minoru__shirae: ok, but the problem arises when you have to choose which update succeeds and which updates fail. what is the most fair way of dealing with this?
2021-03-21 03:05:20 +0100Tario(~Tario@201.192.165.173)
2021-03-21 03:05:50 +0100 <MarcelineVQ> hololeap: raft concensus :>
2021-03-21 03:05:57 +0100botro(~botro@178.239.168.171)
2021-03-21 03:07:20 +0100 <__minoru__shirae> hololeap: all I'm saying is I don't see how concurrency breaks those models, because in those models you can interpret concurrency stuff with no problem, seems to me.
2021-03-21 03:07:28 +0100ski. o O ( concurrent races, timers )
2021-03-21 03:08:19 +0100 <dolio> You don't need concurrency for the state of the world to make no sense.
2021-03-21 03:08:40 +0100 <dolio> It can't really make sense of `forever (putStrLn "Hi.")`
2021-03-21 03:09:44 +0100 <dolio> There is no reason for that to be semantically different than `forever (pure ())`, unless functions have side effects.
2021-03-21 03:09:52 +0100 <__minoru__shirae> async exceptions are problematic though
2021-03-21 03:10:34 +0100 <monochrom> Right, we don't need forkIO concurrency to break it. But allow me to be revisionist >:) and refer to meta-level concurrency, i.e., if the sequential computer is interacting with me, you have two threads right there: the computer, and me.
2021-03-21 03:12:38 +0100myShoggoth(~myShoggot@75.164.81.55)
2021-03-21 03:12:47 +0100 <__minoru__shirae> what if one says "let GHC implementers worry about that"
2021-03-21 03:13:11 +0100 <hololeap> __minoru__shirae: it certainly seems like a fixable problem. i'm not an expert on any of this stuff.
2021-03-21 03:13:36 +0100ski. o O ( if an unknown thread running in a process dies, does it makes a difference ? )
2021-03-21 03:14:23 +0100 <monochrom> Again, I am talking about models, not compilers.
2021-03-21 03:14:27 +0100 <__minoru__shirae> and one could say "you see, people who implemented GHC solved those problems for us, they had different model in mind while implementing it."
2021-03-21 03:15:02 +0100 <__minoru__shirae> "and thanks to them now we can reason about our programs using a state of the world model or a stream model"
2021-03-21 03:15:27 +0100 <monochrom> Models are what we tell each other for the purpose of predicting that our programs do what we want and explaining programs.
2021-03-21 03:17:40 +0100 <__minoru__shirae> there is a word "abstraction leak"
2021-03-21 03:18:44 +0100 <hololeap> pinning things down for any given problem, so that there is a specific model for composoition, seems like a good step in the direction of "best model"
2021-03-21 03:19:32 +0100 <__minoru__shirae> people create high level abstractions, and create low-level implementations of those abstractions
2021-03-21 03:19:39 +0100 <hololeap> but i agree that there are different, valid, and competing models for most problems
2021-03-21 03:20:29 +0100 <__minoru__shirae> and if you expose too much of your low-level abstractions, it means that you created an abstraction leak
2021-03-21 03:21:11 +0100 <hololeap> or it means that your abstraction isn't 100% waterproof to corner cases
2021-03-21 03:22:32 +0100 <hololeap> abstractions that have no corner cases are considered "beautiful" for a reason
2021-03-21 03:25:33 +0100 <__minoru__shirae> you can say that a model became obsolete or outdated when you have a better fitting model
2021-03-21 03:26:04 +0100Wuzzy(~Wuzzy@p57a2ecf2.dip0.t-ipconnect.de)
2021-03-21 03:26:31 +0100average(uid473595@gateway/web/irccloud.com/x-mlbuggytwdwptlyu)
2021-03-21 03:26:47 +0100 <__minoru__shirae> is there a model that works better than "state of the world" and "stream" models?
2021-03-21 03:27:17 +0100xff0x_(~xff0x@2001:1a81:527b:4200:5766:67eb:a550:2a8c) (Ping timeout: 244 seconds)
2021-03-21 03:28:09 +0100conal(~conal@64.71.133.70) (Ping timeout: 246 seconds)
2021-03-21 03:28:15 +0100 <hololeap> as far as "things that are outside the state of the program and we can't predict", that seems like the best model to me. but you also have to take on the responsibility of understanding and managing that state within the context of your program
2021-03-21 03:28:32 +0100 <__minoru__shirae> a model of many threads interacting with each other?
2021-03-21 03:29:07 +0100 <dolio> There was a better model before the state of the world model.
2021-03-21 03:29:29 +0100xff0x_(~xff0x@2001:1a81:52b5:3300:bd27:5212:7f1:6207)
2021-03-21 03:29:34 +0100 <hololeap> if all those threads are within the scope of your program, you can't expect anything outside of your program to handle it for you
2021-03-21 03:29:41 +0100conal(~conal@209.58.130.230)
2021-03-21 03:30:41 +0100 <__minoru__shirae> when you write a multi-threaded program, you change perspective many times
2021-03-21 03:30:58 +0100 <__minoru__shirae> you write code from the perspective of this thread
2021-03-21 03:31:20 +0100 <__minoru__shirae> and then from the perspective of that thread
2021-03-21 03:32:36 +0100 <__minoru__shirae> looks like you have a meta-model that allows you to choose a model when writing code
2021-03-21 03:33:10 +0100chewb(~chewb@abii185.neoplus.adsl.tpnet.pl) (Read error: Connection reset by peer)
2021-03-21 03:33:36 +0100 <__minoru__shirae> dolio: what was that? a stream model?
2021-03-21 03:34:30 +0100 <dolio> I'm not exactly sure what the stream model is. But you can explain IO as a sort of dialogue with an opaque runtime system via continuations.
2021-03-21 03:34:41 +0100 <hololeap> right, the essense of abstraction is separating the scope of one thing from another thing, but they also need to compose. when you hit the barrier of IO, it presents some difficult choices, because that is the limit of your scope. maybe there is a model of IO that reduces the number of choices thus simplifying the problem.
2021-03-21 03:34:52 +0100 <dolio> Which I believe is how hbc actually implemented things.
2021-03-21 03:35:56 +0100LogicUpgrade(57e3c46d@87.227.196.109) (Quit: Connection closed)
2021-03-21 03:36:23 +0100 <dolio> That probably extends naturally to concurrency, too, because the way that is often modeled is just that multiple continuations are being processed simultaneously.
2021-03-21 03:36:25 +0100 <ski> preflex: xseen augustss
2021-03-21 03:37:01 +0100 <dolio> The sort of preemptive stuff that GHC does might be hard to explain, though.
2021-03-21 03:37:58 +0100chenshen(~chenshen@2620:10d:c090:400::5:2b70)
2021-03-21 03:39:02 +0100ski. o O ( <https://existentialtype.wordpress.com/2016/07/11/pclsring-in-semantics/>,<http://fare.tunes.org/tmp/emergent/pclsr.htm> )
2021-03-21 03:42:41 +0100liyang(~liyang@90.253.54.54)
2021-03-21 03:44:31 +0100 <koz_> What's the argument to give to GHC if you want it to dump the results after all TH stuff has finished?
2021-03-21 03:45:44 +0100 <glguy> -ddump-splices
2021-03-21 03:49:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 03:49:17 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-vnorxjroamajdrqk) ()
2021-03-21 03:53:27 +0100chenshen(~chenshen@2620:10d:c090:400::5:2b70) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 03:56:04 +0100chenshen(~chenshen@2620:10d:c090:400::5:2b70)
2021-03-21 04:01:56 +0100 <sim590> MarcelineVQ: can ghcup install ghc-pkg? HIE needs ghc-pkg, but I don't have it after installing cabal and ghc through ghcup.
2021-03-21 04:02:20 +0100 <glguy> ghc-pkg comes with installing GHC
2021-03-21 04:02:48 +0100 <sim590> Ah sry. I forgot that I had to symlink ghc-pkg-8.6 to ghc
2021-03-21 04:02:51 +0100 <sim590> I mean
2021-03-21 04:02:52 +0100FinnElija(~finn_elij@gateway/tor-sasl/finnelija/x-67402716)
2021-03-21 04:02:52 +0100finn_elijaGuest46465
2021-03-21 04:02:52 +0100FinnElijafinn_elija
2021-03-21 04:02:53 +0100 <sim590> ghc-pkg
2021-03-21 04:03:07 +0100 <glguy> ghcup handles the symlinking of different versions to ghc, ghc-pkg, etc
2021-03-21 04:03:42 +0100 <sim590> Well, it didn't create a symlink for "ghc-pkg". All I have is ghc-pkg-8.6 and ghc-pkg-8.6.5.
2021-03-21 04:03:57 +0100 <sim590> Because I did `ghcup install ghc 8.6.5`
2021-03-21 04:04:01 +0100 <glguy> sim590, OK, then you have ot tell it to
2021-03-21 04:04:10 +0100 <sim590> How do you mean?
2021-03-21 04:04:12 +0100conal(~conal@209.58.130.230) (Quit: Computer has gone to sleep.)
2021-03-21 04:04:40 +0100 <glguy> sim590, like: ghcup set ghc 8.6
2021-03-21 04:04:45 +0100 <glguy> sim590, easiest is "ghcup tui"
2021-03-21 04:04:48 +0100 <sim590> Oh
2021-03-21 04:04:51 +0100 <glguy> and then press 's' on the thing you want to default
2021-03-21 04:05:10 +0100 <sim590> Oh OK. I see how it works.
2021-03-21 04:05:12 +0100 <sim590> Thanks!
2021-03-21 04:06:44 +0100Guest46465(~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Ping timeout: 268 seconds)
2021-03-21 04:07:08 +0100drbean(~drbean@TC210-63-209-96.static.apol.com.tw)
2021-03-21 04:11:19 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 04:12:06 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.1)
2021-03-21 04:14:57 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 264 seconds)
2021-03-21 04:17:03 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds)
2021-03-21 04:18:42 +0100matryoshka`(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 265 seconds)
2021-03-21 04:18:54 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-03-21 04:21:21 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds)
2021-03-21 04:22:54 +0100elusive(~Jeanne-Ka@static-198-54-134-157.cust.tzulo.com) (Quit: Leaving)
2021-03-21 04:23:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2021-03-21 04:25:05 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 04:25:26 +0100codygman__(~user@47.186.207.161)
2021-03-21 04:26:17 +0100Tario(~Tario@200.119.186.19)
2021-03-21 04:27:07 +0100gitgoood(~gitgood@80-44-12-39.dynamic.dsl.as9105.com)
2021-03-21 04:29:34 +0100gitgood(~gitgood@80-44-9-221.dynamic.dsl.as9105.com) (Ping timeout: 256 seconds)
2021-03-21 04:30:28 +0100Tario(~Tario@200.119.186.19) (Read error: Connection reset by peer)
2021-03-21 04:30:40 +0100Tario(~Tario@201.192.165.173)
2021-03-21 04:32:18 +0100Wuzzy(~Wuzzy@p57a2ecf2.dip0.t-ipconnect.de) (Remote host closed the connection)
2021-03-21 04:46:18 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 04:48:47 +0100theDon(~td@muedsl-82-207-238-252.citykom.de) (Ping timeout: 256 seconds)
2021-03-21 04:48:51 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca) (Remote host closed the connection)
2021-03-21 04:49:18 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca)
2021-03-21 04:50:31 +0100theDon(~td@muedsl-82-207-238-103.citykom.de)
2021-03-21 04:50:32 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
2021-03-21 04:52:23 +0100alx741(~alx741@181.196.69.79) (Quit: alx741)
2021-03-21 04:55:30 +0100 <slack1256> I am crying.
2021-03-21 04:55:40 +0100 <slack1256> Lsp is running on emacs for the first time ;_;
2021-03-21 04:56:01 +0100 <slack1256> It's like christmas and new year all in a single day.
2021-03-21 04:57:23 +0100hackageatlassian-connect-descriptor 0.4.11.0 - Code that helps you create a valid Atlassian Connect Descriptor. https://hackage.haskell.org/package/atlassian-connect-descriptor-0.4.11.0 (RobertMassaioli)
2021-03-21 05:03:13 +0100santiweight(622165e4@c-98-33-101-228.hsd1.ca.comcast.net)
2021-03-21 05:09:19 +0100bitmagie(~Thunderbi@200116b806be8f00f031bd0980c89ee9.dip.versatel-1u1.de)
2021-03-21 05:10:39 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 05:10:44 +0100frozenErebus(~frozenEre@94.129.70.18)
2021-03-21 05:10:59 +0100codygman__(~user@47.186.207.161)
2021-03-21 05:13:23 +0100hackageatlassian-connect-descriptor 0.4.12.0 - Code that helps you create a valid Atlassian Connect Descriptor. https://hackage.haskell.org/package/atlassian-connect-descriptor-0.4.12.0 (RobertMassaioli)
2021-03-21 05:14:56 +0100frozenErebus(~frozenEre@94.129.70.18) (Ping timeout: 240 seconds)
2021-03-21 05:15:15 +0100geowiesnot_bis(~user@87-89-181-157.abo.bbox.fr)
2021-03-21 05:18:30 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2021-03-21 05:20:07 +0100saurik(saurik@carrier.saurik.com) (Remote host closed the connection)
2021-03-21 05:22:30 +0100slack1256(~slack1256@dvc-186-186-101-190.movil.vtr.net) (Remote host closed the connection)
2021-03-21 05:23:09 +0100HarveyPwca(~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06) (Quit: Leaving)
2021-03-21 05:26:50 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2021-03-21 05:27:20 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 05:27:22 +0100Tario(~Tario@201.192.165.173)
2021-03-21 05:27:51 +0100codygman__(~user@47.186.207.161)
2021-03-21 05:31:15 +0100bobbytab1esbobbytables
2021-03-21 05:34:43 +0100shad0w_(a0ca254d@160.202.37.77)
2021-03-21 05:39:34 +0100howdoi(uid224@gateway/web/irccloud.com/x-ycjhikdeorfguwps)
2021-03-21 05:41:44 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-03-21 05:43:59 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 05:44:23 +0100codygman__(~user@47.186.207.161)
2021-03-21 05:48:32 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 05:49:01 +0100codygman__(~user@47.186.207.161)
2021-03-21 05:50:57 +0100geowiesnot_bis(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 246 seconds)
2021-03-21 05:51:36 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 05:51:53 +0100hackagepandoc 2.13 - Conversion between markup formats https://hackage.haskell.org/package/pandoc-2.13 (JohnMacFarlane)
2021-03-21 05:51:59 +0100codygman__(~user@47.186.207.161)
2021-03-21 05:52:18 +0100 <koz_> :t foldl'
2021-03-21 05:52:20 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2021-03-21 05:55:29 +0100dramforever(~dram@unaffiliated/dramforever)
2021-03-21 06:02:25 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 06:06:43 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
2021-03-21 06:12:27 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 06:12:36 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 06:17:57 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds)
2021-03-21 06:19:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 06:20:31 +0100kayvan(~user@52-119-115-185.PUBLIC.monkeybrains.net)
2021-03-21 06:26:20 +0100shad0w_(a0ca254d@160.202.37.77) (Quit: Connection closed)
2021-03-21 06:26:54 +0100average(uid473595@gateway/web/irccloud.com/x-mlbuggytwdwptlyu) (Quit: Connection closed for inactivity)
2021-03-21 06:28:06 +0100kiweun(~kiweun@2607:fea8:2a62:9600:7566:23e2:7687:b8cb) (Remote host closed the connection)
2021-03-21 06:30:17 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 06:31:42 +0100day_(~Unknown@unaffiliated/day)
2021-03-21 06:31:58 +0100dramforever(~dram@unaffiliated/dramforever) (Quit: Leaving)
2021-03-21 06:32:01 +0100petersen(~petersen@redhat/juhp)
2021-03-21 06:33:16 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 06:33:41 +0100codygman__(~user@47.186.207.161)
2021-03-21 06:34:08 +0100myShoggoth(~myShoggot@75.164.81.55) (Ping timeout: 240 seconds)
2021-03-21 06:34:38 +0100day(~Unknown@unaffiliated/day) (Ping timeout: 245 seconds)
2021-03-21 06:34:38 +0100day_day
2021-03-21 06:34:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-03-21 06:37:56 +0100W3BV1P3R(~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net)
2021-03-21 06:38:33 +0100W3BV1P3R(~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net) (Client Quit)
2021-03-21 06:39:30 +0100o1lo01ol1o(~o1lo01ol1@bl7-88-181.dsl.telepac.pt)
2021-03-21 06:48:59 +0100kayvan(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
2021-03-21 06:49:50 +0100codygman`(~user@47.186.207.161) (Read error: No route to host)
2021-03-21 06:50:01 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 06:50:39 +0100bitmagie(~Thunderbi@200116b806be8f00f031bd0980c89ee9.dip.versatel-1u1.de) (Quit: bitmagie)
2021-03-21 06:50:40 +0100o1lo01ol1o(~o1lo01ol1@bl7-88-181.dsl.telepac.pt) (Remote host closed the connection)
2021-03-21 06:51:03 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2021-03-21 06:53:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-03-21 06:55:28 +0100Sonderblade(~helloman@2a02:aa1:100d:fe6f:6a75:3fbc:c81a:1def)
2021-03-21 07:04:03 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-03-21 07:17:59 +0100codygman__(~user@47.186.207.161)
2021-03-21 07:21:01 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 07:24:24 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 246 seconds)
2021-03-21 07:25:07 +0100dave_uy(~david@108.61.193.26) (Quit: The Lounge - https://thelounge.chat)
2021-03-21 07:28:25 +0100dave_uy(~david@108.61.193.26)
2021-03-21 07:30:51 +0100Sonderblade(~helloman@2a02:aa1:100d:fe6f:6a75:3fbc:c81a:1def) (Quit: Konversation terminated!)
2021-03-21 07:34:32 +0100kilolympus(~kilolympu@5.151.5.181) (Quit: Quitting IRC :()
2021-03-21 07:34:52 +0100kilolympus(~kilolympu@5.151.5.178)
2021-03-21 07:36:13 +0100sparsity(5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251)
2021-03-21 07:36:26 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-03-21 07:38:13 +0100Garbanzo(~Garbanzo@70.234.205.193) (Ping timeout: 256 seconds)
2021-03-21 07:38:17 +0100hexfive(~hexfive@50.35.83.177) (Quit: i must go. my people need me.)
2021-03-21 07:44:37 +0100codygman`(~user@47.186.207.161)
2021-03-21 07:45:39 +0100shad0w_(a0ca254d@160.202.37.77)
2021-03-21 07:46:01 +0100shad0w_(a0ca254d@160.202.37.77) (Client Quit)
2021-03-21 07:48:28 +0100dsrt^(~hph@ip98-184-89-2.mc.at.cox.net) ()
2021-03-21 07:50:33 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net)
2021-03-21 07:54:39 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Remote host closed the connection)
2021-03-21 07:57:53 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net)
2021-03-21 08:01:56 +0100petersen(~petersen@redhat/juhp) (Quit: petersen)
2021-03-21 08:02:49 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection)
2021-03-21 08:03:12 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2021-03-21 08:09:05 +0100shad0w_(a0ca254d@160.202.37.77)
2021-03-21 08:10:36 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
2021-03-21 08:12:34 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
2021-03-21 08:12:56 +0100codygman`(~user@47.186.207.161) (Ping timeout: 240 seconds)
2021-03-21 08:13:43 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 08:15:29 +0100ViCi(daniel@10PLM.ro) (Quit: Quit!)
2021-03-21 08:16:32 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca) (Ping timeout: 240 seconds)
2021-03-21 08:18:27 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds)
2021-03-21 08:18:30 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Remote host closed the connection)
2021-03-21 08:20:52 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca)
2021-03-21 08:23:25 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection)
2021-03-21 08:24:02 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 264 seconds)
2021-03-21 08:24:02 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net)
2021-03-21 08:24:22 +0100kderme(4fa6552d@ppp079166085045.access.hol.gr) (Ping timeout: 240 seconds)
2021-03-21 08:25:02 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Remote host closed the connection)
2021-03-21 08:26:28 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca) (Ping timeout: 260 seconds)
2021-03-21 08:26:58 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net)
2021-03-21 08:30:00 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca)
2021-03-21 08:30:14 +0100shad0w_(a0ca254d@160.202.37.77) (Quit: Connection closed)
2021-03-21 08:36:05 +0100chenshen(~chenshen@2620:10d:c090:400::5:2b70) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 08:37:48 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 08:39:55 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 268 seconds)
2021-03-21 08:40:33 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2021-03-21 08:40:36 +0100joncol(~jco@c188-150-101-195.bredband.comhem.se)
2021-03-21 08:43:01 +0100Lowl3v3l(~Lowl3v3l@dslb-002-207-103-026.002.207.pools.vodafone-ip.de) (Remote host closed the connection)
2021-03-21 08:43:04 +0100heatsink_(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2021-03-21 08:45:38 +0100heatsink(~heatsink@2600:1700:bef1:5e10:6075:d116:7f4b:9342) (Ping timeout: 264 seconds)
2021-03-21 08:46:33 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-xsbczufuwcygdtaj) (Quit: Connection closed for inactivity)
2021-03-21 08:50:14 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 08:50:21 +0100__minoru__shirae(~shiraeesh@77.94.25.47) (Ping timeout: 264 seconds)
2021-03-21 08:51:20 +0100botro(~botro@178.239.168.171) (Remote host closed the connection)
2021-03-21 08:51:45 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 08:52:11 +0100codygman__(~user@47.186.207.161)
2021-03-21 09:02:53 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2021-03-21 09:02:57 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
2021-03-21 09:05:14 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362)
2021-03-21 09:07:09 +0100knupfer(~Thunderbi@200116b82c51ca00ed9c36bf6688f2f7.dip.versatel-1u1.de)
2021-03-21 09:07:15 +0100zleap(~zleap@185.163.110.108)
2021-03-21 09:08:41 +0100marinelli(~marinelli@gateway/tor-sasl/marinelli)
2021-03-21 09:11:56 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 09:12:19 +0100codygman__(~user@47.186.207.161)
2021-03-21 09:13:06 +0100knupfer1(~Thunderbi@200116b82c9b050025eb5c46c736ec65.dip.versatel-1u1.de)
2021-03-21 09:13:27 +0100knupfer(~Thunderbi@200116b82c51ca00ed9c36bf6688f2f7.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
2021-03-21 09:13:27 +0100knupfer1knupfer
2021-03-21 09:18:51 +0100Sathiana(~kath@185-113-98-38.cust.bredband2.com)
2021-03-21 09:19:48 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net)
2021-03-21 09:19:51 +0100danso(~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2021-03-21 09:21:19 +0100Lowl3v3l(~Lowl3v3l@dslb-002-207-103-026.002.207.pools.vodafone-ip.de)
2021-03-21 09:22:37 +0100average(uid473595@gateway/web/irccloud.com/x-sgdxyzaxzpfhfdbl)
2021-03-21 09:24:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-03-21 09:26:33 +0100jack1909_(~qpls@cpeb4750e67d202-cmf81d0fad5840.cpe.net.fido.ca) (Ping timeout: 260 seconds)
2021-03-21 09:27:56 +0100jack1909(~qpls@23.105.170.163)
2021-03-21 09:30:33 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2021-03-21 09:35:35 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2021-03-21 09:36:50 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 09:37:16 +0100codygman__(~user@47.186.207.161)
2021-03-21 09:39:31 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 09:39:56 +0100codygman__(~user@47.186.207.161)
2021-03-21 09:42:54 +0100idhugo_(~idhugo@87-49-147-45-mobile.dk.customer.tdc.net)
2021-03-21 09:44:08 +0100idhugo(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Ping timeout: 240 seconds)
2021-03-21 09:44:52 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 09:51:23 +0100jneira(501e65b6@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.182) (Ping timeout: 256 seconds)
2021-03-21 09:56:21 +0100marinelli(~marinelli@gateway/tor-sasl/marinelli) (Quit: marinelli)
2021-03-21 09:59:23 +0100hackagebottom 0.1.0.0 - Encoding and decoding for the Bottom spec. https://hackage.haskell.org/package/bottom-0.1.0.0 (leo)
2021-03-21 09:59:38 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2021-03-21 09:59:57 +0100knupfer(~Thunderbi@200116b82c9b050025eb5c46c736ec65.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
2021-03-21 10:01:11 +0100drbean(~drbean@TC210-63-209-96.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin2 - https://znc.in)
2021-03-21 10:02:34 +0100brick(~brick@59.88.30.166)
2021-03-21 10:03:46 +0100heatsink_(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-03-21 10:05:23 +0100fendor(~fendor@178.115.129.38.wireless.dyn.drei.com)
2021-03-21 10:06:10 +0100unyu(~pyon@unaffiliated/pyon)
2021-03-21 10:07:42 +0100SaitamaPlus(uid272474@gateway/web/irccloud.com/x-fuuiapjpwochxlja) (Quit: Connection closed for inactivity)
2021-03-21 10:11:13 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
2021-03-21 10:14:50 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 10:17:08 +0100hillary(3b581ea6@59.88.30.166)
2021-03-21 10:19:45 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds)
2021-03-21 10:20:14 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2021-03-21 10:22:09 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2021-03-21 10:22:56 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 10:23:13 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
2021-03-21 10:25:03 +0100dopplergange(~dop@titan.pathogen.is)
2021-03-21 10:26:47 +0100dopplergange(~dop@titan.pathogen.is) (Read error: Connection reset by peer)
2021-03-21 10:27:18 +0100dopplergange(~dop@titan.pathogen.is)
2021-03-21 10:33:19 +0100curiousgay(~gay@178.217.208.8) (Ping timeout: 256 seconds)
2021-03-21 10:33:53 +0100codygman__(~user@47.186.207.161) (Ping timeout: 256 seconds)
2021-03-21 10:35:26 +0100 <maralorn> Is there a simple way to just install (or rather build) a random package from hackage with haskell.nix?
2021-03-21 10:40:04 +0100dopplerg-(~dop@185.141.206.207)
2021-03-21 10:40:45 +0100dopplergange(~dop@titan.pathogen.is) (Ping timeout: 264 seconds)
2021-03-21 10:40:54 +0100curiousgay(~gay@178.217.208.8)
2021-03-21 10:41:57 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 264 seconds)
2021-03-21 10:44:39 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2021-03-21 10:53:10 +0100hillary(3b581ea6@59.88.30.166) (Quit: Connection closed)
2021-03-21 11:01:09 +0100cabpa_(~cabpa@180.190.165.139) (Ping timeout: 264 seconds)
2021-03-21 11:01:12 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-03-21 11:03:18 +0100mikoto-chan(~anass@gateway/tor-sasl/mikoto-chan)
2021-03-21 11:03:20 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
2021-03-21 11:04:10 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 11:05:42 +0100cabpa(~cabpa@180.190.165.139)
2021-03-21 11:09:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 11:09:10 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-03-21 11:09:47 +0100Varis(~Tadas@unaffiliated/varis)
2021-03-21 11:10:14 +0100brick(~brick@59.88.30.166) ()
2021-03-21 11:12:34 +0100jakalx(~jakalx@base.jakalx.net)
2021-03-21 11:13:19 +0100kenran(~kenran@mue-88-130-62-124.dsl.tropolys.de)
2021-03-21 11:13:20 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 11:13:26 +0100acidjnk_new(~acidjnk@p200300d0c72b959874ac6c8157d63e67.dip0.t-ipconnect.de)
2021-03-21 11:13:51 +0100shad0w_(a0ca254d@160.202.37.77)
2021-03-21 11:15:31 +0100mikoto-chan(~anass@gateway/tor-sasl/mikoto-chan) (Quit: mikoto-chan)
2021-03-21 11:20:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 11:21:41 +0100dopplerg-(~dop@185.141.206.207) (Quit: ZNC 1.7.5 - https://znc.in)
2021-03-21 11:21:54 +0100RusAlex(~Chel@unaffiliated/rusalex) (Ping timeout: 265 seconds)
2021-03-21 11:22:08 +0100RusAlex(~Chel@unaffiliated/rusalex)
2021-03-21 11:24:41 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2021-03-21 11:24:48 +0100 <jackdk> Is anyone here aware of toy compilers that map to the two approaches in the "making a fast curry" paper? My web searches are finding either a) the paper itself; b) newbie-level explanations of currying; or c) delicious-looking Indian recipes.
2021-03-21 11:26:05 +0100sparsity(5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251) (Quit: Connection closed)
2021-03-21 11:27:20 +0100son0p(~son0p@181.58.39.182)
2021-03-21 11:29:00 +0100frozenErebus(~frozenEre@94.129.70.18)
2021-03-21 11:30:33 +0100dhil(~dhil@80.208.56.181)
2021-03-21 11:31:33 +0100 <Rembane> I would love to have a compiler that makes delicious-looking Indian curry.
2021-03-21 11:33:15 +0100RusAlex(~Chel@unaffiliated/rusalex) (Ping timeout: 246 seconds)
2021-03-21 11:34:17 +0100RusAlex(~Chel@unaffiliated/rusalex)
2021-03-21 11:36:35 +0100LKoen(~LKoen@194.250.88.92.rev.sfr.net)
2021-03-21 11:38:23 +0100hackagehxt 9.3.1.22 - A collection of tools for processing XML with Haskell. https://hackage.haskell.org/package/hxt-9.3.1.22 (UweSchmidt)
2021-03-21 11:40:11 +0100shailangsa(~shailangs@host86-162-150-241.range86-162.btcentralplus.com) (Ping timeout: 256 seconds)
2021-03-21 11:40:11 +0100idhugo__(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net)
2021-03-21 11:40:21 +0100meck(~meck@li1809-18.members.linode.com) (Quit: ZNC 1.8.2 - https://znc.in)
2021-03-21 11:40:48 +0100malumore(~malumore@151.62.127.88)
2021-03-21 11:42:20 +0100meck(~meck@li1809-18.members.linode.com)
2021-03-21 11:42:49 +0100Pickchea(~private@unaffiliated/pickchea)
2021-03-21 11:43:01 +0100idhugo_(~idhugo@87-49-147-45-mobile.dk.customer.tdc.net) (Ping timeout: 256 seconds)
2021-03-21 11:52:04 +0100 <jackdk> maralorn: This made my computer glow for a while, then dropped me in a shell containing `dhall`: https://www.irccloud.com/pastebin/UU3dwKRX/shell.nix
2021-03-21 11:52:33 +0100kenran(~kenran@mue-88-130-62-124.dsl.tropolys.de) (Ping timeout: 245 seconds)
2021-03-21 11:53:21 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 264 seconds)
2021-03-21 11:54:26 +0100kenran(~kenran@mue-88-130-62-124.dsl.tropolys.de)
2021-03-21 11:55:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-03-21 11:56:42 +0100SaitamaPlus(uid272474@gateway/web/irccloud.com/x-fmvwqsvtfzyqazim)
2021-03-21 12:01:55 +0100 <Uniaika> jackdk: hahaha, very well-put :')
2021-03-21 12:02:33 +0100kuribas(~user@ptr-25vy0i7q7d8r48rlgds.18120a2.ip6.access.telenet.be)
2021-03-21 12:02:45 +0100 <liyang> jackdk: chana or mung dhall?
2021-03-21 12:03:09 +0100 <jackdk> liyang: dal makhani is my jam
2021-03-21 12:05:03 +0100shailangsa(~shailangs@host165-120-169-19.range165-120.btcentralplus.com)
2021-03-21 12:05:42 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 12:08:33 +0100 <liyang> I prefer marmalade, but curry is my beverage. (Cf. https://nomimono.co.jp/brand/curry/ )
2021-03-21 12:10:01 +0100berberman_(~berberman@unaffiliated/berberman)
2021-03-21 12:10:14 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 12:10:26 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 265 seconds)
2021-03-21 12:10:32 +0100AbtractSingleton(rasurumatr@gateway/shell/matrix.org/x-bshxgvdkrvkrlckp) ("User left")
2021-03-21 12:11:31 +0100Franciman(~francesco@host-79-53-62-46.retail.telecomitalia.it)
2021-03-21 12:12:54 +0100kenran(~kenran@mue-88-130-62-124.dsl.tropolys.de) (Quit: leaving)
2021-03-21 12:13:34 +0100kiweun(~kiweun@cpe98524a8cef7c-cm98524a8cef7a.cpe.net.cable.rogers.com)
2021-03-21 12:17:08 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 245 seconds)
2021-03-21 12:18:56 +0100aarvar(~foewfoiew@2601:602:a080:fa0:75fb:cea1:4d26:9157) (Ping timeout: 240 seconds)
2021-03-21 12:34:14 +0100mouseghost(~draco@87-206-9-185.dynamic.chello.pl)
2021-03-21 12:34:14 +0100mouseghost(~draco@87-206-9-185.dynamic.chello.pl) (Changing host)
2021-03-21 12:34:14 +0100mouseghost(~draco@wikipedia/desperek)
2021-03-21 12:42:21 +0100haskell_newbie(~haskellne@111.119.187.43)
2021-03-21 12:44:42 +0100curl(5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251)
2021-03-21 12:44:56 +0100dcoutts__(~duncan@85.186.125.91.dyn.plus.net) (Ping timeout: 240 seconds)
2021-03-21 12:45:10 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 12:45:24 +0100dcoutts(~dcoutts@unaffiliated/dcoutts) (Ping timeout: 256 seconds)
2021-03-21 12:46:23 +0100hackageipa 0.2 - Internal Phonetic Alphabet (IPA) https://hackage.haskell.org/package/ipa-0.2 (RoryTylerHayford)
2021-03-21 12:46:33 +0100Hi-Angel(~constanti@broadband-188-32-15-112.ip.moscow.rt.ru)
2021-03-21 12:47:46 +0100 <ij> ski, I have reduced my usage of $ lately, because of your advice :) sometimes I abuse it and it's not better than without
2021-03-21 12:48:58 +0100dcoutts__(~duncan@94.186.125.91.dyn.plus.net)
2021-03-21 12:49:33 +0100skismiles
2021-03-21 12:50:19 +0100 <curl> more use of $ in parens
2021-03-21 12:50:49 +0100 <curl> (f $ g x)
2021-03-21 12:51:57 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 12:55:52 +0100skifeels pain
2021-03-21 12:56:20 +0100 <curl> better than (f (g x)) though
2021-03-21 12:56:24 +0100 <Franciman> what do yo uuse instead of $ ?
2021-03-21 12:56:26 +0100drbean(~drbean@TC210-63-209-99.static.apol.com.tw)
2021-03-21 12:56:34 +0100 <Franciman> how to reduce its usage?
2021-03-21 12:56:52 +0100 <curl> ((f . g) x)
2021-03-21 12:56:57 +0100 <curl> which i think is worse
2021-03-21 12:57:09 +0100 <curl> the $ go to .
2021-03-21 12:58:11 +0100 <curl> ((f . g . h) x) vs (f $ g $ h x)
2021-03-21 12:59:06 +0100 <haskell_newbie> hi i m new on channel this is my first experience on irc
2021-03-21 12:59:49 +0100 <curl> less internal parens and the precidence of $ or . nicely partitions up expressions, again no parens needed
2021-03-21 13:00:34 +0100 <curl> ((f . g x . h) y) vs (f $ g x $ h y)
2021-03-21 13:01:59 +0100 <curl> the version with dot, the reader notionally imagines function concatenation
2021-03-21 13:02:17 +0100 <curl> the version with the $ the reader has to reduce the expression from the right hand side
2021-03-21 13:02:39 +0100 <curl> which is more like what nested parens would mean most obviously
2021-03-21 13:02:54 +0100 <curl> function composition*
2021-03-21 13:03:26 +0100zleap(~zleap@185.163.110.108) (Remote host closed the connection)
2021-03-21 13:04:04 +0100 <curl> (f (g x $ h y) z)
2021-03-21 13:04:31 +0100 <curl> the dollars nicely revert to parens when needed
2021-03-21 13:04:46 +0100 <curl> whats going on with the dot version when f takes 2 arguments?
2021-03-21 13:05:03 +0100 <curl> you would have to use flip to do the "pointless" version with the dots
2021-03-21 13:06:47 +0100LKoen(~LKoen@194.250.88.92.rev.sfr.net) (Remote host closed the connection)
2021-03-21 13:07:35 +0100 <curl> ((flip f z . g x . h) y)
2021-03-21 13:07:38 +0100 <curl> which i think is worse
2021-03-21 13:15:33 +0100__monty__(~toonn@unaffiliated/toonn)
2021-03-21 13:15:48 +0100 <hololeap> \x y z -> f (g x $ h y) z) === \x y -> f (g x $ h y) === \x -> f . g x . h
2021-03-21 13:16:40 +0100 <hololeap> let doThing x = (f . g x . h) in doThing x y z
2021-03-21 13:16:50 +0100 <hololeap> or some such
2021-03-21 13:16:59 +0100 <Logio> given the choice, I'll always prefer function composition to $
2021-03-21 13:17:40 +0100 <Logio> feels like it's easier to spot patterns and generalize your code
2021-03-21 13:18:57 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr) (Quit: Konversation terminated!)
2021-03-21 13:19:03 +0100 <ski> hello haskell_newbie
2021-03-21 13:19:12 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr)
2021-03-21 13:19:27 +0100spake(~spake@185.204.1.185)
2021-03-21 13:19:35 +0100 <hololeap> sometimes it makes sense to keep things explicit, especially when composing functions that take more than one argument
2021-03-21 13:19:40 +0100 <ski> curl : obviously the last one is worse
2021-03-21 13:20:12 +0100 <ski> haskell_newbie : if you have any (Haskell-related) question or topic, feel free to chat up
2021-03-21 13:20:46 +0100 <ski> nothing wrong with `f (g x (h y))' or `f (g x (h y)) z'
2021-03-21 13:21:19 +0100 <ski> i normally prefer `(f . g x . h) y' over `f . g x . h $ y' over `f $ g x $ h y'
2021-03-21 13:21:48 +0100shad0w_(a0ca254d@160.202.37.77) (Quit: Connection closed)
2021-03-21 13:22:24 +0100 <ski> the "pointless" style is jokingly ("ha ha, only serious") named like that, as a reminder (or warning), that it's quite possible to take it too far
2021-03-21 13:23:16 +0100 <hololeap> ski: isn't there something about inlining rules where if you use `doThing x y z = f (g x (h y)) z' it won't be able to inline as easily?
2021-03-21 13:23:47 +0100 <ski> inline what ? `doThing' or `f',`g',`h' ?
2021-03-21 13:23:56 +0100 <haskell_newbie> thank you so much ski I think my message did not appear there something went wrong. I'll. thanks again :)
2021-03-21 13:23:58 +0100 <hololeap> doThing
2021-03-21 13:24:24 +0100 <ski> haskell_newbie : people were just caught up a bit, in a conversation :)
2021-03-21 13:24:42 +0100 <haskell_newbie> :)
2021-03-21 13:25:01 +0100 <ski> iirc, with `doThing x y z = ..x..y..z..', it'll only inline, if `doThing' is fully applied (saturated application)
2021-03-21 13:26:03 +0100 <ski> haskell_newbie : do you have any learning material to look at ? beginner questions (but also more advanced ones) are welcome in here, if you get any. (both practical and theoretical ones)
2021-03-21 13:26:09 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr) (Ping timeout: 256 seconds)
2021-03-21 13:28:07 +0100dementorr(5678f228@86.120.242.40)
2021-03-21 13:28:13 +0100 <hololeap> ski: right, and will `doThing x = f . g x . h' be able to inline with application of one, two, or three variables? if so, that's a "point" to "pointless" :)
2021-03-21 13:30:48 +0100 <dementorr> Hello! Is there a way to use global state in IO Monad? I know this not usually the way to do it, but I am spawning a program from a function, and I would like to save the handle in a Map. This function is called by other code that I don't have access to, and I want to do more things with the handles. Link: https://pastebin.com/ZsYsnSfB
2021-03-21 13:31:18 +0100 <ski> hololeap : yes
2021-03-21 13:32:03 +0100 <ski> @wiki Top level mutable state
2021-03-21 13:32:03 +0100 <lambdabot> https://wiki.haskell.org/Top_level_mutable_state
2021-03-21 13:32:58 +0100 <ski> but usually it's better to pass around the state or config/environment. scales better, if you're having multiple threads or whatever
2021-03-21 13:33:31 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 13:33:54 +0100 <ski> @wiki Global variables
2021-03-21 13:33:54 +0100 <lambdabot> https://wiki.haskell.org/Global_variables
2021-03-21 13:34:39 +0100 <ski> often, `ReaderT MyConfig IO' is used. implicit parameters could also be used
2021-03-21 13:35:42 +0100 <ski> (`MyConfig' could be a `Handle' or an `IORef T' or some other reference to a mutable location, which then allows update, and not only distribution (and possible local change) of an environment/config)
2021-03-21 13:36:29 +0100 <hololeap> dementorr: i don't see why you need global state for that
2021-03-21 13:37:26 +0100gitgoood(~gitgood@80-44-12-39.dynamic.dsl.as9105.com) (Read error: Connection reset by peer)
2021-03-21 13:38:01 +0100 <ski> dementorr : did you mean to have a space after the `program' part ?
2021-03-21 13:38:43 +0100 <hololeap> creator :: Int -> IntMap Handle -> IO (IntMap Handle)
2021-03-21 13:39:08 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2021-03-21 13:39:22 +0100 <ski> anyway, it would be possible to have `state :: IORef (Map Int Handle)' (using the trick i referenced before). but it's most likely better to just pass around the `Map Int Handle' (or possibly an `IORef (Map Int Handle)') to the functions that need it
2021-03-21 13:40:47 +0100 <dementorr> ski, hololeap: Yeah, there is a space there. The problem is that I can't modify the function's signature. It has to be Int -> IO Handle. I just want to save the value(s) before I return them, and use later like in (https://pastebin.com/1hjARUTw)  say I don't want to print them right away, maybe later...
2021-03-21 13:41:13 +0100zerok(~user@101.50.108.120) (Quit: WeeChat 3.0)
2021-03-21 13:41:31 +0100z0k(~user@101.50.108.120)
2021-03-21 13:43:06 +0100 <ski> dementorr : there is no space put in the string, in your pasted code
2021-03-21 13:43:15 +0100 <hololeap> dementorr: so you need `creator` to have that signature, but you can modify its contents?
2021-03-21 13:43:32 +0100 <ski> why can't you modify it ?
2021-03-21 13:43:37 +0100 <dementorr> ski: It is in the latest :)
2021-03-21 13:44:06 +0100 <ski> who's using `creator' ?
2021-03-21 13:44:20 +0100 <ski> are you passing `creator' as a callback argument to another function, maybe ?
2021-03-21 13:44:29 +0100 <ski> (the latest ?)
2021-03-21 13:45:06 +0100 <dementorr> hololeap: It is used by another module. That module says it need a function that has the signature Int -> IO Handle, and it will store the handles and use them later. Now I want to be able to access them for other things.
2021-03-21 13:45:13 +0100 <dementorr> https://pastebin.com/1hjARUTw
2021-03-21 13:45:21 +0100 <dementorr> Oh
2021-03-21 13:45:29 +0100 <dementorr> there were two "./programs"
2021-03-21 13:45:38 +0100 <dementorr> Yeah there should be a space there twoo
2021-03-21 13:45:51 +0100 <ski> in your first paste, there was no space at either site
2021-03-21 13:45:57 +0100 <dementorr> Yes I know :(
2021-03-21 13:46:18 +0100 <dementorr> So it is a callback
2021-03-21 13:47:35 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2021-03-21 13:47:52 +0100 <hololeap> dementorr: so you want to secretly store the Handles when `creator` is run so you can access them later? this has a funky smell to me.
2021-03-21 13:48:15 +0100 <dementorr> Yep!! That's about right :d
2021-03-21 13:49:10 +0100 <hololeap> part of the problem is that "later" is not well defined. if something external is calling `creator`, how are you going to call something else afterward?
2021-03-21 13:49:14 +0100 <dementorr> I can't do it in another way since the state of the module is not exported and there aren't any ways to use get on the state
2021-03-21 13:49:23 +0100Pickchea(~private@unaffiliated/pickchea) (Ping timeout: 256 seconds)
2021-03-21 13:49:26 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-03-21 13:49:29 +0100zaquest(~notzaques@5.128.210.178)
2021-03-21 13:49:56 +0100 <ski> dementorr : if another function expects to be passed `creator' as a callback argument, then there is no problem. simply pass a partially applied `creator' to it, partially applied to the `IntMap Handle' (or `IORef (IntMap Handle)', if you want mutation in the callback, or want to be able to get the latest version, which i suppose you do)
2021-03-21 13:50:52 +0100peanut_(~peanut@2a02:8388:a101:2600:52d3:48bc:f38c:73e)
2021-03-21 13:51:06 +0100 <ski> iow, you could have `creator :: IntMap Handle -> Int -> IO Handle' or `creator :: IORef (IntMap Handle) -> Int -> IO Handle'. or perhaps `creator :: IORef (IntMap Handle) -> IO (Int -> IO Handle)', even
2021-03-21 13:52:09 +0100 <ski> (the `foo :: Blah -> IO (Bleh -> IO Bloh)' can be useful, if you want `foo' to do some I/O, or allocate some mutable state, that the computed function could reference)
2021-03-21 13:53:11 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 13:53:34 +0100 <dementorr> Okay I think I need something like "creator :: IORef (IntMap Handle) -> Int -> IO Handle"... so what I should do is:
2021-03-21 13:53:34 +0100 <dementorr> 1) define a global map of type myMap :: IORef (IntMap Handle)
2021-03-21 13:53:35 +0100 <dementorr> 2) pass the map to creator (like creator myMap id = do ...)
2021-03-21 13:53:35 +0100 <dementorr> 3) when I later use my myMap, if creator was passed it will get it
2021-03-21 13:53:47 +0100 <dementorr> Is that okay?
2021-03-21 13:55:01 +0100 <ski> it's probably better to not define `myMap' at the top-level of a module, but rather make it inside of `main' (or some action you call from that, or whatever your starting point is)
2021-03-21 13:55:13 +0100 <ski> otherwise, it sounds fine
2021-03-21 13:56:03 +0100 <dementorr> ski: Okay thanks! I'll try it now.
2021-03-21 13:56:32 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 240 seconds)
2021-03-21 13:57:11 +0100 <hololeap> don't get too attached to the notion of your IORef being "global".
2021-03-21 13:58:10 +0100coot(~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl)
2021-03-21 13:58:27 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
2021-03-21 14:02:44 +0100son0p(~son0p@181.58.39.182) (Quit: Lost terminal)
2021-03-21 14:02:59 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-03-21 14:04:01 +0100 <ski> (btw, "global" can mean several different things. e.g. it could mean that the scope is global, meaning module-level, could be accessed by any other code importing that module. or, for state, it can mean that changes persist, survive, to be picked up by later executions)
2021-03-21 14:06:43 +0100ShalokShalom(b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5)
2021-03-21 14:06:52 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 14:07:14 +0100idhugo_(~idhugo@87-49-147-45-mobile.dk.customer.tdc.net)
2021-03-21 14:08:29 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-03-21 14:09:17 +0100curl(5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251) (Quit: Connection closed)
2021-03-21 14:10:03 +0100idhugo__(~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds)
2021-03-21 14:11:17 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 14:12:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 14:13:45 +0100gitgood(~gitgood@80-44-12-39.dynamic.dsl.as9105.com)
2021-03-21 14:14:16 +0100ShalokShalom(b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5) (Quit: Connection closed)
2021-03-21 14:15:18 +0100ShalokShalom(b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5)
2021-03-21 14:17:16 +0100urodna(~urodna@unaffiliated/urodna)
2021-03-21 14:19:47 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2021-03-21 14:20:28 +0100haskell_newbie(~haskellne@111.119.187.43) (Ping timeout: 245 seconds)
2021-03-21 14:26:21 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-03-21 14:28:18 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr)
2021-03-21 14:29:01 +0100hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com)
2021-03-21 14:29:12 +0100xelxebar_(~xelxebar@gateway/tor-sasl/xelxebar) (Remote host closed the connection)
2021-03-21 14:29:29 +0100xelxebar(~xelxebar@gateway/tor-sasl/xelxebar)
2021-03-21 14:30:11 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-03-21 14:31:05 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 14:34:09 +0100ShalokShalom(b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5) (Ping timeout: 256 seconds)
2021-03-21 14:34:25 +0100RandomArcher(~isho@90.153.186.32)
2021-03-21 14:35:23 +0100 <maralorn> jackdk: Thank you.
2021-03-21 14:35:39 +0100 <maralorn> I will have a second look at the documentation to see where I overlooked thas.
2021-03-21 14:37:04 +0100Pickchea(~private@unaffiliated/pickchea)
2021-03-21 14:38:17 +0100coot(~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-03-21 14:39:33 +0100frozenErebus(~frozenEre@94.129.70.18) (Ping timeout: 264 seconds)
2021-03-21 14:41:27 +0100neiluj(~jco@unaffiliated/neiluj) (Remote host closed the connection)
2021-03-21 14:45:35 +0100RandomArcher(~isho@90.153.186.32) (Quit: Konversation terminated!)
2021-03-21 14:45:59 +0100RandomArcher(~RandomArc@90.153.186.32)
2021-03-21 14:51:02 +0100son0p(~son0p@181.136.122.143)
2021-03-21 14:53:21 +0100drbean(~drbean@TC210-63-209-99.static.apol.com.tw) (Ping timeout: 264 seconds)
2021-03-21 14:53:44 +0100augnun(~augnun@2804:14c:658b:41bb:600:c14b:1892:9aca)
2021-03-21 14:54:27 +0100acidjnk_new(~acidjnk@p200300d0c72b959874ac6c8157d63e67.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2021-03-21 14:56:45 +0100tromp_(~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
2021-03-21 14:57:08 +0100frozenErebus(~frozenEre@94.129.70.18)
2021-03-21 14:58:59 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 14:59:20 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 14:59:57 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2021-03-21 15:03:27 +0100vincenzopalazzo(~vincenzop@host-79-30-9-166.retail.telecomitalia.it)
2021-03-21 15:03:44 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
2021-03-21 15:06:00 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2021-03-21 15:06:30 +0100mastarija(~mastarija@31.217.19.201)
2021-03-21 15:06:49 +0100azure1(~azure@103.154.230.130)
2021-03-21 15:10:09 +0100Rudd0^(~Rudd0@185.189.115.103) (Ping timeout: 264 seconds)
2021-03-21 15:10:09 +0100Guest82011(~azure@103.154.230.130) (Ping timeout: 264 seconds)
2021-03-21 15:11:10 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 15:11:17 +0100ajc1(~ajc@69.231.232.79)
2021-03-21 15:11:18 +0100azure1(~azure@103.154.230.130) (Ping timeout: 246 seconds)
2021-03-21 15:11:55 +0100ajc1(~ajc@69.231.232.79) (Client Quit)
2021-03-21 15:12:56 +0100augnun(~augnun@2804:14c:658b:41bb:600:c14b:1892:9aca) (Ping timeout: 240 seconds)
2021-03-21 15:13:06 +0100azure1(~azure@103.154.230.130)
2021-03-21 15:13:12 +0100geekosaur(ae68c070@cpe-174-104-192-112.neo.res.rr.com)
2021-03-21 15:13:41 +0100tromp(~tromp@dhcp-077-249-230-040.chello.nl)
2021-03-21 15:15:43 +0100m1dnight_(~m1dnight@78-22-9-5.access.telenet.be) (Quit: WeeChat 2.4)
2021-03-21 15:15:44 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
2021-03-21 15:16:04 +0100Lycurgus(~niemand@98.4.116.165)
2021-03-21 15:17:40 +0100xelxebar(~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 268 seconds)
2021-03-21 15:17:48 +0100m1dnight_(~m1dnight@78-22-9-5.access.telenet.be)
2021-03-21 15:18:14 +0100jakalx(~jakalx@base.jakalx.net)
2021-03-21 15:20:24 +0100Varis(~Tadas@unaffiliated/varis)
2021-03-21 15:20:24 +0100 <Philonous> I'm trying to bind to a rust library. Whenever I call some of the functions, I'm getting »internal error: ASSERTION FAILED: file rts/Capability.c, line 207«. This is both with ghc 8.8.4 and 8.10.4. I've had little luck googling the issue. Is there some known hoops to jump through when binding to rust that I might be missing?
2021-03-21 15:21:25 +0100 <Lycurgus> you know ur in #haskell, right?
2021-03-21 15:22:13 +0100 <Lycurgus> why would rust be different from other things that aren't hs?
2021-03-21 15:22:39 +0100timCF(~i.tkachuk@m91-129-99-43.cust.tele2.ee)
2021-03-21 15:22:55 +0100 <maralorn> Seemed like a quite haskelly question to me.^^
2021-03-21 15:23:07 +0100 <Lycurgus> anyway looks like an easy permissions snag
2021-03-21 15:23:28 +0100 <Lycurgus> or other config snag
2021-03-21 15:24:13 +0100wonko7(~wonko7@45.15.17.60)
2021-03-21 15:24:36 +0100 <Lycurgus> i'd be surprised if reading line 207 didn advance the matter
2021-03-21 15:25:34 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 15:25:55 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 15:25:55 +0100 <hpc> are the functions you're calling in rust using the C calling convention?
2021-03-21 15:26:19 +0100 <timCF> Hello! Is there real term called "partial application"? I saw it used in cases where output of the function is the other function. Naming is a bit misleading, because of "partial function" definition - which is function defined not for all possible arguments. So "partial application" sound like "partial function" has been applied, but it's completely different.
2021-03-21 15:26:21 +0100RandomArcher(~RandomArc@90.153.186.32) (Ping timeout: 246 seconds)
2021-03-21 15:27:42 +0100 <Logio> "partial application" and "partial function" are unrelated terms indeed
2021-03-21 15:27:52 +0100 <maralorn> timCF: Yeah, partial application and partial function are totally independent concepts.
2021-03-21 15:28:05 +0100 <Lycurgus> 'cept for bein pieces parts
2021-03-21 15:30:08 +0100 <maralorn> partial application just means, that you can apply one argument to a function and get a function which only expects the missing arguments back.
2021-03-21 15:30:12 +0100LKoen(~LKoen@194.250.88.92.rev.sfr.net)
2021-03-21 15:30:34 +0100rond_(594021ff@89-64-33-255.dynamic.chello.pl)
2021-03-21 15:30:52 +0100 <Philonous> Lycurgus, Yes, I'm trying to call from Haskell into a Rust library. "rts/Capabilitiy.c" is part of Ghc
2021-03-21 15:31:08 +0100 <maralorn> timCF: But you are right, that the Haskell Type System does not make a difference between a function that takes two arguments and a function that takes one argument and returns a function that accepts another argument.
2021-03-21 15:31:16 +0100 <Philonous> hpc, Yes. I've tried calling it from a simple C program, it works without problems.
2021-03-21 15:32:51 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 15:33:06 +0100 <Lycurgus> what was goin on in Capability.c around line 207?
2021-03-21 15:33:41 +0100 <timCF> maralorn: It's just normal function application then) Don't need special term "partial application" at all
2021-03-21 15:35:08 +0100xelxebar(~xelxebar@gateway/tor-sasl/xelxebar)
2021-03-21 15:35:13 +0100renzhi(~renzhi@modemcable070.17-177-173.mc.videotron.ca)
2021-03-21 15:37:33 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
2021-03-21 15:39:59 +0100 <nshepperd> you do need the special term because people think about functions differently than the haskell type system does
2021-03-21 15:41:27 +0100Pickchea(~private@unaffiliated/pickchea) (Ping timeout: 265 seconds)
2021-03-21 15:41:39 +0100 <dolio> Yes, the point is that there is an informal notion of what constitutes 'all' the expected arguments to the function, even though it's curried.
2021-03-21 15:42:03 +0100 <maralorn> timCF: And there is a difference when you think about the type of closure a function can have.
2021-03-21 15:42:04 +0100molehillish(~molehilli@2600:8800:8d06:1800:e0d0:506b:db48:8ec8)
2021-03-21 15:42:45 +0100 <maralorn> when you have something of the from "f x y = ..." then evaluation only can start when values for x and y are provided.
2021-03-21 15:43:12 +0100 <maralorn> That’s different for "f x = g" which can be evaluate to "g" as soon as x is provided.
2021-03-21 15:43:55 +0100Tario(~Tario@201.192.165.173)
2021-03-21 15:44:16 +0100jil```(~user@45.86.162.6) ("ERC (IRC client for Emacs 26.1)")
2021-03-21 15:45:14 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 15:45:20 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds)
2021-03-21 15:45:51 +0100sssb54(~ssssb56@vps-b2931db6.vps.ovh.ca) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
2021-03-21 15:46:43 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 245 seconds)
2021-03-21 15:47:41 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com)
2021-03-21 15:48:58 +0100molehillish(~molehilli@2600:8800:8d06:1800:e0d0:506b:db48:8ec8) (Remote host closed the connection)
2021-03-21 15:49:56 +0100Zetagon(~leo@c151-177-52-233.bredband.comhem.se)
2021-03-21 15:51:43 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-03-21 15:52:39 +0100plutoniix(~q@node-uhl.pool-125-24.dynamic.totinternet.net)
2021-03-21 15:52:56 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 15:54:01 +0100sssb54(~ssssb56@vps-b2931db6.vps.ovh.ca)
2021-03-21 15:54:26 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 15:55:33 +0100Lycurgus(~niemand@98.4.116.165) (Quit: Exeunt)
2021-03-21 15:57:33 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 264 seconds)
2021-03-21 15:57:40 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-nlxaujrugfazsleg)
2021-03-21 15:57:56 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection)
2021-03-21 16:02:26 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com)
2021-03-21 16:07:04 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr) (Ping timeout: 265 seconds)
2021-03-21 16:08:12 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 16:08:14 +0100hexfive(~hexfive@50.35.83.177)
2021-03-21 16:09:29 +0100alx741(~alx741@181.196.69.79)
2021-03-21 16:10:03 +0100CrazyPython(~crazypyth@98.122.164.118)
2021-03-21 16:10:54 +0100son0p(~son0p@181.136.122.143) (Remote host closed the connection)
2021-03-21 16:12:18 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 16:13:10 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Ping timeout: 268 seconds)
2021-03-21 16:13:14 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 16:13:55 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2021-03-21 16:15:32 +0100Pickchea(~private@unaffiliated/pickchea)
2021-03-21 16:19:20 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-03-21 16:22:23 +0100 <hololeap> (1 +) is an example of partial application
2021-03-21 16:22:57 +0100son0p(~son0p@181.136.122.143)
2021-03-21 16:23:04 +0100 <Logio> "partial application" only really makes sense if you have a certain notion of "fully applied" in mind
2021-03-21 16:24:42 +0100 <mastarija> Where can I find the documentation to the "raw" arrays? I only see the documentation for the Array interface.
2021-03-21 16:25:17 +0100 <hololeap> both concepts are equally valid. currying is witness to an isomorphism, after all
2021-03-21 16:25:35 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 16:25:45 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 264 seconds)
2021-03-21 16:25:55 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 16:26:14 +0100haskell_newbie(~haskellne@111.119.187.43)
2021-03-21 16:27:27 +0100ixlun(~matthew@109.249.184.133)
2021-03-21 16:27:46 +0100 <tomsmeding> mastarija: there is https://ghc.gitlab.haskell.org/ghc/doc/libraries/ghc-prim-0.8.0/GHC-Prim.html#g:14 , but I don't know if that's all there is :p
2021-03-21 16:28:45 +0100 <mastarija> tomsmeding, I've found this now https://hackage.haskell.org/package/base-4.14.1.0/docs/GHC-Arr.html#t:Array
2021-03-21 16:28:53 +0100 <mastarija> But I'm not sure what I'm looking at :D
2021-03-21 16:29:15 +0100 <tomsmeding> mastarija: that's just the same array type that the 'array' package on hackage exports
2021-03-21 16:29:44 +0100 <mastarija> I guess that's what I want...
2021-03-21 16:29:48 +0100ezrakilty(~ezrakilty@97-113-58-224.tukw.qwest.net)
2021-03-21 16:30:01 +0100 <tomsmeding> mastarija: see the import of GHC.Arr here https://hackage.haskell.org/package/array-0.5.4.0/docs/src/Data.Array.html
2021-03-21 16:30:03 +0100 <tomsmeding> :)
2021-03-21 16:30:06 +0100 <mastarija> Do you know if this is a "C" style array?
2021-03-21 16:30:13 +0100 <tomsmeding> kind of?
2021-03-21 16:30:13 +0100 <mastarija> As in nicely packed block of memory?
2021-03-21 16:30:25 +0100 <tomsmeding> are you looking for performance reasons or for FFI reasons?
2021-03-21 16:30:45 +0100 <mastarija> FFI + a bit of fun exploring
2021-03-21 16:31:11 +0100 <geekosaur> sounds to me like you want a storable vector instead of an array
2021-03-21 16:31:35 +0100 <mastarija> I want something that's in the base and doesn't require any dependencies
2021-03-21 16:32:30 +0100 <geekosaur> base is overrated
2021-03-21 16:33:02 +0100 <mastarija> I have my reasons :D
2021-03-21 16:33:54 +0100 <tomsmeding> mastarija: you can have a look at the Foreign.* modules in base; there are Ptr and ForeignPtr (see their docs)
2021-03-21 16:33:56 +0100 <mastarija> geekosaur, actually I want something like Array primitive
2021-03-21 16:34:00 +0100 <tomsmeding> if you want to go really low level for some reason :P
2021-03-21 16:34:04 +0100 <mastarija> yep
2021-03-21 16:34:15 +0100 <mastarija> I guess I can just use pointers
2021-03-21 16:34:20 +0100ezrakilty(~ezrakilty@97-113-58-224.tukw.qwest.net) (Ping timeout: 256 seconds)
2021-03-21 16:34:29 +0100 <tomsmeding> for fun please do
2021-03-21 16:34:43 +0100 <tomsmeding> for production please re-evaluate :p
2021-03-21 16:34:46 +0100 <mastarija> But I was hoping for some nice [] syntax or something, I don't know
2021-03-21 16:34:58 +0100 <tomsmeding> [] is only lists in haskell, except with OverloadedLists
2021-03-21 16:35:28 +0100 <mastarija> well, I was thinking more in the lines of "get_item x array"
2021-03-21 16:35:31 +0100 <bbhoss> how does Debug.Trace.trace print to the screen without IO?
2021-03-21 16:35:41 +0100 <mastarija> unsafeIO
2021-03-21 16:35:45 +0100 <tomsmeding> bbhoss: unsafePerformIO
2021-03-21 16:35:57 +0100 <bbhoss> ah nice, so this bypasses the function needing to be tagged as IO
2021-03-21 16:36:05 +0100 <mastarija> yep
2021-03-21 16:36:07 +0100 <tomsmeding> https://hackage.haskell.org/package/base-4.14.0.0/docs/src/Debug.Trace.html#trace
2021-03-21 16:36:20 +0100Deide(~Deide@217.155.19.23)
2021-03-21 16:36:21 +0100 <tomsmeding> remember that you can look at the source, if you don't go too deep into primops :p
2021-03-21 16:36:43 +0100CrazyPyt_(~crazypyth@98.122.164.118)
2021-03-21 16:37:03 +0100 <mastarija> One thing I really like about haskell docs is the #source link
2021-03-21 16:37:08 +0100CrazyPyt_(~crazypyth@98.122.164.118) (Client Quit)
2021-03-21 16:37:25 +0100CrazyPyt_(~crazypyth@98.122.164.118)
2021-03-21 16:38:39 +0100 <tomsmeding> bbhoss: note that unsafePerformIO is in general, well, unsafe :p
2021-03-21 16:38:49 +0100CrazyPython(~crazypyth@98.122.164.118) (Ping timeout: 256 seconds)
2021-03-21 16:39:02 +0100 <tomsmeding> even if Debug.Trace.trace itself is safe apart from its obvious side effect
2021-03-21 16:39:09 +0100conal(~conal@64.71.133.70)
2021-03-21 16:40:30 +0100 <geekosaur> playing with trace will give you some idea of just how unsafe unsafe is
2021-03-21 16:41:07 +0100jamm_(~jamm@unaffiliated/jamm)
2021-03-21 16:41:27 +0100 <geekosaur> it's not like Haskell is enforcing some weird discipline on you that you can escape from by knocking it over the head; there are actual differences in what's going on
2021-03-21 16:41:42 +0100rond_(594021ff@89-64-33-255.dynamic.chello.pl) (Ping timeout: 240 seconds)
2021-03-21 16:41:47 +0100jamm__(~jamm@unaffiliated/jamm)
2021-03-21 16:43:24 +0100geekosaurtempted to point to inlinePerformIO "bugs", as an extreme example of what happens if you lie to ghc about IO
2021-03-21 16:43:58 +0100 <geekosaur> aka accursedUnutterable…\
2021-03-21 16:45:38 +0100jamm_(~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
2021-03-21 16:46:18 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2021-03-21 16:47:01 +0100 <tomsmeding> geekosaur: the docs for accursedUnutterablePerformIO are always fun to share
2021-03-21 16:47:55 +0100 <tomsmeding> but I've never had trace give me the feeling that something unsafe was going on, but maybe I've been accidentally using it correctly?
2021-03-21 16:48:19 +0100 <tomsmeding> (or my bar for weirdness lies high)
2021-03-21 16:48:40 +0100 <geekosaur> as unsafe goes it's relatively safe. the most that can happen is you see something being evaluated more or less often than you expect
2021-03-21 16:50:09 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 256 seconds)
2021-03-21 16:51:52 +0100 <geekosaur> it's when you enable it to inline "around" the IO that the really spooky stuff starts
2021-03-21 16:53:11 +0100Inoperable(~PLAYER_1@fancydata.science)
2021-03-21 16:54:49 +0100 <bbhoss> Yeah, definitely not planning on using it in production. Just curious about how it got around the compiler
2021-03-21 16:56:27 +0100mastarija(~mastarija@31.217.19.201) (Quit: Leaving)
2021-03-21 16:57:33 +0100frozenErebus(~frozenEre@94.129.70.18) (Ping timeout: 264 seconds)
2021-03-21 16:58:47 +0100peanut_(~peanut@2a02:8388:a101:2600:52d3:48bc:f38c:73e) (Quit: Leaving)
2021-03-21 16:59:47 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
2021-03-21 17:00:07 +0100epicte7us(~epictetus@ip72-194-215-136.sb.sd.cox.net)
2021-03-21 17:02:40 +0100 <dementorr> Does anyone know how can I get the first match from a pcre regex? I want to get the first match of a string inside () or []: "(sth) else no " should give "(sth)" and "[other] yes maybe" should give "[other]". The regex is \(.*\)|\[.*\] but I can't find a tutorial / documentation showing how to use them. Using Text.Regex.Posix gives a error when
2021-03-21 17:02:41 +0100 <dementorr> using parentheses: "lexical error in string/character literal at character '('"
2021-03-21 17:03:11 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 17:03:27 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 17:03:32 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 17:03:33 +0100ep1ctetus_(~epictetus@ip72-194-215-136.sb.sd.cox.net) (Ping timeout: 264 seconds)
2021-03-21 17:04:38 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038)
2021-03-21 17:07:07 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2021-03-21 17:07:58 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 245 seconds)
2021-03-21 17:08:54 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection)
2021-03-21 17:09:27 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 17:09:31 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 17:09:46 +0100Rudd0(~Rudd0@185.189.115.108)
2021-03-21 17:09:59 +0100 <d34df00d> geekosaur: yep, inlining + unsafePerformIO sometimes gets funny: https://github.com/bos/vector-binary-instances/issues/17 (this hit me a few days ago and costed me a couple of hours to debug)
2021-03-21 17:11:59 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 17:12:37 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-03-21 17:13:06 +0100idhugo_(~idhugo@87-49-147-45-mobile.dk.customer.tdc.net) (Ping timeout: 246 seconds)
2021-03-21 17:13:29 +0100 <ski> maralorn,timCF : "the Haskell Type System does not make a difference between a function that takes two arguments and a function that takes one argument and returns a function that accepts another argument." -- Haskell doesn't have multiple argument functions, so the assertion about not making a difference doesn't make any sense (neither true nor false. "type incorrect", one might say). curried style is a
2021-03-21 17:13:36 +0100 <ski> convention that exists in people's head, not in Haskell (although it has syntax (and library operations) that encourages it, and partial application)
2021-03-21 17:14:26 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 17:15:26 +0100 <ski> (also, i'd call `\y -> foo x0 y z0' and `\y -> bar (x0,y,z0)' partial applications of `foo' and `bar'. so the term not only applies to applying a function in curried style to some prefix of its arguments, although that case is particularly nice to express, syntactically)
2021-03-21 17:15:38 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 264 seconds)
2021-03-21 17:16:22 +0100 <ski> (it would be nice if a language with light-weight records (like e.g. OCaml) had a nice notation for partially applying a function by giving some of the fields of the record argument, getting back a function that takes a record expecting the remaining ones)
2021-03-21 17:16:45 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2021-03-21 17:17:24 +0100renzhi(~renzhi@modemcable070.17-177-173.mc.videotron.ca) (Ping timeout: 256 seconds)
2021-03-21 17:18:52 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 17:18:59 +0100usr25(~usr25@unaffiliated/usr25)
2021-03-21 17:22:22 +0100 <hpc> that would be interesting at the type level, just expressing the type of a partial record like that
2021-03-21 17:23:44 +0100Sathiana(~kath@185-113-98-38.cust.bredband2.com) (Quit: WeeChat 3.0)
2021-03-21 17:24:48 +0100ixlun(~matthew@109.249.184.133) (Read error: Connection reset by peer)
2021-03-21 17:25:36 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 17:25:55 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 17:27:21 +0100chisui(577bc921@i577BC921.versanet.de)
2021-03-21 17:28:04 +0100molehillish(~molehilli@2600:8800:8d06:1800:e0d0:506b:db48:8ec8)
2021-03-21 17:28:41 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 17:29:33 +0100Pickchea(~private@unaffiliated/pickchea) (Ping timeout: 246 seconds)
2021-03-21 17:31:45 +0100son0p(~son0p@181.136.122.143) (Quit: leaving)
2021-03-21 17:31:48 +0100elusive(~Jeanne-Ka@static-198-54-134-93.cust.tzulo.com)
2021-03-21 17:32:48 +0100 <ski> well, given `f : { name : string , age : int } -> blah', you could maybe have something like `f o { age = 42 | } : { name : string } -> blah'
2021-03-21 17:33:30 +0100 <hpc> oh, when you put it that way i guess it's not that interesting :P
2021-03-21 17:35:23 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 260 seconds)
2021-03-21 17:35:37 +0100 <ski> heh :b
2021-03-21 17:36:35 +0100 <ski> i guess one could consider a dedicated syntax for the partial application, maybe. what i sketched was just a composition with a "section" of a record construction
2021-03-21 17:38:17 +0100 <ski> OCaml does have labelled arguments (including possibility for optional ones), which can be partially applied. see <https://caml.inria.fr/pub/docs/manual-ocaml/lablexamples.html> (also describes light-weight ("polymorphic") variants)
2021-03-21 17:38:59 +0100frozenErebus(~frozenEre@94.129.70.18)
2021-03-21 17:39:08 +0100dementorr(5678f228@86.120.242.40) (Quit: Connection closed)
2021-03-21 17:42:49 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038)
2021-03-21 17:43:04 +0100 <monochrom> "(\x -> f c0 c1 c2 x c3)" is dedicated syntax for partial application >:)
2021-03-21 17:43:29 +0100 <ski> hah :)
2021-03-21 17:47:33 +0100Zetagon(~leo@c151-177-52-233.bredband.comhem.se) (Remote host closed the connection)
2021-03-21 17:48:27 +0100benkolera(uid285671@gateway/web/irccloud.com/x-ewecqecbsbwhnnil) (Quit: Connection closed for inactivity)
2021-03-21 17:49:59 +0100teardown(~user@gateway/tor-sasl/mrush) (Ping timeout: 268 seconds)
2021-03-21 17:50:06 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com)
2021-03-21 17:51:56 +0100hexagenic_(~mattias@81-224-107-147-no71.tbcn.telia.com)
2021-03-21 17:55:03 +0100tenniscp25(~tenniscp2@134.196.209.118)
2021-03-21 17:55:45 +0100hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 264 seconds)
2021-03-21 17:56:41 +0100teardown(~user@gateway/tor-sasl/mrush)
2021-03-21 17:58:12 +0100frozenErebus(~frozenEre@94.129.70.18) (Ping timeout: 256 seconds)
2021-03-21 17:58:21 +0100hexagenic__(~mattias@81-224-107-147-no71.tbcn.telia.com)
2021-03-21 18:01:14 +0100 <timCF> Hello! Does anybody know why 2nd Functor law is needed? It will be always true in cases where 1st law is true.
2021-03-21 18:02:08 +0100hexagenic_(~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 245 seconds)
2021-03-21 18:02:49 +0100 <ski> how do you mean ?
2021-03-21 18:02:54 +0100 <monochrom> Haskell enjoys a parametricity theorem that makes what you're saying true. An arbitrary category doesn't have this luxury.
2021-03-21 18:03:43 +0100 <ski> (i don't know how the first one holding would be relevant for ensuring the second one)
2021-03-21 18:04:26 +0100 <timCF> monochrom: thanks for reply!
2021-03-21 18:05:04 +0100hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com)
2021-03-21 18:05:46 +0100hexagenic_(~mattias@81-224-107-147-no71.tbcn.telia.com)
2021-03-21 18:07:38 +0100blissful(~blissful@unaffiliated/azuline) (Quit: owo)
2021-03-21 18:07:39 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2021-03-21 18:08:23 +0100hexagenic__(~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 245 seconds)
2021-03-21 18:08:48 +0100conal(~conal@64.71.133.70) (Ping timeout: 245 seconds)
2021-03-21 18:09:27 +0100hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 246 seconds)
2021-03-21 18:10:03 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 18:12:00 +0100idhugo_(~idhugo@87-49-147-45-mobile.dk.customer.tdc.net)
2021-03-21 18:12:15 +0100 <chisui> wouldn't `const unsafeCoerce` also satisfy the identity law?
2021-03-21 18:12:49 +0100mastarija(~mastarija@31.217.19.201)
2021-03-21 18:12:56 +0100conal(~conal@ip-66-115-176-177.creativelink.net)
2021-03-21 18:13:00 +0100hexagenic_Hexagenic
2021-03-21 18:13:42 +0100molehillish(~molehilli@2600:8800:8d06:1800:e0d0:506b:db48:8ec8) (Remote host closed the connection)
2021-03-21 18:13:59 +0100 <edmundnoble> "Parametricity" and "unsafeCoerce" in the same sentence? :^)
2021-03-21 18:14:18 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 18:14:40 +0100 <edmundnoble> `const unsafeCoerce` also satisfies the composition law, from what I can tell
2021-03-21 18:14:47 +0100 <edmundnoble> `unsafeCoerce . unsafeCoerce == unsafeCoerce`
2021-03-21 18:15:00 +0100mastarija(~mastarija@31.217.19.201) (Client Quit)
2021-03-21 18:15:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 18:15:02 +0100stree(~stree@68.36.8.116) (Quit: Caught exception)
2021-03-21 18:15:04 +0100 <chisui> Well I just built a bad `Proxy` I guess.
2021-03-21 18:15:26 +0100stree(~stree@68.36.8.116)
2021-03-21 18:15:38 +0100 <edmundnoble> If you use `const unsafeCoerce` that will typecheck for anything, not just `Proxy` and things isomorphic to it
2021-03-21 18:15:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 18:16:03 +0100 <edmundnoble> I guess this is one reason why we need the free theorems for `fmap` to determine that there is only one lawful instance of `Functor` per type
2021-03-21 18:16:25 +0100 <chisui> I was just trying to break the second law
2021-03-21 18:17:12 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr)
2021-03-21 18:17:35 +0100dsrt^(dsrt@ip98-184-89-2.mc.at.cox.net)
2021-03-21 18:18:30 +0100 <edmundnoble> As a counterexample to the "second functor law is always true in cases where the first law is true"? If so, parametricity is part of the proof if I understand correctly, so `unsafeCoerce` would be cheating if it worked
2021-03-21 18:18:32 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 240 seconds)
2021-03-21 18:18:43 +0100kuribas(~user@ptr-25vy0i7q7d8r48rlgds.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-03-21 18:20:40 +0100 <edmundnoble> Hm maybe you can cheat another way, iirc you can sort of recover types at runtime by looking at the runtime's data structures
2021-03-21 18:21:04 +0100 <chisui> without `Typeable`?
2021-03-21 18:21:24 +0100 <edmundnoble> Yes, it was packaged up in https://hackage.haskell.org/package/recover-rtti
2021-03-21 18:21:44 +0100 <edmundnoble> Oh you might also be able, and this is very cheeky, you could use `reallyUnsafePtrEquality` to "detect" `id`
2021-03-21 18:22:01 +0100 <edmundnoble> Check if `f x` is pointer-equal to `x`, and do something special in that case
2021-03-21 18:22:57 +0100 <edmundnoble> That will detect functions which are operationally the same as `id`, but there are going to be other functions which are extensionally the same as `id` that it won't work with, like `\(C x) -> C x`
2021-03-21 18:23:52 +0100 <chisui> Ok, but all these break parametricity. But there is really no way to break the composition law while satisfying the identity law without breaking parametricity.
2021-03-21 18:24:06 +0100 <ski> (unless `C' is a `newtype' data constructor)
2021-03-21 18:24:23 +0100 <edmundnoble> Right, there is no way
2021-03-21 18:24:26 +0100 <dolio> All these 'really unsafe' things are irrelevant, because they are not sound with respect to the semantics used to talk about parametricity.
2021-03-21 18:24:28 +0100 <edmundnoble> And yes true ski
2021-03-21 18:24:56 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-03-21 18:25:16 +0100 <edmundnoble> dolio: because they also break the type system in some way?
2021-03-21 18:26:48 +0100jamm__(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2021-03-21 18:28:23 +0100DavidEichmann(~david@47.27.93.209.dyn.plus.net)
2021-03-21 18:28:27 +0100 <edmundnoble> I guess you need to have a notion of "equality" to have a semantics at all, and that notion of equality won't brook `x == y -/> f x == f y`
2021-03-21 18:29:57 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2021-03-21 18:30:12 +0100rybern(18c25abd@cpe-24-194-90-189.nycap.res.rr.com)
2021-03-21 18:30:30 +0100ADG1089__(~aditya@27.58.165.185)
2021-03-21 18:30:32 +0100plutoniix(~q@node-uhl.pool-125-24.dynamic.totinternet.net) (Ping timeout: 240 seconds)
2021-03-21 18:30:34 +0100frozenErebus(~frozenEre@94.129.70.18)
2021-03-21 18:30:37 +0100 <edmundnoble> The "equations" part of "equational reasoning" breaks
2021-03-21 18:30:57 +0100ADG1089__ADG1089
2021-03-21 18:31:08 +0100 <ADG1089> can someone explain https://github.com/haskell/cabal/issues/6221 in simple terms?
2021-03-21 18:31:15 +0100 <ski> extensionality
2021-03-21 18:31:27 +0100tsaka__(~torstein@ppp-94-65-45-45.home.otenet.gr) (Remote host closed the connection)
2021-03-21 18:32:32 +0100 <edmundnoble> ski: no, congruence of equality
2021-03-21 18:32:51 +0100 <dolio> The point of parametricity is that it models of how 99.999% of written code works, and is useful for reasoning about that portion of code. That doesn't mean that you can't just add non-parametric functions and have something different, or that certain low level escape hatches won't act that way. So going and looking for the latter is misunderstanding the point of the model.
2021-03-21 18:32:57 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 264 seconds)
2021-03-21 18:33:40 +0100 <ski> yes. but sometimes it's expressed as an operation being extensional. e.g. Bishop defines a function as an operation that respects the equivalence relation that his (basically) setoids come equipped with
2021-03-21 18:33:41 +0100orion(~orion@unaffiliated/orion) (Remote host closed the connection)
2021-03-21 18:33:45 +0100 <edmundnoble> ADG1089: Don't add `-O` options to ghc-options in your .cabal file, tell `cabal` that you want an optimization level by adding it as a flag
2021-03-21 18:33:59 +0100 <edmundnoble> Either to your cabal.project file or to your cabal invocation
2021-03-21 18:34:09 +0100srk(~sorki@gateway/tor-sasl/sorki) (Remote host closed the connection)
2021-03-21 18:34:09 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Remote host closed the connection)
2021-03-21 18:34:11 +0100 <ski> er, to clarify, defines that property as the operation being extensional, and then being a function
2021-03-21 18:34:13 +0100Lycurgus(~niemand@98.4.116.165)
2021-03-21 18:34:22 +0100vicfred(~vicfred@unaffiliated/vicfred)
2021-03-21 18:34:23 +0100srk(~sorki@gateway/tor-sasl/sorki)
2021-03-21 18:34:28 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2021-03-21 18:34:48 +0100 <ADG1089> edmundnoble: cabal.project, right? I think then I can push it to git too
2021-03-21 18:35:39 +0100 <edmundnoble> Yes, `optimization: 2` in there or whichever you want
2021-03-21 18:35:51 +0100 <edmundnoble> Or you can put it in `cabal.project.local`which is traditionally in `.gitignore`
2021-03-21 18:36:18 +0100 <ADG1089> I actually want the maximum performance so I'll need to check in the file
2021-03-21 18:36:35 +0100 <geekosaur> -O2 doesn't necessarily mean max performance
2021-03-21 18:36:35 +0100 <geekosaur> \
2021-03-21 18:36:56 +0100 <geekosaur> it means expensive optimization passes that may end up doing nothing or even pessimizing
2021-03-21 18:37:13 +0100 <ADG1089> I'll try some benchmarks using that
2021-03-21 18:37:27 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net)
2021-03-21 18:37:35 +0100 <ADG1089> also can i speread a function definition over multiple files like f 1 in file 1 and f 2 in file 2 and f 3 in file 3 and so on
2021-03-21 18:37:39 +0100 <ADG1089> *spread
2021-03-21 18:37:46 +0100 <geekosaur> nope
2021-03-21 18:37:47 +0100 <edmundnoble> No
2021-03-21 18:38:15 +0100Hi-Angel(~constanti@broadband-188-32-15-112.ip.moscow.rt.ru) (Read error: Connection reset by peer)
2021-03-21 18:38:19 +0100 <rybern> So I have this basic question that keeps coming up in applications. Suppose I want to have components that declare effects like (MonadReader Int m, MonadReader String m) =>, so that I can also execute the effects one at a time with e.g. runReaderT 0. How do people usually solve this? I don't think I should have to use a Free-based effect library,
2021-03-21 18:38:20 +0100 <rybern> and capability seems like a very heavy solution with all of the newtypes. The best solution I've found is Ether, but it's not maintained anymore, so people must be using something else
2021-03-21 18:38:40 +0100 <ski> no mixin module like things
2021-03-21 18:39:24 +0100__minoru__shirae(~shiraeesh@77.94.25.47)
2021-03-21 18:41:08 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 18:42:36 +0100tenniscp25(~tenniscp2@134.196.209.118) (Remote host closed the connection)
2021-03-21 18:43:07 +0100 <chisui> rybern you could use Effect systems like https://hackage.haskell.org/package/freer-effects
2021-03-21 18:43:16 +0100tenniscp25(~tenniscp2@134.196.209.118)
2021-03-21 18:44:53 +0100rajivr(uid269651@gateway/web/irccloud.com/x-tunnvuktqcelikkp) (Quit: Connection closed for inactivity)
2021-03-21 18:44:55 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 18:45:26 +0100 <rybern> thanks chisui, I looked into that one and it's probably what I'll do. I think what I'm asking is why we can't have that simple pattern with mtl, Ether seemed to solve the problem but no one used it
2021-03-21 18:45:53 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 245 seconds)
2021-03-21 18:45:56 +0100DTZUZU_(~DTZUZO@205.ip-149-56-132.net)
2021-03-21 18:46:03 +0100DTZUZU(~DTZUZO@205.ip-149-56-132.net) (Read error: Connection reset by peer)
2021-03-21 18:46:07 +0100DTZUZU_DTZUZU
2021-03-21 18:46:14 +0100xff0x_(~xff0x@2001:1a81:52b5:3300:bd27:5212:7f1:6207) (Ping timeout: 264 seconds)
2021-03-21 18:46:32 +0100malumore(~malumore@151.62.127.88) (Ping timeout: 240 seconds)
2021-03-21 18:46:41 +0100xff0x_(~xff0x@2001:1a81:52b5:3300:c707:488e:58f1:2927)
2021-03-21 18:47:15 +0100Garbanzo(~Garbanzo@70.234.205.193)
2021-03-21 18:47:44 +0100tenniscp25(~tenniscp2@134.196.209.118) (Ping timeout: 240 seconds)
2021-03-21 18:48:27 +0100 <dolio> Having multiple, scoped instances like that would require not using fundeps, which would make inference bad.
2021-03-21 18:48:35 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2021-03-21 18:48:47 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 18:49:06 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 18:49:46 +0100 <dolio> And it might get kind of confusing if there are cases where the environment type is not known to be the same, but then end up the same, and such.
2021-03-21 18:49:48 +0100dcoutts(~dcoutts@unaffiliated/dcoutts)
2021-03-21 18:50:20 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-03-21 18:50:35 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 272 seconds)
2021-03-21 18:51:04 +0100 <carter> agreed with dolio
2021-03-21 18:52:16 +0100 <edmundnoble> IMO, "effects" has just not worked out as an abstraction in the way people want it to. There are basically three concerns which people are tempted to combine which are best kept separate: composing `>>=` implementations, abstracting over `>>=` implementations, and composing datatypes. Respectively, transformers, mtl, and lens solve these problems well
2021-03-21 18:52:16 +0100 <carter> and more broadly, theres an issue with writing transformer / mtl code as MonadFoo m, MonadBar m) =>, namely that youre presuming that the operations in those nested monads commute
2021-03-21 18:52:33 +0100 <ski> wouldn't the only way for that operation to access the environment, in a way that relevantly depends on those constraints, be via the overloaded class methods, not using `lift' and the like to select ?
2021-03-21 18:52:36 +0100 <carter> and thats actually *missing* the real power of monad transformers
2021-03-21 18:52:41 +0100 <dolio> The way type classes work, they best match having a unique instance of each 'effect' for a particular `m`, and other possible instances are rendered invisible.
2021-03-21 18:52:42 +0100 <edmundnoble> Uh yeah >>= and the algebras etc
2021-03-21 18:53:03 +0100plutoniix(~q@ppp-27-55-75-62.revip3.asianet.co.th)
2021-03-21 18:53:08 +0100 <carter> in any real library, you should have a concrete "core " stack thats actually known and fixed, and just some helpers for allowing new user monad stacks to also work
2021-03-21 18:53:14 +0100 <carter> name and tame the power
2021-03-21 18:53:17 +0100 <carter> with a newtype
2021-03-21 18:54:02 +0100 <carter> like, a lot of peoples mains with transformer stacks would be solved if they choose a specifc one for their application, new type it
2021-03-21 18:54:08 +0100 <carter> and give it the interfaces/instances they need
2021-03-21 18:54:11 +0100 <carter> and then they default to using that
2021-03-21 18:54:18 +0100 <carter> (also their code would be faster and type inference better)
2021-03-21 18:54:32 +0100 <ski> carter : not necessarily presuming they commute (although prople probably often expect that, in some way, without reflecting upon it). but leaving the ordering up to the caller may not be what one intended, possibly leaking implementation details, or breaking invariants, preconditions & postconditions
2021-03-21 18:54:41 +0100 <chisui> rybern: You could also create a container product type that contains all these values. Alternatively you could create your own classes that provide access to these values like `HasInt a, MonadReader a m`
2021-03-21 18:54:43 +0100 <carter> yeah
2021-03-21 18:54:50 +0100 <carter> ski: , yeah
2021-03-21 18:54:54 +0100 <dolio> ski: Yeah, in effect systems that allow multiple copies of an effect to be in play (e.g. Koka), the effects are not completely reorderable, so you can sort of abstractly specify which to use.
2021-03-21 18:54:58 +0100 <carter> hence they should always newtype and make a fresh one
2021-03-21 18:55:11 +0100 <dolio> But type classes aren't like that.
2021-03-21 18:55:17 +0100skinods
2021-03-21 18:55:21 +0100 <carter> oh that reminds me, no one actually has a sane store for commuting effects
2021-03-21 18:55:26 +0100 <carter> they just say "there should be one"
2021-03-21 18:55:26 +0100skiprobably needs to look at Koka some time
2021-03-21 18:55:26 +0100 <monochrom> "(MonadReader Int m, MonadReader String m) =>" is the product of an XY problem. A direct X solution is "(ReadTime m, HasTitle m) =>", and you tailor-design the ReadTime class and the HasTitle class to be problem-specific classes.
2021-03-21 18:56:02 +0100 <dolio> carter: Frank has a story.
2021-03-21 18:56:32 +0100 <carter> frank the code or one of the papers on frank? is that the one where you write the handler sortha?
2021-03-21 18:56:41 +0100 <carter> and install that in the dynamics/lexical scope?
2021-03-21 18:57:03 +0100 <dolio> Not sure about the code, but there's a revised draft of the paper that talks about 'adaptors'.
2021-03-21 18:57:09 +0100 <edmundnoble> Even that's arguably an XY problem
2021-03-21 18:57:38 +0100 <edmundnoble> You don't get a good design for your program by just making all of the record fields into abstractions
2021-03-21 18:57:51 +0100 <carter> yeah
2021-03-21 18:57:53 +0100 <dolio> It basically allows you to do manual structural munging of the effect context.
2021-03-21 18:58:03 +0100 <carter> which isn't something most people actually should do
2021-03-21 18:58:14 +0100 <carter> what fancy things does that enable ? i forget
2021-03-21 18:58:15 +0100 <monochrom> Yeah, probably ReadTime and HasTitle should be merged into one single MyProblemSpecificClass class.
2021-03-21 18:58:32 +0100 <monochrom> and it just has to have a "gettime" method and a "gettile" method.
2021-03-21 18:59:45 +0100 <rybern> chisui re: creating a product type - I could do that but it doesn't compose, I can't then partially execute one of the readers
2021-03-21 18:59:56 +0100 <dolio> carter: It's essential for being abstract with respect to certain effects, at least. Like, you need to be able to say, 'handle the Foo effect in my code, but not the Foo effect in higher-order stuff passed into me,' because otherwise your types become littered with all the effect-based implementation details of your code.
2021-03-21 19:00:24 +0100 <dolio> Because it will 'accidentally' handle the higher-order stuff that is supposed to be opaque to you.
2021-03-21 19:01:15 +0100 <dolio> Koka has a similar thing. There's an example of how you can use it for, like, de Bruijn like multiple state variables, but that doesn't seem very compelling.
2021-03-21 19:01:31 +0100 <rybern> carter re: one concrete stack -- this doesn't allow the same modularity IMO, e.g. you can't reuse functions between applications that have overlapping capabilities, and also I often change the stack throughout the application
2021-03-21 19:01:33 +0100 <dolio> Because de Bruijn is bad for people to actually write.
2021-03-21 19:01:41 +0100 <carter> yes you can
2021-03-21 19:01:55 +0100 <Franciman> Haskell is a programming language for the past
2021-03-21 19:01:56 +0100 <carter> rybern: you just make sure theres a type class for the reuse
2021-03-21 19:02:11 +0100 <Franciman> thank you haskell for having become the past, it means you had a great influence on everybody
2021-03-21 19:02:13 +0100 <Franciman> :')
2021-03-21 19:02:44 +0100 <rybern> monochrom if I could avoid extra boilerplate for implementing ReadTime and HasTitle that would be great, but avoiding that an advantage of e.g. Ether
2021-03-21 19:02:48 +0100alx741(~alx741@181.196.69.79) (Ping timeout: 256 seconds)
2021-03-21 19:03:01 +0100 <maralorn> ski: It’s nice how you said exactly what I meant by phrasing it like I had said the opposite. ^^
2021-03-21 19:03:13 +0100 <monochrom> You can newtype-wrap ReaderT Int for your instance of ReadTime.
2021-03-21 19:03:51 +0100 <rybern> carter so is the idea to make a big stack, make a new typeclass for each capability i want, write instances for each capability for each stack?
2021-03-21 19:03:55 +0100 <edmundnoble> Record structure is just not in itself a good design, neither is a rephrased version in terms of "effect structure". This is why encapsulation was such a big deal; turns out, exposing all of the details of your data structure is usually extremely brittle
2021-03-21 19:04:07 +0100 <carter> rybern: one type class for your stack
2021-03-21 19:04:14 +0100 <carter> unless you actually have a good reason to split it
2021-03-21 19:04:28 +0100 <edmundnoble> Right, YAGNI
2021-03-21 19:04:30 +0100 <rybern> monochrom I think that's what I didn't understand from capabilities library. How does that work when I have a big stack of ReaderTs?
2021-03-21 19:04:30 +0100 <carter> but by default work wqith a new type wrappe ron your stack
2021-03-21 19:04:45 +0100 <carter> agreed with edmundnoble
2021-03-21 19:04:50 +0100 <carter> hes explaining it pretty nicely
2021-03-21 19:05:13 +0100Hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 260 seconds)
2021-03-21 19:06:00 +0100 <carter> any time you do a type synonym instead of a new type, stop and first try making it nice with a new type
2021-03-21 19:06:13 +0100 <carter> is rule of thumb -11
2021-03-21 19:06:39 +0100vicfred(~vicfred@unaffiliated/vicfred)
2021-03-21 19:06:53 +0100 <rybern> so say I have function x that uses capability (X m) and a function y that uses capability (Y m), and I want to share those between stacks that share those capabilities
2021-03-21 19:07:08 +0100 <rybern> how does that work when I have one type class for my stack
2021-03-21 19:07:29 +0100Shiranai(beed0df5@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.13.245)
2021-03-21 19:08:29 +0100 <edmundnoble> There is a tension here, you can't have totally fine-grained dependencies or you have brittleness
2021-03-21 19:08:30 +0100tenniscp25(~tenniscp2@134.196.209.118)
2021-03-21 19:08:34 +0100 <edmundnoble> You have to choose how course-grained you want them to be
2021-03-21 19:08:36 +0100 <edmundnoble> It's an art
2021-03-21 19:08:48 +0100Hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com)
2021-03-21 19:09:27 +0100 <edmundnoble> You don't get to just say "well I want to have all of everything always be pluggable everywhere", you have to define interfaces between components of your program
2021-03-21 19:09:56 +0100 <edmundnoble> Type classes are tempting here because they sort of "automatically" propagate instances, but they can't solve this problem for you, just make some parts of it easier
2021-03-21 19:10:07 +0100 <carter> yeah
2021-03-21 19:10:17 +0100 <carter> you dont have abstraction till you name it :)
2021-03-21 19:10:19 +0100 <carter> sortah
2021-03-21 19:10:46 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 19:11:07 +0100 <Shiranai> Hello I'm doing the fp-course and I have this function `readFile :: FilePath -> IO String`. I was trying to make the function `getFile :: FilePath -> IO (FilePath, String)`. My solution for that was `getFile f = lift2 (,) (readFile f) (pure f)`. The solution given was `getFile = lift2 (<$>) (,) readFile`. Thing is I have no idea what that code
2021-03-21 19:11:07 +0100 <Shiranai> means. In particular, what does fmap here does? I.e. with respect with what functor is it? Same thing with lift2, with respect with what applicative is it?
2021-03-21 19:11:17 +0100 <rybern> I'm happy to name things and define interfaces, that's not really what I'm asking
2021-03-21 19:11:40 +0100 <rybern> In e.g. Ether, you give all of your capabilities tags, which does a nice job of naming things
2021-03-21 19:12:02 +0100 <rybern> but you still get to use the derived behavior from mtl
2021-03-21 19:12:12 +0100todda7(~torstein@2a02:587:1b1c:3b00:c1d0:c187:5cec:e77f)
2021-03-21 19:12:12 +0100 <monochrom> Sorry, what is "the fp-course" again?
2021-03-21 19:12:46 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 19:13:17 +0100 <monochrom> And what is "lift2"?
2021-03-21 19:13:43 +0100 <edmundnoble> Sure, what I'm saying is basically that there is a cost to having all of these named capabilities which you can sort of pull apart and operate on independently at will
2021-03-21 19:13:47 +0100 <bbhoss> I'm counting the number of occurrences in a list, what's the best way to see if one of the occurrences is a majority of the list? I've got the count and was going to just check that `leaderCount > totalCount * 0.5` but I am getting a type error around the multiplication, because totalCount is an Int
2021-03-21 19:14:10 +0100 <edmundnoble> And that cost is roughly speaking brittleness and low cohesion
2021-03-21 19:14:15 +0100 <monochrom> And I think the intention is "lift2 (,) (pure f) (readFile f)"
2021-03-21 19:14:33 +0100 <edmundnoble> This is why we put some effort into making pieces of code agree to work on particular monad transformer stacks
2021-03-21 19:14:45 +0100 <hpc> bbhoss: you need to convert to a floating point number type
2021-03-21 19:14:54 +0100 <hpc> or instead of multiplying by 0.5, you could multiply by 2 instead :P
2021-03-21 19:14:59 +0100 <Shiranai> monochrom: https://github.com/system-f/fp-course The FileIO.hs , lift2 is lifta2 I think
2021-03-21 19:15:04 +0100 <edmundnoble> Because if we didn't, maybe in the abstract it looks like we have code which "works totally independently", but we've only moved the complexity of using it together elsewhere
2021-03-21 19:15:19 +0100 <bbhoss> is that what I really want? I guess I could convert and the get the ceil of the result?
2021-03-21 19:15:34 +0100 <Shiranai> Monochrom: yeah I think the intention is what I wrote, but I have absolutely no idea how to translate it to that
2021-03-21 19:15:38 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 19:15:40 +0100 <bbhoss> it's a voting system so accuracy is kinda important
2021-03-21 19:15:52 +0100xiinotulp(~q@ppp-223-24-94-215.revip6.asianet.co.th)
2021-03-21 19:16:05 +0100 <rybern> edmundnoble sure, it is possible to go too far with modularity, you can get a sort of false generalization.. but sometimes that isn't a problem, and that's the case I'm asking about. E.g. in my applications, I have almost never cared about the order on the stack
2021-03-21 19:16:08 +0100 <hpc> leaderCount * 2 > totalCount
2021-03-21 19:16:14 +0100 <monochrom> I think "lift2 (<$>) (,) readFile" uses ((->) String) for lift2, and IO for fmap.
2021-03-21 19:16:21 +0100 <hpc> or fromIntegral leaderCount > fromIntegral totalCount * 0.5
2021-03-21 19:16:29 +0100 <monochrom> I would consider it a smartass solution.
2021-03-21 19:16:59 +0100DevTurks[m](turkdevops@gateway/shell/matrix.org/x-wvhgcgjcsihqdnpv)
2021-03-21 19:17:21 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds)
2021-03-21 19:17:54 +0100 <Shiranai> monochrom: thanks it was driving me insane that someone can just read that
2021-03-21 19:18:10 +0100 <hpc> as long as you aren't counting more than 2**52 votes, using Double instead of Int is probably fine :P
2021-03-21 19:18:26 +0100 <ski> maralorn : i guess that i was aiming at was that `foo :: (String,Int) -> Bool' or `foo :: Person -> Bool' with `data Person = MkPerson {name :: String,age :: Int}' would have just as much (or little) claim to being "a function that takes two arguments" as `foo :: String -> (Int -> bool)' does. (and clearly there's a difference between the former two, and "a function that takes one argument and returns a
2021-03-21 19:18:32 +0100 <ski> function that accepts another argument"). but i'm sorry if what you meant was consonant with this, and i managed to interpret it otherwise, and make it sound like you didn't
2021-03-21 19:18:37 +0100CrazyPyt_(~crazypyth@98.122.164.118) ()
2021-03-21 19:18:41 +0100 <monochrom> Oh, I have math talent and training, that's how I managed. :)
2021-03-21 19:19:00 +0100ezrakilty(~ezrakilty@97-113-58-224.tukw.qwest.net)
2021-03-21 19:19:06 +0100 <ski> @where Data61
2021-03-21 19:19:06 +0100 <lambdabot> Data61 Functional Programming Course <https://github.com/data61/fp-course>,<https://qfpl.io/links/2017-october-fp-course/> by Tony Morris,Mark Hibberd. Also see the channel #qfpl
2021-03-21 19:19:09 +0100 <rybern> anyway, gotta run, thanks for the conversation
2021-03-21 19:19:14 +0100plutoniix(~q@ppp-27-55-75-62.revip3.asianet.co.th) (Ping timeout: 256 seconds)
2021-03-21 19:19:17 +0100 <edmundnoble> Ah me too hehe
2021-03-21 19:19:29 +0100rybern(18c25abd@cpe-24-194-90-189.nycap.res.rr.com) (Quit: Connection closed)
2021-03-21 19:19:33 +0100 <edmundnoble> I think we were getting somewhere, too
2021-03-21 19:20:06 +0100 <monochrom> ski, data61 is once again renamed to system-f because the company is now called system-f, it may be a different company or it may be a spinoff of data61 or ...
2021-03-21 19:20:10 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-03-21 19:20:24 +0100 <ski> hm. i forget what the previous name was
2021-03-21 19:20:31 +0100 <monochrom> I have decided to just call it "the Morris course" because that's the only real invariant.
2021-03-21 19:20:40 +0100 <monochrom> nicta
2021-03-21 19:20:45 +0100 <ski> oh, right
2021-03-21 19:20:57 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 19:21:10 +0100 <ski> @where NICTA
2021-03-21 19:21:11 +0100 <lambdabot> https://github.com/nicta/course
2021-03-21 19:21:14 +0100 <monochrom> http://www.vex.net/~trebla/haskell/learn-sources.html#problem-set-by-tony-morris-et-al. :)
2021-03-21 19:21:36 +0100pavonia(~user@unaffiliated/siracusa)
2021-03-21 19:22:29 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 19:22:44 +0100ski. o O ( "QFPL lives in UTC+10 and speaks Zulu time. | UBT ~ Unethical Brisbane Time. There is a possibility that it is UTC+10" )
2021-03-21 19:23:09 +0100__minoru__shirae(~shiraeesh@77.94.25.47) (Ping timeout: 256 seconds)
2021-03-21 19:23:37 +0100__minoru__shirae(~shiraeesh@77.94.25.47)
2021-03-21 19:25:17 +0100 <monochrom> Shiranai: And I should be saying ((->) FilePath) instead of ((->) String) for better clarity.
2021-03-21 19:26:37 +0100 <monochrom> It is a bit sad that FilePath and String are the same thing, so (filename, filecontent) and (filecontent, filename) have the same type, so if you use the wrong order you won't notice it.
2021-03-21 19:26:59 +0100 <Shiranai> monochrom: hey I've tried to parse the types of the function earlier and I'm stucked: `:t lift2 (<$>)` gets me `lift2 (<$>) :: (Applicative k1, Functor k2) => k1 (a -> b) -> k1 (k2 a) -> k1 (k2 b)`. Replacing k1 here with `(->) a` I get `lift2 (<$>) :: (Functor k) => (a -> (a -> b)) -> (a -> (k a)) -> (a -> (k2 b))`
2021-03-21 19:27:06 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 19:27:27 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 19:27:36 +0100 <Shiranai> but here `(,) :: a -> b -> (a, b)`
2021-03-21 19:27:44 +0100 <edmundnoble> You're mixing up your `a`'s
2021-03-21 19:28:01 +0100 <Shiranai> so they don't seem to fit
2021-03-21 19:28:08 +0100 <monochrom> Consider (,) :: FilePath -> String -> (FilePath, String)
2021-03-21 19:28:12 +0100 <edmundnoble> There are two unrelated type variables in the "replaced" type signature you gave for lift2
2021-03-21 19:28:37 +0100 <edmundnoble> That have the same name, a
2021-03-21 19:28:41 +0100 <Shiranai> edmundnoble: so k` is not `(->) a` but say `(-> c)`?
2021-03-21 19:28:59 +0100 <edmundnoble> That would help yes
2021-03-21 19:28:59 +0100 <monochrom> a = String = FilePath. b = (FilePath, String). k = k2 = IO
2021-03-21 19:29:22 +0100Lycurgus(~niemand@98.4.116.165) (Quit: Exeunt)
2021-03-21 19:30:22 +0100 <Shiranai> Ok then following monochrom `lift2 (<$>) :: (Functor k) => (FilePath -> (FilePath -> (FilePath, String)) -> (FilePath -> (IO FilePath)) -> (FilePath -> (IO (FilePath, String)))`
2021-03-21 19:30:48 +0100 <monochrom> This is why I call it a smartass solution.
2021-03-21 19:30:59 +0100 <Shiranai> ohhh but they are using the fact that FilePath = string
2021-03-21 19:31:05 +0100 <Shiranai> that's kinda cheating
2021-03-21 19:31:32 +0100 <Shiranai> or am I understanding incorrectly?
2021-03-21 19:31:45 +0100 <monochrom> You are understanding it perfectly now.
2021-03-21 19:32:05 +0100minoru_shiraeesh(~shiraeesh@109.166.57.171)
2021-03-21 19:32:36 +0100 <Shiranai> haha doubt it but I think I'm closer now, key thing I was missing is `b` is `(FilePath, String)`, thank you again!
2021-03-21 19:32:57 +0100__minoru__shirae(~shiraeesh@77.94.25.47) (Ping timeout: 264 seconds)
2021-03-21 19:33:16 +0100frozenErebus(~frozenEre@94.129.70.18) (Ping timeout: 276 seconds)
2021-03-21 19:34:05 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 19:34:25 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 19:37:03 +0100ixlun(~matthew@109.249.184.133)
2021-03-21 19:37:45 +0100 <hololeap> :t liftA2 (<$>) (,)
2021-03-21 19:37:47 +0100 <lambdabot> Functor f => (a1 -> f a2) -> a1 -> f (a1, a2)
2021-03-21 19:39:38 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
2021-03-21 19:40:41 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038)
2021-03-21 19:41:47 +0100 <joel135> Is this some strength thing?
2021-03-21 19:42:21 +0100darjeeling_(~darjeelin@122.245.217.128) (Ping timeout: 265 seconds)
2021-03-21 19:44:38 +0100 <joel135> Hm! "Applicative functors are the programming equivalent of lax monoidal functors with tensorial strength in category theory." Didn't know that.
2021-03-21 19:45:45 +0100 <ski> looks like `strength' with `graph'
2021-03-21 19:46:42 +0100tenniscp25(~tenniscp2@134.196.209.118) ()
2021-03-21 19:48:21 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 19:48:41 +0100 <ski> @let graph :: Arrow ar => ar a b -> ar a (a,b); graph f = arr id &&& f; cograph :: ArrowChoice ar => ar a b -> ar (Either a b) b; cograph f = f ||| arr id
2021-03-21 19:48:43 +0100 <lambdabot> Defined.
2021-03-21 19:49:02 +0100 <joel135> What's graph?
2021-03-21 19:49:10 +0100 <joel135> Oh
2021-03-21 19:49:12 +0100Pickchea(~private@unaffiliated/pickchea)
2021-03-21 19:49:33 +0100 <ski> the graph of a morphism, as a subobject of the product of its domain and codomain
2021-03-21 19:49:38 +0100 <unyu> Never mind “graph”, what exactly is a “cograph”?
2021-03-21 19:50:10 +0100 <ski> the corresponding factor object of the coproduct of the domain and codomain of a morphism
2021-03-21 19:50:21 +0100 <unyu> Oh, you meant “graph” in the sense of “graph of a function”, rather than graph theory's graphs...
2021-03-21 19:50:28 +0100 <ski> yes
2021-03-21 19:50:52 +0100 <ski> a cograph is more or less a table of input-output mappings of a function
2021-03-21 19:51:40 +0100 <ski> or, depicting the domain and codomain as two ovals, or lines, with arrows from one to the other indicating the individual element mappings
2021-03-21 19:52:24 +0100 <ski> putting each element of the codomain into an equivalence class with the elements of the domain mapping to it (construing the domain and codomain to be disjoint), gives you the factor object
2021-03-21 19:53:04 +0100ph88(~ph88@2a02:8109:9e00:7e5c:d4b6:e9e6:3cda:8e26)
2021-03-21 19:53:13 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 19:53:31 +0100 <unyu> When you say “factor object”, do you mean “quotient object”?
2021-03-21 19:53:34 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 19:53:38 +0100 <ski> (so, regarding the "maps to" arrows as graph edges (in the other sense of "graph"), you're taking the connected components)
2021-03-21 19:53:43 +0100 <ski> yes, that's the same thing
2021-03-21 19:53:53 +0100 <unyu> Your use of the term “factor” somehow reminded me of exact sequences...
2021-03-21 19:54:02 +0100malumore(~malumore@151.62.127.88)
2021-03-21 19:55:13 +0100darjeeling_(~darjeelin@122.245.208.187)
2021-03-21 19:55:40 +0100motersen(~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de)
2021-03-21 19:56:41 +0100 <ski> (but i dislike the term "quotient" in this context, since it's not a quotient really. it corresponds to the multiplier, not to the multiplicand, in a multiplication. consider e.g. normal subgroups and corresponding factor groups. the normal subgroup is the multiplicand (which is "replicated"), the factor group is the multiplier/quotient (the "pattern"/"count" of the replication). see
2021-03-21 19:56:47 +0100 <ski> <https://en.wikipedia.org/wiki/Quotition_and_partition>)
2021-03-21 19:57:49 +0100ph88(~ph88@2a02:8109:9e00:7e5c:d4b6:e9e6:3cda:8e26) (Ping timeout: 265 seconds)
2021-03-21 19:58:00 +0100motersen(~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de) (Client Quit)
2021-03-21 19:59:29 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Ping timeout: 268 seconds)
2021-03-21 20:00:13 +0100timCF(~i.tkachuk@m91-129-99-43.cust.tele2.ee) (Quit: leaving)
2021-03-21 20:00:33 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2021-03-21 20:00:41 +0100 <joel135> Isn't it remarkable that both exact sequences a -> b -> c and spans defining products u <- (u, v) -> v have the product-like thing in the middle? I didn't notice this explicitly before.
2021-03-21 20:01:34 +0100 <unyu> Do you mean 0 -> A -> B -> C -> 0 ?
2021-03-21 20:01:44 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2021-03-21 20:01:53 +0100 <unyu> (Feel free to replace 0 with 1 if you are in Grp rather than Ab.)
2021-03-21 20:02:09 +0100motersen(~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de)
2021-03-21 20:02:32 +0100 <joel135> Oh yes
2021-03-21 20:02:35 +0100Chai-T-Rex(~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection)
2021-03-21 20:02:46 +0100 <joel135> I don't actually know homological algebra...
2021-03-21 20:02:47 +0100 <unyu> Also, the roles of A and C are not symmetric.
2021-03-21 20:03:09 +0100minoru_shiraeesh(~shiraeesh@109.166.57.171) (Read error: Connection reset by peer)
2021-03-21 20:03:09 +0100Chai-T-Rex(~ChaiTRex@gateway/tor-sasl/chaitrex)
2021-03-21 20:03:20 +0100berberman_(~berberman@unaffiliated/berberman) (Ping timeout: 240 seconds)
2021-03-21 20:03:27 +0100 <joel135> Really?
2021-03-21 20:03:29 +0100berberman(~berberman@unaffiliated/berberman)
2021-03-21 20:03:51 +0100 <unyu> Yep. So the similarities end there.
2021-03-21 20:04:54 +0100 <joel135> They at least become each other when you interpret arrows in the opposite category.
2021-03-21 20:04:56 +0100malumore(~malumore@151.62.127.88) (Ping timeout: 240 seconds)
2021-03-21 20:04:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-03-21 20:05:18 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 20:05:32 +0100 <joel135> So it is a different symmetry than the one that spans have.
2021-03-21 20:08:21 +0100haskell_newbie(~haskellne@111.119.187.43) (Ping timeout: 264 seconds)
2021-03-21 20:08:48 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-03-21 20:09:01 +0100 <unyu> The opposite category would need to have a notion of exact sequence to begin with. This is certainly true in Ab, but I don't know it to be true in Grp as well.
2021-03-21 20:10:16 +0100 <unyu> Anyhow, I was intrigued by how I could have reached the stupid conclusion that “cographs are obviously uninteresting, because they are obviously isomorphic to the codomain”, when exactly the same (or rather, the dual) thing happens with the graph, and nobody calls the graph of a function uninteresting...
2021-03-21 20:10:52 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection)
2021-03-21 20:10:53 +0100ski. o O ( <https://en.wikipedia.org/wiki/Semidirect_product>,<https://en.wikipedia.org/wiki/Wreath_product> ; semi-direct products in monoidal parsing <https://www.youtube.com/watch?v=Txf7swrcLYs#t=28m58s>,<https://www.youtube.com/watch?v=HGi5AxmQUwU#t=41m15s> )
2021-03-21 20:11:18 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-03-21 20:11:33 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 20:12:10 +0100 <ski> joel135 : would assume a zero object
2021-03-21 20:12:56 +0100 <joel135> Oh that's right.
2021-03-21 20:13:33 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 20:13:52 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 20:13:54 +0100 <unyu> Who would have thought that semidirect products are useful for parsing.
2021-03-21 20:14:13 +0100 <Franciman> LOL
2021-03-21 20:15:24 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038)
2021-03-21 20:16:09 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 20:16:46 +0100dhruvasagar(~dhruvasag@49.207.63.69) (Quit: WeeChat 3.0.1)
2021-03-21 20:16:50 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds)
2021-03-21 20:20:22 +0100 <joel135> unyu: The distinction between graphs and cographs corresponds to the distinction between the two different factorizations of a morphism a -> b in a Quillen model category. Indeed, one of the morphism factors is called "trivial", corresponding to your " uninteresting".
2021-03-21 20:21:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2021-03-21 20:22:13 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 20:22:32 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 20:22:42 +0100chisui(577bc921@i577BC921.versanet.de) (Ping timeout: 240 seconds)
2021-03-21 20:23:58 +0100stree(~stree@68.36.8.116) (Ping timeout: 260 seconds)
2021-03-21 20:25:35 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 20:25:55 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 20:26:08 +0100motersen(~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de) (Ping timeout: 240 seconds)
2021-03-21 20:27:11 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds)
2021-03-21 20:27:37 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2021-03-21 20:29:29 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488)
2021-03-21 20:31:13 +0100motersen(~user@cgn-89-1-215-253.nc.de)
2021-03-21 20:31:40 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection)
2021-03-21 20:32:02 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-03-21 20:32:33 +0100heatsink_(~heatsink@2600:1700:bef1:5e10:90f:37ea:5699:98fc)
2021-03-21 20:32:39 +0100Lord_of_Life_(~Lord@unaffiliated/lord-of-life/x-0885362)
2021-03-21 20:32:52 +0100artixxxx(~artixxxxx@209.red-81-44-44.dynamicip.rima-tde.net)
2021-03-21 20:33:54 +0100heatsink(~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 244 seconds)
2021-03-21 20:34:32 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 240 seconds)
2021-03-21 20:34:32 +0100Lord_of_Life_Lord_of_Life
2021-03-21 20:35:04 +0100alx741(~alx741@181.196.69.79)
2021-03-21 20:36:49 +0100stree(~stree@68.36.8.116)
2021-03-21 20:36:54 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-03-21 20:39:18 +0100rond_(594021ff@89-64-33-255.dynamic.chello.pl)
2021-03-21 20:40:21 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
2021-03-21 20:40:53 +0100artixxxx(~artixxxxx@209.red-81-44-44.dynamicip.rima-tde.net) (Quit: Leaving)
2021-03-21 20:41:23 +0100hackageforex2ledger 1.0.0.0 - Print Forex quotes in Ledger format https://hackage.haskell.org/package/forex2ledger-1.0.0.0 (gregorias)
2021-03-21 20:41:41 +0100conal(~conal@ip-66-115-176-177.creativelink.net) (Quit: Computer has gone to sleep.)
2021-03-21 20:44:04 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-03-21 20:44:21 +0100motersen(~user@cgn-89-1-215-253.nc.de) (Read error: Connection reset by peer)
2021-03-21 20:45:28 +0100conal(~conal@ip-66-115-176-177.creativelink.net)
2021-03-21 20:45:28 +0100acidjnk_new(~acidjnk@p200300d0c72b9545dcff5306019ad0b1.dip0.t-ipconnect.de)
2021-03-21 20:46:29 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 20:46:39 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de)
2021-03-21 20:50:50 +0100forgottenone(~forgotten@176.42.24.127) (Quit: Konversation terminated!)
2021-03-21 20:51:38 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net) (Quit: WeeChat 2.9)
2021-03-21 20:51:38 +0100chirpsalot(~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net) (Quit: WeeChat 2.9)
2021-03-21 20:53:47 +0100motersen(~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de)
2021-03-21 20:56:13 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 268 seconds)
2021-03-21 20:58:02 +0100finn_elija(~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Remote host closed the connection)
2021-03-21 20:58:23 +0100idhugo_(~idhugo@87-49-147-45-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds)
2021-03-21 20:58:27 +0100finn_elija(~finn_elij@gateway/tor-sasl/finnelija/x-67402716)
2021-03-21 20:58:38 +0100chenshen(~chenshen@2620:10d:c090:400::5:1038) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
2021-03-21 20:58:50 +0100chrisdotcode(~chrisdotc@unaffiliated/chrisdotcode)
2021-03-21 21:01:59 +0100 <joel135> ski: now i get the idea of monoidal parsing i think. thanks for mentioning it 1000 times :p
2021-03-21 21:03:47 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 21:03:52 +0100joel135. o O ( https://en.m.wikipedia.org/wiki/Carthago_delenda_est )
2021-03-21 21:03:53 +0100hackageIPv6Addr 2.0.0 - Library to deal with IPv6 address text representations. https://hackage.haskell.org/package/IPv6Addr-2.0.0 (MichelBoucey)
2021-03-21 21:07:27 +0100 <ski> hehe, joel135 :)
2021-03-21 21:07:30 +0100SquarismSiri2
2021-03-21 21:07:47 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 21:08:26 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 264 seconds)
2021-03-21 21:12:00 +0100Siri2Squarism
2021-03-21 21:12:33 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds)
2021-03-21 21:15:38 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 21:15:57 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 21:17:19 +0100 <koz_> Vis-a-vis the PVP, is adding new data constructors to a type a minor or major bump>?
2021-03-21 21:17:30 +0100joncol(~jco@c188-150-101-195.bredband.comhem.se) (Remote host closed the connection)
2021-03-21 21:19:00 +0100 <glguy> I'd expect major (looking)
2021-03-21 21:19:26 +0100 <glguy> Breaking change. If any entity was removed, or the types of any entities or the definitions of datatypes or classes were changed, or orphan instances were added or any instances were removed, then the new A.B MUST be greater than the previous A.B. Note that modifying imports or depending on a newer version of another package may cause extra orphan instances to be exported and thus force a major version change.
2021-03-21 21:19:41 +0100 <koz_> Yep, reads like major.
2021-03-21 21:19:46 +0100 <glguy> adding a constructor is changing the datatype definition
2021-03-21 21:20:53 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2021-03-21 21:20:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-03-21 21:20:58 +0100 <hpc> for a reason why, consider a downstream package matching on that data type
2021-03-21 21:21:12 +0100 <hpc> and that function has inadvertently become partial
2021-03-21 21:21:29 +0100 <koz_> hpc: Yeah, I can understand the reasoning. Just wanted to double-check.
2021-03-21 21:21:43 +0100ADG1089(~aditya@27.58.165.185) (Read error: Connection reset by peer)
2021-03-21 21:24:50 +0100ixlun(~matthew@109.249.184.133) (Read error: Connection reset by peer)
2021-03-21 21:25:34 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 21:25:56 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 21:28:23 +0100geekosaur(ae68c070@cpe-174-104-192-112.neo.res.rr.com) (Quit: Connection closed)
2021-03-21 21:29:08 +0100 <ski> OCaml has "private types" <https://caml.inria.fr/pub/docs/manual-ocaml/privatetypes.html>, where you can export a type so that you can destructure it with pattern-matching, if it's a record type, but not construct it. for a variant type, it's possible only have some constructors known, so that non-partial matching must always have a default case
2021-03-21 21:29:09 +0100tsaka__(~torstein@ppp-2-87-239-227.home.otenet.gr)
2021-03-21 21:30:32 +0100todda7(~torstein@2a02:587:1b1c:3b00:c1d0:c187:5cec:e77f) (Ping timeout: 240 seconds)
2021-03-21 21:30:33 +0100 <Shiranai> what are your thoughts on lambda-case? https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/lambda_case.html
2021-03-21 21:30:49 +0100 <jackdk> it's great
2021-03-21 21:30:55 +0100 <Shiranai> Hlint just recommended them to me but seems like added notation without much benefit
2021-03-21 21:31:24 +0100mastarija(~mastarija@31.217.19.201)
2021-03-21 21:32:39 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 21:32:59 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 21:33:13 +0100 <jackdk> naming things is hard, and it lets you not
2021-03-21 21:34:28 +0100 <c_wraith> I like the idea, but man did they choose the worst possible syntax for it
2021-03-21 21:34:44 +0100 <c_wraith> The original proposal was a lot cleaner
2021-03-21 21:38:45 +0100 <monochrom> What does the syntax in the original proposal look like?
2021-03-21 21:40:23 +0100bgamari_(~bgamari@72.65.102.227) (Ping timeout: 260 seconds)
2021-03-21 21:41:34 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 21:41:54 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 21:46:16 +0100pfurla_(~pfurla@216.151.180.171)
2021-03-21 21:47:09 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 245 seconds)
2021-03-21 21:50:28 +0100aarvar(~foewfoiew@2601:602:a080:fa0:75fb:cea1:4d26:9157)
2021-03-21 21:52:08 +0100juri_(~juri@178.63.35.222) (Ping timeout: 240 seconds)
2021-03-21 21:53:50 +0100codygman__(~user@47.186.207.161)
2021-03-21 21:53:56 +0100codygman__(~user@47.186.207.161) (Remote host closed the connection)
2021-03-21 21:54:16 +0100codygman__(~user@47.186.207.161)
2021-03-21 21:55:09 +0100Benzi-Junior(~BenziJuni@88-149-67-143.du.xdsl.is) (Ping timeout: 264 seconds)
2021-03-21 21:55:12 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-03-21 21:55:15 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 21:56:32 +0100wonko7(~wonko7@45.15.17.60) (Ping timeout: 240 seconds)
2021-03-21 21:58:03 +0100timCF(~i.tkachuk@m91-129-99-43.cust.tele2.ee)
2021-03-21 22:01:36 +0100 <timCF> Hello! I'm trying to explain functors for non-haskell developers. Is there any generic name for values of the types, which are related to functors, like `Maybe a`, `Either a b`, `List a` but not a functors themselves? Because actual functors are `Maybe`, `Either a` and `List` which can not be represented on value/term level.
2021-03-21 22:01:53 +0100hackagepipes-pulse-simple 0.1.0.0 - Pipes for pulse-simple audio https://hackage.haskell.org/package/pipes-pulse-simple-0.1.0.0 (TristanCacqueray)
2021-03-21 22:02:49 +0100 <hpc> are you asking for things of kind * -> * that aren't instances of Functor?
2021-03-21 22:03:21 +0100p8m(p8m@gateway/vpn/protonvpn/p8m)
2021-03-21 22:03:47 +0100 <monochrom> No. A common name that covers Nothing, Just 4, Left "hi", Right False, ['a', 'b', 'c'].
2021-03-21 22:03:57 +0100 <hpc> ah, i don't think there is one
2021-03-21 22:03:59 +0100 <timCF> hpc: No, I'm asking about value-level, like `Just 1`, `Left 1`, `[]`
2021-03-21 22:04:20 +0100 <hpc> they're just values you can fmap over
2021-03-21 22:04:43 +0100p8m_(p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 276 seconds)
2021-03-21 22:05:14 +0100 <timCF> I just created property-based test to prove functor laws, which generates values of this "kind", to which `fmap` can be applied. Just thinking about how to name generator for them)
2021-03-21 22:05:38 +0100 <ski> timCF : people sometimes use the "collection" analogy, but it needs to be stretched a bit to fit the generality of the concept (even as it applies, just for `Functor' in Haskell)
2021-03-21 22:06:18 +0100 <timCF> Name `functors` for generator will be very misleading, because they actually are not a functors
2021-03-21 22:06:19 +0100 <ski> (what kind of collections are values of type `State String Bool' ?)
2021-03-21 22:07:01 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
2021-03-21 22:07:14 +0100 <timCF> I guess, I'll just name generator `fmappable` :)
2021-03-21 22:07:39 +0100 <ski> do you mean "generator" in a QuickCheck sense ?
2021-03-21 22:07:48 +0100 <ski> hm, i guess you do
2021-03-21 22:08:03 +0100 <monochrom> "fmappable" is true of both the type Maybe and the values Nothing, Just 4. This name is not disamguating.
2021-03-21 22:08:12 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-03-21 22:08:51 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2021-03-21 22:09:40 +0100 <timCF> ski: yes, I'm explaining it for Erlang developers, in Erlang there is library called Proper, very similar to QuickChack
2021-03-21 22:09:41 +0100 <monochrom> fmap is said to "preserve structure". So if x :: F X, x contains both structure and data. So, structured data? data structure?
2021-03-21 22:09:47 +0100 <timCF> * QuickCheck
2021-03-21 22:10:14 +0100 <hpc> name it visitorFactorySingleton :P
2021-03-21 22:11:11 +0100 <timCF> monochrom: maybe `shaped` haha
2021-03-21 22:11:17 +0100 <ski> % :kind fmap Proxy# Maybe
2021-03-21 22:11:18 +0100 <yahb> ski: ; <interactive>:1:1: error: Not in scope: type variable `fmap'
2021-03-21 22:11:35 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-03-21 22:11:55 +0100 <monochrom> Yeah I think the experts use "shape" where I used "structure".
2021-03-21 22:11:55 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-03-21 22:12:34 +0100 <ski> `F' represents (types) the structure/shape, `X' the contents/data/elements
2021-03-21 22:12:41 +0100motersen(~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de) (Quit: rcirc on GNU Emacs 27.1)
2021-03-21 22:13:29 +0100 <ski> timCF : perhaps you could say "functor-collection"
2021-03-21 22:13:51 +0100 <timCF> ski: thanks!
2021-03-21 22:14:08 +0100juri_(~juri@178.63.35.222)
2021-03-21 22:14:26 +0100 <monochrom> The Louis Vuitton Functor Collection, Collector's Edition
2021-03-21 22:15:09 +0100codygman__(~user@47.186.207.161) (Ping timeout: 246 seconds)
2021-03-21 22:15:42 +0100ski. o O ( `FMap Proxy# Maybe :: * -> TYPE ('TupleRep '[])' ? )
2021-03-21 22:15:45 +0100 <sclv> i'd say a "functor value"
2021-03-21 22:15:52 +0100 <monochrom> us$49,999 for a designer-autographed Either String. limited 1000 pieces worldwide.
2021-03-21 22:16:22 +0100 <sclv> because if you say "a functor is a type constructor of kind * -> *" then a "functor value" is just the application of that to something of kind * so you get something of kind *
2021-03-21 22:16:50 +0100 <ski> timCF : an important part of it is that the user is able to put values of any type in the collection, and is able to `fmap', changing the element type
2021-03-21 22:17:12 +0100 <sclv> or you might say "types in the range of a functor"
2021-03-21 22:17:26 +0100 <sclv> i.e. think of a functor as a morphism sending types to other types, so it sends `Int` to `Maybe Int` etc
2021-03-21 22:17:34 +0100 <ski> sclv : well .. i've been pondering a system in which `m :: Maybe' is a perfectly legal thing to say
2021-03-21 22:17:48 +0100 <sclv> so `Maybe Int` is in th range of a functor, but `Int` is not, in particular
2021-03-21 22:17:53 +0100hackagegitlib 3.1.3 - API library for working with Git repositories https://hackage.haskell.org/package/gitlib-3.1.3 (JohnWiegley)
2021-03-21 22:19:11 +0100 <ski> timCF : for `Monad', we tend to say "(monadic) action" (there's also some other words floating around, like "computation","recipe","instruction list","context" ..). i think "action" is also used commonly for `Applicative'
2021-03-21 22:19:38 +0100 <ski> (i don't really like "context" used in this context, for this purpose)
2021-03-21 22:20:07 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net)
2021-03-21 22:21:05 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds)
2021-03-21 22:21:56 +0100mastarija(~mastarija@31.217.19.201) (Quit: Leaving)
2021-03-21 22:22:20 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-03-21 22:24:26 +0100 <monochrom> IIRC "context" refers to the monad instances such as IO and Maybe.
2021-03-21 22:24:27 +0100__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2021-03-21 22:25:05 +0100lampowner(~xblow@broadband-90-154-73-166.ip.moscow.rt.ru)
2021-03-21 22:25:35 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-03-21 22:25:38 +0100 <monochrom> "getLine :: IO String" is said to give you a string under the context of IO.
2021-03-21 22:25:55 +0100zebrag(~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr)
2021-03-21 22:26:03 +0100 <hpc> yuck
2021-03-21 22:26:14 +0100 <monochrom> You can immediately see it is just the flawed "extract a string" with newer, more treacherous dressing.
2021-03-21 22:26:48 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-03-21 22:27:13 +0100 <timCF> ski: For now I'll explain just Functors, then other day Applicatives, and some other day Monads :) Surprisingly, it's really hard even to explain basic things, because just 2 functor laws requiring understanding of currying and composition. Good thing is that all this can be written in one list of source code in 10 minutes.
2021-03-21 22:29:47 +0100 <monochrom> Don't forget that the whole notion that "Maybe" in isolation, i.e., you don't wants have to say "Maybe what?", is entirely new, strange, or foreign to most programmers in the first place.
2021-03-21 22:30:42 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca) (Read error: Connection reset by peer)
2021-03-21 22:30:46 +0100 <timCF> monochrom: exactly! That's why I'm not using `Maybe` as example for them. I'm using `Either` and `List`.
2021-03-21 22:30:54 +0100Hexagenic(~mattias@81-224-107-147-no71.tbcn.telia.com) (Quit: WeeChat 1.9.1)
2021-03-21 22:31:07 +0100 <monochrom> People can understand "f :: a -> Maybe a" in terms of "<T> Maybe<T> f(T)". By extension they can also understand "instance Monoid (Maybe a)".
2021-03-21 22:31:15 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca)
2021-03-21 22:32:01 +0100lampowner(~xblow@broadband-90-154-73-166.ip.moscow.rt.ru) (Quit: Leaving)
2021-03-21 22:32:21 +0100lampowner(~xblow@broadband-90-154-73-166.ip.moscow.rt.ru)
2021-03-21 22:32:34 +0100 <monochrom> Suddenly you say your generalzation is not from Maybe Int to Maybe a, it is from Maybe Int to f Int. In terms of Java and C++, there is no such thing. And furthermore you're now saying you can also have "instance Functor Maybe", and it is not "instance Functor (Maybe a)". Well that just breaks a lot of minds.
2021-03-21 22:32:40 +0100ixlun(~matthew@109.249.184.133)
2021-03-21 22:33:14 +0100 <monochrom> Um List enjoys the same problems.
2021-03-21 22:33:36 +0100 <monochrom> Either enjoys the same problems one level up.
2021-03-21 22:35:21 +0100 <monochrom> You don't have to write the functor laws with composition.
2021-03-21 22:35:54 +0100 <monochrom> "fmap (\x -> x) xs = xs" and "fmap g (fmap f xs) = fmap (\x -> g (f x)) xs" work fine.
2021-03-21 22:36:21 +0100 <monochrom> That still uses currying but supposedly one has have spent much time practicing currying before this.
2021-03-21 22:37:15 +0100 <monochrom> Also since highschool math already teaches function composition, it should not be a hurdle either.
2021-03-21 22:38:04 +0100 <monochrom> Unless you are saying you have data that corroborates with my theory that programming attracts people who failed math.
2021-03-21 22:40:28 +0100cabpa(~cabpa@180.190.165.139) (Ping timeout: 260 seconds)
2021-03-21 22:40:53 +0100slack1256(~slack1256@dvc-186-186-101-190.movil.vtr.net)
2021-03-21 22:40:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2021-03-21 22:43:12 +0100 <timCF> monochrom: Good theory actually. I did learned chemistry in university, and math was hard to understand)
2021-03-21 22:43:23 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-03-21 22:44:56 +0100roconnor(~roconnor@host-45-58-230-226.dyn.295.ca) (Quit: Konversation terminated!)
2021-03-21 22:45:03 +0100 <timCF> I remember that moment, when for me was easier to write a program to emulate task in statistics, and get approx solution from RNG results, then to solve it mathematically
2021-03-21 22:45:40 +0100stree(~stree@68.36.8.116) (Ping timeout: 276 seconds)
2021-03-21 22:45:51 +0100 <monochrom> Then you may be interested to hear my full theory.
2021-03-21 22:45:57 +0100 <monochrom> I mean, >:)
2021-03-21 22:46:54 +0100 <monochrom> Those who do well in math, they are attracted to either the more creative pure math or the more profitable quant.
2021-03-21 22:46:56 +0100Vadrigar(~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
2021-03-21 22:48:24 +0100 <monochrom> Those who are scientifically minded (i.e., they want to and know how to refute hypotheses by testing), they are attracted to various more interesting scientific research or more profitable chemical engineering or biochem.
2021-03-21 22:49:03 +0100 <monochrom> Those who are good with words, they are attracted to the more creative creative writing or the more profitable law career.
2021-03-21 22:49:47 +0100 <monochrom> So what are the remaining career options? Programming and religious careers. And it shows.
2021-03-21 22:50:23 +0100 <monochrom> We have programmers who can't use math, are illogical, can't test, and can't write or even read TFM.
2021-03-21 22:50:32 +0100 <monochrom> Just like most priests.
2021-03-21 22:50:43 +0100 <monochrom> Just look at Larry Wall.
2021-03-21 22:51:35 +0100coot(~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl)
2021-03-21 22:52:31 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-03-21 22:52:41 +0100 <timCF> monochrom: :) And software revelopers are very religious! Functional programming camp, OOP camp, JS camp, GO camp
2021-03-21 22:53:10 +0100 <pjb> monochrom: the alternative is https://en.wikipedia.org/wiki/Edsger_W._Dijkstra
2021-03-21 22:53:26 +0100 <pjb> monochrom: prove your algorithms!
2021-03-21 22:53:54 +0100 <monochrom> Dijkstra was very capable with both math and physics.
2021-03-21 22:54:01 +0100 <pjb> or https://en.wikipedia.org/wiki/Tony_Hoare
2021-03-21 22:54:05 +0100 <pjb> Indeed, exactly.
2021-03-21 22:54:28 +0100LogicUpgrade(57e3c46d@87.227.196.109)
2021-03-21 22:54:44 +0100 <joel135> What is TFM? GO the language or something else?
2021-03-21 22:54:56 +0100 <monochrom> the ??????? manual
2021-03-21 22:55:22 +0100 <pjb> joel135: The Fine Manual.
2021-03-21 22:55:28 +0100 <MarcelineVQ> r(tfm)
2021-03-21 22:55:37 +0100 <MarcelineVQ> * (r)tfm :>
2021-03-21 22:55:40 +0100 <timCF> Yeah, I mean Go language. In my experience, it's very hard to prove them that generics are good for programming :)
2021-03-21 22:56:00 +0100 <monochrom> Oh, that one, I think we have been unfair to PIke.
2021-03-21 22:56:19 +0100 <joel135> Oh lol
2021-03-21 22:56:32 +0100 <yushyin> timCF: generics are confirmed for go2, though.
2021-03-21 22:56:38 +0100 <monochrom> Pike wanted to take time working out a simpler story for generics, so Go v1 doesn't have it, he will add it when it's ready.
2021-03-21 22:57:25 +0100 <monochrom> So that one I respect him for not rushing it.
2021-03-21 22:57:56 +0100 <monochrom> https://twitter.com/mosheroperandi/status/856946180810354688 is still worth a laugh though, while it lasts.
2021-03-21 22:58:10 +0100stree(~stree@68.36.8.116)
2021-03-21 22:58:39 +0100 <yushyin> and philip wadler helped them
2021-03-21 22:59:56 +0100 <hpc> yushyin: finally we can use the unicode aboriginal block for its original intended purpose: GADTs :D
2021-03-21 23:00:17 +0100 <hpc> (or whichever block was used for the original hack)
2021-03-21 23:03:04 +0100pfurla_(~pfurla@216.151.180.171) (Ping timeout: 256 seconds)
2021-03-21 23:03:38 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 256 seconds)
2021-03-21 23:04:05 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2021-03-21 23:04:16 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net)
2021-03-21 23:05:07 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 23:07:22 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-03-21 23:07:29 +0100LKoen(~LKoen@194.250.88.92.rev.sfr.net) (Remote host closed the connection)
2021-03-21 23:09:38 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 264 seconds)
2021-03-21 23:09:53 +0100hackageory-kratos 0.0.5.10 - API bindings for Ory Kratos https://hackage.haskell.org/package/ory-kratos-0.0.5.10 (njaremko)
2021-03-21 23:10:48 +0100darjeeling_(~darjeelin@122.245.208.187) (Ping timeout: 260 seconds)
2021-03-21 23:11:44 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-03-21 23:12:18 +0100average(uid473595@gateway/web/irccloud.com/x-sgdxyzaxzpfhfdbl) (Quit: Connection closed for inactivity)
2021-03-21 23:12:22 +0100 <ski> monochrom : seems possibly they're finally getting some form of them, <https://github.com/golang/go/issues/43651> ?
2021-03-21 23:12:27 +0100 <slack1256> I really like that wadler is well respected outside the haskell community.
2021-03-21 23:13:27 +0100 <ski> Wadler often has quite readable papers, commonly with witty titles. and seems to be a good speaker
2021-03-21 23:13:51 +0100Benzi-Junior(~BenziJuni@dsl-149-67-143.hive.is)
2021-03-21 23:14:33 +0100 <slack1256> I wonder why aren't other academics trying to use funny titles in their papers, it seems they get more noticed.
2021-03-21 23:14:36 +0100darjeeling_(~darjeelin@122.245.208.187)
2021-03-21 23:16:17 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2021-03-21 23:17:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-03-21 23:17:15 +0100 <pjb> slack1256: most of academics don't publish to get noticed, but only to fulfill their quota of publication to get the next round of budget.
2021-03-21 23:17:53 +0100lampowner(~xblow@broadband-90-154-73-166.ip.moscow.rt.ru) (Remote host closed the connection)
2021-03-21 23:20:46 +0100dhil(~dhil@80.208.56.181) (Ping timeout: 276 seconds)
2021-03-21 23:20:47 +0100hiroaki(~hiroaki@2a02:908:4b18:8c40:43d:bb62:2e5b:b1f6) (Ping timeout: 244 seconds)
2021-03-21 23:21:06 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8)
2021-03-21 23:24:24 +0100molehillish(~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection)
2021-03-21 23:25:22 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 260 seconds)
2021-03-21 23:26:57 +0100fendor(~fendor@178.115.129.38.wireless.dyn.drei.com) (Remote host closed the connection)
2021-03-21 23:27:30 +0100molehillish(~molehilli@ip98-167-226-26.ph.ph.cox.net)
2021-03-21 23:28:55 +0100knupfer(~Thunderbi@200116b82c854200c01b3ec09b839738.dip.versatel-1u1.de)
2021-03-21 23:28:59 +0100 <ski> • Joke
2021-03-21 23:29:08 +0100 <ski> Scientific standards are terrible, one should never joke : to be taken seriously, put people to sleep ! In a paper, no funny drawings, it would be a waste of paper. However, full pages of repetitive definitions, of Prussian formalism, are not considered as a waste.
2021-03-21 23:29:20 +0100 <ski> A good joke makes you understand a complex methodological point. For instance, when I say that a consistency proof is like an insurance against the explosion of Earth, you get it directly. However, some jokes are dishonest, since they don't respect the very spirit of what they are alluding to, typically the allegory of the prisoners.
2021-03-21 23:29:35 +0100 <ski> See : Allegory, Copycat, Metaphor, Numerology, Prisoners, Square Wheels.
2021-03-21 23:29:45 +0100 <ski> -- "Locus Solum : From the rules of logic to the logic of rules" (Appendix A, "A pure waste of paper") by Jean-Yves Girard in 2001 at <https://girard.perso.math.cnrs.fr/0.pdf>
2021-03-21 23:30:01 +0100ski. o O ( "Science Fictions" <https://www.smbc-comics.com/comic/science-fictions> )
2021-03-21 23:30:21 +0100coot(~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-03-21 23:30:41 +0100mav1(~mav@ip-88-152-11-222.hsi03.unitymediagroup.de)
2021-03-21 23:37:35 +0100ixlun(~matthew@109.249.184.133) (Ping timeout: 256 seconds)
2021-03-21 23:43:09 +0100juri_(~juri@178.63.35.222) (Ping timeout: 264 seconds)
2021-03-21 23:43:14 +0100son0p(~son0p@181.136.122.143)
2021-03-21 23:45:13 +0100 <hpc> that makes me think of godel escher bach's "stories", which seemed to all go something like "Socrates: imagine you have an A, B, and C such that blah blah blah blah"
2021-03-21 23:45:24 +0100 <hpc> and all i could think reading it was "jeez, just give me the actual equation"
2021-03-21 23:46:57 +0100 <ski> it can be a stepping stone, i suppose
2021-03-21 23:47:24 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 265 seconds)
2021-03-21 23:50:06 +0100chirpsalot(~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net)
2021-03-21 23:50:10 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net)
2021-03-21 23:50:28 +0100kiweun(~kiweun@cpe98524a8cef7c-cm98524a8cef7a.cpe.net.cable.rogers.com) (Remote host closed the connection)
2021-03-21 23:51:13 +0100molehillish(~molehilli@ip98-167-226-26.ph.ph.cox.net) (Remote host closed the connection)
2021-03-21 23:51:18 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-03-21 23:52:53 +0100hackagesbv 8.13 - SMT Based Verification: Symbolic Haskell theorem prover using SMT solving. https://hackage.haskell.org/package/sbv-8.13 (LeventErkok)
2021-03-21 23:53:04 +0100kiweun(~kiweun@2607:fea8:2a62:9600:c874:3671:2027:3155)