2021-03-21 00:01:18 +0100 | <ski> | the next line |
2021-03-21 00:04:56 +0100 | elfets | (~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 +0100 | andreas31 | (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
2021-03-21 00:07:32 +0100 | Tario | (~Tario@37.218.244.251) |
2021-03-21 00:07:33 +0100 | andreas31 | (~andreas@gateway/tor-sasl/andreas303) |
2021-03-21 00:09:29 +0100 | wroathe | (~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 +0100 | codygman` | (~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 +0100 | myShoggoth | (~myShoggot@75.164.81.55) |
2021-03-21 00:17:29 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 00:19:26 +0100 | Tario | (~Tario@37.218.244.251) (Read error: Connection reset by peer) |
2021-03-21 00:20:00 +0100 | Tario | (~Tario@201.192.165.173) |
2021-03-21 00:20:48 +0100 | frozenErebus | (~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 +0100 | chenshen | (~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 +0100 | Ishutin | (~ishutin@84-236-21-59.pool.digikabel.hu) |
2021-03-21 00:24:25 +0100 | cartwright | (~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 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 00:25:53 +0100 | zebrag | (~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 +0100 | cartwright | (~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 +0100 | RandomArcher | (~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 +0100 | myShoggoth | (~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 +0100 | chenshen | (~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 +0100 | hackage | higgledy 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 +0100 | chenshen | (~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 +0100 | Vadrigar | (~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 +0100 | Varis | (~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 +0100 | slack1256 | (~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 +0100 | Vadrigar | (~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 +0100 | MarcelineVQ | (~anja@198.254.208.159) |
2021-03-21 00:50:07 +0100 | <e> | mniip: yeah |
2021-03-21 00:50:38 +0100 | codygman` | (~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 +0100 | codygman` | (~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 +0100 | ski | . 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 +0100 | quinn | (~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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 00:58:30 +0100 | royal_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 +0100 | perrier-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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving) |
2021-03-21 01:03:15 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds) |
2021-03-21 01:03:18 +0100 | pfurla | (~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 +0100 | dunj3 | (~dunj3@2001:16b8:3058:3200:341d:cba6:b01f:d85d) (Quit: Leaving) |
2021-03-21 01:05:00 +0100 | matryoshka` | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) |
2021-03-21 01:05:04 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-03-21 01:06:48 +0100 | codygman` | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 01:07:30 +0100 | codygman` | (~user@47.186.207.161) |
2021-03-21 01:07:59 +0100 | mouseghost | (~draco@wikipedia/desperek) (Quit: mew wew) |
2021-03-21 01:08:16 +0100 | Tuplanolla | (~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 +0100 | perrier-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 +0100 | perrier-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 +0100 | ski | . 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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 01:12:46 +0100 | ski | . o O ( <https://en.wikipedia.org/wiki/Rectification_of_names> ) |
2021-03-21 01:12:55 +0100 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) |
2021-03-21 01:16:34 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:d9c5) |
2021-03-21 01:16:54 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 246 seconds) |
2021-03-21 01:17:44 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:d9c5) (Client Quit) |
2021-03-21 01:18:23 +0100 | merijn | (~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 +0100 | cabpa | (~cabpa@180.190.168.108) |
2021-03-21 01:25:34 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 01:25:53 +0100 | zebrag | (~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 +0100 | aarvar | (~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 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection) |
2021-03-21 01:28:33 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-03-21 01:29:56 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 01:32:18 +0100 | conal | (~conal@64.71.133.70) |
2021-03-21 01:33:47 +0100 | niHiggim | (~niHiggim@99-140-243-194.lightspeed.rlghnc.sbcglobal.net) |
2021-03-21 01:34:45 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds) |
2021-03-21 01:36:09 +0100 | niHiggim | (~niHiggim@99-140-243-194.lightspeed.rlghnc.sbcglobal.net) (Remote host closed the connection) |
2021-03-21 01:36:51 +0100 | cyberlard | (~cyberlard@unaffiliated/jludwig) (Ping timeout: 246 seconds) |
2021-03-21 01:37:26 +0100 | cyberlard | (~cyberlard@unaffiliated/jludwig) |
2021-03-21 01:38:07 +0100 | acidjnk_new | (~acidjnk@p200300d0c72b959874ac6c8157d63e67.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-03-21 01:40:26 +0100 | aarvar | (~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 +0100 | W3BV1P3R | (~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net) |
2021-03-21 01:48:23 +0100 | twk- | (~thewormki@unaffiliated/twk-) (Ping timeout: 272 seconds) |
2021-03-21 01:48:38 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
2021-03-21 01:52:32 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-03-21 01:54:17 +0100 | W3BV1P3R | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 01:57:15 +0100 | ezrakilty | (~ezrakilty@97-113-58-224.tukw.qwest.net) (Remote host closed the connection) |
2021-03-21 01:59:44 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2021-03-21 02:01:00 +0100 | dhil | (~dhil@80.208.56.181) (Ping timeout: 246 seconds) |
2021-03-21 02:01:22 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 02:01:26 +0100 | twk- | (~thewormki@unaffiliated/twk-) |
2021-03-21 02:03:13 +0100 | elliott_ | (~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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 02:10:41 +0100 | forgottenone | (~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 +0100 | cartwright | (~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 +0100 | cantstanya | (~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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds) |
2021-03-21 02:15:08 +0100 | Deide | (~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 +0100 | nf | (~n@monade.li) (Remote host closed the connection) |
2021-03-21 02:16:56 +0100 | nf | (~n@monade.li) |
2021-03-21 02:17:17 +0100 | LogicUpgrade | (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 +0100 | maerwald | (~maerwald@mail.hasufell.de) (Ping timeout: 246 seconds) |
2021-03-21 02:18:21 +0100 | LittleFox94 | (~littlefox@rondra.lf-net.org) |
2021-03-21 02:18:32 +0100 | maerwald | (~maerwald@mail.hasufell.de) |
2021-03-21 02:18:34 +0100 | Benett | (~Benett@unaffiliated/benett) (Quit: ) |
2021-03-21 02:18:38 +0100 | LittleFox | (~littlefox@rondra.lf-net.org) (Ping timeout: 264 seconds) |
2021-03-21 02:18:49 +0100 | Benett | (~Benett@unaffiliated/benett) |
2021-03-21 02:18:52 +0100 | lisq | (~quassel@lis.moe) (Quit: No Ping reply in 180 seconds.) |
2021-03-21 02:19:09 +0100 | xelxebar_ | (~xelxebar@gateway/tor-sasl/xelxebar) |
2021-03-21 02:19:26 +0100 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 268 seconds) |
2021-03-21 02:19:26 +0100 | xelxebar | (~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 +0100 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) |
2021-03-21 02:20:11 +0100 | lisq | (~quassel@lis.moe) |
2021-03-21 02:20:40 +0100 | cabpa_ | (~cabpa@180.190.165.139) |
2021-03-21 02:20:57 +0100 | cabpa | (~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 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-03-21 02:24:31 +0100 | zerok | (~user@115-186-141-88.nayatel.pk) |
2021-03-21 02:24:38 +0100 | Wuzzy | (~Wuzzy@p57a2ecf2.dip0.t-ipconnect.de) (Quit: Wuzzy) |
2021-03-21 02:27:43 +0100 | z0k | (~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 +0100 | ski | smiles |
2021-03-21 02:37:25 +0100 | rajivr | (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 +0100 | MarcelineVQ | (~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 +0100 | MarcelineVQ | (~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 +0100 | zerok | (~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 +0100 | renzhi | (~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 +0100 | ntjns_ | (~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 +0100 | m0rphism | (~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 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-03-21 02:48:41 +0100 | elliott_ | (~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 +0100 | zerok | (~user@101.50.108.120) |
2021-03-21 02:48:54 +0100 | forgottenone | (~forgotten@176.42.24.127) |
2021-03-21 02:49:14 +0100 | perrier-jouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-03-21 02:49:47 +0100 | Beetstra1 | (~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 +0100 | ski | enters 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 +0100 | conal | (~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 +0100 | Tario | (~Tario@201.192.165.173) |
2021-03-21 03:05:50 +0100 | <MarcelineVQ> | hololeap: raft concensus :> |
2021-03-21 03:05:57 +0100 | botro | (~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 +0100 | ski | . 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 +0100 | myShoggoth | (~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 +0100 | ski | . 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 +0100 | Wuzzy | (~Wuzzy@p57a2ecf2.dip0.t-ipconnect.de) |
2021-03-21 03:26:31 +0100 | average | (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 +0100 | xff0x_ | (~xff0x@2001:1a81:527b:4200:5766:67eb:a550:2a8c) (Ping timeout: 244 seconds) |
2021-03-21 03:28:09 +0100 | conal | (~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 +0100 | xff0x_ | (~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 +0100 | conal | (~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 +0100 | chewb | (~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 +0100 | LogicUpgrade | (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 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:2b70) |
2021-03-21 03:39:02 +0100 | ski | . 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 +0100 | liyang | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-03-21 03:49:17 +0100 | Sheilong | (uid293653@gateway/web/irccloud.com/x-vnorxjroamajdrqk) () |
2021-03-21 03:53:27 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:2b70) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-03-21 03:56:04 +0100 | chenshen | (~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 +0100 | FinnElija | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) |
2021-03-21 04:02:52 +0100 | finn_elija | Guest46465 |
2021-03-21 04:02:52 +0100 | FinnElija | finn_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 +0100 | conal | (~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 +0100 | Guest46465 | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Ping timeout: 268 seconds) |
2021-03-21 04:07:08 +0100 | drbean | (~drbean@TC210-63-209-96.static.apol.com.tw) |
2021-03-21 04:11:19 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 04:12:06 +0100 | perrier-jouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.1) |
2021-03-21 04:14:57 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 264 seconds) |
2021-03-21 04:17:03 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds) |
2021-03-21 04:18:42 +0100 | matryoshka` | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 265 seconds) |
2021-03-21 04:18:54 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) |
2021-03-21 04:21:21 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds) |
2021-03-21 04:22:54 +0100 | elusive | (~Jeanne-Ka@static-198-54-134-157.cust.tzulo.com) (Quit: Leaving) |
2021-03-21 04:23:06 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-03-21 04:25:05 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 04:25:26 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 04:26:17 +0100 | Tario | (~Tario@200.119.186.19) |
2021-03-21 04:27:07 +0100 | gitgoood | (~gitgood@80-44-12-39.dynamic.dsl.as9105.com) |
2021-03-21 04:29:34 +0100 | gitgood | (~gitgood@80-44-9-221.dynamic.dsl.as9105.com) (Ping timeout: 256 seconds) |
2021-03-21 04:30:28 +0100 | Tario | (~Tario@200.119.186.19) (Read error: Connection reset by peer) |
2021-03-21 04:30:40 +0100 | Tario | (~Tario@201.192.165.173) |
2021-03-21 04:32:18 +0100 | Wuzzy | (~Wuzzy@p57a2ecf2.dip0.t-ipconnect.de) (Remote host closed the connection) |
2021-03-21 04:46:18 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 04:48:47 +0100 | theDon | (~td@muedsl-82-207-238-252.citykom.de) (Ping timeout: 256 seconds) |
2021-03-21 04:48:51 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) (Remote host closed the connection) |
2021-03-21 04:49:18 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) |
2021-03-21 04:50:31 +0100 | theDon | (~td@muedsl-82-207-238-103.citykom.de) |
2021-03-21 04:50:32 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
2021-03-21 04:52:23 +0100 | alx741 | (~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 +0100 | hackage | atlassian-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 +0100 | santiweight | (622165e4@c-98-33-101-228.hsd1.ca.comcast.net) |
2021-03-21 05:09:19 +0100 | bitmagie | (~Thunderbi@200116b806be8f00f031bd0980c89ee9.dip.versatel-1u1.de) |
2021-03-21 05:10:39 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 05:10:44 +0100 | frozenErebus | (~frozenEre@94.129.70.18) |
2021-03-21 05:10:59 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 05:13:23 +0100 | hackage | atlassian-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 +0100 | frozenErebus | (~frozenEre@94.129.70.18) (Ping timeout: 240 seconds) |
2021-03-21 05:15:15 +0100 | geowiesnot_bis | (~user@87-89-181-157.abo.bbox.fr) |
2021-03-21 05:18:30 +0100 | urodna | (~urodna@unaffiliated/urodna) (Quit: urodna) |
2021-03-21 05:20:07 +0100 | saurik | (saurik@carrier.saurik.com) (Remote host closed the connection) |
2021-03-21 05:22:30 +0100 | slack1256 | (~slack1256@dvc-186-186-101-190.movil.vtr.net) (Remote host closed the connection) |
2021-03-21 05:23:09 +0100 | HarveyPwca | (~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06) (Quit: Leaving) |
2021-03-21 05:26:50 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-03-21 05:27:20 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 05:27:22 +0100 | Tario | (~Tario@201.192.165.173) |
2021-03-21 05:27:51 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 05:31:15 +0100 | bobbytab1es | bobbytables |
2021-03-21 05:34:43 +0100 | shad0w_ | (a0ca254d@160.202.37.77) |
2021-03-21 05:39:34 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-ycjhikdeorfguwps) |
2021-03-21 05:41:44 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2021-03-21 05:43:59 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 05:44:23 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 05:48:32 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 05:49:01 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 05:50:57 +0100 | geowiesnot_bis | (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 246 seconds) |
2021-03-21 05:51:36 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 05:51:53 +0100 | hackage | pandoc 2.13 - Conversion between markup formats https://hackage.haskell.org/package/pandoc-2.13 (JohnMacFarlane) |
2021-03-21 05:51:59 +0100 | codygman__ | (~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 +0100 | dramforever | (~dram@unaffiliated/dramforever) |
2021-03-21 06:02:25 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 06:06:43 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds) |
2021-03-21 06:12:27 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 06:12:36 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 06:17:57 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds) |
2021-03-21 06:19:37 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-03-21 06:20:31 +0100 | kayvan | (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
2021-03-21 06:26:20 +0100 | shad0w_ | (a0ca254d@160.202.37.77) (Quit: Connection closed) |
2021-03-21 06:26:54 +0100 | average | (uid473595@gateway/web/irccloud.com/x-mlbuggytwdwptlyu) (Quit: Connection closed for inactivity) |
2021-03-21 06:28:06 +0100 | kiweun | (~kiweun@2607:fea8:2a62:9600:7566:23e2:7687:b8cb) (Remote host closed the connection) |
2021-03-21 06:30:17 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 06:31:42 +0100 | day_ | (~Unknown@unaffiliated/day) |
2021-03-21 06:31:58 +0100 | dramforever | (~dram@unaffiliated/dramforever) (Quit: Leaving) |
2021-03-21 06:32:01 +0100 | petersen | (~petersen@redhat/juhp) |
2021-03-21 06:33:16 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 06:33:41 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 06:34:08 +0100 | myShoggoth | (~myShoggot@75.164.81.55) (Ping timeout: 240 seconds) |
2021-03-21 06:34:38 +0100 | day | (~Unknown@unaffiliated/day) (Ping timeout: 245 seconds) |
2021-03-21 06:34:38 +0100 | day_ | day |
2021-03-21 06:34:56 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2021-03-21 06:37:56 +0100 | W3BV1P3R | (~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net) |
2021-03-21 06:38:33 +0100 | W3BV1P3R | (~W3BV1P3R@c-73-5-91-226.hsd1.tn.comcast.net) (Client Quit) |
2021-03-21 06:39:30 +0100 | o1lo01ol1o | (~o1lo01ol1@bl7-88-181.dsl.telepac.pt) |
2021-03-21 06:48:59 +0100 | kayvan | (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection) |
2021-03-21 06:49:50 +0100 | codygman` | (~user@47.186.207.161) (Read error: No route to host) |
2021-03-21 06:50:01 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 06:50:39 +0100 | bitmagie | (~Thunderbi@200116b806be8f00f031bd0980c89ee9.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-03-21 06:50:40 +0100 | o1lo01ol1o | (~o1lo01ol1@bl7-88-181.dsl.telepac.pt) (Remote host closed the connection) |
2021-03-21 06:51:03 +0100 | pavonia | (~user@unaffiliated/siracusa) (Quit: Bye!) |
2021-03-21 06:53:44 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-03-21 06:55:28 +0100 | Sonderblade | (~helloman@2a02:aa1:100d:fe6f:6a75:3fbc:c81a:1def) |
2021-03-21 07:04:03 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2021-03-21 07:17:59 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 07:21:01 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 07:24:24 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 246 seconds) |
2021-03-21 07:25:07 +0100 | dave_uy | (~david@108.61.193.26) (Quit: The Lounge - https://thelounge.chat) |
2021-03-21 07:28:25 +0100 | dave_uy | (~david@108.61.193.26) |
2021-03-21 07:30:51 +0100 | Sonderblade | (~helloman@2a02:aa1:100d:fe6f:6a75:3fbc:c81a:1def) (Quit: Konversation terminated!) |
2021-03-21 07:34:32 +0100 | kilolympus | (~kilolympu@5.151.5.181) (Quit: Quitting IRC :() |
2021-03-21 07:34:52 +0100 | kilolympus | (~kilolympu@5.151.5.178) |
2021-03-21 07:36:13 +0100 | sparsity | (5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251) |
2021-03-21 07:36:26 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-03-21 07:38:13 +0100 | Garbanzo | (~Garbanzo@70.234.205.193) (Ping timeout: 256 seconds) |
2021-03-21 07:38:17 +0100 | hexfive | (~hexfive@50.35.83.177) (Quit: i must go. my people need me.) |
2021-03-21 07:44:37 +0100 | codygman` | (~user@47.186.207.161) |
2021-03-21 07:45:39 +0100 | shad0w_ | (a0ca254d@160.202.37.77) |
2021-03-21 07:46:01 +0100 | shad0w_ | (a0ca254d@160.202.37.77) (Client Quit) |
2021-03-21 07:48:28 +0100 | dsrt^ | (~hph@ip98-184-89-2.mc.at.cox.net) () |
2021-03-21 07:50:33 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) |
2021-03-21 07:54:39 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Remote host closed the connection) |
2021-03-21 07:57:53 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) |
2021-03-21 08:01:56 +0100 | petersen | (~petersen@redhat/juhp) (Quit: petersen) |
2021-03-21 08:02:49 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection) |
2021-03-21 08:03:12 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2021-03-21 08:09:05 +0100 | shad0w_ | (a0ca254d@160.202.37.77) |
2021-03-21 08:10:36 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
2021-03-21 08:12:34 +0100 | sh9 | (~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8) |
2021-03-21 08:12:56 +0100 | codygman` | (~user@47.186.207.161) (Ping timeout: 240 seconds) |
2021-03-21 08:13:43 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 08:15:29 +0100 | ViCi | (daniel@10PLM.ro) (Quit: Quit!) |
2021-03-21 08:16:32 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) (Ping timeout: 240 seconds) |
2021-03-21 08:18:27 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds) |
2021-03-21 08:18:30 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Remote host closed the connection) |
2021-03-21 08:20:52 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) |
2021-03-21 08:23:25 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection) |
2021-03-21 08:24:02 +0100 | danso | (~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 264 seconds) |
2021-03-21 08:24:02 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) |
2021-03-21 08:24:22 +0100 | kderme | (4fa6552d@ppp079166085045.access.hol.gr) (Ping timeout: 240 seconds) |
2021-03-21 08:25:02 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Remote host closed the connection) |
2021-03-21 08:26:28 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) (Ping timeout: 260 seconds) |
2021-03-21 08:26:58 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) |
2021-03-21 08:30:00 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) |
2021-03-21 08:30:14 +0100 | shad0w_ | (a0ca254d@160.202.37.77) (Quit: Connection closed) |
2021-03-21 08:36:05 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:2b70) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-03-21 08:37:48 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 08:39:55 +0100 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 268 seconds) |
2021-03-21 08:40:33 +0100 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) |
2021-03-21 08:40:36 +0100 | joncol | (~jco@c188-150-101-195.bredband.comhem.se) |
2021-03-21 08:43:01 +0100 | Lowl3v3l | (~Lowl3v3l@dslb-002-207-103-026.002.207.pools.vodafone-ip.de) (Remote host closed the connection) |
2021-03-21 08:43:04 +0100 | heatsink_ | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2021-03-21 08:45:38 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:6075:d116:7f4b:9342) (Ping timeout: 264 seconds) |
2021-03-21 08:46:33 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-xsbczufuwcygdtaj) (Quit: Connection closed for inactivity) |
2021-03-21 08:50:14 +0100 | merijn | (~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 +0100 | botro | (~botro@178.239.168.171) (Remote host closed the connection) |
2021-03-21 08:51:45 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 08:52:11 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 09:02:53 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
2021-03-21 09:02:57 +0100 | elliott_ | (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 264 seconds) |
2021-03-21 09:05:14 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2021-03-21 09:07:09 +0100 | knupfer | (~Thunderbi@200116b82c51ca00ed9c36bf6688f2f7.dip.versatel-1u1.de) |
2021-03-21 09:07:15 +0100 | zleap | (~zleap@185.163.110.108) |
2021-03-21 09:08:41 +0100 | marinelli | (~marinelli@gateway/tor-sasl/marinelli) |
2021-03-21 09:11:56 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 09:12:19 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 09:13:06 +0100 | knupfer1 | (~Thunderbi@200116b82c9b050025eb5c46c736ec65.dip.versatel-1u1.de) |
2021-03-21 09:13:27 +0100 | knupfer | (~Thunderbi@200116b82c51ca00ed9c36bf6688f2f7.dip.versatel-1u1.de) (Ping timeout: 244 seconds) |
2021-03-21 09:13:27 +0100 | knupfer1 | knupfer |
2021-03-21 09:18:51 +0100 | Sathiana | (~kath@185-113-98-38.cust.bredband2.com) |
2021-03-21 09:19:48 +0100 | elliott_ | (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) |
2021-03-21 09:19:51 +0100 | danso | (~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) |
2021-03-21 09:21:19 +0100 | Lowl3v3l | (~Lowl3v3l@dslb-002-207-103-026.002.207.pools.vodafone-ip.de) |
2021-03-21 09:22:37 +0100 | average | (uid473595@gateway/web/irccloud.com/x-sgdxyzaxzpfhfdbl) |
2021-03-21 09:24:32 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-03-21 09:26:33 +0100 | jack1909_ | (~qpls@cpeb4750e67d202-cmf81d0fad5840.cpe.net.fido.ca) (Ping timeout: 260 seconds) |
2021-03-21 09:27:56 +0100 | jack1909 | (~qpls@23.105.170.163) |
2021-03-21 09:30:33 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2021-03-21 09:35:35 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
2021-03-21 09:36:50 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 09:37:16 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 09:39:31 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 09:39:56 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 09:42:54 +0100 | idhugo_ | (~idhugo@87-49-147-45-mobile.dk.customer.tdc.net) |
2021-03-21 09:44:08 +0100 | idhugo | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Ping timeout: 240 seconds) |
2021-03-21 09:44:52 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 09:51:23 +0100 | jneira | (501e65b6@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.182) (Ping timeout: 256 seconds) |
2021-03-21 09:56:21 +0100 | marinelli | (~marinelli@gateway/tor-sasl/marinelli) (Quit: marinelli) |
2021-03-21 09:59:23 +0100 | hackage | bottom 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 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
2021-03-21 09:59:57 +0100 | knupfer | (~Thunderbi@200116b82c9b050025eb5c46c736ec65.dip.versatel-1u1.de) (Ping timeout: 244 seconds) |
2021-03-21 10:01:11 +0100 | drbean | (~drbean@TC210-63-209-96.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin2 - https://znc.in) |
2021-03-21 10:02:34 +0100 | brick | (~brick@59.88.30.166) |
2021-03-21 10:03:46 +0100 | heatsink_ | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-03-21 10:05:23 +0100 | fendor | (~fendor@178.115.129.38.wireless.dyn.drei.com) |
2021-03-21 10:06:10 +0100 | unyu | (~pyon@unaffiliated/pyon) |
2021-03-21 10:07:42 +0100 | SaitamaPlus | (uid272474@gateway/web/irccloud.com/x-fuuiapjpwochxlja) (Quit: Connection closed for inactivity) |
2021-03-21 10:11:13 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds) |
2021-03-21 10:14:50 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 10:17:08 +0100 | hillary | (3b581ea6@59.88.30.166) |
2021-03-21 10:19:45 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds) |
2021-03-21 10:20:14 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) |
2021-03-21 10:22:09 +0100 | m0rphism | (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) |
2021-03-21 10:22:56 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 10:23:13 +0100 | Sgeo | (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer) |
2021-03-21 10:25:03 +0100 | dopplergange | (~dop@titan.pathogen.is) |
2021-03-21 10:26:47 +0100 | dopplergange | (~dop@titan.pathogen.is) (Read error: Connection reset by peer) |
2021-03-21 10:27:18 +0100 | dopplergange | (~dop@titan.pathogen.is) |
2021-03-21 10:33:19 +0100 | curiousgay | (~gay@178.217.208.8) (Ping timeout: 256 seconds) |
2021-03-21 10:33:53 +0100 | codygman__ | (~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 +0100 | dopplerg- | (~dop@185.141.206.207) |
2021-03-21 10:40:45 +0100 | dopplergange | (~dop@titan.pathogen.is) (Ping timeout: 264 seconds) |
2021-03-21 10:40:54 +0100 | curiousgay | (~gay@178.217.208.8) |
2021-03-21 10:41:57 +0100 | m0rphism | (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 264 seconds) |
2021-03-21 10:44:39 +0100 | m0rphism | (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) |
2021-03-21 10:53:10 +0100 | hillary | (3b581ea6@59.88.30.166) (Quit: Connection closed) |
2021-03-21 11:01:09 +0100 | cabpa_ | (~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 +0100 | mikoto-chan | (~anass@gateway/tor-sasl/mikoto-chan) |
2021-03-21 11:03:20 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
2021-03-21 11:04:10 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) |
2021-03-21 11:05:42 +0100 | cabpa | (~cabpa@180.190.165.139) |
2021-03-21 11:09:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds) |
2021-03-21 11:09:10 +0100 | jakalx | (~jakalx@base.jakalx.net) () |
2021-03-21 11:09:47 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2021-03-21 11:10:14 +0100 | brick | (~brick@59.88.30.166) () |
2021-03-21 11:12:34 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2021-03-21 11:13:19 +0100 | kenran | (~kenran@mue-88-130-62-124.dsl.tropolys.de) |
2021-03-21 11:13:20 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 11:13:26 +0100 | acidjnk_new | (~acidjnk@p200300d0c72b959874ac6c8157d63e67.dip0.t-ipconnect.de) |
2021-03-21 11:13:51 +0100 | shad0w_ | (a0ca254d@160.202.37.77) |
2021-03-21 11:15:31 +0100 | mikoto-chan | (~anass@gateway/tor-sasl/mikoto-chan) (Quit: mikoto-chan) |
2021-03-21 11:20:51 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-03-21 11:21:41 +0100 | dopplerg- | (~dop@185.141.206.207) (Quit: ZNC 1.7.5 - https://znc.in) |
2021-03-21 11:21:54 +0100 | RusAlex | (~Chel@unaffiliated/rusalex) (Ping timeout: 265 seconds) |
2021-03-21 11:22:08 +0100 | RusAlex | (~Chel@unaffiliated/rusalex) |
2021-03-21 11:24:41 +0100 | vicfred | (~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 +0100 | sparsity | (5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251) (Quit: Connection closed) |
2021-03-21 11:27:20 +0100 | son0p | (~son0p@181.58.39.182) |
2021-03-21 11:29:00 +0100 | frozenErebus | (~frozenEre@94.129.70.18) |
2021-03-21 11:30:33 +0100 | dhil | (~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 +0100 | RusAlex | (~Chel@unaffiliated/rusalex) (Ping timeout: 246 seconds) |
2021-03-21 11:34:17 +0100 | RusAlex | (~Chel@unaffiliated/rusalex) |
2021-03-21 11:36:35 +0100 | LKoen | (~LKoen@194.250.88.92.rev.sfr.net) |
2021-03-21 11:38:23 +0100 | hackage | hxt 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 +0100 | shailangsa | (~shailangs@host86-162-150-241.range86-162.btcentralplus.com) (Ping timeout: 256 seconds) |
2021-03-21 11:40:11 +0100 | idhugo__ | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) |
2021-03-21 11:40:21 +0100 | meck | (~meck@li1809-18.members.linode.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-03-21 11:40:48 +0100 | malumore | (~malumore@151.62.127.88) |
2021-03-21 11:42:20 +0100 | meck | (~meck@li1809-18.members.linode.com) |
2021-03-21 11:42:49 +0100 | Pickchea | (~private@unaffiliated/pickchea) |
2021-03-21 11:43:01 +0100 | idhugo_ | (~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 +0100 | kenran | (~kenran@mue-88-130-62-124.dsl.tropolys.de) (Ping timeout: 245 seconds) |
2021-03-21 11:53:21 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 264 seconds) |
2021-03-21 11:54:26 +0100 | kenran | (~kenran@mue-88-130-62-124.dsl.tropolys.de) |
2021-03-21 11:55:45 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
2021-03-21 11:56:42 +0100 | SaitamaPlus | (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 +0100 | kuribas | (~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 +0100 | shailangsa | (~shailangs@host165-120-169-19.range165-120.btcentralplus.com) |
2021-03-21 12:05:42 +0100 | heatsink | (~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 +0100 | berberman_ | (~berberman@unaffiliated/berberman) |
2021-03-21 12:10:14 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds) |
2021-03-21 12:10:26 +0100 | berberman | (~berberman@unaffiliated/berberman) (Ping timeout: 265 seconds) |
2021-03-21 12:10:32 +0100 | AbtractSingleton | (rasurumatr@gateway/shell/matrix.org/x-bshxgvdkrvkrlckp) ("User left") |
2021-03-21 12:11:31 +0100 | Franciman | (~francesco@host-79-53-62-46.retail.telecomitalia.it) |
2021-03-21 12:12:54 +0100 | kenran | (~kenran@mue-88-130-62-124.dsl.tropolys.de) (Quit: leaving) |
2021-03-21 12:13:34 +0100 | kiweun | (~kiweun@cpe98524a8cef7c-cm98524a8cef7a.cpe.net.cable.rogers.com) |
2021-03-21 12:17:08 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 245 seconds) |
2021-03-21 12:18:56 +0100 | aarvar | (~foewfoiew@2601:602:a080:fa0:75fb:cea1:4d26:9157) (Ping timeout: 240 seconds) |
2021-03-21 12:34:14 +0100 | mouseghost | (~draco@87-206-9-185.dynamic.chello.pl) |
2021-03-21 12:34:14 +0100 | mouseghost | (~draco@87-206-9-185.dynamic.chello.pl) (Changing host) |
2021-03-21 12:34:14 +0100 | mouseghost | (~draco@wikipedia/desperek) |
2021-03-21 12:42:21 +0100 | haskell_newbie | (~haskellne@111.119.187.43) |
2021-03-21 12:44:42 +0100 | curl | (5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251) |
2021-03-21 12:44:56 +0100 | dcoutts__ | (~duncan@85.186.125.91.dyn.plus.net) (Ping timeout: 240 seconds) |
2021-03-21 12:45:10 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-03-21 12:45:24 +0100 | dcoutts | (~dcoutts@unaffiliated/dcoutts) (Ping timeout: 256 seconds) |
2021-03-21 12:46:23 +0100 | hackage | ipa 0.2 - Internal Phonetic Alphabet (IPA) https://hackage.haskell.org/package/ipa-0.2 (RoryTylerHayford) |
2021-03-21 12:46:33 +0100 | Hi-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 +0100 | dcoutts__ | (~duncan@94.186.125.91.dyn.plus.net) |
2021-03-21 12:49:33 +0100 | ski | smiles |
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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 12:55:52 +0100 | ski | feels 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 +0100 | drbean | (~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 +0100 | zleap | (~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 +0100 | LKoen | (~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 +0100 | tsaka__ | (~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 +0100 | tsaka__ | (~torstein@ppp-94-65-45-45.home.otenet.gr) |
2021-03-21 13:19:27 +0100 | spake | (~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 +0100 | shad0w_ | (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 +0100 | tsaka__ | (~torstein@ppp-94-65-45-45.home.otenet.gr) (Ping timeout: 256 seconds) |
2021-03-21 13:28:07 +0100 | dementorr | (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 +0100 | Vadrigar | (~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 +0100 | gitgoood | (~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 +0100 | Vadrigar | (~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 +0100 | zerok | (~user@101.50.108.120) (Quit: WeeChat 3.0) |
2021-03-21 13:41:31 +0100 | z0k | (~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 +0100 | zaquest | (~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 +0100 | Pickchea | (~private@unaffiliated/pickchea) (Ping timeout: 256 seconds) |
2021-03-21 13:49:26 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-03-21 13:49:29 +0100 | zaquest | (~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 +0100 | peanut_ | (~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 +0100 | Vadrigar | (~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 +0100 | matryoshka | (~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 +0100 | coot | (~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl) |
2021-03-21 13:58:27 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds) |
2021-03-21 14:02:44 +0100 | son0p | (~son0p@181.58.39.182) (Quit: Lost terminal) |
2021-03-21 14:02:59 +0100 | matryoshka | (~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 +0100 | ShalokShalom | (b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5) |
2021-03-21 14:06:52 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) |
2021-03-21 14:07:14 +0100 | idhugo_ | (~idhugo@87-49-147-45-mobile.dk.customer.tdc.net) |
2021-03-21 14:08:29 +0100 | perrier-jouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-03-21 14:09:17 +0100 | curl | (5ce955fb@gateway/web/cgi-irc/kiwiirc.com/ip.92.233.85.251) (Quit: Connection closed) |
2021-03-21 14:10:03 +0100 | idhugo__ | (~idhugo@87-49-146-176-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds) |
2021-03-21 14:11:17 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 14:12:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds) |
2021-03-21 14:13:45 +0100 | gitgood | (~gitgood@80-44-12-39.dynamic.dsl.as9105.com) |
2021-03-21 14:14:16 +0100 | ShalokShalom | (b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5) (Quit: Connection closed) |
2021-03-21 14:15:18 +0100 | ShalokShalom | (b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5) |
2021-03-21 14:17:16 +0100 | urodna | (~urodna@unaffiliated/urodna) |
2021-03-21 14:19:47 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2021-03-21 14:20:28 +0100 | haskell_newbie | (~haskellne@111.119.187.43) (Ping timeout: 245 seconds) |
2021-03-21 14:26:21 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-03-21 14:28:18 +0100 | tsaka__ | (~torstein@ppp-94-65-45-45.home.otenet.gr) |
2021-03-21 14:29:01 +0100 | hexagenic | (~mattias@81-224-107-147-no71.tbcn.telia.com) |
2021-03-21 14:29:12 +0100 | xelxebar_ | (~xelxebar@gateway/tor-sasl/xelxebar) (Remote host closed the connection) |
2021-03-21 14:29:29 +0100 | xelxebar | (~xelxebar@gateway/tor-sasl/xelxebar) |
2021-03-21 14:30:11 +0100 | jakalx | (~jakalx@base.jakalx.net) () |
2021-03-21 14:31:05 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) |
2021-03-21 14:34:09 +0100 | ShalokShalom | (b9110d05@gateway/web/cgi-irc/kiwiirc.com/ip.185.17.13.5) (Ping timeout: 256 seconds) |
2021-03-21 14:34:25 +0100 | RandomArcher | (~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 +0100 | Pickchea | (~private@unaffiliated/pickchea) |
2021-03-21 14:38:17 +0100 | coot | (~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2021-03-21 14:39:33 +0100 | frozenErebus | (~frozenEre@94.129.70.18) (Ping timeout: 264 seconds) |
2021-03-21 14:41:27 +0100 | neiluj | (~jco@unaffiliated/neiluj) (Remote host closed the connection) |
2021-03-21 14:45:35 +0100 | RandomArcher | (~isho@90.153.186.32) (Quit: Konversation terminated!) |
2021-03-21 14:45:59 +0100 | RandomArcher | (~RandomArc@90.153.186.32) |
2021-03-21 14:51:02 +0100 | son0p | (~son0p@181.136.122.143) |
2021-03-21 14:53:21 +0100 | drbean | (~drbean@TC210-63-209-99.static.apol.com.tw) (Ping timeout: 264 seconds) |
2021-03-21 14:53:44 +0100 | augnun | (~augnun@2804:14c:658b:41bb:600:c14b:1892:9aca) |
2021-03-21 14:54:27 +0100 | acidjnk_new | (~acidjnk@p200300d0c72b959874ac6c8157d63e67.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2021-03-21 14:56:45 +0100 | tromp_ | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-03-21 14:57:08 +0100 | frozenErebus | (~frozenEre@94.129.70.18) |
2021-03-21 14:58:59 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 14:59:20 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 14:59:57 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2021-03-21 15:03:27 +0100 | vincenzopalazzo | (~vincenzop@host-79-30-9-166.retail.telecomitalia.it) |
2021-03-21 15:03:44 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds) |
2021-03-21 15:06:00 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2021-03-21 15:06:30 +0100 | mastarija | (~mastarija@31.217.19.201) |
2021-03-21 15:06:49 +0100 | azure1 | (~azure@103.154.230.130) |
2021-03-21 15:10:09 +0100 | Rudd0^ | (~Rudd0@185.189.115.103) (Ping timeout: 264 seconds) |
2021-03-21 15:10:09 +0100 | Guest82011 | (~azure@103.154.230.130) (Ping timeout: 264 seconds) |
2021-03-21 15:11:10 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 15:11:17 +0100 | ajc1 | (~ajc@69.231.232.79) |
2021-03-21 15:11:18 +0100 | azure1 | (~azure@103.154.230.130) (Ping timeout: 246 seconds) |
2021-03-21 15:11:55 +0100 | ajc1 | (~ajc@69.231.232.79) (Client Quit) |
2021-03-21 15:12:56 +0100 | augnun | (~augnun@2804:14c:658b:41bb:600:c14b:1892:9aca) (Ping timeout: 240 seconds) |
2021-03-21 15:13:06 +0100 | azure1 | (~azure@103.154.230.130) |
2021-03-21 15:13:12 +0100 | geekosaur | (ae68c070@cpe-174-104-192-112.neo.res.rr.com) |
2021-03-21 15:13:41 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-03-21 15:15:43 +0100 | m1dnight_ | (~m1dnight@78-22-9-5.access.telenet.be) (Quit: WeeChat 2.4) |
2021-03-21 15:15:44 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
2021-03-21 15:16:04 +0100 | Lycurgus | (~niemand@98.4.116.165) |
2021-03-21 15:17:40 +0100 | xelxebar | (~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 268 seconds) |
2021-03-21 15:17:48 +0100 | m1dnight_ | (~m1dnight@78-22-9-5.access.telenet.be) |
2021-03-21 15:18:14 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2021-03-21 15:20:24 +0100 | Varis | (~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 +0100 | timCF | (~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 +0100 | wonko7 | (~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 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 15:25:55 +0100 | zebrag | (~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 +0100 | RandomArcher | (~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 +0100 | LKoen | (~LKoen@194.250.88.92.rev.sfr.net) |
2021-03-21 15:30:34 +0100 | rond_ | (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 +0100 | royal_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 +0100 | xelxebar | (~xelxebar@gateway/tor-sasl/xelxebar) |
2021-03-21 15:35:13 +0100 | renzhi | (~renzhi@modemcable070.17-177-173.mc.videotron.ca) |
2021-03-21 15:37:33 +0100 | royal_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 +0100 | Pickchea | (~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 +0100 | molehillish | (~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 +0100 | Tario | (~Tario@201.192.165.173) |
2021-03-21 15:44:16 +0100 | jil``` | (~user@45.86.162.6) ("ERC (IRC client for Emacs 26.1)") |
2021-03-21 15:45:14 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-03-21 15:45:20 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds) |
2021-03-21 15:45:51 +0100 | sssb54 | (~ssssb56@vps-b2931db6.vps.ovh.ca) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
2021-03-21 15:46:43 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 245 seconds) |
2021-03-21 15:47:41 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) |
2021-03-21 15:48:58 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:e0d0:506b:db48:8ec8) (Remote host closed the connection) |
2021-03-21 15:49:56 +0100 | Zetagon | (~leo@c151-177-52-233.bredband.comhem.se) |
2021-03-21 15:51:43 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2021-03-21 15:52:39 +0100 | plutoniix | (~q@node-uhl.pool-125-24.dynamic.totinternet.net) |
2021-03-21 15:52:56 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 15:54:01 +0100 | sssb54 | (~ssssb56@vps-b2931db6.vps.ovh.ca) |
2021-03-21 15:54:26 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 15:55:33 +0100 | Lycurgus | (~niemand@98.4.116.165) (Quit: Exeunt) |
2021-03-21 15:57:33 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 264 seconds) |
2021-03-21 15:57:40 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-nlxaujrugfazsleg) |
2021-03-21 15:57:56 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection) |
2021-03-21 16:02:26 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) |
2021-03-21 16:07:04 +0100 | tsaka__ | (~torstein@ppp-94-65-45-45.home.otenet.gr) (Ping timeout: 265 seconds) |
2021-03-21 16:08:12 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) |
2021-03-21 16:08:14 +0100 | hexfive | (~hexfive@50.35.83.177) |
2021-03-21 16:09:29 +0100 | alx741 | (~alx741@181.196.69.79) |
2021-03-21 16:10:03 +0100 | CrazyPython | (~crazypyth@98.122.164.118) |
2021-03-21 16:10:54 +0100 | son0p | (~son0p@181.136.122.143) (Remote host closed the connection) |
2021-03-21 16:12:18 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 16:13:10 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 268 seconds) |
2021-03-21 16:13:14 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds) |
2021-03-21 16:13:55 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2021-03-21 16:15:32 +0100 | Pickchea | (~private@unaffiliated/pickchea) |
2021-03-21 16:19:20 +0100 | merijn | (~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 +0100 | son0p | (~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 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 16:25:45 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 264 seconds) |
2021-03-21 16:25:55 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) |
2021-03-21 16:26:14 +0100 | haskell_newbie | (~haskellne@111.119.187.43) |
2021-03-21 16:27:27 +0100 | ixlun | (~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 +0100 | ezrakilty | (~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 +0100 | ezrakilty | (~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 +0100 | Deide | (~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 +0100 | CrazyPyt_ | (~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 +0100 | CrazyPyt_ | (~crazypyth@98.122.164.118) (Client Quit) |
2021-03-21 16:37:25 +0100 | CrazyPyt_ | (~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 +0100 | CrazyPython | (~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 +0100 | conal | (~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 +0100 | jamm_ | (~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 +0100 | rond_ | (594021ff@89-64-33-255.dynamic.chello.pl) (Ping timeout: 240 seconds) |
2021-03-21 16:41:47 +0100 | jamm__ | (~jamm@unaffiliated/jamm) |
2021-03-21 16:43:24 +0100 | geekosaur | tempted 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 +0100 | jamm_ | (~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds) |
2021-03-21 16:46:18 +0100 | cole-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 +0100 | incertia | (~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 +0100 | Inoperable | (~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 +0100 | mastarija | (~mastarija@31.217.19.201) (Quit: Leaving) |
2021-03-21 16:57:33 +0100 | frozenErebus | (~frozenEre@94.129.70.18) (Ping timeout: 264 seconds) |
2021-03-21 16:58:47 +0100 | peanut_ | (~peanut@2a02:8388:a101:2600:52d3:48bc:f38c:73e) (Quit: Leaving) |
2021-03-21 16:59:47 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-03-21 17:00:07 +0100 | epicte7us | (~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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 17:03:27 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 17:03:32 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 17:03:33 +0100 | ep1ctetus_ | (~epictetus@ip72-194-215-136.sb.sd.cox.net) (Ping timeout: 264 seconds) |
2021-03-21 17:04:38 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:1038) |
2021-03-21 17:07:07 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2021-03-21 17:07:58 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 245 seconds) |
2021-03-21 17:08:54 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection) |
2021-03-21 17:09:27 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 17:09:31 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) |
2021-03-21 17:09:46 +0100 | Rudd0 | (~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 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 17:12:37 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-03-21 17:13:06 +0100 | idhugo_ | (~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 +0100 | heatsink | (~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 +0100 | molehillish | (~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 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2021-03-21 17:17:24 +0100 | renzhi | (~renzhi@modemcable070.17-177-173.mc.videotron.ca) (Ping timeout: 256 seconds) |
2021-03-21 17:18:52 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:1038) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-03-21 17:18:59 +0100 | usr25 | (~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 +0100 | Sathiana | (~kath@185-113-98-38.cust.bredband2.com) (Quit: WeeChat 3.0) |
2021-03-21 17:24:48 +0100 | ixlun | (~matthew@109.249.184.133) (Read error: Connection reset by peer) |
2021-03-21 17:25:36 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 17:25:55 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) |
2021-03-21 17:27:21 +0100 | chisui | (577bc921@i577BC921.versanet.de) |
2021-03-21 17:28:04 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:e0d0:506b:db48:8ec8) |
2021-03-21 17:28:41 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 17:29:33 +0100 | Pickchea | (~private@unaffiliated/pickchea) (Ping timeout: 246 seconds) |
2021-03-21 17:31:45 +0100 | son0p | (~son0p@181.136.122.143) (Quit: leaving) |
2021-03-21 17:31:48 +0100 | elusive | (~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 +0100 | justsomeguy | (~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 +0100 | frozenErebus | (~frozenEre@94.129.70.18) |
2021-03-21 17:39:08 +0100 | dementorr | (5678f228@86.120.242.40) (Quit: Connection closed) |
2021-03-21 17:42:49 +0100 | chenshen | (~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 +0100 | Zetagon | (~leo@c151-177-52-233.bredband.comhem.se) (Remote host closed the connection) |
2021-03-21 17:48:27 +0100 | benkolera | (uid285671@gateway/web/irccloud.com/x-ewecqecbsbwhnnil) (Quit: Connection closed for inactivity) |
2021-03-21 17:49:59 +0100 | teardown | (~user@gateway/tor-sasl/mrush) (Ping timeout: 268 seconds) |
2021-03-21 17:50:06 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) |
2021-03-21 17:51:56 +0100 | hexagenic_ | (~mattias@81-224-107-147-no71.tbcn.telia.com) |
2021-03-21 17:55:03 +0100 | tenniscp25 | (~tenniscp2@134.196.209.118) |
2021-03-21 17:55:45 +0100 | hexagenic | (~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 264 seconds) |
2021-03-21 17:56:41 +0100 | teardown | (~user@gateway/tor-sasl/mrush) |
2021-03-21 17:58:12 +0100 | frozenErebus | (~frozenEre@94.129.70.18) (Ping timeout: 256 seconds) |
2021-03-21 17:58:21 +0100 | hexagenic__ | (~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 +0100 | hexagenic_ | (~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 +0100 | hexagenic | (~mattias@81-224-107-147-no71.tbcn.telia.com) |
2021-03-21 18:05:46 +0100 | hexagenic_ | (~mattias@81-224-107-147-no71.tbcn.telia.com) |
2021-03-21 18:07:38 +0100 | blissful | (~blissful@unaffiliated/azuline) (Quit: owo) |
2021-03-21 18:07:39 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2021-03-21 18:08:23 +0100 | hexagenic__ | (~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 245 seconds) |
2021-03-21 18:08:48 +0100 | conal | (~conal@64.71.133.70) (Ping timeout: 245 seconds) |
2021-03-21 18:09:27 +0100 | hexagenic | (~mattias@81-224-107-147-no71.tbcn.telia.com) (Ping timeout: 246 seconds) |
2021-03-21 18:10:03 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) |
2021-03-21 18:12:00 +0100 | idhugo_ | (~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 +0100 | mastarija | (~mastarija@31.217.19.201) |
2021-03-21 18:12:56 +0100 | conal | (~conal@ip-66-115-176-177.creativelink.net) |
2021-03-21 18:13:00 +0100 | hexagenic_ | Hexagenic |
2021-03-21 18:13:42 +0100 | molehillish | (~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 +0100 | molehillish | (~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 +0100 | mastarija | (~mastarija@31.217.19.201) (Client Quit) |
2021-03-21 18:15:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 264 seconds) |
2021-03-21 18:15:02 +0100 | stree | (~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 +0100 | stree | (~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 +0100 | merijn | (~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 +0100 | tsaka__ | (~torstein@ppp-94-65-45-45.home.otenet.gr) |
2021-03-21 18:17:35 +0100 | dsrt^ | (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 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 240 seconds) |
2021-03-21 18:18:43 +0100 | kuribas | (~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 +0100 | elliott_ | (~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 +0100 | jamm__ | (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
2021-03-21 18:28:23 +0100 | DavidEichmann | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
2021-03-21 18:30:12 +0100 | rybern | (18c25abd@cpe-24-194-90-189.nycap.res.rr.com) |
2021-03-21 18:30:30 +0100 | ADG1089__ | (~aditya@27.58.165.185) |
2021-03-21 18:30:32 +0100 | plutoniix | (~q@node-uhl.pool-125-24.dynamic.totinternet.net) (Ping timeout: 240 seconds) |
2021-03-21 18:30:34 +0100 | frozenErebus | (~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 +0100 | ADG1089__ | 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 +0100 | tsaka__ | (~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 +0100 | machinedgod | (~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 +0100 | orion | (~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 +0100 | srk | (~sorki@gateway/tor-sasl/sorki) (Remote host closed the connection) |
2021-03-21 18:34:09 +0100 | hexo | (~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 +0100 | Lycurgus | (~niemand@98.4.116.165) |
2021-03-21 18:34:22 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2021-03-21 18:34:23 +0100 | srk | (~sorki@gateway/tor-sasl/sorki) |
2021-03-21 18:34:28 +0100 | hexo | (~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 +0100 | Sgeo | (~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 +0100 | Hi-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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 18:42:36 +0100 | tenniscp25 | (~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 +0100 | tenniscp25 | (~tenniscp2@134.196.209.118) |
2021-03-21 18:44:53 +0100 | rajivr | (uid269651@gateway/web/irccloud.com/x-tunnvuktqcelikkp) (Quit: Connection closed for inactivity) |
2021-03-21 18:44:55 +0100 | molehillish | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 245 seconds) |
2021-03-21 18:45:56 +0100 | DTZUZU_ | (~DTZUZO@205.ip-149-56-132.net) |
2021-03-21 18:46:03 +0100 | DTZUZU | (~DTZUZO@205.ip-149-56-132.net) (Read error: Connection reset by peer) |
2021-03-21 18:46:07 +0100 | DTZUZU_ | DTZUZU |
2021-03-21 18:46:14 +0100 | xff0x_ | (~xff0x@2001:1a81:52b5:3300:bd27:5212:7f1:6207) (Ping timeout: 264 seconds) |
2021-03-21 18:46:32 +0100 | malumore | (~malumore@151.62.127.88) (Ping timeout: 240 seconds) |
2021-03-21 18:46:41 +0100 | xff0x_ | (~xff0x@2001:1a81:52b5:3300:c707:488e:58f1:2927) |
2021-03-21 18:47:15 +0100 | Garbanzo | (~Garbanzo@70.234.205.193) |
2021-03-21 18:47:44 +0100 | tenniscp25 | (~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 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2021-03-21 18:48:47 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 18:49:06 +0100 | royal_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 +0100 | dcoutts | (~dcoutts@unaffiliated/dcoutts) |
2021-03-21 18:50:20 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-03-21 18:50:35 +0100 | molehillish | (~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 +0100 | plutoniix | (~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 +0100 | ski | nods |
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 +0100 | ski | probably 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 +0100 | alx741 | (~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 +0100 | Hexagenic | (~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 +0100 | vicfred | (~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 +0100 | Shiranai | (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 +0100 | tenniscp25 | (~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 +0100 | Hexagenic | (~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 +0100 | heatsink | (~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 +0100 | todda7 | (~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 +0100 | Vadrigar | (~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 +0100 | heatsink | (~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 +0100 | xiinotulp | (~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 +0100 | DevTurks[m] | (turkdevops@gateway/shell/matrix.org/x-wvhgcgjcsihqdnpv) |
2021-03-21 19:17:21 +0100 | Vadrigar | (~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 +0100 | CrazyPyt_ | (~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 +0100 | ezrakilty | (~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 +0100 | plutoniix | (~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 +0100 | rybern | (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 +0100 | werneta | (~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 +0100 | chenshen | (~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 +0100 | pavonia | (~user@unaffiliated/siracusa) |
2021-03-21 19:22:29 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 19:22:44 +0100 | ski | . 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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 19:27:27 +0100 | royal_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 +0100 | Lycurgus | (~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 +0100 | minoru_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 +0100 | frozenErebus | (~frozenEre@94.129.70.18) (Ping timeout: 276 seconds) |
2021-03-21 19:34:05 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 19:34:25 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 19:37:03 +0100 | ixlun | (~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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds) |
2021-03-21 19:40:41 +0100 | chenshen | (~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 +0100 | darjeeling_ | (~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 +0100 | tenniscp25 | (~tenniscp2@134.196.209.118) () |
2021-03-21 19:48:21 +0100 | royal_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 +0100 | Pickchea | (~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 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:d4b6:e9e6:3cda:8e26) |
2021-03-21 19:53:13 +0100 | royal_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 +0100 | royal_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 +0100 | malumore | (~malumore@151.62.127.88) |
2021-03-21 19:55:13 +0100 | darjeeling_ | (~darjeelin@122.245.208.187) |
2021-03-21 19:55:40 +0100 | motersen | (~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 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:d4b6:e9e6:3cda:8e26) (Ping timeout: 265 seconds) |
2021-03-21 19:58:00 +0100 | motersen | (~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de) (Client Quit) |
2021-03-21 19:59:29 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 268 seconds) |
2021-03-21 20:00:13 +0100 | timCF | (~i.tkachuk@m91-129-99-43.cust.tele2.ee) (Quit: leaving) |
2021-03-21 20:00:33 +0100 | Gurkenglas | (~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 +0100 | jb55 | (~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 +0100 | motersen | (~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 +0100 | Chai-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 +0100 | minoru_shiraeesh | (~shiraeesh@109.166.57.171) (Read error: Connection reset by peer) |
2021-03-21 20:03:09 +0100 | Chai-T-Rex | (~ChaiTRex@gateway/tor-sasl/chaitrex) |
2021-03-21 20:03:20 +0100 | berberman_ | (~berberman@unaffiliated/berberman) (Ping timeout: 240 seconds) |
2021-03-21 20:03:27 +0100 | <joel135> | Really? |
2021-03-21 20:03:29 +0100 | berberman | (~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 +0100 | malumore | (~malumore@151.62.127.88) (Ping timeout: 240 seconds) |
2021-03-21 20:04:56 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2021-03-21 20:05:18 +0100 | chenshen | (~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 +0100 | haskell_newbie | (~haskellne@111.119.187.43) (Ping timeout: 264 seconds) |
2021-03-21 20:08:48 +0100 | rayyyy | (~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 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection) |
2021-03-21 20:10:53 +0100 | ski | . 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 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) |
2021-03-21 20:11:33 +0100 | heatsink | (~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 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 20:13:52 +0100 | royal_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 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:1038) |
2021-03-21 20:16:09 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 20:16:46 +0100 | dhruvasagar | (~dhruvasag@49.207.63.69) (Quit: WeeChat 3.0.1) |
2021-03-21 20:16:50 +0100 | heatsink | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
2021-03-21 20:22:13 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 20:22:32 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 20:22:42 +0100 | chisui | (577bc921@i577BC921.versanet.de) (Ping timeout: 240 seconds) |
2021-03-21 20:23:58 +0100 | stree | (~stree@68.36.8.116) (Ping timeout: 260 seconds) |
2021-03-21 20:25:35 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 20:25:55 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) |
2021-03-21 20:26:08 +0100 | motersen | (~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de) (Ping timeout: 240 seconds) |
2021-03-21 20:27:11 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds) |
2021-03-21 20:27:37 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
2021-03-21 20:29:29 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) |
2021-03-21 20:31:13 +0100 | motersen | (~user@cgn-89-1-215-253.nc.de) |
2021-03-21 20:31:40 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection) |
2021-03-21 20:32:02 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) |
2021-03-21 20:32:33 +0100 | heatsink_ | (~heatsink@2600:1700:bef1:5e10:90f:37ea:5699:98fc) |
2021-03-21 20:32:39 +0100 | Lord_of_Life_ | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2021-03-21 20:32:52 +0100 | artixxxx | (~artixxxxx@209.red-81-44-44.dynamicip.rima-tde.net) |
2021-03-21 20:33:54 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:7956:c631:2eb4:a488) (Ping timeout: 244 seconds) |
2021-03-21 20:34:32 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 240 seconds) |
2021-03-21 20:34:32 +0100 | Lord_of_Life_ | Lord_of_Life |
2021-03-21 20:35:04 +0100 | alx741 | (~alx741@181.196.69.79) |
2021-03-21 20:36:49 +0100 | stree | (~stree@68.36.8.116) |
2021-03-21 20:36:54 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) |
2021-03-21 20:39:18 +0100 | rond_ | (594021ff@89-64-33-255.dynamic.chello.pl) |
2021-03-21 20:40:21 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit) |
2021-03-21 20:40:53 +0100 | artixxxx | (~artixxxxx@209.red-81-44-44.dynamicip.rima-tde.net) (Quit: Leaving) |
2021-03-21 20:41:23 +0100 | hackage | forex2ledger 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 +0100 | conal | (~conal@ip-66-115-176-177.creativelink.net) (Quit: Computer has gone to sleep.) |
2021-03-21 20:44:04 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) |
2021-03-21 20:44:21 +0100 | motersen | (~user@cgn-89-1-215-253.nc.de) (Read error: Connection reset by peer) |
2021-03-21 20:45:28 +0100 | conal | (~conal@ip-66-115-176-177.creativelink.net) |
2021-03-21 20:45:28 +0100 | acidjnk_new | (~acidjnk@p200300d0c72b9545dcff5306019ad0b1.dip0.t-ipconnect.de) |
2021-03-21 20:46:29 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-03-21 20:46:39 +0100 | Vadrigar | (~Vadrigar@ip5b417208.dynamic.kabel-deutschland.de) |
2021-03-21 20:50:50 +0100 | forgottenone | (~forgotten@176.42.24.127) (Quit: Konversation terminated!) |
2021-03-21 20:51:38 +0100 | Chobbes | (~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net) (Quit: WeeChat 2.9) |
2021-03-21 20:51:38 +0100 | chirpsalot | (~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net) (Quit: WeeChat 2.9) |
2021-03-21 20:53:47 +0100 | motersen | (~user@2001-4dd1-d88a-0-5338-d0f4-6eda-2a0f.ipv6dyn.netcologne.de) |
2021-03-21 20:56:13 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 268 seconds) |
2021-03-21 20:58:02 +0100 | finn_elija | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Remote host closed the connection) |
2021-03-21 20:58:23 +0100 | idhugo_ | (~idhugo@87-49-147-45-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds) |
2021-03-21 20:58:27 +0100 | finn_elija | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) |
2021-03-21 20:58:38 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:1038) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-03-21 20:58:50 +0100 | chrisdotcode | (~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 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 21:03:52 +0100 | joel135 | . o O ( https://en.m.wikipedia.org/wiki/Carthago_delenda_est ) |
2021-03-21 21:03:53 +0100 | hackage | IPv6Addr 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 +0100 | Squarism | Siri2 |
2021-03-21 21:07:47 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 21:08:26 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 264 seconds) |
2021-03-21 21:12:00 +0100 | Siri2 | Squarism |
2021-03-21 21:12:33 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds) |
2021-03-21 21:15:38 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 21:15:57 +0100 | royal_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 +0100 | joncol | (~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 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2021-03-21 21:20:57 +0100 | merijn | (~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 +0100 | ADG1089 | (~aditya@27.58.165.185) (Read error: Connection reset by peer) |
2021-03-21 21:24:50 +0100 | ixlun | (~matthew@109.249.184.133) (Read error: Connection reset by peer) |
2021-03-21 21:25:34 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-03-21 21:25:56 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-109-157.w86-212.abo.wanadoo.fr) |
2021-03-21 21:28:23 +0100 | geekosaur | (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 +0100 | tsaka__ | (~torstein@ppp-2-87-239-227.home.otenet.gr) |
2021-03-21 21:30:32 +0100 | todda7 | (~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 +0100 | mastarija | (~mastarija@31.217.19.201) |
2021-03-21 21:32:39 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 21:32:59 +0100 | royal_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 +0100 | bgamari_ | (~bgamari@72.65.102.227) (Ping timeout: 260 seconds) |
2021-03-21 21:41:34 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-03-21 21:41:54 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-03-21 21:46:16 +0100 | pfurla_ | (~pfurla@216.151.180.171) |
2021-03-21 21:47:09 +0100 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 245 seconds) |
2021-03-21 21:50:28 +0100 | aarvar | (~foewfoiew@2601:602:a080:fa0:75fb:cea1:4d26:9157) |
2021-03-21 21:52:08 +0100 | juri_ | (~juri@178.63.35.222) (Ping timeout: 240 seconds) |
2021-03-21 21:53:50 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 21:53:56 +0100 | codygman__ | (~user@47.186.207.161) (Remote host closed the connection) |
2021-03-21 21:54:16 +0100 | codygman__ | (~user@47.186.207.161) |
2021-03-21 21:55:09 +0100 | Benzi-Junior | (~BenziJuni@88-149-67-143.du.xdsl.is) (Ping timeout: 264 seconds) |
2021-03-21 21:55:12 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-03-21 21:55:15 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-03-21 21:56:32 +0100 | wonko7 | (~wonko7@45.15.17.60) (Ping timeout: 240 seconds) |
2021-03-21 21:58:03 +0100 | timCF | (~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 +0100 | hackage | pipes-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 +0100 | p8m | (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 +0100 | p8m_ | (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 +0100 | matryoshka | (~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 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) |
2021-03-21 22:08:51 +0100 | olligobber | (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 +0100 | royal_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 +0100 | royal_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 +0100 | motersen | (~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 +0100 | juri_ | (~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 +0100 | codygman__ | (~user@47.186.207.161) (Ping timeout: 246 seconds) |
2021-03-21 22:15:42 +0100 | ski | . 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 +0100 | hackage | gitlib 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 +0100 | elliott_ | (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) |
2021-03-21 22:21:05 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds) |
2021-03-21 22:21:56 +0100 | mastarija | (~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 +0100 | lampowner | (~xblow@broadband-90-154-73-166.ip.moscow.rt.ru) |
2021-03-21 22:25:35 +0100 | zebrag | (~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 +0100 | zebrag | (~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 +0100 | takuan | (~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 +0100 | roconnor | (~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 +0100 | Hexagenic | (~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 +0100 | roconnor | (~roconnor@host-45-58-230-226.dyn.295.ca) |
2021-03-21 22:32:01 +0100 | lampowner | (~xblow@broadband-90-154-73-166.ip.moscow.rt.ru) (Quit: Leaving) |
2021-03-21 22:32:21 +0100 | lampowner | (~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 +0100 | ixlun | (~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 +0100 | cabpa | (~cabpa@180.190.165.139) (Ping timeout: 260 seconds) |
2021-03-21 22:40:53 +0100 | slack1256 | (~slack1256@dvc-186-186-101-190.movil.vtr.net) |
2021-03-21 22:40:55 +0100 | wroathe | (~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 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-03-21 22:44:56 +0100 | roconnor | (~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 +0100 | stree | (~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 +0100 | Vadrigar | (~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 +0100 | coot | (~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl) |
2021-03-21 22:52:31 +0100 | wroathe | (~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 +0100 | LogicUpgrade | (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 +0100 | stree | (~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 +0100 | pfurla_ | (~pfurla@216.151.180.171) (Ping timeout: 256 seconds) |
2021-03-21 23:03:38 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 256 seconds) |
2021-03-21 23:04:05 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2021-03-21 23:04:16 +0100 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) |
2021-03-21 23:05:07 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 23:07:22 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-03-21 23:07:29 +0100 | LKoen | (~LKoen@194.250.88.92.rev.sfr.net) (Remote host closed the connection) |
2021-03-21 23:09:38 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Ping timeout: 264 seconds) |
2021-03-21 23:09:53 +0100 | hackage | ory-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 +0100 | darjeeling_ | (~darjeelin@122.245.208.187) (Ping timeout: 260 seconds) |
2021-03-21 23:11:44 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
2021-03-21 23:12:18 +0100 | average | (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 +0100 | Benzi-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 +0100 | darjeeling_ | (~darjeelin@122.245.208.187) |
2021-03-21 23:16:17 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
2021-03-21 23:17:09 +0100 | merijn | (~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 +0100 | lampowner | (~xblow@broadband-90-154-73-166.ip.moscow.rt.ru) (Remote host closed the connection) |
2021-03-21 23:20:46 +0100 | dhil | (~dhil@80.208.56.181) (Ping timeout: 276 seconds) |
2021-03-21 23:20:47 +0100 | hiroaki | (~hiroaki@2a02:908:4b18:8c40:43d:bb62:2e5b:b1f6) (Ping timeout: 244 seconds) |
2021-03-21 23:21:06 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) |
2021-03-21 23:24:24 +0100 | molehillish | (~molehilli@2600:8800:8d06:1800:c1f2:e355:53f0:4ab8) (Remote host closed the connection) |
2021-03-21 23:25:22 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 260 seconds) |
2021-03-21 23:26:57 +0100 | fendor | (~fendor@178.115.129.38.wireless.dyn.drei.com) (Remote host closed the connection) |
2021-03-21 23:27:30 +0100 | molehillish | (~molehilli@ip98-167-226-26.ph.ph.cox.net) |
2021-03-21 23:28:55 +0100 | knupfer | (~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 +0100 | ski | . o O ( "Science Fictions" <https://www.smbc-comics.com/comic/science-fictions> ) |
2021-03-21 23:30:21 +0100 | coot | (~coot@37.30.58.223.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2021-03-21 23:30:41 +0100 | mav1 | (~mav@ip-88-152-11-222.hsi03.unitymediagroup.de) |
2021-03-21 23:37:35 +0100 | ixlun | (~matthew@109.249.184.133) (Ping timeout: 256 seconds) |
2021-03-21 23:43:09 +0100 | juri_ | (~juri@178.63.35.222) (Ping timeout: 264 seconds) |
2021-03-21 23:43:14 +0100 | son0p | (~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 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 265 seconds) |
2021-03-21 23:50:06 +0100 | chirpsalot | (~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net) |
2021-03-21 23:50:10 +0100 | Chobbes | (~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net) |
2021-03-21 23:50:28 +0100 | kiweun | (~kiweun@cpe98524a8cef7c-cm98524a8cef7a.cpe.net.cable.rogers.com) (Remote host closed the connection) |
2021-03-21 23:51:13 +0100 | molehillish | (~molehilli@ip98-167-226-26.ph.ph.cox.net) (Remote host closed the connection) |
2021-03-21 23:51:18 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds) |
2021-03-21 23:52:53 +0100 | hackage | sbv 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 +0100 | kiweun | (~kiweun@2607:fea8:2a62:9600:c874:3671:2027:3155) |