Home liberachat/#haskell: Logs Calendar

Logs on 2022-04-19 (liberachat/#haskell)

00:00:26 × Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
00:01:36 × xff0x_ quits (~xff0x@om126033110024.35.openmobile.ne.jp) (Read error: Connection reset by peer)
00:02:59 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
00:06:10 × JimL quits (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 246 seconds)
00:06:13 <dibblego> <maerwald> the confusion probably comes from not understanding that `a -> (a -> a)` is `a -> a -> a`
00:06:18 <dibblego> aka "all functions take one argument"
00:07:57 <Axman6> Need to tattoo that to the back of every Haskell beginner's hand
00:09:17 <dibblego> would be nice if it was well understood as a matter of fact, from which we then make approximations — especially in teaching
00:12:22 mxs joins (~mxs@user/mxs)
00:23:33 <abastro[m]> Well, isn't it just currying by default
00:29:18 <jackdk> no, because even an "uncurried" function of type `(x, y) -> z` still takes a single argument
00:32:13 <abastro[m]> I mean, that one might not be uncurried for real.
00:41:51 × jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 276 seconds)
00:44:07 × renzhi quits (~xp@2607:fa49:6500:b100::19a0) (Ping timeout: 240 seconds)
00:46:15 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
00:48:23 vysn joins (~vysn@user/vysn)
00:48:55 chenqisu1 joins (~chenqisu1@183.217.200.38)
00:54:26 RevoGen joins (~RevoGen@laptop-grs098eo.bc.edu)
00:55:39 <Axman6> Years after learning about the pitfalls of precision in floating point representations and how to maintain accuracy in the context of high performance computing, I have finally been able to use this knowledge to fix a rounding bug in a (surprisingly important) financial system (that isn't yet in production, so no Office Space sheninigans for me)
00:57:06 renzhi joins (~xp@2607:fa49:6500:b100::229c)
00:59:48 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
00:59:50 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
01:01:06 <sm> sweet
01:02:24 <Axman6> fix was to change ((x / y) - z) * q to ((x * q) / y) - (z * q)
01:02:55 <Axman6> @check \x y z q -> z /= 0 ==> ((x / y) - z) * q == (x * q / y) - z * q
01:02:55 <lambdabot> :-1:-1:Ambiguous infix expression
01:03:18 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving)
01:03:20 <Axman6> @check \x y z q -> (y /= 0) ==> (((x / y) - z) * q == (x * q / y) - z * q)
01:03:22 <lambdabot> *** Failed! Falsifiable (after 1 test and 11 shrinks):
01:03:22 <lambdabot> -0.8623034840690951 -0.5487141738649985 -0.13193816659739946 0.3886086030777...
01:03:37 oxide joins (~lambda@user/oxide)
01:04:23 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
01:06:19 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
01:06:25 abastro joins (~abab9579@220.75.216.63)
01:06:54 <Axman6> (I am expecting that to fail btw)
01:07:16 <Axman6> Do we have anything that can test if two expressions are algebraically equivalent?
01:07:32 <Axman6> @check \x y z q -> (y /= 0) ==> (((x / y) - z) * q == (x * q / y) - z * (q :: Rational))
01:07:33 <lambdabot> +++ OK, passed 100 tests.
01:08:55 xff0x_ joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
01:11:15 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
01:13:46 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
01:14:22 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:14:23 × mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
01:14:46 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
01:15:27 mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001)
01:20:54 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
01:21:12 andrey__ joins (~andrey@p200300dbcf108600f3fd07f727d014bd.dip0.t-ipconnect.de)
01:23:39 × andrey_ quits (~andrey@p508d5b8f.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
01:36:49 EvanR joins (~EvanR@user/evanr)
01:37:31 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
01:41:44 <dmj`> vacuous is insane, might I even say absurd.
01:44:55 × anomal quits (~anomal@87.227.196.109) (Remote host closed the connection)
01:46:06 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 250 seconds)
01:46:38 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
01:47:29 <abastro> XD
01:49:33 × Me-me quits (~me-me@user/me-me) (Read error: Connection reset by peer)
01:50:26 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 250 seconds)
01:50:53 <EvanR> so uh
01:51:00 Me-me joins (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net)
01:51:02 <EvanR> > decodeFloat (3.14 :: Float)
01:51:04 <lambdabot> (13170115,-22)
01:51:16 <EvanR> > 13170115 / 2^22
01:51:18 <lambdabot> 3.140000104904175
01:51:31 <EvanR> > showFFloat (Just 100) (3.14 :: Float) ""
01:51:33 <lambdabot> "3.1400000000000000000000000000000000000000000000000000000000000000000000000...
01:51:57 <EvanR> how or why is showFFloat giving... the "decimal" expansion of all zeros
01:53:11 <EvanR> > showFFloat (Just 100) (3.140000104904175 :: Float) ""
01:53:13 <lambdabot> "3.1400000000000000000000000000000000000000000000000000000000000000000000000...
01:53:16 <EvanR> o_O
01:54:20 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:54:21 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
01:55:18 <EvanR> is it that 3.14 parses to the same float and has less characters
01:55:42 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
01:57:02 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
01:57:39 × oxide quits (~lambda@user/oxide) (Ping timeout: 240 seconds)
01:59:28 <EvanR> I could have sworn there was a way to get the real expansion of floats
01:59:46 oxide joins (~lambda@user/oxide)
02:00:02 <abastro> > showEFloat (Just 10) (3.14 :: Float)
02:00:06 <lambdabot> <[Char] -> [Char]>
02:00:13 <abastro> Oh meh
02:00:17 <abastro> > showEFloat (Just 10) (3.14 :: Float) ""
02:00:20 <lambdabot> "3.1400000000e0"
02:00:23 × Me-me quits (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
02:00:23 Me-me joins (~me-me@user/me-me)
02:00:31 <abastro> Hmm yea, this is weird
02:00:41 <abastro> Actually
02:01:07 <abastro> > (13170115 / 2^22) :: Float
02:01:10 <lambdabot> 3.14
02:01:16 <EvanR> yeah I caught that after, but still
02:01:17 <abastro> ^ That is the reason I guess
02:01:56 <EvanR> if I corrected it to not switch types how do I print the right far digits of '3.14'
02:02:03 × Me-me quits (~me-me@user/me-me) (Quit: Disconnecting on purpose.)
02:02:26 <EvanR> or 0.1
02:02:44 Me-me joins (~me-me@v.working.name)
02:04:16 × Me-me quits (~me-me@v.working.name) (Changing host)
02:04:16 Me-me joins (~me-me@user/me-me)
02:05:05 <abastro> > floatToDigits 10 (3.14 :: Float)
02:05:08 <lambdabot> ([3,1,4],1)
02:05:18 <EvanR> lol
02:05:22 <abastro> > floatToDigits 10 (3.14 :: Double)
02:05:24 <lambdabot> ([3,1,4],1)
02:05:34 <EvanR> :t floatToDigits
02:05:35 <abastro> Hmm I meant
02:05:36 <lambdabot> RealFloat a => Integer -> a -> ([Int], Int)
02:06:36 <EvanR> to read 3.14 or 0.1 as a float, then present it as 0.100000000000000000... is hella confusing
02:06:36 <abastro> > floatToDigits 10 (realToFrac @_ @Double (3.14 :: Float))
02:06:38 <lambdabot> <hint>:1:33: error: parse error on input ‘@’
02:06:56 <abastro> % floatToDigits 10 (realToFrac @Float @Double 3.14)
02:06:57 <yahb> abastro: ([3,1,4,0,0,0,0,1,0,4,9,0,4,1,7,5],1)
02:07:35 <abastro> % floatToDigits 10 (3.14 :: Float)
02:07:35 <yahb> abastro: ([3,1,4],1)
02:07:40 <EvanR> that's doing the same precision shenanigan as before
02:07:45 <abastro> So.. it comes from there
02:08:14 <EvanR> > (13170115 / 2^22) :: CReal
02:08:16 <lambdabot> 3.1400001049041748046875
02:09:18 <EvanR> > 7070651414971679 / 2 ^ 51 :: CReal
02:09:20 <lambdabot> 3.1400000000000001243449787580175325274467
02:09:32 deadmarshal_ joins (~deadmarsh@95.38.228.226)
02:09:57 <EvanR> could have sworn there was a way to get this info without CReal
02:10:14 <EvanR> since the input is rational
02:10:17 Macbethwin joins (~chargen@D964062A.static.ziggozakelijk.nl)
02:10:38 <abastro> Wdym get info?
02:11:00 <EvanR> the tail in the last example isn't infinite zeros like showFFloat shows
02:11:09 <abastro> Uh
02:11:26 <abastro> That's because there is less precision loss
02:11:35 <abastro> (If you use CReal)
02:12:21 <abastro> I think it is reasonable for the algorithm to compensate for possible errors from calculation
02:12:35 <EvanR> the number 3.1400000000000001243449787580175325274467... is the actual value you get when you parse 3.14
02:12:43 <EvanR> it just doesn't display that way
02:12:51 <abastro> No
02:13:01 <abastro> It's not the "actual value" or anything
02:13:13 <EvanR> yes that's what the double value represents
02:13:18 <abastro> You should never consider a floating number as a concrete number.
02:13:20 <EvanR> that particular rational number
02:13:38 <abastro> I mean, Float -> Double conversion is lossful
02:13:45 <EvanR> I'm not talking about that conversion
02:14:04 <abastro> What are you talking about then?
02:14:04 <EvanR> also no it isn't
02:14:08 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
02:14:08 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
02:14:08 wroathe joins (~wroathe@user/wroathe)
02:14:22 <Axman6> > showFFloat (Just 100) (read "3.140000104904175" :: Float) ""
02:14:24 <lambdabot> "3.1400000000000000000000000000000000000000000000000000000000000000000000000...
02:14:26 <abastro> It is, there is conversion error still involved
02:14:30 <Axman6> > showFFloat (Just 100) (read "3.14" :: Float) ""
02:14:32 <lambdabot> "3.1400000000000000000000000000000000000000000000000000000000000000000000000...
02:14:50 <EvanR> Axman6, right
02:14:53 <abastro> The thing is, floating point number should never be considered as a concrete number.
02:15:01 <abastro> It never is.
02:15:03 <EvanR> it definitely is a concrete number
02:15:22 <EvanR> unless it's NaN
02:15:27 <Axman6> Sorry, just checking if the read instance directly (rather than the Rational instance -> Float conversion) would do anything different
02:15:57 <EvanR> it must be from the obscure rule where you display the number with the least amount of digits necessary to reproduce it
02:16:00 <Axman6> abastro: every non NaN ieee-754 number represents some exact value, it is possible to know exactly what number that is
02:16:46 <Axman6> EvanR: bringing back memories of a bug in PHP (and subsequently several other languages) which caused an infinite loop when parsing a certain floating point number
02:16:55 <EvanR> that was a good one
02:17:21 <abastro> I mean, even different architectures have different rules for computing floating number
02:17:47 <abastro> By rules, I mean it computes different number for same operation modulo some errors
02:18:09 <EvanR> I would believe that for something like inverse sine function
02:18:13 <abastro> While it is true that you could have it represent specific number, it is never meant to be used like that.
02:18:19 × deadmarshal_ quits (~deadmarsh@95.38.228.226) (Ping timeout: 240 seconds)
02:18:42 <EvanR> yeah, you describe it as a sort of random function
02:18:51 <EvanR> I don't like that picture
02:18:51 <Axman6> abastro: I think you are missing the problem EvanR is having
02:18:54 <abastro> I did not say random function
02:19:09 <abastro> I mean, I did not mean it as a random function
02:19:20 <EvanR> we're not even doing a computation here, just talking about the value
02:19:23 <abastro> Rather, it is not supposed to be used without consideration for the calculation errors.
02:19:24 <EvanR> > decodeFloat 3.14
02:19:26 <lambdabot> (7070651414971679,-51)
02:19:40 <EvanR> after parsing that is the value
02:19:45 <Axman6> abastro: EvanRis trying to see what the errors are
02:19:51 <abastro> Converting (3.14 :: Float) to Double is computation
02:20:02 <EvanR> that's not on topic
02:20:13 <EvanR> it's "3.14" to Double, or Float
02:20:18 <EvanR> and back
02:21:18 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 276 seconds)
02:21:20 <abastro> Well, why would that represent the exact number of (3.14 :: Float)
02:21:25 <Axman6> I swear bos has a package for past parsing/rendering of ieee-754 doubles and floats
02:21:34 <Axman6> it doesn't, and that's the point abastro
02:21:47 <EvanR> the longer decimal expansion is the exact value
02:21:48 <abastro> I mean, why do you want that behavior?
02:21:57 <abastro> Duh, what is this "exact" thing
02:21:59 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
02:22:02 <EvanR> you would want that to compare to the approximation
02:22:11 <Axman6> the string "3.14" is parsed into some specific Float value, and EvanR is trying to see exactly whatch float value it is, including the error in the parsing
02:22:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
02:22:34 <abastro> You want to print "3.14 :: Float" to find the error?
02:22:35 <abastro> What?
02:22:39 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds)
02:22:46 <EvanR> I'm very surprised to see all those zeros, which is usually how you express increased precision
02:23:01 <EvanR> which in this case shows the wrong value
02:23:24 <abastro> That's because it isn't supposed to be for that purpose
02:23:40 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
02:23:52 <EvanR> in any case it can't be used for that purpose, but I could have sworn it acted differently before
02:23:58 <Axman6> fucksake, abastro if you don't undertstand the problem, stop commenting on it, you're negatively contributing to this discussion at this piont
02:24:14 abastro joins (~abab9579@220.75.216.63)
02:24:27 <EvanR> like, to display the digits, you just need a division algorithm and not a real number library
02:24:29 <abastro[m]> What
02:24:53 <abastro> Like, whining about something that is not supposed to be working as you suggest is okay then?
02:25:45 <EvanR> at least I confirmed showFFloat is "supposed" to act like this, which I'll call "wrong" for the sake of argument xD
02:25:47 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:26:18 <Axman6> let me try to spell it out for you again: The string "3.14" is parsed into _some_ Float value, whose actual value is 3.140000104904175. EvanR is trying to print out that actual value to see what the error is from the idealised 3.14 which cannot be represented in a Float. do you understand?
02:26:26 <abastro> ....
02:26:39 <abastro> The printing isn't just for that.
02:27:20 <Axman6> what are you talking about?
02:28:12 <Axman6> % import Data.Double.Conversion.Text
02:28:12 <yahb> Axman6: ; <no location info>: error:; Could not find module `Data.Double.Conversion.Text'; It is not a module in the current program, or in any known package.
02:28:15 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
02:28:16 <EvanR> up to this point I would have said printing is for seeing the value
02:28:36 <Axman6> Are you able to test what https://hackage.haskell.org/package/double-conversion-2.0.4.1/docs/Data-Double-Conversion-Text.html does?
02:28:59 <EvanR> alright hold my beer
02:30:15 travisb_ is now known as tabemann
02:30:50 deadmarshal_ joins (~deadmarsh@95.38.228.226)
02:30:50 <abastro> Showing as string is for giving rough representation
02:31:11 <abastro> Exact value is more the implementation detail anyway
02:31:16 <EvanR> Data.Double.Conversion.Text> toFixed 100 3.14
02:31:16 <EvanR> "*** Exception: Data.Double.Conversion.Text.toFixed: conversion failed (invalid precision requested)
02:31:18 <EvanR> xD
02:31:41 <Axman6> abastro: and it's exactly the details that EvanR is trying to find out. how hard is that to understand?
02:32:12 <EvanR> *Main Data.Double.Conversion.Text> toFixed 30 3.14 => "3.140000000000000124344978758018"
02:32:24 <abastro> Then just do not use the showFFloat lol
02:32:30 <abastro> It isn't for the purpose
02:32:36 <Axman6> you absolutely should not treat your numeric types as black boxes which produce unpredictable results, you should be able to find out what the errors are and categorise them
02:32:43 <abastro> Lol
02:32:54 <Axman6> jesus chrtist, that's literally the whole point of this conversation
02:33:06 <EvanR> yeah as a wise man once said "I like to understand my code" or something
02:33:10 <abastro> I guess that aligns with your point about storing literal utf-8 bitstream
02:33:42 <abastro> Well, the "I like to understand" could go the way of "I want to understand what a transistor does when I run this program"
02:33:44 <Axman6> EvanR: glag double-conversion worked for you, and good to know it can be used for that
02:33:47 <Axman6> glad*
02:34:14 <EvanR> it doesn't go up to 100 though
02:34:25 <EvanR> which you might need in order to see the repeating decimals
02:35:14 <EvanR> there's probably a slick one liner that gives the decimal expansion
02:35:23 <sm> EvanR: how about using Decimal instead ?
02:35:36 <EvanR> yeah if the goal was to use literal 3.14
02:35:59 <EvanR> I was curious about the float
02:36:12 <sm> ah
02:36:14 <Axman6> abastro: a word of advice: Whenever you think that the answer to someone's question should begin with "Just do X", that is a good time to stop and think whether you actually understand the question. When someone tells you you don't understand the question is an even better time to have that thought
02:36:17 <abastro> Anyway, this is quite a niche usage so it was not implemented
02:36:32 <abastro> Why do you think I do not understand lol
02:36:47 <abastro> I am saying that it is not implemented this way for a reason
02:36:54 <EvanR> yeah we should stick to mainstream usage of Haskell
02:36:55 <Axman6> the overwhelming torrent of evidence from the last half an hour showing that was the case?
02:36:57 <abastro> And what you are doing is just whining
02:37:23 <abastro> Bunch of whines
02:37:45 <EvanR> arnold sound board from the late 90s "STOP WHINING"
02:37:51 <abastro> ...
02:38:01 <sm> can we agree to disagree on this
02:38:35 <Axman6> I literally just one hour ago fixed a very closely related bug in our financial system because of knowing about problems like this. This is a system which will handle hundreds of millions of dollars of financial transactions per day. this shit matters. just because you don't think it does doesn't mean it doesn't
02:38:48 <EvanR> end of the day, showFFloat is doing something more akin to toShortest which is oddly described as "Compute the shortest string of digits that correct represent the input number"
02:39:08 <abastro> ...well why are you using floating point number for financial system at all...
02:39:37 <EvanR> if your money is made of base 2 fractions then you're good
02:39:41 <abastro> Fixed precision numbers are for that precise reason, isn't it..
02:39:57 <Axman6> no
02:40:09 <abastro> The point you get into floating point number with financials, you are asking for trouble
02:40:20 <Axman6> and I'm not using floating point numbers, at least not IEEE-754 oves
02:40:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
02:40:42 <abastro> Yea, I mean then that one is rather orthogonal issue.
02:41:27 <Axman6> that's why we're using Scala/Java's BigDecimal. there's possibly as better representation for this computation but this one works for all values we care about
02:41:36 <EvanR> earlier I was testing my game algorithm using rational numbers, then went to store them in sqlite and it went no
02:41:47 <sm> just no ?
02:41:50 <EvanR> haha
02:41:56 <Axman6> and our contract language, Daml, doesn't even have floats or doubles
02:41:57 <EvanR> more like, they don't have a rational number
02:42:07 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:42:13 <abastro> Yea, those issues are orthogonal to floating point numbers
02:42:32 <Axman6> sm: SQLite comes with JSON extensions by default now, just store them as an array of integers :P
02:42:37 <abastro> Well, I mean, the most uses of floating point numbers other than where precision doesn't matter is for physical simulations and such
02:42:59 <Axman6> except they aren't orthogonal, because the order of operations caused precision to be lost in computations
02:43:04 <abastro> And for physical simulations, you ALWAYS have to consider the error - and well, you won't calculate the deviation from precise value
02:43:07 <EvanR> you certainly need to know how accurate your physics simulation is
02:43:34 <abastro> This is not the way you would check the accuracy of physics simulation, btw
02:43:52 <abastro> It should rather be theoretically modelled without computing at runtime
02:43:57 <EvanR> you could check steps against the same steps using real numbers
02:44:07 <EvanR> just to see
02:44:15 <abastro> I mean, with BigDecimals and such, the logic should be completely different
02:44:30 <EvanR> exact real arithmetic is pretty snazzy
02:44:40 <abastro> Evan, that is not how physics simulation work in those labs I've been to
02:45:16 <abastro> Well many of them do consider the IEEE floats as a bit of black box, some doesn't but does not calculate those numbers in runtime anyway.
02:45:42 <abastro> They always consider the error ranges which are taken into account when they run the simulations.
02:45:46 <abastro> I mean
02:45:51 <abastro> When they design* the simulations
02:45:54 <EvanR> they're certainly not a black hole or black box
02:46:08 <EvanR> which was the entire point of having standards
02:46:16 <abastro> That is why I mentioned that some don't treat them as a black box
02:46:46 <abastro> That doesn't mean they check the exact value stored
02:47:11 <abastro> Also there are better ways to see exact values stored, you can get the fraction
02:47:15 <EvanR> don't ask don't tell, but for floats
02:47:16 <Axman6> I see you still don't understand what thew problem was -_-
02:47:18 <abastro> You don't need to convert them to strings
02:48:05 <abastro> I simply mean that you are trying to use `showFFloat` for wrong purpose
02:48:18 <Axman6> > (7070651414971679 / 2^51 :: CReal, (7070651414971679 - 1) / 2^51 :: CReal)
02:48:20 <lambdabot> (3.1400000000000001243449787580175325274467,3.139999999999999680255768907954...
02:48:22 <abastro> And possibly even misunderstanding floating point numbers, as everyone does
02:48:42 <sm> Axman6: is Daml your company's main product ? are there customers yet ?
02:51:01 <Axman6> I'm contracted to Digital Asset, so not technically "my company", but I'm not sure if I'd describe it as the main product - they've developed several large systems for various clients, but using Daml. I gues the language could be considered the secret sauce in some sense
02:51:41 <Axman6> https://www.digitalasset.com/customer-stories lists some of the projects they have built, including the project I'm on
02:52:26 <EvanR> you're using haskell?
02:52:38 <EvanR> (please say yes)
02:52:47 <abastro> I won't claim I understand floating point numbers as well, I just think everyone misunderstands them in a way or the other. I just mean that whining for some behavior where one behavior is clear-cut better is not great
02:52:58 <abastro> Lol who would use haskell for that purpose
02:53:05 <Axman6> I genuinelt think that Daml is a super interesting point in the space of contract languages though, it solves a lot of problems which others seem to be less interested in (the concept of what information is visible to which parties is a core concept in the language)
02:53:10 <sm> abastro, please stop accusing folks of whining, let's move on
02:53:20 <abastro> Well okaya
02:53:28 <abastro> s/okaya/okay
02:53:38 <sm> thank you :)
02:54:23 <Axman6> EvanR: The currently Daml imprlmentation is built on top of GHC, and it basically feels like Haskell++; several useful extensions are enabled by default, and it has some syntax additions for the contract specific stuff (which any haskell developer would immediately see through the veneer to the code that gets generated)
02:54:32 <abastro> Imagine building on haskell lol
02:54:47 <sm> Axman6: how does it compare to plutus , marlowe etc. ?
02:54:59 <abastro> Which is for now an unstable research language (which might change later but eh)
02:55:01 <Axman6> I'm not familliar enough with those to comment
02:55:42 <sm> Haskell++, sounds more complex than those then. Perhaps more for analysis than implementing contracts ?
02:56:32 × RevoGen quits (~RevoGen@laptop-grs098eo.bc.edu) (Remote host closed the connection)
02:56:41 <sm> and sorry if it's all spelled out on this fine page, the field is a bit confusing
02:56:42 <EvanR> this is like the 4th or 5th thing I heard of that hijacks GHC for their own nefarious purposes, must be pretty feasible to do such things xD
02:56:50 RevoGen joins (~RevoGen@laptop-grs098eo.bc.edu)
02:57:09 <Axman6> It's literally a strict (as in not lazy) Haskell dialect, with some syntactic features added to the parser. It's definitely aimes at writing applications more than the relatively small contracts that most smart contract languages seem to target
02:57:46 <Axman6> I'd definitely recommend going through the Daml tutorial, I had a lot of fun doing it.
02:57:47 <sm> I see.. intended to run off chain, then ?
02:58:46 <Axman6> So, Daml is aimed at being ledger agnostic, it isn't written for a specific blockchain, and in fact their Canton system allows you to bridge multiple ledgers together
02:59:05 <sm> "Daml empowers developers to build, deploy, and run multi-party applications on a distributed ledger in days"
02:59:26 <Axman6> ignore the businessese =)
02:59:43 <sm> this is actually the clearest thing I've read so far :)
03:00:13 <sm> your comments excluded of course. Cool, thanks for the info
03:02:09 <Axman6> the videos on https://www.digitalasset.com/developers/learn should be more developer oriented. I honestly found doing the Daml tutorial was the easiest way to get a good idea of what it's all about. There's anice talk somewhere about how a doctor's office could use the Daml to facilitate payment for medical procedures involving the patient's insurance, their bank, etc. while maintain privacy of the medical data from the parties who don't need to know it
03:05:55 kaph__ joins (~kaph@bo-18-157-187.service.infuturo.it)
03:05:56 <sm> I found my way to https://docs.daml.com and https://www.digitalasset.com/developers/examples > Applications and Libraries
03:06:26 <sm> is there any publicly-visible real world application you know of ?
03:07:13 <sm> maybe some of these are
03:07:20 <Axman6> I'm not sure, being a contractor I don't see much of what goes on in the rest of the company
03:08:10 × kaph_ quits (~kaph@151.43.109.170) (Ping timeout: 246 seconds)
03:08:24 <Axman6> trying to see if anyone has a good video introduction though
03:08:52 × mvk quits (~mvk@2607:fea8:5ce3:8500::85f6) (Ping timeout: 250 seconds)
03:08:59 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
03:10:06 abastro joins (~abab9579@220.75.216.63)
03:10:21 <Axman6> I wouldn't recommend jumping into applications without understanding the basics though, the whole template/contract/choice, consuming choices, disclosure etc are pretty new concepts and the example code won't make sense without understand what they mean
03:10:29 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
03:10:42 <sm> I guess these are like simple (mostly) web apps, but distributed across multiple users, machines, and possibly blockchains, yet relatively easy to build with some correctness guarantees because of Daml
03:12:01 abastro joins (~abab9579@220.75.216.63)
03:12:03 <Axman6> they might have web apps, but Daml is mostly agnostic of that. We use Scala (sadly) to turn the handle, so to speak. you need something external putting data into the system to actually have the application "run"
03:13:49 <Axman6> I've been recommended https://www.youtube.com/watch?v=AGxt4yQceXA (dev focused) and https://www.youtube.com/watch?v=ztFPc6GOtlE (higher level)
03:14:24 mbuf joins (~Shakthi@136.185.79.70)
03:14:52 <Axman6> There are some subtlties to the contract model that have some really big ramifications in how you design things, which can complicate designs a bit, but the result is much more robust
03:15:27 <sm> thanks, I just was taking a shot at understanding more of what this is without having to watch a video or do a tutorial
03:17:32 <sm> my attention span vs their technical writing :)
03:19:28 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
03:21:17 tvandinther joins (~tvandinth@2406:e002:6815:1801:2c95:5009:a36c:8152)
03:22:07 <tvandinther> Hi all. I am just starting out with Haskell, and I am trying to set up an IDE to work with it. I have tried following various guides online to setting things up but they're all either incomplete or outdated. Are there any up-to-date and complete guides you can recommend to get me set up with a good integrated environment? I'd prefer to use IntelliJ
03:22:07 <tvandinther> or Atom as the editor.
03:23:24 <glguy> tvandinther: the easiest to get working is vscode
03:24:35 <tvandinther> Does that have an integrated repl?
03:27:11 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
03:27:37 inversed_ joins (~inversed@94.13.111.159)
03:27:50 × inversed quits (~inversed@94.13.111.159) (Ping timeout: 272 seconds)
03:28:23 <Axman6> it has an integrated terminal which can run ghci, is there anything you need beyond that?
03:28:28 <glguy> The repl gets started with the 'cabal repl' command. vscode has embedded terminal windows, that part doesn't have much to do with editor integration
03:29:32 <glguy> I've also got vim+coc+hls working; that wasn't too hard
03:30:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
03:30:21 <tvandinther> Cool, I can give it a go setting up VSCode, which extensions will I need? (I currently also have Stack installed)
03:30:23 <Axman6> VS code is definitely the way to go though if you're not a vim or emacs user, that's where most of the effort has gone with Haskell Language Server's integration, because it's definitely become the most popular IDE to work with Haskell on in the last few years
03:31:08 <Axman6> tvandinther: I would recommend going wiht using ghcup to manage GHC installs and haskell language server (this will be the default with the next version of the Haskell plugin for VS Code luckily)
03:31:09 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds)
03:31:28 <Axman6> you can use ghcup to install and manage stack too
03:32:08 <tvandinther> So I understand it, is GHCup a similar tool to something like NVM for node.js?
03:33:10 <Axman6> I'm not sure what NVM does, but it's a tool that manages GHC installations, as well as cabal-install (haskell package manager command), hls (the haskell language server for VS code etc.), stack, etc.
03:33:24 <Axman6> it makes switching between compilers really easy, which sometimes you'll need to do
03:33:44 <tvandinther> cool, yeah sounds useful. I'll install it now
03:33:53 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:34:06 <Axman6> https://www.haskell.org/ghcup/
03:35:16 <Axman6> you can do it with out the curl | sh if you prefer (I would do curl > install.sh; less install.sh, and then sh install.sh personally)
03:39:31 <tvandinther> alright, I got ghcup installed on WSL2
03:40:15 <Axman6> nice - WSL should work ok, but be warned that development on windows can be a bit harder than *nix system. I think WSL should be fine though
03:41:18 <tvandinther> Yeah hopefully. Only issues I've seemed to have with it is IDE integration from a windows installation across to tools installed on WSL. But VS Code supposedly has that sorted.
03:41:27 <tvandinther> What's the next step?
03:41:41 <Axman6> fire up VS code, install the Haskell plugin
03:43:13 <tvandinther> Cool, got that now.
03:44:39 <Axman6> not sure what the best next step is - possible running `stack new MyNewProject simple` somewhere you want your code to be, then opening that folder in VS code (you can also use `cabal init -i` to make a cabal project without stack)
03:46:46 <tvandinther> Looks good. I guess from here my main 2 questions are 1) How do I run this from the VS Code as opposed to using the command line, and 2) How do I open a REPL terminal which loads my current project
03:47:06 <Axman6> once you have a haskell project, opening a .hs file should let you hover over things and get their types, and I think ctrl clicking (or something, I don't use windows) should take you to definitions if they're in your project
03:47:57 <Axman6> I don't think there's any integration that makes a new Haskell project in VS Code itself (would be a good plugin feature request).
03:48:34 <Axman6> I usually just use the built in terminal and run cabal repl. for stack it would be stack repl I think. Stack might have the ability to reload on save too, I can't remember
03:49:28 <tvandinther> ok yeah I see. So once I'm in the cabal repl, any time I save a file, the REPL will reload that file into it?
03:49:51 <Axman6> no
03:50:02 <maerwald[m]> tvandinther: https://www.haskell.org/ghcup/steps/
03:50:13 <maerwald[m]> There is an introduction
03:50:22 <Axman6> maerwald[m]++
03:50:29 <Axman6> maerwald++
03:50:43 <Axman6> (just to make sure lambdabot's karma goes to the right place!)
03:51:07 <tvandinther> Thank you for that link
03:51:33 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
03:51:40 <Axman6> definitely a better idea to read all the docs than listen to me :P
03:51:59 × renzhi quits (~xp@2607:fa49:6500:b100::229c) (Ping timeout: 240 seconds)
03:52:08 <tvandinther> So as far as IDE features go with VS Code, it's just the syntax highlighting and type information. The rest of the workflow is done through the terminal, is that correct?
03:52:16 <tvandinther> You've been very helpful
03:52:43 <Axman6> Haskell language server does a lot more than that, it runs hlint for you to give hints, and it can even write your code for you
03:54:14 <Axman6> https://haskell-language-server.readthedocs.io/en/latest/features.html covers them
03:54:16 <tvandinther> Nice, I suppose if nothing else needs configuration I will just have a play with what I've got here.
03:58:33 × RevoGen quits (~RevoGen@laptop-grs098eo.bc.edu) (Remote host closed the connection)
03:58:50 RevoGen joins (~RevoGen@laptop-grs098eo.bc.edu)
03:59:09 <Axman6> tvandinther: if you've got it working, feel free to stick around and ask questions
04:00:22 <tvandinther> Thanks for the help Axman. I will certainly drop any questions that I am stuck with. For now I'm quite new that I'll go through some of the exercises on exercism.org and read through learnyouahaskell.com
04:00:39 <tvandinther> I'm very new to functional programming :)
04:00:39 <Axman6> good plan
04:01:30 <Axman6> have fun learning how to write the fibonacci sequence in many different ways!
04:01:55 <tvandinther> I look forward to having difficulty with fizzbuzz once again.
04:02:12 <tvandinther> Although tbh, haskell makes that one look easy with pattern matched function bodies
04:03:21 <zzz> tvandinther: you should watch this https://www.youtube.com/watch?v=VUhlNx_-wYk
04:04:33 cdman joins (~dcm@27.2.217.111)
04:04:33 × cdman quits (~dcm@27.2.217.111) (Changing host)
04:04:33 cdman joins (~dcm@user/dmc/x-4369397)
04:04:59 × cdman quits (~dcm@user/dmc/x-4369397) (Client Quit)
04:05:54 Axman6 is reminded of http://www.willamette.edu/~fruehr/haskell/evolution.html
04:06:00 cdman joins (~dcm@27.2.217.111)
04:06:00 × cdman quits (~dcm@27.2.217.111) (Changing host)
04:06:00 cdman joins (~dcm@user/dmc/x-4369397)
04:11:32 benin joins (~benin@183.82.204.110)
04:11:56 <zzz> i hadn't thought of that one since i couldn't understand most of it
04:12:11 <zzz> nice throwback
04:14:00 × Macbethwin quits (~chargen@D964062A.static.ziggozakelijk.nl) (Remote host closed the connection)
04:14:00 × chargen quits (~chargen@D964062A.static.ziggozakelijk.nl) (Remote host closed the connection)
04:14:19 Macbethwin joins (~chargen@D964062A.static.ziggozakelijk.nl)
04:14:20 chargen joins (~chargen@D964062A.static.ziggozakelijk.nl)
04:14:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
04:15:37 <Axman6> I haven't watched all that video... but is it going to just be lambda calculus in Ruby?
04:17:09 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
04:18:18 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 276 seconds)
04:19:38 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:22:02 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
04:24:27 jakalx joins (~jakalx@base.jakalx.net)
04:24:34 <tvandinther> Should the syntax highlighting in vs code differentiate functions from values? Although I know technically functions can be values but I'm getting a lot of white text which is a little hard to differentiate
04:25:10 <tvandinther> to be more precise, differentiating functions from the parameters
04:33:04 motherfsck joins (~motherfsc@user/motherfsck)
04:36:09 takuan joins (~takuan@178-116-218-225.access.telenet.be)
04:40:33 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
04:48:53 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:52:06 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 276 seconds)
05:11:08 <tvandinther> How do I use the `fromListWith` function? It says it is out of scope but I am unsure how to import it
05:13:08 <tvandinther> I want the one from the map module
05:14:32 <Cale> tvandinther: It would probably be good if it distinguished the value being defined from other variables, regardless of whether it was a function.
05:14:47 × cdman quits (~dcm@user/dmc/x-4369397) (Remote host closed the connection)
05:15:20 cdman joins (~dcm@27.2.217.111)
05:15:20 × cdman quits (~dcm@27.2.217.111) (Changing host)
05:15:20 cdman joins (~dcm@user/dmc/x-4369397)
05:15:54 <Cale> import Data.Map qualified as Map
05:16:02 <Cale> Map.fromListWith ...
05:16:09 <Cale> oops
05:16:16 <Cale> import qualified Data.Map as Map
05:18:22 <Cale> You may alongside that want to also have an import like import Data.Map (Map) so that you don't have to qualify Map in types.
05:19:52 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
05:24:50 × chargen quits (~chargen@D964062A.static.ziggozakelijk.nl) (Remote host closed the connection)
05:25:10 chargen joins (~chargen@D964062A.static.ziggozakelijk.nl)
05:35:19 Guest34 joins (~Guest34@176.122.87.241)
05:35:31 × Guest34 quits (~Guest34@176.122.87.241) (Client Quit)
05:36:25 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
05:38:42 × hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
05:40:13 hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
05:42:31 × Me-me quits (~me-me@user/me-me) (Ping timeout: 246 seconds)
05:43:17 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
05:44:48 Me-me joins (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net)
05:45:19 geekosaur joins (~geekosaur@xmonad/geekosaur)
05:45:48 motherfsck joins (~motherfsc@user/motherfsck)
05:45:49 × chargen quits (~chargen@D964062A.static.ziggozakelijk.nl) (Quit: Leaving)
05:47:12 × Macbethwin quits (~chargen@D964062A.static.ziggozakelijk.nl) (Quit: Leaving)
05:47:42 Maxdamantus joins (~Maxdamant@user/maxdamantus)
05:49:03 × hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
05:49:26 odnes joins (~odnes@5-203-240-200.pat.nym.cosmote.net)
05:56:17 × Me-me quits (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
05:56:17 Me-me joins (~me-me@user/me-me)
05:59:47 hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
06:03:47 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
06:06:41 × jerry99 quits (~330f3e76@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
06:07:04 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
06:07:19 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
06:08:48 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Ping timeout: 276 seconds)
06:09:19 mikoto-chan joins (~mikoto-ch@213.177.151.239)
06:12:54 phma_ joins (phma@2001:5b0:215a:e258:fc67:1fe1:f22e:6962)
06:14:03 × phma quits (~phma@host-67-44-208-158.hnremote.net) (Read error: Connection reset by peer)
06:15:04 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Quit: Lost terminal)
06:18:13 × dwt_ quits (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 246 seconds)
06:20:48 dwt_ joins (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net)
06:23:45 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 276 seconds)
06:24:05 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
06:27:16 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
06:33:31 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
06:37:08 machinedgod joins (~machinedg@24.105.81.50)
06:39:14 fendor joins (~fendor@91.141.37.72.wireless.dyn.drei.com)
06:41:19 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
06:42:06 Wstfgl0 joins (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net)
06:42:24 × Me-me quits (~me-me@user/me-me) (Read error: Connection reset by peer)
06:42:53 Wstfgl0 is now known as Me-me
06:43:55 chele joins (~chele@user/chele)
06:44:50 × Me-me quits (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
06:44:50 Me-me joins (~me-me@user/me-me)
06:46:57 <Axman6> tvandinther: you might want to try switching your VS Code theme or installing new ones (through the same extensions tab you installed the Haskell plugin - see https://vscodethemes.com to easily fine ones you like). Some do a much better job than others differentiating between differents of sorts of lexemes than others - I particularly like the Monokai theme for HAskell in VS Code because it differentiated between more things than most themes
06:47:33 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
06:48:31 <Axman6> once you have a few themes you like installed, hit ... whatever the equivalent of cmd-shift-p is, tyupe in "theme" and select Preferences: Color Theme. That'll give you a list of themes which will change as you move up and down them live so you can see what your actual code looks like
06:49:19 × kaph__ quits (~kaph@bo-18-157-187.service.infuturo.it) (Ping timeout: 240 seconds)
06:50:51 acidjnk joins (~acidjnk@p200300d0c722df64b44bf627258f714f.dip0.t-ipconnect.de)
06:51:30 akegalj joins (~akegalj@93-138-136-145.adsl.net.t-com.hr)
06:52:14 julian joins (~julian@20.83.116.49)
06:56:32 × RevoGen quits (~RevoGen@laptop-grs098eo.bc.edu) (Remote host closed the connection)
06:57:57 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
06:59:49 gehmehgeh joins (~user@user/gehmehgeh)
07:01:30 Wstfgl0 joins (~me-me@v.working.name)
07:01:37 × Me-me quits (~me-me@user/me-me) (Read error: Connection reset by peer)
07:01:44 lortabac joins (~lortabac@2a01:e0a:541:b8f0:61e6:c8e5:1064:c52e)
07:03:19 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
07:03:43 Wstfgl0 is now known as Me-me
07:04:57 <Axman6> zzz: enjoying this Ruby video, even if I know everything that's going on it's still fun
07:16:18 coot joins (~coot@213.134.190.95)
07:16:22 × daniii_ quits (uid550762@id-550762.ilkley.irccloud.com) ()
07:17:09 romesrf joins (~romes@185.5.8.134)
07:19:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
07:20:16 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Remote host closed the connection)
07:20:53 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:22:33 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
07:24:04 <tvandinther> Thanks Axman6
07:24:21 × julian quits (~julian@20.83.116.49) (Remote host closed the connection)
07:25:02 julian joins (~julian@20.83.116.49)
07:27:11 bahamas joins (~lucian@84.232.140.158)
07:27:27 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
07:29:47 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:30:24 kaph joins (~kaph@151.19.251.152)
07:30:42 <romesrf> o/
07:31:11 anomal joins (~anomal@87.227.196.109)
07:32:18 abastro joins (~abab9579@220.75.216.63)
07:32:19 <Axman6> o/
07:43:06 zeenk joins (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94)
07:44:05 mastarija joins (~mastarija@2a05:4f46:e04:6000:2897:ab56:96f1:cca3)
07:46:37 chomwitt joins (~chomwitt@2a02:587:dc1b:da00:1339:e02b:9822:2360)
07:48:15 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
07:52:54 michalz joins (~michalz@185.246.204.61)
07:54:01 kamyar joins (~kamyar@91.184.78.171)
07:55:48 kamyar71 joins (~kamyar@91.184.78.171)
07:55:57 <kamyar71> Hello there
07:55:59 <kamyar71> please check this
07:56:00 <kamyar71> https://zerobin.net/?70b967b7e82b889b#jwW2a5GSS7iAHhiJuIzRtLedFfdTcdYXUtJKIDYD/rI=
07:56:13 <kamyar71> Help me fix the problem
07:56:28 <kamyar71> here: evaluate (PLAtomic p) f = f p
07:58:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
07:59:27 × kamyar quits (~kamyar@91.184.78.171) (Quit: Leaving...)
07:59:42 <kamyar71> Anyone can help please?
08:00:45 phma_ is now known as phma
08:00:53 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
08:00:59 × nahcetan quits (~nate@98.45.169.16) (Read error: Connection reset by peer)
08:01:25 <mastarija> kamyar71, what exactly is the problem?
08:01:42 <kamyar71>  Couldn't match expected type ‘a1’ with actual type ‘a’
08:01:55 nahcetan joins (~nate@98.45.169.16)
08:03:26 <mastarija> Just a sec
08:05:47 <mastarija> kamyar71, your instance is too general
08:06:07 <kamyar71> How can I fix?
08:06:09 hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
08:06:10 <mastarija> why are you using a class instead of just implementing the evaluate function?
08:06:33 × foul_owl quits (~kerry@23.82.193.87) (Ping timeout: 256 seconds)
08:06:49 <kamyar71> Since I want to be able to create multiple instances but with the same parts
08:07:14 <mastarija> I recommend you just use plain functions
08:07:24 <kamyar71> OK thanks letme try
08:07:27 <mastarija> There's no difference other than naming
08:08:19 <mastarija> kamyar71, https://zerobin.net/?a9aa438e3e9c81b0#cahom5dSwWuQS1GvmNAtg0w0ifXXiNVsX30/3FtR6DI=
08:09:09 <kamyar71> But the wanted thing is just one evaluate function
08:09:15 <kamyar71> there are more types like PLSentence
08:09:31 × redb quits (~nmh@136.49.49.211) (Ping timeout: 260 seconds)
08:10:00 <mastarija> For every instance you create a new function, it's just that they have the same name
08:10:08 <mastarija> This can cause type inference problems later
08:10:46 <mastarija> Anyway, in your case you had a class `class Interpretation p where evaluate :: p -> (a -> Bool) -> Bool`
08:10:46 ccntrq joins (~Thunderbi@2a01:e34:eccb:b060:b49f:b4db:d687:55bf)
08:11:32 <mastarija> however, you have a variable `a` in your `evaluate` type signature
08:12:54 <mastarija> And compiler doesn't know what that `a` is in relation to `p` so it can't match your `a` from `PLSentence a` to that `a` in `a -> Bool`
08:14:48 <kamyar71> Yes I know but I did not find any better way
08:14:58 <kamyar71> I do not want to use multi parameter class feature
08:15:04 <mastarija> You could use multiparam
08:15:15 <mastarija> Yes... not gonna work without that
08:15:29 <mastarija> But type classes aren't needed in this case
08:15:50 <mastarija> Does anyone know where I can find a detailed explanation on how to read inference rules? I did find some sources, but that is in relation to pure logic. I'm more interested in understanding symbol conventions in the context of programming languages.
08:17:01 <mastarija> I kind of understand what's going on, but it's never explicitly explained what certain symbols mean. They are just "presented" and I'm supposed to pick it up through osmosis or something.
08:18:38 <mastarija> Like, what's `Γ(x) = v | Γ ⊢ x ⇓ v` supposed to mean?
08:18:53 <mastarija> Or rather, how am I supposed to read that?
08:19:24 <mastarija> If there's v assigned to x in context Gamma, then x evaluates to v in context Gamma?
08:19:59 <mastarija> Also, I'm not sure what those parentheses around x mean.
08:20:31 <abastro> I do not have knowledge on this other than my uni class on Proglangs, but I think the meaning should be dependent on each paper.
08:20:45 <abastro> Usually papers begin with defining what they mean with these syntax
08:20:55 foul_owl joins (~kerry@23.82.193.88)
08:21:16 Midjak joins (~Midjak@82.66.147.146)
08:21:19 <abastro> Perhaps it was mentioned in papers this paper is referring to
08:21:37 <abastro> Never seen that `|` part, personally
08:22:47 <mastarija> That's just a horizontal dividing line separating premises from the conclusions
08:23:00 <mastarija> Adapted for our plain text experience :)
08:23:48 <mastarija> abastro, I've found some Harward lectures from CS153 so I'm looking through that
08:24:02 <mastarija> but that same notation is everywhere
08:24:37 <mastarija> with gamma and delta environments, where gamma is usually for types if I've figured it out correctly
08:26:19 <abastro> Oh in that case, I guess it makes sense
08:26:35 <abastro> I think this is for evaluation, tho I might be mistaken
08:26:57 <abastro> When the environment has mapped `x` to `v`, under that envionment, `x` evaluates to v.
08:27:13 <mastarija> abastro, yes, that is for evaluation from my understanding
08:27:31 <mastarija> but my problem is same as yours : "I might be mistaken"
08:27:50 <abastro> Haha
08:27:51 <mastarija> and I can't find any resource that explicitly states what this means
08:27:56 <abastro> Yea, I mean
08:28:01 <abastro> I learned similar expression
08:28:22 kuribas joins (~user@ptr-17d51end1q9g3xjtvcu.18120a2.ip6.access.telenet.be)
08:28:42 <abastro> Never seen ⇓ being used instead of =>
08:28:59 <abastro> In this way*
08:29:11 <abastro> Tho, considering how it reads, I think that one should be evaluation
08:29:54 <mastarija> Yes, I've found => in another source
08:29:56 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
08:30:23 <mastarija> I mean, what's the point if everyone just writes things any way they like.
08:30:23 <abastro> Indeed
08:30:39 <abastro> Agreed!
08:31:57 <mastarija> abastro, also, when I'm manually trying to type check a piece of code, I'm assuming I'm building the derivation tree from bottom up
08:32:20 <mastarija> At the bottom is my whole piece of code that I'm trying to "check", and from there I build my premises?
08:32:33 <mastarija> Or is it other way around?
08:32:33 <abastro> Yep, conceptually. (Not always though, I think)
08:32:40 <mastarija> Goddamnit
08:32:47 <abastro> Yea you start from bottom *usually*
08:33:01 <mastarija> With the whole expression, which I then try to decompose
08:33:04 <abastro> Tho rules might be complicated enough so that you sometimes have to.. meh
08:33:25 <mastarija> Ok, so it's handwawy
08:33:38 <mastarija> *handwavy
08:34:29 redb joins (~nmh@136.49.49.211)
08:34:37 <abastro> At least HM type system allows you to build tree from bottom to up
08:34:52 <abastro> Dividing into pieces, and then at the top you decide the type
08:35:03 <abastro> Then you come back down combining the types
08:35:15 <abastro> Oh wait, perhaps you still need variables to unify with HM. hmm
08:37:19 <lortabac> mastarija: "Does anyone know where I can find..." -> Types and Programming Languages by Pierce is a good introduction to the topic
08:39:18 frost joins (~frost@user/frost)
08:39:26 × redb quits (~nmh@136.49.49.211) (Ping timeout: 272 seconds)
08:40:35 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
08:45:13 gurkenglas joins (~gurkengla@178.12.18.212)
08:45:16 × mastarija quits (~mastarija@2a05:4f46:e04:6000:2897:ab56:96f1:cca3) (Quit: Leaving)
08:45:47 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:47:57 aman joins (~aman@user/aman)
08:48:47 × kamyar71 quits (~kamyar@91.184.78.171) (Quit: Client closed)
08:51:42 redb joins (~nmh@136.49.49.211)
08:53:35 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
08:53:45 krappix joins (~krappix@nat-inria-interne-72-gw-01-lne.lille.inria.fr)
08:55:33 azimut joins (~azimut@gateway/tor-sasl/azimut)
08:56:10 × x_kuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
08:56:30 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
08:57:29 mastarija joins (~mastarija@2a05:4f46:e04:6000:2897:ab56:96f1:cca3)
08:58:33 xkuru joins (~xkuru@user/xkuru)
08:58:54 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
09:00:09 × Artem[m] quits (~artemtype@2001:470:69fc:105::75b) (Quit: You have been kicked for being idle)
09:00:15 × hughjfchen[m] quits (~hughjfche@2001:470:69fc:105::c29d) (Quit: You have been kicked for being idle)
09:01:36 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 272 seconds)
09:07:31 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
09:08:25 rembo10 joins (~rembo10@main.remulis.com)
09:10:04 × krappix quits (~krappix@nat-inria-interne-72-gw-01-lne.lille.inria.fr) (Ping timeout: 250 seconds)
09:10:13 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
09:12:13 ubert joins (~Thunderbi@2a02:8109:9880:303c:bbe6:420f:2b6c:e0f7)
09:24:00 coot_ joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
09:24:57 titi joins (~Srain@sunp.ient.rwth-aachen.de)
09:25:28 redb joins (~nmh@136.49.49.211)
09:27:03 × coot quits (~coot@213.134.190.95) (Ping timeout: 276 seconds)
09:29:03 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
09:29:37 × titi quits (~Srain@sunp.ient.rwth-aachen.de) (Remote host closed the connection)
09:29:39 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
09:31:36 × acidjnk quits (~acidjnk@p200300d0c722df64b44bf627258f714f.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
09:40:17 <abastro> Is there a safe replacement for `zip l (tail l)`?
09:40:44 <abastro> Like, the one which gives empty list or something
09:42:08 nattiestnate joins (~nate@202.138.250.17)
09:46:28 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
09:48:20 <tomsmeding> abastro: `zip l (drop 1 l)`
09:50:15 × abastro quits (~abab9579@220.75.216.63) (Ping timeout: 256 seconds)
09:51:06 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 276 seconds)
09:51:06 × nattiestnate quits (~nate@202.138.250.17) (Quit: WeeChat 3.5)
09:51:13 <tomsmeding> mastarija: perhaps https://www.cs.uu.nl/docs/vakken/mcpd/2021/website/notes/Semantics_notes.pdf together with section 1.3 of https://www.cs.uu.nl/docs/vakken/mcpd/2021/website/notes/MinHs_notes.pdf ?
09:53:55 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
09:55:05 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Remote host closed the connection)
09:57:37 × deadmarshal_ quits (~deadmarsh@95.38.228.226) (Ping timeout: 256 seconds)
09:58:46 <tomsmeding> abastro[m]: mastarija: that ⇓ for evaluation is super common and indicates big-step semantics
09:58:49 redb joins (~nmh@136.49.49.211)
09:58:49 × phma quits (phma@2001:5b0:215a:e258:fc67:1fe1:f22e:6962) (Read error: Connection reset by peer)
09:58:57 <tomsmeding> it is indeed read as "evaluates to" with low precedence
09:59:50 phma joins (~phma@host-67-44-208-45.hnremote.net)
10:00:03 <tomsmeding> horizontal arrows are generally used for small-step semantics (small-step means "single step at a time", non-recursive, single atomic operation; big-step means basically tree-walking interpreter as you'd naturally write in haskell over an AST)
10:01:35 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
10:02:38 CiaoSen joins (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
10:03:17 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
10:10:16 × xff0x_ quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 246 seconds)
10:17:55 Null_A_ joins (~null_a@2601:645:8700:2290:ed24:4c30:909e:37d0)
10:18:51 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
10:19:05 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
10:19:10 × Null_A quits (~null_a@2601:645:8700:2290:9c14:dd1b:c930:439d) (Ping timeout: 250 seconds)
10:20:40 <abastro[m]> tomsmeding: Oh I was dumb..
10:20:57 <abastro[m]> I forgot about drop 1
10:20:58 <abastro[m]> Btw
10:21:09 <abastro[m]> In my uni, the notation was inverted.
10:21:24 <abastro[m]> => was used for big step semantics
10:21:57 <abastro[m]> ⇓ was used for small step semantics
10:22:16 <abastro[m]> Which was why I was somewhat confused.
10:22:37 <tomsmeding> O.o
10:22:40 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
10:23:46 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:24:31 × tvandinther quits (~tvandinth@2406:e002:6815:1801:2c95:5009:a36c:8152) (Quit: Client closed)
10:26:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
10:28:42 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
10:32:59 redb joins (~nmh@136.49.49.211)
10:36:15 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:36:18 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
10:36:43 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:36:59 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
10:39:00 Lord_of_Life_ is now known as Lord_of_Life
10:39:32 × odnes quits (~odnes@5-203-240-200.pat.nym.cosmote.net) (Remote host closed the connection)
10:39:54 odnes joins (~odnes@5-203-240-200.pat.nym.cosmote.net)
10:40:56 abastro[m] uploaded an image: (120KiB) < https://libera.ems.host/_matrix/media/r0/download/matrix.org/CduWXAxUUmHTibMxijZbeyVC/Screenshot_20220419-194024_Drive.jpg >
10:41:40 <tomsmeding> interesting
10:41:53 <abastro[m]> tomsmeding: I guess I was taught wrong
10:41:57 <tomsmeding> ¯\_(ツ)_/¯
10:42:02 <tomsmeding> it's just notation in the end
10:42:02 × kaph quits (~kaph@151.19.251.152) (Read error: Connection reset by peer)
10:42:07 × theproffesor quits (~theprofff@user/theproffesor) (Ping timeout: 246 seconds)
10:42:16 <abastro[m]> By a stubborm professor
10:42:17 <abastro[m]> Oh.
10:42:37 <tomsmeding> maybe the common notation changed over time, or customs differ between sub-communities within theoretical CS?
10:42:42 theproffesor joins (~theprofff@user/theproffesor)
10:42:49 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
10:43:25 <abastro[m]> Yep, I guess
10:44:22 <tomsmeding> I mean, people get all flame-war about notation, but in the end it's just notation :p
10:44:42 <tomsmeding> it's good and useful to have a single standard notation for stuff though
10:46:32 <abastro[m]> Well I remembered the small step thing wrong, '->' was used in the class
10:46:46 <abastro[m]> The downward arrow is used for continuation-involving evaluation
10:47:08 abastro[m] uploaded an image: (235KiB) < https://libera.ems.host/_matrix/media/r0/download/matrix.org/tuCHZAsDZrjMxrrKMtJAzSUo/Screenshot_20220419-194541_Drive.jpg >
10:48:07 <abastro[m]> Likely wanted to use fancy arrows at one place
10:48:26 <abastro[m]> (I disliked how the class was taught in scala btw)
10:50:44 <tomsmeding> ooh continuations
10:51:04 <tomsmeding> ah scala, maybe this is standard in the scala community? That's exactly my point, my custom is from the haskell community
10:52:24 × odnes quits (~odnes@5-203-240-200.pat.nym.cosmote.net) (Quit: Leaving)
10:54:02 × raym quits (~raym@user/raym) (Quit: kernel update, rebooting...)
10:55:35 raym joins (~raym@user/raym)
11:05:24 <abastro[m]> Programming language semantics differ for scala community vs haskell community?
11:05:24 <abastro[m]> Wow
11:06:38 redb joins (~nmh@136.49.49.211)
11:07:47 × cdman quits (~dcm@user/dmc/x-4369397) (Remote host closed the connection)
11:10:16 deadmarshal_ joins (~deadmarsh@95.38.228.226)
11:10:39 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
11:11:55 <tomsmeding> programming language semantics _notation_
11:12:18 <abastro[m]> Aah
11:12:20 <tomsmeding> but I don't know, too lazy to check
11:13:58 × akegalj quits (~akegalj@93-138-136-145.adsl.net.t-com.hr) (Ping timeout: 246 seconds)
11:14:19 × deadmarshal_ quits (~deadmarsh@95.38.228.226) (Ping timeout: 240 seconds)
11:21:03 abastro joins (~abab9579@220.75.216.63)
11:27:21 × chele quits (~chele@user/chele) (Remote host closed the connection)
11:29:34 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
11:29:47 chele joins (~chele@user/chele)
11:30:46 × CAT_S quits (~apic@brezn3.muc.ccc.de) (Ping timeout: 246 seconds)
11:30:46 × simeon quits (~pi@dslb-088-076-113-221.088.076.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
11:31:01 DNH joins (~DNH@8.44.0.68)
11:31:15 × Lears quits (~Leary]@122-58-90-96-vdsl.sparkbb.co.nz) (Remote host closed the connection)
11:31:37 simeon joins (~pi@dslb-088-076-113-221.088.076.pools.vodafone-ip.de)
11:31:44 CAT_S joins (apic@brezn3.muc.ccc.de)
11:32:15 [Leary] joins (~Leary]@122-58-90-96-vdsl.sparkbb.co.nz)
11:32:26 cdman joins (~dcm@user/dmc/x-4369397)
11:32:35 off^ joins (~off@50-192-56-193-static.hfc.comcastbusiness.net)
11:36:15 redb joins (~nmh@136.49.49.211)
11:38:19 kaph joins (~kaph@151.43.200.113)
11:39:25 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:40:34 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
11:41:52 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
11:43:04 MajorBiscuit joins (~MajorBisc@145.94.234.148)
11:44:03 bahamas joins (~lucian@84.232.140.158)
11:46:59 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
11:53:35 schuelermine joins (~anselmsch@user/schuelermine)
11:53:53 redb joins (~nmh@136.49.49.211)
11:54:16 <schuelermine> Wouldn’t it (maybe) be a good idea to extend record syntax from constructors to arbitrary functions to allow named parameters?
11:54:33 <schuelermine> It seems like a natural and convenient extension of the syntax
11:55:02 <schuelermine> You could also allow defining defaults in the record parameters lazily
11:55:20 <schuelermine> This is used, for instance, in Nix, to great effect, to make smart “constructors”
11:55:28 schuelermine parts (~anselmsch@user/schuelermine) ()
11:58:11 × redb quits (~nmh@136.49.49.211) (Ping timeout: 260 seconds)
11:58:36 <geekosaur> bit late since they left, but I think most people consider record syntax a mistake
12:09:41 <abastro> Which record syntax?
12:10:29 <merijn> schuelermine[m]: I mean, you can just change your function to accept a record as input and get 100% of that functionality without any changes?
12:10:43 <merijn> geekosaur: Record syntax is fine, derived field selectors are a mistake
12:10:56 <merijn> All hail -XNoFieldSelectors
12:11:01 <abastro> derived field selectors?
12:11:16 <abastro> Oh you mean the autogenerated functions for each field of record?
12:11:22 <abastro> Obtaining that field from record
12:11:30 <geekosaur> yes
12:11:30 <merijn> abastro: The fact that "data Foo = Foo { bar :: Int }" generates a function "bar :: Foo -> Int"
12:11:42 <abastro> Yea, eww
12:11:46 schuelermine joins (~anselmsch@user/schuelermine)
12:12:00 <abastro> I also dislike it. Tho I guess it was good for brevity
12:12:17 <merijn> I say make NoFieldSelectors and NamedFieldPuns the default in Haskell Prime (ha! as if that'll happen)
12:12:28 <merijn> And then records are already a ton nicer
12:12:50 <abastro> NamedFieldPuns?
12:12:52 <schuelermine> you could use record syntax for map literals
12:13:08 <schuelermine> abastro: means you can pattern match by writing
12:13:10 <schuelermine> f { foo } = foo
12:13:14 <abastro> Eh
12:13:18 <abastro> Ehhhh
12:13:21 <merijn> Instead of having to write
12:13:24 <abastro> I guess that is good for brevity
12:13:32 <merijn> 'f Foo{foo = x} = x'
12:13:36 <merijn> Which, frankly, sucks
12:13:41 <abastro> Yea indeed, provides great brevity
12:14:04 <abastro> Oh right, with NoFieldSelectors those won't be shadowing the field selectors right?
12:14:10 <abastro> That was why I was concerned
12:14:14 <abastro> Hmmm
12:14:16 <schuelermine> 'foo (Foo . bar) (\Foo {foo = foo} = foo)'
12:15:06 × abastro quits (~abab9579@220.75.216.63) (Quit: testing xmonad)
12:16:44 <schuelermine> oh god xmonad
12:16:46 <schuelermine> I just hoogled '(||*)' and it turns out xmonad provides a horrendous family of operators
12:16:48 <schuelermine> (****||*), (****||***), (***||*), (***||**), (**||*), (**||***), (*||*)
12:21:35 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
12:22:25 <schuelermine> Oh also puns means you can do `f foo = Foo { foo }` instead of `f foo = Foo { foo = foo }`
12:23:46 abastro joins (~abab9579@220.75.216.63)
12:24:04 × schuelermine quits (~anselmsch@user/schuelermine) (Quit: WeeChat 3.4.1)
12:25:48 zincy joins (~zincy@host86-160-236-152.range86-160.btcentralplus.com)
12:26:35 redb joins (~nmh@136.49.49.211)
12:26:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
12:29:41 × frost quits (~frost@user/frost) (Quit: Client closed)
12:29:56 × zincy quits (~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
12:30:22 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
12:30:35 chexum joins (~quassel@gateway/tor-sasl/chexum)
12:31:39 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
12:33:05 <geekosaur> those are trying to visually indicate how they divide up the screen
12:33:25 <geekosaur> and yes, some parts of contrib are … interesting
12:35:12 Pickchea joins (~private@user/pickchea)
12:39:15 × kjak quits (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
12:39:31 × oxide quits (~lambda@user/oxide) (Quit: oxide)
12:41:37 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
12:42:24 xff0x_ joins (~xff0x@om126194210237.10.openmobile.ne.jp)
12:43:50 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
12:44:53 ishaan joins (~ishaan@122.161.48.109)
12:44:59 × ishaan quits (~ishaan@122.161.48.109) (Client Quit)
12:45:39 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
12:46:35 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
12:51:55 × ldlework quits (~hexeme@user/hexeme) (Quit: co'o ro do)
12:52:47 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
12:54:27 geekosaur joins (~geekosaur@xmonad/geekosaur)
12:55:16 hexeme joins (~hexeme@user/hexeme)
12:55:54 acidjnk joins (~acidjnk@p200300d0c722df64b44bf627258f714f.dip0.t-ipconnect.de)
12:57:29 × sprout quits (~quassel@2a02-a467-ccd6-1-61ea-c654-ec6a-777e.fixed6.kpn.net) (Ping timeout: 248 seconds)
12:58:01 redb joins (~nmh@136.49.49.211)
12:58:51 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 256 seconds)
12:59:44 × DNH quits (~DNH@8.44.0.68) (Ping timeout: 272 seconds)
13:00:54 chexum_ joins (~quassel@gateway/tor-sasl/chexum)
13:01:13 × chenqisu1 quits (~chenqisu1@183.217.200.38) (Quit: Leaving)
13:01:35 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
13:02:32 <raehik> I'm upgrading some code to GHC 9.2 . GHC is complaining about places I've used `_typevar` to explicitly not bind a typevar, asking me to use PartialTypeSigs. Is there another way to do this, that doesn't need that extension?
13:02:51 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
13:02:57 <raehik> or is it right to use that extension here? (haven't touched it before)
13:03:59 × kjak quits (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
13:04:09 <raehik> code snippet, one of the signatures that errors https://github.com/raehik/gtvm-hs/blob/main/app/Common/Util.hs#L37
13:05:03 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
13:05:45 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:07:10 neurocyte8614492 joins (~neurocyte@IP-045136169156.dynamic.medianet-world.de)
13:07:10 × neurocyte8614492 quits (~neurocyte@IP-045136169156.dynamic.medianet-world.de) (Changing host)
13:07:10 neurocyte8614492 joins (~neurocyte@user/neurocyte)
13:07:26 <raehik> ah not to worry. I think I wrote that when I didn't understand bringing typevar scoping. Not putting it in forall means it's not bound anyway.
13:07:37 <raehik> s/bringing//
13:09:19 × acidjnk quits (~acidjnk@p200300d0c722df64b44bf627258f714f.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
13:09:51 × kaph quits (~kaph@151.43.200.113) (Read error: Connection reset by peer)
13:12:51 <merijn> raehik: None of the type names on line 37 are defined in that file, so it's impossible to tell
13:13:48 <raehik> merijn: Sorry, I didn't send the unique commit so it's showing the updated version. I had `Stream 'StreamOut _s` in place of `Stream 'StreamOut s`
13:14:14 × MajorBiscuit quits (~MajorBisc@145.94.234.148) (Ping timeout: 250 seconds)
13:14:45 <raehik> That now breaks on GHC 9.2 with a note about PartialTypeSignatures. But now I realize I don't need the underscore, since by not explicitly quantifying it stays out of my way
13:14:57 MajorBiscuit joins (~MajorBisc@145.94.234.148)
13:15:24 <raehik> had only just learned about datakinds I think
13:15:34 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
13:15:51 oxide joins (~lambda@user/oxide)
13:17:21 mikoto-chan joins (~mikoto-ch@213.177.151.239)
13:17:31 redb joins (~nmh@136.49.49.211)
13:19:42 sprout joins (~quassel@2a02-a45f-f170-1-2c70-4ee9-c067-7549.fixed6.kpn.net)
13:20:30 × aeka quits (~aeka@2606:6080:1001:13:a777:ff73:dfdc:3ab0) (Quit: ZNC 1.8.2 - https://znc.in)
13:21:00 mastarija_ joins (~mastarija@2a05:4f46:e04:6000:2897:ab56:96f1:cca3)
13:23:44 Sgeo joins (~Sgeo@user/sgeo)
13:23:46 akegalj_ joins (~akegalj@93-138-136-145.adsl.net.t-com.hr)
13:24:08 × mastarija quits (~mastarija@2a05:4f46:e04:6000:2897:ab56:96f1:cca3) (Ping timeout: 248 seconds)
13:26:16 × redb quits (~nmh@136.49.49.211) (Ping timeout: 248 seconds)
13:26:26 zebrag joins (~chris@user/zebrag)
13:33:22 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
13:37:03 redb joins (~nmh@136.49.49.211)
13:37:24 tomboy64 joins (~tomboy64@user/tomboy64)
13:37:32 × akegalj_ quits (~akegalj@93-138-136-145.adsl.net.t-com.hr) (Quit: leaving)
13:38:03 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
13:39:39 × sprout quits (~quassel@2a02-a45f-f170-1-2c70-4ee9-c067-7549.fixed6.kpn.net) (Ping timeout: 240 seconds)
13:40:40 × vysn quits (~vysn@user/vysn) (Ping timeout: 250 seconds)
13:41:27 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
13:41:52 × pavonia quits (~user@user/siracusa) (Read error: Connection reset by peer)
13:42:59 × MajorBiscuit quits (~MajorBisc@145.94.234.148) (Ping timeout: 240 seconds)
13:44:09 sprout joins (~quassel@2a02-a45f-f170-1-2c70-4ee9-c067-7549.fixed6.kpn.net)
13:44:53 × aman quits (~aman@user/aman) (Quit: aman)
13:45:25 pavonia joins (~user@user/siracusa)
13:46:24 MajorBiscuit joins (~MajorBisc@145.94.234.148)
13:47:49 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
13:49:00 <tomsmeding> Why can I not use a [t| |] splice in a typed $$( ) splice?
13:49:15 <tomsmeding> s/[t| |] splice/[t| |] quote/
13:50:38 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
13:50:38 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
13:50:38 wroathe joins (~wroathe@user/wroathe)
13:50:40 mastarija__ joins (~mastarija@2a05:4f46:e04:6000:3db0:a561:6353:b491)
13:53:51 aeka joins (~aeka@user/hiruji)
13:53:58 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
13:53:59 × mastarija_ quits (~mastarija@2a05:4f46:e04:6000:2897:ab56:96f1:cca3) (Ping timeout: 240 seconds)
13:54:27 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:55:00 <geekosaur> looks like you need to use a typed quotation in a typed splice? [t|| ... ||]
13:55:32 <tomsmeding> geekosaur: [t|| doesn't exist, and wouldn't make sense, because it should return a Type and not an Exp
13:55:39 Guest85 joins (~Guest85@165.134.212.71)
13:56:01 <tomsmeding> it would make sense if there was a phantom-typed wrapper TType or something, just like there is 'TExp a' around 'Exp'
13:56:29 <geekosaur> as of 9.2.2 it's Code Q Type, looks as if
13:56:44 redb joins (~nmh@136.49.49.211)
13:56:52 <tomsmeding> I'm on 9.2.2
13:57:04 × Guest85 quits (~Guest85@165.134.212.71) (Client Quit)
13:57:52 jakalx joins (~jakalx@base.jakalx.net)
13:58:49 <tomsmeding> geekosaur: 'Code Q Type' is ismomorphic (newtype wrapper) to 'Q (TExp Type)', which is isomorphic (newtype wrapper) to 'Q Exp'
13:58:58 <tomsmeding> it's an expression that returns a type at runtime, which is not what I want
13:59:16 <tomsmeding> (and not what [t| does, which is return the Type at compile-time)
13:59:25 <tomsmeding> I was confused for a while too :p
13:59:55 <tomsmeding> (but thanks for checking!)
14:00:36 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 250 seconds)
14:01:17 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
14:01:58 redb joins (~nmh@136.49.49.211)
14:02:59 × mastarija__ quits (~mastarija@2a05:4f46:e04:6000:3db0:a561:6353:b491) (Ping timeout: 240 seconds)
14:04:41 mastarija__ joins (~mastarija@2a05:4f46:e04:6000:a5e2:63ce:2368:50db)
14:07:32 × redb quits (~nmh@136.49.49.211) (Ping timeout: 250 seconds)
14:07:55 <schuelermine[m]> Can you generate setters for only some properties using the lens library?
14:10:36 <Taneb> schuelermine[m]: you can use https://hackage.haskell.org/package/lens-5.1/docs/Control-Lens-TH.html#v:makeLensesFor makeLensesFor
14:10:47 <schuelermine[m]> thanks!
14:11:11 Pickchea joins (~private@user/pickchea)
14:12:59 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
14:13:11 × stefan-_ quits (~cri@42dots.de) (Ping timeout: 256 seconds)
14:14:48 haritz joins (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk)
14:14:48 × haritz quits (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
14:14:48 haritz joins (~hrtz@user/haritz)
14:18:57 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
14:19:03 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
14:22:09 <maerwald> tomsmeding: is it time to move the playground out of beta?
14:23:00 <tomsmeding> maerwald: I haven't had time to work on it anymore in the past weeks sorry
14:23:46 <tomsmeding> maerwald: I feel like there are a few items in this list that would need to be fixed first https://github.com/tomsmeding/pastebin-haskell/blob/play/TODO.txt
14:24:41 <tomsmeding> in particular: https (I should do that), tab key, -N (I should do that), handshake, memory limit, SIGKILL
14:25:17 <tomsmeding> I will probably have some time coming weekend
14:26:39 shriekingnoise joins (~shrieking@201.231.16.156)
14:26:39 redb joins (~nmh@136.49.49.211)
14:26:47 stefan-_ joins (~cri@42dots.de)
14:27:08 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:28:00 <maerwald> make it so :D
14:28:05 <tomsmeding> :p
14:28:07 <tomsmeding> I'll try
14:28:41 <maerwald> arjun wanted to work on the CSS, but I'm worried he ragequitted
14:28:47 <tomsmeding> lol
14:28:50 <tomsmeding> I can have a look at css too
14:28:57 <maerwald> well, css can only give you grief, so
14:29:05 <tomsmeding> I won't be as fast and won't be as """modern""" probably, but eh
14:29:13 <tomsmeding> perhaps I can use the same framework as I used for paste.tomsmeding.com
14:29:20 <maerwald> it's like harvesting asparagus
14:29:22 <tomsmeding> might be nice if the theme is consistent as well
14:29:32 tomsmeding doesn't know anything about harvesting asparagus
14:29:51 <maerwald> bleeding hands
14:31:54 × gurkenglas quits (~gurkengla@178.12.18.212) (Ping timeout: 276 seconds)
14:33:47 <schuelermine[m]> Do you have to explicitly declare your library as a dependency of your test suite in cabal?
14:33:57 bahamas joins (~lucian@84.232.140.158)
14:34:23 <tomsmeding> eys
14:34:26 <tomsmeding> schuelermine[m]: *yes
14:34:51 <schuelermine[m]> goodness
14:34:56 <schuelermine[m]> should I just write == <current-version>
14:35:03 <tomsmeding> just don't put a version
14:35:18 <tomsmeding> cabal will always use the version produced in the current package
14:35:27 <tomsmeding> so in fact a version annotation there is always redundant
14:35:40 <tomsmeding> (and cabal will even warn on that, IIRC)
14:35:52 abastro joins (~abab9579@220.75.216.63)
14:36:53 × jlamothe quits (~jlamothe@198.251.61.229) (Quit: leaving)
14:38:42 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
14:38:55 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
14:39:03 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 276 seconds)
14:39:49 × aeka quits (~aeka@user/hiruji) (Ping timeout: 256 seconds)
14:40:09 vysn joins (~vysn@user/vysn)
14:40:23 bahamas joins (~lucian@84.232.140.158)
14:40:53 aeka joins (~aeka@user/hiruji)
14:43:23 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
14:44:48 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 250 seconds)
14:45:06 DNH joins (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31)
14:46:27 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
14:46:39 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
14:49:04 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
14:49:08 × CiaoSen quits (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
14:49:40 dyeplexer joins (~dyeplexer@user/dyeplexer)
14:49:55 sibnull[m] joins (~sibnullma@2001:470:69fc:105::1:1291)
14:51:46 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
14:53:25 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
14:54:17 jlamothe joins (~jlamothe@198.251.61.229)
14:55:31 × hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
14:56:30 geekosaur joins (~geekosaur@xmonad/geekosaur)
14:57:07 hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
14:57:28 yauhsien joins (~yauhsien@61-231-24-129.dynamic-ip.hinet.net)
14:59:56 Andrew is now known as AndrewYu
15:00:02 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
15:02:29 × yauhsien quits (~yauhsien@61-231-24-129.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
15:07:21 × anomal quits (~anomal@87.227.196.109) (Remote host closed the connection)
15:08:39 × kuribas quits (~user@ptr-17d51end1q9g3xjtvcu.18120a2.ip6.access.telenet.be) (Ping timeout: 240 seconds)
15:12:36 × MajorBiscuit quits (~MajorBisc@145.94.234.148) (Ping timeout: 240 seconds)
15:12:45 jgeerds joins (~jgeerds@d5364b87.access.ecotel.net)
15:13:01 MajorBiscuit joins (~MajorBisc@145.94.234.148)
15:19:21 × MajorBiscuit quits (~MajorBisc@145.94.234.148) (Ping timeout: 276 seconds)
15:20:22 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:61e6:c8e5:1064:c52e) (Quit: WeeChat 2.8)
15:20:34 Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
15:22:27 TCZ joins (~tcz@ip-91.246.66.101.skyware.pl)
15:22:59 TCZ parts (~tcz@ip-91.246.66.101.skyware.pl) (...)
15:24:42 krappix joins (~krappix@nat-inria-interne-72-gw-01-lne.lille.inria.fr)
15:25:09 fciocan joins (~fciocan@188.24.47.102)
15:25:46 × xff0x_ quits (~xff0x@om126194210237.10.openmobile.ne.jp) (Read error: Connection reset by peer)
15:26:32 × fciocan quits (~fciocan@188.24.47.102) (Client Quit)
15:29:08 gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de)
15:30:39 abiss27 joins (~abiss27@user/abiss)
15:33:15 bahamas joins (~lucian@84.232.140.158)
15:33:56 stackdroid18 joins (14094@user/stackdroid)
15:35:18 × krappix quits (~krappix@nat-inria-interne-72-gw-01-lne.lille.inria.fr) (Ping timeout: 250 seconds)
15:35:18 <albet70> what's the join implement for Cont?
15:37:31 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 246 seconds)
15:41:01 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
15:41:40 <kritzefitz> albet70: join is not a method, so it's the same for Cont as for any other monad.
15:42:06 <kritzefitz> namely: `join x = x >>= id`
15:44:26 zer0bitz joins (~zer0bitz@2001:2003:f444:8f00:d86f:477d:4b86:10fd)
15:45:37 <albet70> https://hackage.haskell.org/package/transformers-0.6.0.4/docs/src/Control.Monad.Trans.Cont.html#ContT
15:46:05 × ccntrq quits (~Thunderbi@2a01:e34:eccb:b060:b49f:b4db:d687:55bf) (Remote host closed the connection)
15:46:43 <albet70> join is not required to make type as an instance of monad?
15:47:08 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
15:47:47 <kritzefitz> No, join is defined in terms of `>>=` for all Monads.
15:47:58 <kritzefitz> i.e. it is not required.
15:49:03 <geekosaur> in Haskell the fundamental Monad operations are return and >>=
15:49:19 <geekosaur> not the mathematical version which uses join instead of >>=
15:50:02 <albet70> join (*) = \x -> x * x, so join (*) = (*) >>= id?
15:50:44 <albet70> > (*) >>= id $ 3
15:50:46 <lambdabot> 9
15:51:15 <albet70> > join (*) 3
15:51:17 <lambdabot> 9
15:51:41 fciocan joins (~fciocan@188.24.47.102)
15:51:42 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:51:49 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
15:52:04 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:52:30 × fciocan quits (~fciocan@188.24.47.102) (Client Quit)
15:52:41 <geekosaur> so if I recall correctly m >>= f is mathematically join (fmap f m), so given the functor laws you recover join by making f id
15:54:50 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
15:55:44 Vajb joins (~Vajb@2001:999:504:1dda:267d:6860:bdf7:f68b)
15:55:56 justsomeguy joins (~justsomeg@user/justsomeguy)
15:57:45 <albet70> > join (fmap (+1) [1..])
15:57:47 <lambdabot> error:
15:57:47 <lambdabot> • No instance for (Num [()]) arising from a use of ‘e_111’
15:57:47 <lambdabot> • In the expression: e_111
15:57:57 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
15:59:09 abastro joins (~abab9579@220.75.216.63)
15:59:20 lbseale joins (~ep1ctetus@user/ep1ctetus)
15:59:52 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Client Quit)
16:00:11 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:00:14 lbseale joins (~ep1ctetus@user/ep1ctetus)
16:02:19 × Vajb quits (~Vajb@2001:999:504:1dda:267d:6860:bdf7:f68b) (Read error: Connection reset by peer)
16:02:48 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
16:04:45 <geekosaur> that looks wrong
16:06:05 <monochrom> Yeah, join m = m >>= id
16:07:04 <monochrom> More concretely m >>= \foo -> foo so it's like saying "obtain the procedure, now run it".
16:07:04 <abastro[m]> And I thought `[()] ~ Natural`
16:07:31 <albet70> m >>= id, id is same as return?
16:07:33 × ubert quits (~Thunderbi@2a02:8109:9880:303c:bbe6:420f:2b6c:e0f7) (Remote host closed the connection)
16:07:41 <albet70> m >>= return?
16:09:06 × cdman quits (~dcm@user/dmc/x-4369397) (Ping timeout: 272 seconds)
16:09:52 <monochrom> Ugh why would you think that? But no.
16:09:54 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:10:16 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:10:22 × redb quits (~nmh@136.49.49.211) (Ping timeout: 272 seconds)
16:10:54 <monochrom> If you work at the layperson level of "they are similar therefore they are equal" you will never get anywhere in STEM.
16:11:11 <albet70> > [3] >>= id
16:11:12 <lambdabot> error:
16:11:12 <lambdabot> • No instance for (Num [()]) arising from a use of ‘e_13’
16:11:13 <lambdabot> • In the expression: e_13
16:11:28 × vysn quits (~vysn@user/vysn) (Ping timeout: 250 seconds)
16:11:49 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
16:11:53 <albet70> > (Just 3) >>= id
16:11:55 <lambdabot> error:
16:11:55 <lambdabot> • No instance for (Num (Maybe ())) arising from a use of ‘e_13’
16:11:55 <lambdabot> • In the expression: e_13
16:12:20 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 250 seconds)
16:13:27 <geekosaur> it's join, you gave it nothing to join
16:13:31 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
16:13:35 <geekosaur> > Just (Just 3) >>= id
16:13:36 <lambdabot> Just 3
16:14:25 <albet70> :t (Just 3) >>=
16:14:26 <lambdabot> error:
16:14:26 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
16:14:51 <albet70> :t (>>=) (Just 3)
16:14:52 <lambdabot> Num a => (a -> Maybe b) -> Maybe b
16:15:49 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
16:15:49 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
16:15:49 finn_elija is now known as FinnElija
16:15:50 <albet70> :t id
16:15:51 <lambdabot> a -> a
16:17:14 × fjmorazan quits (~quassel@user/fjmorazan) (Quit: fjmorazan)
16:17:28 fjmorazan joins (~quassel@user/fjmorazan)
16:19:04 × jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 248 seconds)
16:20:03 × cheategg quits (~Username@user/cheater) (Quit: BitchX: the official IRC client of the 2004 Olympic Games)
16:20:08 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:21:13 × fjmorazan quits (~quassel@user/fjmorazan) (Client Quit)
16:21:28 bahamas joins (~lucian@84.232.140.158)
16:21:38 wootehfoot joins (~wootehfoo@user/wootehfoot)
16:21:53 fjmorazan joins (~quassel@user/fjmorazan)
16:26:02 <abastro[m]> Recognizing similarity as equality would not serve well in any context imho
16:26:18 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 276 seconds)
16:26:37 <albet70> I wonder join Fix(Fix a) would get
16:26:52 × abastro quits (~abab9579@220.75.216.63) (Ping timeout: 246 seconds)
16:27:07 jerry99 joins (~330f6b9c@cerf.good1.com)
16:30:15 redb joins (~nmh@136.49.49.211)
16:30:19 cheater joins (~Username@user/cheater)
16:30:54 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
16:33:49 bahamas joins (~lucian@84.232.140.158)
16:34:42 odnes joins (~odnes@5-203-242-183.pat.nym.cosmote.net)
16:37:07 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
16:39:59 × stackdroid18 quits (14094@user/stackdroid) (Quit: hasta la vista... tchau!)
16:40:45 deadmarshal_ joins (~deadmarsh@95.38.228.226)
16:42:27 redb joins (~nmh@136.49.49.211)
16:44:03 <EvanR> abastro[m], if we're talking strict data structures, then yeah they are bijective
16:44:28 × off^ quits (~off@50-192-56-193-static.hfc.comcastbusiness.net) (Remote host closed the connection)
16:45:09 stackdroid18 joins (~stackdroi@user/stackdroid)
16:47:31 <EvanR> but strict data structures is a terrible default!
16:48:22 <janus> but how would stuff like 'zip [1..]' work if lists were strict?
16:48:52 <janus> what's the point of some weird mix? isn't it better to be consistent?
16:51:03 <EvanR> strict data fits into the framework haskell gives us, it has a flat definedness hierarchy. It's fine
16:51:30 <EvanR> i.e. wouldn't machine int work better if the bits were lazy? no
16:51:44 <EvanR> not in this century maybe
16:55:01 × slaydr quits (~slaydr@173.239.197.74) (Remote host closed the connection)
16:55:35 <janus> what do people mean when they say 'data'? if a record contains a function, is it data or not?
16:57:59 <EvanR> that leads to the next question, what do you mean by "function" xD
16:58:19 <EvanR> because a lambda expression is cromulent data
16:58:34 <janus> every time somebody says 'zero argument function' they get scolded...
16:58:57 <EvanR> yeah not those
16:59:12 cheater is now known as cheategg
16:59:52 <janus> what do you mean by 'cromulent'?
16:59:56 <EvanR> lol
17:00:06 <janus> you can't get Eq on functions, i think that is a big difference
17:00:07 <EvanR> I guess I deserve that
17:00:59 <janus> i don't mean to be daft, it's just that i don't understand whether there even is a technically correct definition or not
17:01:00 <EvanR> you think deciding the extensional equality of functions is bad? Let me introduce you to the value of real numbers
17:01:17 <EvanR> decidable equality is not a given, generally, it's a special power
17:01:23 <EvanR> only some data types can do it
17:01:54 <janus> Idris has the Dec type
17:01:57 <EvanR> another example is comparing two infinite lists
17:01:59 <janus> do you think that makes sense?
17:02:14 <EvanR> Dec is for talking about decidable equality so yes
17:02:17 <janus> they have strict data structures by default, no? so you consider that wrong?
17:02:27 <EvanR> rather, for decidable things
17:03:44 <EvanR> earlier I said strict data is a terrible default, this was supposed to be a throw away strong opinion based on nothing but audience
17:04:10 <EvanR> particular situations could use strict data for fun and profit
17:04:40 <janus> right, so i gather that since Idris has Lazy, it isn't so bad that it is the default
17:04:58 <janus> but in haskell, there is no Lazy, so it would be a bad default?
17:05:16 <EvanR> you get to decide because there's a pragma for it
17:06:06 <EvanR> I feel like typical use of haskell would break badly if everything was strict
17:06:38 <geekosaur> so do I
17:06:55 <janus> but it seems that you can write Idris programs that looks a lot like Haskell programs
17:07:04 <geekosaur> there are people who are convinced that haskell should default to strict and make you annotate the lazy stuff though
17:07:04 <EvanR> I haven't seen that
17:07:05 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:07:33 <EvanR> idris programs are more like classic functional programming, with accumulating parameters, carefully avoiding stack use
17:07:55 <janus> to me, a typical haskell program is a HTTP server that talks to a postgres database
17:07:56 <EvanR> when doing recursion
17:08:14 <janus> the only things that need lazyness, that i can think of, is stuff like `zip [1..]`
17:08:35 <EvanR> a web request handler is a very special case environment, you almost don't even need garbage collection
17:08:35 <janus> and when i write my http2 library in idris, i don't seem to run into any hurdles
17:08:52 <EvanR> just handle the request and tear everything down
17:09:02 <janus> ok, so seems like we have different definitions of 'typical' ;)
17:09:03 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:09:17 <Franciman> my typical haskell program is an interpreter
17:09:29 <Franciman> i really enjoy the interpreter point of view
17:09:29 <EvanR> yeah I'm on stage 11 of recovering from "web programming is typical"
17:09:43 <Franciman> a web server is an interpreter
17:09:54 × gdd quits (~gdd@129.199.146.230) (Ping timeout: 272 seconds)
17:09:58 <Franciman> fortunately haskell is very smart about its runtime
17:10:02 <janus> yeah, it's interpreting RealWorld# which comes from Postgres :P
17:10:22 gdd joins (~gdd@129.199.146.230)
17:10:28 <EvanR> I still see everything as a database, it's not good
17:10:35 <Franciman> EvanR: is ghc a database?
17:10:47 <EvanR> it probably has many
17:11:05 <EvanR> many databases with some compiler caked on the outside
17:11:15 <Franciman> dope
17:11:24 <Franciman> i see databases as logic programming
17:11:34 <Franciman> am i totally astray?
17:11:48 <EvanR> if it was logical that would be better
17:12:02 <janus> Franciman: yes, because if you try swapping out your postgres layer for LogicT, you're gonna have a hard time
17:12:29 <EvanR> sqlite takes a table definition that says floats go in column, and allows "strings"
17:12:32 <janus> databases are about indexing and query optimization ;)
17:12:55 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
17:13:04 <EvanR> databases could have nice laws and logic but usually don't
17:13:36 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
17:13:49 × odnes quits (~odnes@5-203-242-183.pat.nym.cosmote.net) (Quit: Leaving)
17:13:50 <Franciman> janus: uh uhuh thanks
17:14:26 <EvanR> some of it can't be avoided, some of it entrenched 1980s ideology. Join the 90s, like haskell
17:14:32 <janus> Franciman: do you disagree? i am genuinely curious whether you could use LogicT instead of Postgres
17:14:58 <Franciman> if you speak of performance, i don't think it's possible
17:15:09 <Franciman> but conceptually it seemed to me a pretty straightforward thing to do
17:15:10 RevoGen joins (~RevoGen@laptop-grs098eo.bc.edu)
17:15:28 <EvanR> datalog exists
17:16:07 <janus> but datomic doesn't allow you to work like you do with LogicT
17:16:16 <EvanR> well datomic is datomic
17:16:18 <dolio> LogicT isn't a logic language, it's just part of an implementation strategy for one.
17:16:41 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
17:17:30 <geekosaur> logic language? https://curry.pages.ps.informatik.uni-kiel.de/curry-lang.org/
17:17:42 <Franciman> so you get to code in both haskell and burry
17:17:44 <Franciman> curry*
17:17:52 <Franciman> you just have to also learn B, and you'll know
17:17:54 <Franciman> haskell b curry
17:18:07 <janus> hahah :D
17:19:13 × turlando quits (~turlando@user/turlando) (Ping timeout: 260 seconds)
17:19:40 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
17:19:40 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
17:19:40 turlando joins (~turlando@user/turlando)
17:22:12 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-6d4c-38a4-18b7-4b48.fixed6.kpn.net)
17:22:55 × jerry99 quits (~330f6b9c@cerf.good1.com) (Quit: CGI:IRC (Ping timeout))
17:23:12 × RevoGen quits (~RevoGen@laptop-grs098eo.bc.edu) (Ping timeout: 250 seconds)
17:25:43 mrosenbe joins (~mrosenbe@4.7.173.100)
17:25:46 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
17:26:10 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:30:15 merijn joins (~merijn@c-001-002-001.client.esciencecenter.eduvpn.nl)
17:30:48 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
17:30:48 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
17:30:48 wroathe joins (~wroathe@user/wroathe)
17:32:57 JordiGH joins (~jordi@user/jordigh)
17:33:15 <JordiGH> Is there a simple way to syntactically transliterate `int x = y = 42` from C?
17:33:50 <geekosaur> not if you expect them to subsequently be C-like variables
17:34:06 RevoGen joins (~RevoGen@136.167.196.105)
17:34:25 × euandreh quits (~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174) (Quit: WeeChat 3.5)
17:34:31 <JordiGH> That's what I thought, Haskell doesn't really have an assingment operator, right? Like, you can't do (=) x 5
17:34:42 <JordiGH> (I forget the syntax for calling operators without infix notation)
17:35:17 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
17:35:18 <geekosaur> right
17:35:41 rawley joins (~rawley@142.99.241.242)
17:35:44 <geekosaur> closest you get is writeIORef/writeSTRef, I think
17:36:21 <JordiGH> Oh that is the syntax.
17:36:21 <geekosaur> unless you count State in which case lens has some operators that look like assignment and modification
17:36:37 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
17:40:07 <JordiGH> So in particular, there are no associativity rules for = because you just can't put more than one per statement.
17:40:14 jgeerds joins (~jgeerds@d5364b87.access.ecotel.net)
17:40:38 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
17:41:16 mstksg is now known as jle`
17:42:47 <geekosaur> it's not even a statement, really, unless you mean do syntax
17:42:56 <geekosaur> let … in is an expression
17:43:34 <geekosaur> let {<bindings>} in <expression> (braces are usually replaced by layout)
17:43:49 redb joins (~nmh@136.49.49.211)
17:44:00 <geekosaur> and a binding is <pattern> = <expression>
17:44:01 euandreh joins (~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174)
17:44:20 <geekosaur> (which can be quite useful, but watch out for failed pattern matches)
17:47:01 × clever quits (~clever@99.192.114.98) (Ping timeout: 240 seconds)
17:47:24 econo joins (uid147250@user/econo)
17:48:31 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
17:50:43 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
17:51:15 niemand joins (~niemand@p2e52fdfd.dip0.t-ipconnect.de)
17:52:06 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 276 seconds)
17:53:41 × niemand quits (~niemand@p2e52fdfd.dip0.t-ipconnect.de) (Client Quit)
17:55:19 × deadmarshal_ quits (~deadmarsh@95.38.228.226) (Ping timeout: 256 seconds)
17:58:11 × RevoGen quits (~RevoGen@136.167.196.105) (Remote host closed the connection)
17:59:19 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:59:22 × merijn quits (~merijn@c-001-002-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
17:59:42 slack1256 joins (~slack1256@191.125.99.208)
18:02:53 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:06:28 machinedgod joins (~machinedg@24.105.81.50)
18:06:33 redb joins (~nmh@136.49.49.211)
18:10:39 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
18:11:35 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
18:12:32 redb joins (~nmh@136.49.49.211)
18:13:00 × sprout quits (~quassel@2a02-a45f-f170-1-2c70-4ee9-c067-7549.fixed6.kpn.net) (Ping timeout: 240 seconds)
18:17:49 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
18:22:58 <slack1256> Does a complementary package for aeson exist to parsed malformed JSONs on a best effort basis?
18:24:57 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
18:25:37 redb joins (~nmh@136.49.49.211)
18:26:42 <mrosenbe> the docs for withMVar say it is atomic if there are no other producers, does that mean that two withMVars will be atomic, but withMVar and putMVar aren't atomic?
18:28:26 sprout joins (~quassel@2a02-a45f-f170-1-2c70-4ee9-c067-7549.fixed6.kpn.net)
18:30:55 × fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Quit: leaving)
18:31:18 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.5)
18:32:02 × coot_ quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot_)
18:32:26 myme joins (~myme@2a01:799:d5a:cd00:e3b:86e:c55b:7eff)
18:33:20 coot joins (~coot@213.134.190.95)
18:38:29 neceve joins (~quassel@2.29.116.221)
18:38:48 × sprout quits (~quassel@2a02-a45f-f170-1-2c70-4ee9-c067-7549.fixed6.kpn.net) (Ping timeout: 248 seconds)
18:47:54 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
18:49:19 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
18:49:29 acidjnk joins (~acidjnk@p200300d0c722df64b44bf627258f714f.dip0.t-ipconnect.de)
18:50:15 redb joins (~nmh@136.49.49.211)
18:52:49 × mbuf quits (~Shakthi@136.185.79.70) (Quit: Leaving)
18:53:57 bollu4 joins (~bollu@159.65.151.13)
18:55:02 × bollu quits (~bollu@159.65.151.13) (Ping timeout: 272 seconds)
18:55:03 bollu4 is now known as bollu
18:55:24 jinsun__ joins (~jinsun@user/jinsun)
18:55:42 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-6d4c-38a4-18b7-4b48.fixed6.kpn.net) (Ping timeout: 250 seconds)
18:57:39 × nerdypepper quits (~nerdypepp@user/nerdypepper) (Ping timeout: 256 seconds)
18:57:53 × abiss27 quits (~abiss27@user/abiss) (Quit: hasta la vista... tchau!)
18:58:11 nerdypepper joins (~nerdypepp@user/nerdypepper)
18:59:03 × jinsun quits (~jinsun@user/jinsun) (Ping timeout: 276 seconds)
18:59:55 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:01:03 Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
19:01:59 × jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 240 seconds)
19:02:02 <EvanR> mrosenbe, it's referring to how withMVar will do a take, run your code, then do a put. Obviously there is time there for someone else to put their own thing back before you do
19:02:23 dsrt^ joins (~dsrt@50-192-56-193-static.hfc.comcastbusiness.net)
19:02:31 × DNH quits (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:02:38 <EvanR> which would break atomicity
19:03:17 <EvanR> if multiple threads are doing withMVar, it's ok because everyone is waiting to take
19:04:27 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
19:05:10 <EvanR> see TVars for something less brittle
19:06:43 DNH joins (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31)
19:09:19 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-6d4c-38a4-18b7-4b48.fixed6.kpn.net)
19:16:16 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
19:18:43 × myme quits (~myme@2a01:799:d5a:cd00:e3b:86e:c55b:7eff) (Quit: WeeChat 3.4.1)
19:21:20 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:25:04 redb joins (~nmh@136.49.49.211)
19:29:19 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
19:31:56 myme joins (~myme@2a01:799:d5a:cd00:7ca6:39bc:e22b:ee2b)
19:32:04 jmdaemon joins (~jmdaemon@user/jmdaemon)
19:33:21 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 256 seconds)
19:34:43 sprout joins (~quassel@2a02-a467-ccd6-1-6cc6-7e1b-4577-8227.fixed6.kpn.net)
19:37:00 anomal joins (~anomal@87.227.196.109)
19:43:03 redb joins (~nmh@136.49.49.211)
19:43:53 <mrosenbe> EvanR: mvar is fine for my uses, I mostly wanted to make sure my interpretation of that was correct, and it sounds like it is.
19:48:14 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:49:22 × zer0bitz quits (~zer0bitz@2001:2003:f444:8f00:d86f:477d:4b86:10fd) (Read error: Connection reset by peer)
19:50:24 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
19:50:52 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
19:51:00 Guest292 joins (~Guest29@S01061056118fff83.wp.shawcable.net)
19:51:56 × Guest292 quits (~Guest29@S01061056118fff83.wp.shawcable.net) (Client Quit)
19:52:05 redb joins (~nmh@136.49.49.211)
19:54:20 geekosaur joins (~geekosaur@xmonad/geekosaur)
19:56:23 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
19:56:31 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
20:00:41 redb joins (~nmh@136.49.49.211)
20:00:48 × neurocyte8614492 quits (~neurocyte@user/neurocyte) (Ping timeout: 276 seconds)
20:02:54 pavonia joins (~user@user/siracusa)
20:04:22 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
20:07:19 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-6d4c-38a4-18b7-4b48.fixed6.kpn.net) (Ping timeout: 240 seconds)
20:07:30 × Inoperable quits (~PLAYER_1@fancydata.science) (Quit: All your buffer are belong to us!)
20:08:02 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:08:29 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
20:09:15 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 240 seconds)
20:09:44 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
20:12:09 redb joins (~nmh@136.49.49.211)
20:12:53 × romesrf quits (~romes@185.5.8.134) (Quit: WeeChat 3.4.1)
20:14:01 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-6d4c-38a4-18b7-4b48.fixed6.kpn.net)
20:17:33 × dcoutts_ quits (~duncan@host213-122-143-81.range213-122.btcentralplus.com) (Ping timeout: 256 seconds)
20:20:19 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
20:20:26 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:21:06 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
20:24:21 dcoutts_ joins (~duncan@host213-122-143-81.range213-122.btcentralplus.com)
20:25:50 akegalj joins (~akegalj@141-136-168-234.dsl.iskon.hr)
20:25:58 redb joins (~nmh@136.49.49.211)
20:27:52 Inoperable joins (~PLAYER_1@fancydata.science)
20:27:55 lbseale_ joins (~ep1ctetus@user/ep1ctetus)
20:30:10 × redb quits (~nmh@136.49.49.211) (Ping timeout: 250 seconds)
20:30:49 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Ping timeout: 246 seconds)
20:31:21 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 276 seconds)
20:32:12 redb joins (~nmh@136.49.49.211)
20:39:09 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
20:40:32 redb joins (~nmh@136.49.49.211)
20:42:33 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:44:39 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
20:46:36 redb joins (~nmh@136.49.49.211)
20:48:52 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:50:59 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
20:53:15 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
20:53:34 Pickchea joins (~private@user/pickchea)
20:54:11 <ggVGc> I think "it's fine for my use-case" is how every story leading up to a race condition starts
20:54:29 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:54:30 <ggVGc> (not that I haven't also said it to myself, and used MVars)
20:56:12 <ggVGc> sometimes I wonder if geekosaur remembers how much I was pestering him 10 years ago while trying to use xmonad and knowing 0 Haskell
20:56:30 <geekosaur> I do, actually :)
20:56:34 <ggVGc> actually... it's more like 12 years now :(
20:56:37 <ggVGc> haha
20:56:45 <ggVGc> well here I am writing Haskell and not using xmonad
20:56:52 <ggVGc> so it worked out in the end I guess
20:57:25 redb joins (~nmh@136.49.49.211)
20:57:30 <ggVGc> I think "I'll use xmonad so I'll learn Haskell" is a pretty bad trap that I see many people fall into
20:57:35 <ggVGc> but there's no stopping it
20:59:35 × fendor quits (~fendor@91.141.37.72.wireless.dyn.drei.com) (Remote host closed the connection)
21:01:37 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
21:01:48 × akegalj quits (~akegalj@141-136-168-234.dsl.iskon.hr) (Quit: leaving)
21:03:12 × neceve quits (~quassel@2.29.116.221) (Ping timeout: 276 seconds)
21:07:36 kaph joins (~kaph@ge-19-125-59.service.infuturo.it)
21:10:38 × anomal quits (~anomal@87.227.196.109) (Remote host closed the connection)
21:10:57 anomal joins (~anomal@87.227.196.109)
21:14:16 <janus> ggVGc: Wayland can stop it
21:14:20 redb joins (~nmh@136.49.49.211)
21:15:04 <geekosaur> waymonad exists :þ
21:15:22 <geekosaur> that said, xmonad can work asan intro to haskell *if* you're willing to put in the work
21:15:38 <geekosaur> but most folks just copy around configs and don't try to figureout what they're doing
21:16:47 <janus> geekosaur: which is the better intro to haskell, tidal cycles or waymonad? :D
21:16:48 <geekosaur> and we don't generally try to teach Haskell because most people just want a working config and don't care about the why
21:17:38 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:18:31 <geekosaur> no idea about tidal cyclesbut I noteits repo has ports to js and python so I assume it's not exactly grabbing people into haskell very well :)
21:18:46 <geekosaur> then again I hgave no idea how well waymonad is doing in that area either
21:21:06 <janus> i think there are ports to other languages because e.g. indian classical music aren't as strongly correlated intrests as workspace organization and haskell are
21:22:16 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
21:22:22 <ggVGc> Personally I don't think xmonad was a good intro to Haskell for me. I had already been doing F# for a while, so was no stranger to functional programming in general, but xmonad is too much "Real world" for beginner Haskell, in my personal experience
21:22:54 <ggVGc> it also doesn't help that, as you say, the user wants "it to work" because it's your WM...
21:23:10 <ggVGc> so there's a bad pressure to make things work, rather than learning
21:23:13 <geekosaur> dig too deepand you find yourself learning more about X11 than about Haskell
21:23:17 <systemfault> Reminds me of "Real-world Haskell"... which was, in a hindsight, not real "real world"
21:23:27 <systemfault> *really
21:23:39 <geekosaur> actually xmonad's an examplein there :)
21:23:52 <janus> if xmonad is of the real world, is tidal cycles from the unreal realm? :O
21:24:12 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
21:24:20 redb joins (~nmh@136.49.49.211)
21:25:10 renzhi joins (~xp@2607:fa49:6500:b100::229c)
21:28:34 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
21:31:11 × rawley quits (~rawley@142.99.241.242) (Remote host closed the connection)
21:35:27 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:36:54 × michalz quits (~michalz@185.246.204.61) (Remote host closed the connection)
21:38:25 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-6d4c-38a4-18b7-4b48.fixed6.kpn.net) (Quit: WeeChat 3.4)
21:39:55 redb joins (~nmh@136.49.49.211)
21:41:20 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
21:44:48 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
21:48:02 × coot quits (~coot@213.134.190.95) (Quit: coot)
21:49:58 × DNH quits (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31) (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:52:35 redb joins (~nmh@136.49.49.211)
21:57:06 xkuru joins (~xkuru@user/xkuru)
21:57:32 nihilazo joins (~nihilazo@tilde.town)
21:58:10 <nihilazo> hi, what would be the best way to learn haskell for somebody who already knows FP but only in dynamic languages (haskell for a lisper, basically)? is learn you a haskell still considered good?
21:59:45 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
21:59:47 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:00:00 <nihilazo> I tried learning before from "real-world haskell" but found myself feeling like I was fighting against haskell's type system instead of really grokking it
22:00:02 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:02:19 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
22:02:22 redb joins (~nmh@136.49.49.211)
22:02:23 × hyiltiz_ quits (~quassel@31.220.5.250) (Ping timeout: 256 seconds)
22:03:23 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
22:03:59 python476 joins (~user@88.163.231.79)
22:04:05 × python476 quits (~user@88.163.231.79) (Remote host closed the connection)
22:04:49 agumonkey joins (~user@88.163.231.79)
22:05:26 <geekosaur> RWH is perhaps notthe best for a beginner, it's more of an intermediate book I think
22:05:36 hyiltiz joins (~quassel@31.220.5.250)
22:05:45 DNH joins (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31)
22:05:54 × kaph quits (~kaph@ge-19-125-59.service.infuturo.it) (Read error: Connection reset by peer)
22:06:03 kaph joins (~kaph@151.19.233.38)
22:06:05 <geekosaur> LYAH… is okay if you can find some exercises to do along with it; otherwise it's kinda the "grand tour", you can mostly read code after it but not really write it
22:06:17 <geekosaur> currently we prefer something like
22:06:20 <geekosaur> @where cis194
22:06:21 <lambdabot> https://www.seas.upenn.edu/~cis194/spring13/lectures.html
22:06:55 × slack1256 quits (~slack1256@191.125.99.208) (Ping timeout: 256 seconds)
22:07:46 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
22:08:51 redb joins (~nmh@136.49.49.211)
22:12:04 xff0x_ joins (~xff0x@om126194210237.10.openmobile.ne.jp)
22:12:22 × zeenk quits (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) (Quit: Konversation terminated!)
22:12:38 <geekosaur> I can't think of anything specifically for folks who know some FP but not strong typing or laziness
22:13:19 <geekosaur> closest I can think of is the old "Gentle Introduction" but that still assumes strong typing / SML background
22:17:49 <sm> there's no universal "best", but how about
22:17:49 <sm> @where HTAC
22:17:50 <lambdabot> "Haskell Tutorial and Cookbook" by Mark Watson in 2017-09-04 at <https://leanpub.com/haskell-cookbook>
22:17:57 × redb quits (~nmh@136.49.49.211) (Ping timeout: 276 seconds)
22:19:24 <sm> @where books
22:19:24 <sm> has the rest, if not
22:19:24 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Read error: Connection reset by peer)
22:19:24 <lambdabot> https://www.extrema.is/articles/haskell-books, see also @where LYAH, RWH, YAHT, SOE, HR, PIH, TFwH, wikibook, PCPH, HPFFP, HTAC, TwT, FoP, PFAD, WYAH, non-haskell-books
22:20:01 deadmarshal_ joins (~deadmarsh@95.38.114.27)
22:20:10 × anomal quits (~anomal@87.227.196.109) (Remote host closed the connection)
22:20:19 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
22:20:30 anomal joins (~anomal@87.227.196.109)
22:20:31 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Ping timeout: 256 seconds)
22:21:39 × Midjak quits (~Midjak@82.66.147.146) (Ping timeout: 260 seconds)
22:23:06 × mastarija__ quits (~mastarija@2a05:4f46:e04:6000:a5e2:63ce:2368:50db) (Read error: Connection reset by peer)
22:23:10 <geekosaur> @where TwT
22:23:10 <lambdabot> "Thinking with Types: Type-Level Programming in Haskell" by Sandy Maguire in 2019-01-10 at <https://leanpub.com/thinking-with-types>
22:23:16 <geekosaur> hm, no
22:24:00 redb joins (~nmh@136.49.49.211)
22:24:27 × deadmarshal_ quits (~deadmarsh@95.38.114.27) (Ping timeout: 260 seconds)
22:24:54 waleee joins (~waleee@h-155-4-221-82.NA.cust.bahnhof.se)
22:24:55 × Moyst_ quits (~moyst@user/moyst) (Ping timeout: 260 seconds)
22:26:28 RevoGen joins (~RevoGen@136.167.108.147)
22:26:37 vall456 joins (~vall@178.71.51.200)
22:27:03 × vall456 quits (~vall@178.71.51.200) (Quit: Leaving)
22:28:08 × redb quits (~nmh@136.49.49.211) (Ping timeout: 248 seconds)
22:29:04 <Las[m]> Does anyone know whether there's literature on what sound restrictions would be on overlapping instances to ensure coherence?
22:29:57 redb joins (~nmh@136.49.49.211)
22:31:31 statusbot1 joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
22:31:36 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
22:31:47 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
22:32:02 <geekosaur> hm, I didn't think coherence was the problem, just an inability to guarantee that the intended instance would be chosen in some module which used the class but didn't have all instances in scope?
22:32:27 × Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
22:33:14 <Las[m]> Is that possible in the absence of orphan instances?
22:33:32 <Las[m]> https://downloads.haskell.org/ghc/latest/docs/html/users_guide/exts/instances.html?highlight=overlapping has an example of incoherence
22:34:32 × redb quits (~nmh@136.49.49.211) (Ping timeout: 248 seconds)
22:34:35 <geekosaur> sure. you don't have to have all instances known at a use site. something that uses fmap doesn't have to know every possible Functor instance
22:36:06 <Las[m]> well what would the sound restriction be then?
22:36:25 <Las[m]> If possible I want to implement checks in GHC to allow coherent use of overlapping instances
22:37:34 <geekosaur> well, that would be an exampleof what I said
22:37:52 <geekosaur> I suppose that does mean incoherence, hm
22:44:18 × n3t quits (~n3t@user/n3t) (Quit: WeeChat 2.9)
22:46:39 redb joins (~nmh@136.49.49.211)
22:49:32 × bgs quits (~bgs@cpe-212-85-160-171.cable.telemach.net) (Remote host closed the connection)
22:49:46 bgs joins (~bgs@cpe-212-85-160-171.cable.telemach.net)
22:50:13 Moyst joins (~moyst@user/moyst)
22:50:39 × redb quits (~nmh@136.49.49.211) (Ping timeout: 240 seconds)
22:52:34 perrierj1 joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
22:53:44 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 248 seconds)
22:54:10 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
22:55:05 × agumonkey quits (~user@88.163.231.79) (Ping timeout: 256 seconds)
22:57:33 × DNH quits (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:58:19 DNH joins (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31)
23:00:14 redb joins (~nmh@136.49.49.211)
23:00:51 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 276 seconds)
23:01:24 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
23:04:59 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 240 seconds)
23:07:04 × acidjnk quits (~acidjnk@p200300d0c722df64b44bf627258f714f.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
23:09:03 yauhsien joins (~yauhsien@61-231-27-3.dynamic-ip.hinet.net)
23:10:12 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.1))
23:12:47 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
23:13:31 <shapr> category theory joke: what makes everything feel good? an endorphism
23:15:39 × yauhsien quits (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
23:21:54 Guest99 joins (~Guest99@187.105.124.126)
23:23:23 × kaskal quits (~kaskal@2001:4bb8:2e0:b5bd:e3c0:d71b:f32:84d8) (Ping timeout: 252 seconds)
23:23:38 kaskal joins (~kaskal@2001:4bb8:2e0:b5bd:e3c0:d71b:f32:84d8)
23:23:47 bgs_ joins (~bgs@cpe-212-85-160-171.cable.telemach.net)
23:25:07 × bgs quits (~bgs@cpe-212-85-160-171.cable.telemach.net) (Ping timeout: 256 seconds)
23:25:23 bgs_ is now known as bgs
23:25:50 × Guest99 quits (~Guest99@187.105.124.126) (Client Quit)
23:26:03 × DNH quits (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:26:56 <hpc> that pun made me want to yawneda
23:30:28 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:30:39 × chomwitt quits (~chomwitt@2a02:587:dc1b:da00:1339:e02b:9822:2360) (Ping timeout: 240 seconds)
23:30:43 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
23:33:50 rsify[m] joins (~rsifymatr@2001:470:69fc:105::1:fd44)
23:34:21 machinedgod joins (~machinedg@24.105.81.50)
23:35:41 <EvanR> ggVGc, cheers, good to see you survived the freenode-a-lypse
23:37:11 <EvanR> so I'm about to mix makefiles and cabal
23:37:22 <EvanR> if I'm not back in 30 minutes you know what to do
23:37:45 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:37:58 <sm> what happened poor Freenode since, anyway
23:38:05 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
23:38:05 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
23:38:05 wroathe joins (~wroathe@user/wroathe)
23:38:28 <sm> looks like a reddit now
23:40:34 <EvanR> a reddit-class soul destroyer
23:48:36 allbery_b joins (~geekosaur@xmonad/geekosaur)
23:48:41 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
23:48:49 Midjak joins (~Midjak@82.66.147.146)
23:50:25 <Axman6> nihilazo: was there anything in particular you felt you were getting stuck on?
23:53:39 <Axman6> ... wtf? what on earth did they do?
23:56:17 geekosaur joins (~geekosaur@xmonad/geekosaur)
23:56:25 <Axman6> Clicked on "Node of the day" on freenode... and it's an empty... subreddit? what the actual fuck are they doing, this is so bad. it's just a bunch of job ads for cryptocurrency and conspiracies?
23:56:35 <EvanR> be the first to post in /n/lilo
23:57:05 <Axman6> New Post: What the flip is LILO?
23:57:20 <Axman6> all these subreddit things were created by [Deleted]
23:57:45 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
23:58:00 <EvanR> lilo was the founder of freenode
23:58:10 <Axman6> Deleted a comment with reason "shane" <- haha, wtdf
23:58:13 <Axman6> wtf*
23:58:20 <Axman6> https://freenode.net/n/conspiracy/sublog
23:59:02 × waleee quits (~waleee@h-155-4-221-82.NA.cust.bahnhof.se) (Ping timeout: 250 seconds)
23:59:07 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
23:59:26 <Axman6> ... their equivalent of reddit's karma, and I swear I'm not making this up, is called "Phuks given"
23:59:28 × allbery_b quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds)

All times are in UTC on 2022-04-19.