Home liberachat/#haskell: Logs Calendar

Logs on 2021-11-30 (liberachat/#haskell)

00:00:41 machinedgod joins (~machinedg@24.105.81.50)
00:04:45 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
00:05:04 × ubert quits (~Thunderbi@p200300ecdf0ba218e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
00:05:21 ozzymcduff joins (~mathieu@81-234-151-21-no94.tbcn.telia.com)
00:05:28 × matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.1 - https://znc.in)
00:07:21 <EvanR> newtypes don't exist at runtime right, which means evaluating a newtype evaluates the contents right
00:07:22 FragByte_ joins (~christian@user/fragbyte)
00:07:32 × FragByte quits (~christian@user/fragbyte) (Ping timeout: 268 seconds)
00:07:50 FragByte_ is now known as FragByte
00:08:08 <EvanR> evaluate :: a -> IO a
00:08:14 matijja joins (~matijja@193.77.181.201)
00:08:16 <monochrom> Yes.
00:10:24 × hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
00:11:39 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
00:12:28 <xcmw> wz1000: the edits will be sorted so I can do all of the edits in one pass.
00:13:30 <dsal> Unless you pre-merge all the edits, I'm not sure how much easier that'll make things.
00:13:43 <xcmw> What does pre-merge mean?
00:14:24 <xcmw> It isn't possible to merge two edits
00:14:56 <xcmw> It is but I won't make sense to
00:15:22 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:356c:6df7:ff7f:48a3)
00:16:53 <geekosaur> dsal, "non-overlapping" was part of the original question/spec
00:17:00 <geekosaur> so merging won't make sense
00:17:35 <xcmw> https://microsoft.github.io/language-server-protocol/specification#textEditArray
00:18:04 <geekosaur> if it's going directly to output, this should be doable in a streaming fashion
00:18:14 <xcmw> Yes
00:19:01 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
00:19:01 <xcmw> What is the best way to go about that?
00:19:09 <dsal> Oh, I missed that part. The problem does sound a bit interesting. One of the outputs of a patch application would need to renumber subsequent patches, right?
00:19:34 <geekosaur> only if an edit can cause one line to become multiple, in this case
00:19:57 <geekosaur> but that would make edits potentially overlapping so I'm assuming not
00:20:10 <dsal> I'd think an edit could remove or add lines.
00:20:21 <xcmw> All the positions are positions in the original file
00:20:44 <geekosaur> that would be harder if the edits aren't one-for-one replacements
00:21:07 <geekosaur> now you have to track what the position would have been without earlier edits
00:21:22 <xcmw> The positions can be easily handled by making every position relative to previous one
00:21:23 <geekosaur> instead of just streaming it as you go
00:22:03 <xcmw> I think that would make it so you can still stream
00:22:28 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
00:25:01 <awpr> if they're sorted and non-overlapping, there's no need to apply each one successively to the whole file; I expect you can progress through both the file and the edits jointly keeping track of the position. the problem of line/column numbers being broken by past edits only exists if you start over from the beginning of the file for each edit
00:25:20 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
00:25:27 <xcmw> Yes
00:25:54 pfurla joins (~pfurla@2804:14d:5c81:4104:f9a9:132:7129:df1c)
00:25:55 <awpr> the other trick I've heard of for applying patches like this is to work in reverse: file positions don't change when you update things _after_ them
00:26:05 <awpr> but that's probably more applicable to mutable, imperative data structures
00:26:26 × dawdler quits (~dawdler@user/dawdler) (Ping timeout: 256 seconds)
00:27:25 <xcmw> No need to reverse anything
00:28:02 <jeetelongname> :t ***
00:28:03 <lambdabot> error: parse error on input ‘***’
00:28:10 <jeetelongname> :t (***)
00:28:11 <lambdabot> Arrow a => a b c -> a b' c' -> a (b, b') (c, c')
00:28:28 <xcmw> So should I use a state monad? Or is there some better more functional way do it?
00:29:31 wroathe joins (~wroathe@user/wroathe)
00:30:00 slac11392 joins (~slack1256@191.125.99.65)
00:30:16 × jeetelongname quits (~jeet@148.197.248.54) (Remote host closed the connection)
00:31:43 × slack1256 quits (~slack1256@191.126.99.210) (Read error: Connection reset by peer)
00:32:01 <awpr> `State` seems reasonable enough to me, at least. `mapAccumL` is similar to `traverse`ing with `State`, too, if you prefer that sort of thing
00:32:41 × jkaye quits (~jkaye@2601:281:8300:7530:7309:f677:c771:6123) (Ping timeout: 264 seconds)
00:33:21 dawdler joins (~dawdler@user/dawdler)
00:33:28 <awpr> supposing you have the input as `Text`, maybe split it with `Data.Text.lines`, use `mapAccumL` over those consuming edits as long as they're on the current line, and use some manual recursion with `splitAt` to do each edit within the line?
00:34:03 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
00:34:41 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
00:35:08 random-jellyfish joins (~random-je@user/random-jellyfish)
00:37:50 <EvanR> are you reading the whole file in as a chunk of Text
00:38:07 <EvanR> or trying to stream it
00:38:50 <EvanR> with Lazy Text perhaps
00:38:51 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
00:40:18 <xcmw> Currently I am loading the file as chunk of Text but that might change.
00:41:55 <xcmw> It may end up being List Text instead
00:42:21 <EvanR> that's effectively what lazy text is
00:42:29 <EvanR> just hidden
00:44:25 <xcmw> The whole file will be read into memory (for other reasons) before this code runs so lazyness won't matter
00:44:59 <awpr> "lazy Text" is a different type from from "Text" -- effectively `newtype LazyText = LazyText [Text]`
00:45:03 <EvanR> ok. Though once it is in memory, laziness will still potentially matter as you write the output incrementally
00:45:34 <EvanR> I was just curious about the loading par
00:45:43 <awpr> along with a whole polished API for dealing with it as one long sequence of characters, so you don't have to think about the list aspect separately
00:45:53 <xcmw> I am actually writing this in Idris so the details of Haskell's Text doesn't matter
00:46:28 × Guest17 quits (~Guest17@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
00:46:29 <EvanR> that's so annoying xD
00:46:50 <EvanR> a lot of details of a lot of haskell don't matter in that case xD
00:47:01 <awpr> seems like a good thing to mention early on. I'm not sure I really understand what the overall question is, then
00:47:39 <xcmw> I did mention it was in Idris earlier
00:47:45 <EvanR> yeah I forgot lol
00:48:21 <awpr> oh yeah, that is way up there in scrollback
00:50:11 × random-jellyfish quits (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
00:50:35 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
00:51:07 <xcmw> I think I will go with List Text with State, and splitAt if I can't think of anything more functional
00:51:35 <EvanR> like, in idris, String is what Text is called right xD
00:51:41 <xcmw> Yes
00:51:47 <EvanR> which in retrospect, would be nice
00:52:34 <awpr> the point of `splitAt` in what I wrote earlier was to take advantage of a fast implementation to skip straight to the next edit, instead of scanning over each character doing `0+1+1+1+1+1+1+...` until you reach the desired position
00:53:42 <xcmw> The number of characters on a line is likely to be small so it won't matter.
00:54:39 <EvanR> and that's why notepad.exe freezes up on some files xD
00:55:07 <awpr> sure, if you don't care about the potential performance hit of visiting each character individually, then one giant `mapAccumL` can probably do it, with the accumulator being both the input file position (increasing) and the pending edits (being incrementally consumed)
00:55:35 <awpr> assuming the string API has a `mapAccumL`, or a `traverse` that can be used with `State`
00:56:02 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
00:58:07 <xcmw> I don't know how efficient Idris's splitAt is
00:58:52 <EvanR> At least in older versions, even though strings are implemented as a buffer of chars
00:59:31 <EvanR> all the support code for it operated on it as if it was [Char] and could only cons and uncons from the beginning. Reallocating everything if necessary xD
01:00:02 <EvanR> splitAt would have been implemented in type safe code
01:01:46 <xcmw> Idris just has drop and take
01:01:48 <awpr> yeah, I don't even see an implementation of that or take/drop on GitHub. if it exists, it may or may not be faster in practice, but the point is it has the opportunity to be faster
01:02:21 <xcmw> I think Idris complied with the chez backend use code points
01:03:05 <xcmw> Which likely means that it has to go character by character anyways.
01:03:14 <xcmw> https://github.com/idris-lang/Idris2/blob/523c0a6d7823d2b9a614d4a30efb52da015f9367/src/Libraries/Data/String/Extra.idr#L51
01:03:56 <xcmw> take and drop are in Extra. They both call substr which is a primitve.
01:04:36 <EvanR> ah prim__strSubstr
01:04:39 <EvanR> cool stuff
01:04:53 ouro_boros joins (~ouroboros@2804:14c:65e4:93f6::1001)
01:05:02 <dsal> I've never seen a substr I could use without the documentation open.
01:05:26 pgib joins (~textual@173.38.117.87)
01:05:45 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
01:05:50 <EvanR> substr : (index : Nat) -> (len : Nat) -> (subject : String) -> String
01:05:55 chexum joins (~quassel@gateway/tor-sasl/chexum)
01:05:57 <EvanR> docs xD
01:05:57 <awpr> yeah, Text uses a variable length encoding too and can't do constant-time splitting. but a hand-written FFI implementation of `splitAt` peeking at bits in a loop would certainly be faster than code that calls a higher-order function to visit each character and add 1 to a counter.
01:06:41 <awpr> since `substr` is implemented by a primitive, it's probably a reasonably fast implementation
01:07:13 <EvanR> yes but Nat is a list xD
01:07:24 <EvanR> first it needs to fold that to an int
01:08:08 <xcmw> Well it depends on the backend. String length in RefC, JS, and Chez are all different.
01:08:52 × bollu quits (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
01:09:54 <xcmw> I wonder if I could use something like parser combinators to do this in a functional way.
01:10:09 <EvanR> hell yeah
01:11:44 × burnsidesLlama quits (~burnsides@dhcp168-026.wadham.ox.ac.uk) (Remote host closed the connection)
01:11:46 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:50 <EvanR> the remainder of the file is like the parser context
01:12:14 <EvanR> how much is split off depends on the edit
01:15:51 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
01:16:35 <EvanR> a section that is not edited would be returned to you as is
01:17:54 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:19:03 hololeap joins (~hololeap@user/hololeap)
01:20:29 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
01:21:16 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
01:25:22 × nautical quits (~nautical@2601:602:900:1630::396f) (Quit: WeeChat 3.3)
01:27:24 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
01:28:15 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
01:32:01 × acidjnk_new quits (~acidjnk@p200300d0c7271e72fcf154b5eecf3df6.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
01:33:28 × DNH quits (~DNH@2a02:8108:1100:16d8:58c0:b83a:3eea:a1cf) (Quit: Textual IRC Client: www.textualapp.com)
01:34:34 justsomeguy joins (~justsomeg@user/justsomeguy)
01:37:38 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:37:38 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:37:38 wroathe joins (~wroathe@user/wroathe)
01:41:26 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
01:42:20 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
01:43:22 Erutuon joins (~Erutuon@user/erutuon)
01:46:10 Feuermagier joins (~Feuermagi@user/feuermagier)
01:47:16 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:47:16 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:47:16 wroathe joins (~wroathe@user/wroathe)
01:47:27 hexology is now known as hexology_
01:47:51 hexology_ is now known as hexology__
01:48:03 × Feuermagier_ quits (~Feuermagi@154.28.188.22) (Ping timeout: 268 seconds)
01:48:07 hexology__ is now known as hexology`
01:48:12 hexology` is now known as hexology_`
01:48:23 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 252 seconds)
01:48:52 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
01:48:56 hexology_` is now known as hexology
01:53:54 × ec_ quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
02:03:54 <zero> i there a more alegant way to write this? https://paste.jrvieira.com/1638237824452
02:07:09 <EvanR> honestly it looks good to me
02:07:41 <dibblego> let z = x <|> y
02:07:47 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:08:04 <EvanR> oh didn't see two x there
02:08:20 <c_wraith> that... doesn't work
02:08:56 <dibblego> oh yeah, wtf
02:09:10 <c_wraith> I don't think there's an easy way to do that
02:09:35 <c_wraith> You can have some sort of mess of newtype wrapping and unwrapping that will get you there, but it's not better than the if/then/else
02:10:22 <boxscape_> :t \someIO y -> flip bool y <*> null =<< someIO -- arguably could be called elegant, but not a good idea
02:10:23 <lambdabot> (Monad m, Foldable m) => m (m b) -> m b -> m b
02:10:26 <dibblego> sorry was thinking of a different "base" library
02:11:23 <c_wraith> boxscape_: that doesn't look right either. that m (m b) seems wrong.
02:11:30 <boxscape_> erm
02:12:09 <EvanR> yeesh
02:12:37 <EvanR> no, zero didn't ask for ways to make it worse xD
02:12:50 <boxscape_> c_wraith I think that's because there's no return in front of the if statement in the paste
02:13:18 <c_wraith> boxscape_: well, it's an incomplete do block
02:13:25 <boxscape_> :t \someIO y -> someIO >>= \x -> bool x y (null x) -- AFAICT the same as the paste, and same type
02:13:26 <lambdabot> (Monad m, Foldable m) => m (m b) -> m b -> m b
02:13:34 <dibblego> don't think so
02:14:39 <boxscape_> :t \someIO y -> do {x <- someIO; if null x then y else x}
02:14:39 <lambdabot> (Monad m, Foldable m) => m (m b) -> m b -> m b
02:14:42 <EvanR> zero, if you want a combinator that replaces empty list with something, you could write it separately
02:14:46 <EvanR> but it looks fine as is
02:15:08 <c_wraith> boxscape_: right, you're making the result of the if the result of the block, but that's not what the paste does
02:15:27 <c_wraith> boxscape_: the paste uses a let to bind the result of the if for further use in the block
02:15:46 <boxscape_> c_wraith I was looking at an old version of the paste
02:16:20 <boxscape_> (allowing the contents of a paste URL to change seems an odd design choice)
02:17:12 <jackdk> :t \someIO y -> fromMaybe y . view (from (anon [] null)) <$> someIO
02:17:13 <lambdabot> Functor f => f [a] -> [a] -> f [a]
02:18:09 lavaman joins (~lavaman@98.38.249.169)
02:22:33 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
02:26:16 mvk joins (~mvk@2607:fea8:5cc1:fa00::4702)
02:27:54 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
02:28:26 × mmhat quits (~mmh@55d431d8.access.ecotel.net) (Quit: WeeChat 3.3)
02:32:51 <zero> thanks everyone! it' pretty clear i should leave it as is :)
02:35:05 × xff0x quits (~xff0x@2001:1a81:527f:8300:4a2b:7ccd:5352:f2b5) (Ping timeout: 264 seconds)
02:35:51 x88x88x joins (~cheeg@gateway/vpn/pia/x88x88x)
02:35:55 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
02:36:27 <jackdk> While not literally what you asked for, parsing it into a Maybe (NonEmpty a) might be nicer
02:36:27 xff0x joins (~xff0x@2001:1a81:52c5:f300:1fcf:1bc6:be0c:348e)
02:40:38 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
02:42:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
02:42:50 <Square> Im exploring a bit here. I feel this example couldve worked, but it doesnt. Someone know if there is a way to make a type family work just as a parameterized type / a type function of one argument? https://paste.tomsmeding.com/ZQL8kHP6
02:44:50 <boxscape_> Can you encode a quote in a template haskell expression? I.e. [qq| foo |] would be encoded something like `QuoteQ "qq" (UnboundVarE "foo")`?
02:44:58 <boxscape_> at first glance I'm not seeing anything allowing this
02:45:01 <lyxia> no
02:45:05 <boxscape_> okay, thanks
02:45:13 <boxscape_> (I was secretly hoping that it's impossible, makes my life easier)
02:45:44 <lyxia> Square: keyword is defunctionalization, the stuff first-class-families and singletons are made of
02:46:30 <Square> lyxia, ok. Thanks, ill google that
02:46:51 <Cajun> first class families are very fun, singletons seem scary
02:46:55 <boxscape_> Square https://typesandkinds.wordpress.com/2013/04/01/defunctionalization-for-the-win/
02:47:04 <lyxia> also this but it's not implemented https://www.microsoft.com/en-us/research/uploads/prod/2019/03/unsaturated-type-families-icfp-2019.pdf
02:47:16 lavaman joins (~lavaman@98.38.249.169)
02:47:20 <lyxia> rather, not in GHC yet
02:47:40 <Cajun> isnt there something about dependent haskell allowing for unsaturated type families?
02:48:13 <lyxia> yes it will have to figure that out
02:48:18 <boxscape_> Cajun yes, the paper lyxia linked is very much in line with dependent haskell
02:48:36 <boxscape_> "in line" as in "a stepping stone towards"
02:49:03 <Square> Are you guys saying this isnt something possible in now (im on ghc 8.6) or that it might be possible in the future?
02:49:17 <Square> -in
02:50:09 <boxscape_> Square defunctionalization is possible now, but a bit annoying. Native unsaturated type families are only implemented in an experimental branch, and not currently accepted as coming into GHC, though they likely will at some point
02:50:35 <Square> boxscape_, thanks
03:07:10 × TranquilEcho quits (~grom@user/tranquilecho) (Quit: WeeChat 2.8)
03:07:59 jkaye joins (~jkaye@2601:281:8300:7530:a6c:9e86:10cd:6e96)
03:10:35 <lyxia> Square: what your example would look like with fcf https://paste.tomsmeding.com/EPUcybwS
03:11:13 iqubic joins (~user@2601:602:9502:c70:6765:a5f:e5b9:6c69)
03:16:23 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 252 seconds)
03:18:45 <iqubic> How many people here are doing Advent Of Code this year?
03:19:41 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
03:20:24 <zero> me me me
03:23:06 <iqubic> Nice!
03:24:53 × td_ quits (~td@94.134.91.97) (Ping timeout: 268 seconds)
03:26:04 td_ joins (~td@muedsl-82-207-238-126.citykom.de)
03:26:18 <boxscape_> I'm planning to do AoC
03:27:13 <iqubic> Do you know if there's an IRC channel for discussing the event?
03:29:12 <boxscape_> oh, right, the libera switch hadn't happened yet last time
03:29:15 <boxscape_> I'm not aware of a channel
03:29:33 <dsal> I see the same three channels as last year.
03:29:47 namkeleser joins (~namkelese@101.175.102.188)
03:29:58 <boxscape_> which are those?
03:30:17 <dsal> #adventofcode #adventofcode-help #adventofcode-spoilers
03:30:17 <boxscape_> ah, #adventofcode in one word
03:30:21 <boxscape_> I tried dashes before
03:30:28 <boxscape_> thanks
03:30:50 <iqubic> And I tried two hashes because that's what it last year on the old server.
03:34:26 hiruji joins (~hiruji@user/hiruji)
03:35:20 bollu joins (uid233390@id-233390.helmsley.irccloud.com)
03:36:00 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
03:36:00 hololeap_ joins (~hololeap@user/hololeap)
03:37:27 fluffyballoon joins (~user@131.93.208.196)
03:37:27 × fluffyballoon quits (~user@131.93.208.196) (Read error: Connection reset by peer)
03:37:49 nickdaly` joins (~user@131.93.208.196)
03:38:34 <iqubic> Alright... so, Emacs' LSP mode has been working quite well for me, for the past while. But something seems to have updated and now it doesn't work anymore.
03:40:08 <iqubic> No 'hie.yaml' found. Try to discover the project type!
03:40:48 <dsal> I've never had it work. Sounds like it might be pretty cool. heh
03:41:26 deadmarshal joins (~deadmarsh@95.38.228.153)
03:41:32 × jbox quits (~jbox@user/jbox) (Read error: Connection reset by peer)
03:41:37 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:42:00 mbuf joins (~Shakthi@122.174.165.234)
03:42:27 <iqubic> It is cool, when it works.
03:42:28 <iqubic> haskell-language-server-wrapper: : changeWorkingDirectory: does not exist (No such file or directory)
03:42:35 terrorjack joins (~terrorjac@static.3.200.12.49.clients.your-server.de)
03:42:36 <iqubic> But something is wrong here and it isn't working.
03:43:35 × Guest|70 quits (~Guest|70@c-65-50-165-29.hs.gigamonster.net) (Ping timeout: 256 seconds)
03:45:16 × jkaye quits (~jkaye@2601:281:8300:7530:a6c:9e86:10cd:6e96) (Ping timeout: 264 seconds)
03:47:44 × boxscape_ quits (~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
03:48:33 × nickdaly` quits (~user@131.93.208.196) (Quit: ERC (IRC client for Emacs 27.1))
03:48:51 nickdaly` joins (~user@131.93.208.196)
03:48:58 × nickdaly` quits (~user@131.93.208.196) (Remote host closed the connection)
03:52:38 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
03:54:59 nickdaly` joins (~user@131.93.208.196)
03:57:11 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
03:57:32 nickdaly joins (45ce440a48@2604:bf00:561:2000::e2)
03:57:45 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
04:00:09 concrete-houses joins (~g@209.6.150.53)
04:00:19 nickdaly` parts (~user@131.93.208.196) (ERC (IRC client for Emacs 27.1))
04:00:56 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
04:01:28 <concrete-houses> can haskell do nice business reports and big data? what about AI? happstack.com looks impressive, but can it work bahind a load balancer? or does it even need to? it is better to have sperate data on sepaerate boxes?
04:02:17 <concrete-houses> is there any haskell bittorrent client? something like qbittorrent?
04:02:20 <dsal> Haskell is a programming language.
04:02:47 <concrete-houses> I have little programming experience
04:02:54 <concrete-houses> some shell some sql
04:03:03 <concrete-houses> bit of tcl forth lisp
04:03:26 <dsal> @hoogle torrent
04:03:27 <lambdabot> package torrent
04:03:27 <lambdabot> Distribution.SPDX BitTorrent_1_0 :: LicenseId
04:03:27 <lambdabot> Distribution.SPDX BitTorrent_1_1 :: LicenseId
04:03:35 <dsal> That's not very useful.
04:03:37 <dsal> @hackage torrent
04:03:37 <lambdabot> https://hackage.haskell.org/package/torrent
04:04:11 Lycurgus joins (~juan@98.4.112.204)
04:05:40 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
04:06:41 <concrete-houses> hmmm
04:10:17 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 252 seconds)
04:12:54 <EvanR> yeah what do you think haskell actually is here
04:14:04 <EvanR> for the first few buzzwords you'd want some premium product that may possibly be written in haskell
04:15:52 × x88x88x quits (~cheeg@gateway/vpn/pia/x88x88x) (Ping timeout: 264 seconds)
04:16:55 takuan joins (~takuan@178-116-218-225.access.telenet.be)
04:27:57 <monochrom> In retrospect, people don't go to a community of Japanese language speakers and learned to ask "can you write bestsellers and blockbusters in Japanese?". Of course you can.
04:28:16 <monochrom> s/learned/learners/
04:30:46 × iqubic quits (~user@2601:602:9502:c70:6765:a5f:e5b9:6c69) (Remote host closed the connection)
04:36:36 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
04:37:41 jmorris joins (uid433911@id-433911.hampstead.irccloud.com)
04:38:25 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:41:05 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
04:41:48 <Square> lyxia, walked away a bit here. Thanks a bunch for your converted example. I feel im on new journey here. =D
04:41:57 × danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 256 seconds)
04:42:20 danso joins (~danso@23-233-111-52.cpe.pppoe.ca)
04:45:16 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
04:45:59 iqubic joins (~user@2601:602:9502:c70:6765:a5f:e5b9:6c69)
04:46:46 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:47:19 <arahael> concrete-houses: That depends rather much on whether a business report can be nice, and wether AI is an oxymoron. :)
04:48:14 × slac11392 quits (~slack1256@191.125.99.65) (Ping timeout: 252 seconds)
04:48:27 deadmarshal joins (~deadmarsh@95.38.228.153)
04:48:47 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
04:50:28 LittleLemon joins (~AdiIRC@170.55.34.132)
04:51:28 <zero> i cant't have guards in let bindings inside of a do block?
04:51:52 <Square> lyxia, i noticed MyClz isnt part of it. Can this be done with class level type families too?
04:52:47 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
04:53:11 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 252 seconds)
04:54:46 <Square> maybe non-class and class type families are just different ways of writing the same thing?
04:54:50 × cjb quits (~cjb@user/cjb) (Quit: rcirc on GNU Emacs 29.0.50)
04:55:15 <dsal> zero: Why not? What have you tried?
04:56:20 <Axman6> concrete-houses: to expand on what otyhers said above, Haskell can do all of those things, but so can pretty much any programming language. Languages aren't systems, which seems to be what you're describing. most of those things have been built in Haskell before, but whether it's the best choice for any of them depends on many, many factors.
05:00:59 <zero> dsal: https://paste.jrvieira.com/1638248446308
05:01:44 <zero> i'm getting a parse error on '|' on line 9
05:01:54 deadmarshal joins (~deadmarsh@95.38.228.153)
05:04:54 <dsal> zero: indent harder
05:05:49 <zero> what?
05:06:29 <dsal> zero: https://www.irccloud.com/pastebin/1pEdvWox/zero.hs
05:08:33 <zero> i don't get that
05:09:17 <zero> why can't i do it the other way?
05:09:23 <dsal> Because indentation matters.
05:10:28 <dsal> As you can see, I used one `let` keywords for all the bindings because the indentation makes them all be the same statement. If you don't indent it correctly, it can't tell that those guards are meant to be part of that function.
05:12:08 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
05:12:33 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
05:14:04 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
05:14:26 <concrete-houses> how can I make a lot of money programming?
05:15:12 <dsal> Make an NFT and scam people with it.
05:16:53 <jle`> no programming required :)
05:17:07 × dsrt^ quits (~dsrt@68.101.58.90) (Remote host closed the connection)
05:17:08 lavaman joins (~lavaman@98.38.249.169)
05:17:08 <arahael> You find a job posting that requires programming, and early a salary.
05:20:10 × waleee quits (~waleee@h-82-196-111-63.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
05:29:33 × concrete-houses quits (~g@209.6.150.53) (Ping timeout: 256 seconds)
05:31:06 concrete-houses joins (~g@209.6.150.53)
05:31:25 × puke quits (~puke@user/puke) (Quit: puke)
05:32:43 reumeth joins (~reumeth@user/reumeth)
05:34:56 fr33domlover joins (~fr33@2.53.150.205)
05:34:56 nrl^ joins (~nrl@68.101.58.90)
05:38:15 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
05:38:36 stiell joins (~stiell@gateway/tor-sasl/stiell)
05:39:19 vonfry` joins (~user@116.236.75.238)
05:39:43 vonfry` parts (~user@116.236.75.238) ()
05:40:21 × vonfry quits (~user@116.236.75.238) (Ping timeout: 245 seconds)
05:41:01 <zero> dsal: i now see what you mean, thanks
05:41:06 mario_ joins (~mario@31.147.205.13)
05:41:26 <zero> i wasn't mentally desugaring it
05:43:57 × mario_ quits (~mario@31.147.205.13) (Client Quit)
05:44:55 × bollu quits (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
05:48:49 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
05:49:33 <EvanR> Axman6, re what haskell can and can't do: sounds like a job for lambdabot's old command xD
05:50:04 × mvk quits (~mvk@2607:fea8:5cc1:fa00::4702) (Ping timeout: 264 seconds)
05:51:28 mvk joins (~mvk@2607:fea8:5cc1:fa00::4702)
05:51:48 <dsal> @undo do ()
05:51:48 <lambdabot> ()
05:51:55 <dsal> lambdabot cannot do, lambdabot can only undo
05:52:14 <jle`> lambdabot, the great undo-er
05:52:15 × reumeth quits (~reumeth@user/reumeth) (Ping timeout: 268 seconds)
06:00:00 <EvanR> @botsnack Lambdabot can you do :)
06:00:00 <lambdabot> :)
06:00:22 <EvanR> ooooooooh
06:09:58 <jle`> @undo do do do do ()
06:09:58 <lambdabot> ()
06:10:06 <jackdk> @botsnack
06:10:06 <lambdabot> :)
06:10:18 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
06:11:15 <dsal> @undo do do do do do do do do do do do do do do do do "UNDO"
06:11:15 <lambdabot> "UNDO"
06:11:42 <jle`> do or undo
06:11:44 <jle`> there is no @try
06:12:03 <jle`> @try
06:12:03 <lambdabot> Maybe you meant: url thx src rc arr
06:12:14 <dsal> lambdabot is the hero we deserve
06:12:18 <jle`> @thx
06:12:18 <lambdabot> you are welcome
06:14:13 <Axman6> EvanR: yeah, what was that again?
06:14:46 <Axman6> lambdabot: Can Haskell make me a millionaire?
06:14:53 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
06:14:56 <EvanR> @faq Can Haskell make me a millionaire
06:14:56 <lambdabot> https://wiki.haskell.org/FAQ
06:15:14 <EvanR> in previous lifetimes it would say
06:15:23 <EvanR> Yes! Haskell can! or something
06:15:40 <Axman6> yeah, I remember that, NFI what command it was though
06:15:46 <Axman6> @can Haskell do that?
06:15:46 <lambdabot> Maybe you meant: wn run faq
06:15:56 <EvanR> faq I think lol
06:16:49 × LittleLemon quits (~AdiIRC@170.55.34.132) (Quit: Going offline, see ya! (www.adiirc.com))
06:16:51 alzgh joins (~alzgh@user/alzgh)
06:17:26 xkuru joins (~xkuru@user/xkuru)
06:17:29 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
06:18:40 <EvanR> it could be it's only crime was taking up a valuable command name
06:19:18 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
06:19:45 <jle`> i think maybe the issue was people kept on believing it
06:19:52 <sm> @where can haskell do that ?
06:19:52 <lambdabot> Yes, it can!
06:20:04 <jle`> got to temper expectations
06:21:02 <EvanR> jle`, got any war stories to put some meat on the bones of your cold water? xD
06:21:44 × xff0x quits (~xff0x@2001:1a81:52c5:f300:1fcf:1bc6:be0c:348e) (Ping timeout: 252 seconds)
06:22:39 xff0x joins (~xff0x@2001:1a81:52c5:f300:a883:120f:33bf:e74b)
06:22:58 <EvanR> always interesting to hear about difficulties with IRL haskell
06:23:29 <jle`> ah you mean since i've been actually using haskell for a full time job the past year and a half
06:23:54 <EvanR> of course? I mean of course!
06:24:01 <jle`> :)
06:24:19 <jle`> honestly no horror stories really. even when you write spaghetti code with haskell it's fun to clean up
06:25:12 <jle`> some of the issues you run into with small projects (like monad transformers vs mtl style etc) really just get scaled linearly i think, no major second order effects i've seen so far :)
06:27:14 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
06:32:24 xerxesphainon[m] uploaded an image: (682KiB) < https://libera.ems.host/_matrix/media/r0/download/matrix.org/pZkiixrFoRBTAhBfGnDIviTK/image.png >
06:32:43 <xerxesphainon[m]> why is art valued so highly among humans on earth?
06:33:25 <xerxesphainon[m]> in order from least to greatest. what rank would you asign the following?: Drawung, Acting, Music, Philosophy, Science.
06:33:32 <xerxesphainon[m]> 1-5
06:33:38 <xerxesphainon[m]> 1 being minimum value
06:33:59 <EvanR> dropping a serious profoundness bomb out of nowhere
06:34:06 <xerxesphainon[m]> *con{ 1=(bullshit)}
06:34:19 <xerxesphainon[m]> who did you thihnk i was?
06:34:33 <xerxesphainon[m]> var
06:34:34 <xerxesphainon[m]> {exec}
06:34:34 <jle`> hm, question is probably off-topic. unless this referring to haskell art specifically
06:34:45 LittleLemon joins (~AdiIRC@170.55.34.132)
06:34:51 <xerxesphainon[m]> 1 {
06:34:51 <xerxesphainon[m]> {11}
06:34:51 <xerxesphainon[m]> {1131}
06:35:04 <xerxesphainon[m]> shall i leave?
06:35:04 × xff0x quits (~xff0x@2001:1a81:52c5:f300:a883:120f:33bf:e74b) (Ping timeout: 264 seconds)
06:35:14 <Axman6> @where ops
06:35:14 <lambdabot> byorgey Cale conal copumpkin dcoutts dibblego dolio edwardk geekosaur glguy jmcarthur johnw mniip monochrom quicksilver shachaf shapr ski
06:35:18 <sm> picture needs haskellizing
06:35:31 xerxesphainon[m] parts (~artaxerxe@2001:470:69fc:105::f400) ()
06:35:56 <EvanR> lol, the ops extended justice league
06:36:35 × danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 252 seconds)
06:37:02 <EvanR> haven't seen jmcarthur in a minute
06:45:08 xff0x joins (~xff0x@2001:1a81:52c5:f300:d642:873:f292:9250)
06:47:27 × jmorris quits (uid433911@id-433911.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
06:49:37 lavaman joins (~lavaman@98.38.249.169)
06:53:35 danso joins (~danso@23-233-111-52.cpe.pppoe.ca)
06:54:16 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
06:56:52 atlas joins (~jbox@user/jbox)
06:59:35 vysn joins (~vysn@user/vysn)
06:59:49 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Remote host closed the connection)
07:00:00 atlas is now known as jbox
07:00:47 × fr33domlover quits (~fr33@2.53.150.205) (Ping timeout: 256 seconds)
07:05:48 chele joins (~chele@user/chele)
07:06:52 × xff0x quits (~xff0x@2001:1a81:52c5:f300:d642:873:f292:9250) (Ping timeout: 268 seconds)
07:07:20 xff0x joins (~xff0x@2001:1a81:52c5:f300:6673:fb4d:a3aa:9d2)
07:07:44 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
07:09:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:13:51 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
07:14:57 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 256 seconds)
07:21:09 lortabac joins (~lortabac@2a01:e0a:541:b8f0:97df:ebe3:251c:f0f6)
07:28:01 xerxesphainon[m] joins (~artaxerxe@2001:470:69fc:105::f400)
07:28:14 <xerxesphainon[m]> hey yall that scared the shit out of me
07:28:17 <xerxesphainon[m]> im sorry
07:28:24 gehmehgeh joins (~user@user/gehmehgeh)
07:28:56 <xerxesphainon[m]> look
07:29:04 <xerxesphainon[m]> ...................
07:29:09 <xerxesphainon[m]> shit
07:29:15 <xerxesphainon[m]> i dont have social skills
07:29:19 <xerxesphainon[m]> uhhh
07:30:24 <jle`> it's ok, you just have to try to constrain your questions to only questions related to haskell the programming language
07:30:47 <jle`> anything else would be off-topic or belong in a different channel that is more suitable
07:31:47 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
07:31:52 <xerxesphainon[m]> All my life. I mean. Since i was about 5. you know. i saw other kids......with the crowd.......bullying.......i made the decision right then and there. I want to be a good person. I like it when EVERYBODY is happy. and having fun. Im a musician. also from early age. And.
07:32:00 <xerxesphainon[m]> dude see that just fucked me upo
07:32:52 <xerxesphainon[m]> truthfully , i was afraid i had stumbled into a shadow project under a CIA proprietary organization involving bluetooth blockchain
07:33:04 <xerxesphainon[m]> please do not treat me like im stupid
07:33:18 <xerxesphainon[m]> hold on guys
07:33:33 <xerxesphainon[m]> please bear with me im on the virge of suicide
07:33:50 <xerxesphainon[m]> i cant get a response from ant other channel
07:33:54 <xerxesphainon[m]> and you know it
07:34:17 <xerxesphainon[m]> everybody just stop please. look at this situation.
07:34:25 <xerxesphainon[m]> observe. what just happened/
07:34:31 <xerxesphainon[m]> ???
07:35:07 <xerxesphainon[m]> man i had a. best speech in your life ready to come out and i apreciate you being a dick
07:35:16 <xerxesphainon[m]> WOW
07:35:57 natechan joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
07:36:21 xerxesphainon[m] uploaded an image: (72KiB) < https://libera.ems.host/_matrix/media/r0/download/matrix.org/bukgdbNKYYJNqXUTLDgcarQf/BRAVE-NEW-WORLD.jpg >
07:36:25 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Read error: Connection reset by peer)
07:36:43 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
07:37:09 deadmarshal joins (~deadmarsh@95.38.228.153)
07:37:37 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
07:37:37 × nahcetan quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
07:38:04 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
07:41:10 <xerxesphainon[m]> <jle`> "it's ok, you just have to try to..." <- yes you are correct sir, however an inconsisency as minute as the such, must self evidently be known to any avid user of chat-rooms
07:41:29 <xerxesphainon[m]> which i obviously am not
07:41:43 <xerxesphainon[m]> man........
07:41:46 <xerxesphainon[m]> oh my God
07:43:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
07:43:33 × yaroot quits (~yaroot@52.102.13.160.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat)
07:44:14 <xerxesphainon[m]> A Simple Error on my part actually. And all the more Clear Evidence, indicating the pre
07:44:19 <xerxesphainon[m]> DDS attack really?
07:44:28 yaroot joins (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953)
07:45:03 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
07:45:17 <xerxesphainon[m]> aye man yall boys be safe out here. keep ya up G
07:45:23 <xerxesphainon[m]> keep ya head up my G
07:45:29 xerxesphainon[m] parts (~artaxerxe@2001:470:69fc:105::f400) ()
07:46:18 × atwm quits (~atwm@19-193-28-81.ftth.cust.kwaoo.net) (Ping timeout: 260 seconds)
07:48:12 atwm joins (~atwm@19-193-28-81.ftth.cust.kwaoo.net)
07:51:42 michalz joins (~michalz@185.246.204.62)
07:53:48 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
07:55:28 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
07:55:41 × sunarch quits (uid526836@user/sunarch) (Quit: Connection closed for inactivity)
07:55:45 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
07:57:11 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
07:57:28 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
07:58:43 LittleLemon_2 joins (~AdiIRC@075-112-143-124.res.spectrum.com)
07:58:49 × yaroot quits (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (Remote host closed the connection)
07:59:03 yaroot joins (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953)
07:59:57 × yaroot quits (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (Remote host closed the connection)
08:00:00 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
08:00:11 yaroot joins (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953)
08:00:36 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Remote host closed the connection)
08:00:45 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
08:01:59 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
08:02:04 × LittleLemon quits (~AdiIRC@170.55.34.132) (Ping timeout: 264 seconds)
08:02:09 LittleLemon_2 is now known as LittleLemon
08:03:29 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Remote host closed the connection)
08:05:41 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 252 seconds)
08:06:10 AndrejKarpathy joins (~AndrejKar@2409:4053:2203:902f:95e9:1dcc:9faf:e958)
08:08:21 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:11:36 <AndrejKarpathy> Hi everyone.
08:12:49 × AndrejKarpathy quits (~AndrejKar@2409:4053:2203:902f:95e9:1dcc:9faf:e958) (Quit: Client closed)
08:14:29 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:14:46 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:16:19 rkrishnan joins (~user@122.171.76.46)
08:18:23 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:18:41 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:20:21 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:20:27 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:20:39 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:20:48 trcc joins (~trcc@2-104-60-169-cable.dk.customer.tdc.net)
08:22:20 zava joins (~zava@ip5f5bdf0f.dynamic.kabel-deutschland.de)
08:23:14 × jbox quits (~jbox@user/jbox) (Read error: Connection reset by peer)
08:23:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:26:40 × LittleLemon quits (~AdiIRC@075-112-143-124.res.spectrum.com) (Ping timeout: 264 seconds)
08:29:09 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:29:27 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:31:26 chomwitt joins (~chomwitt@2a02:587:dc16:f200:12c3:7bff:fe6d:d374)
08:33:12 neurocyte0132889 joins (~neurocyte@user/neurocyte)
08:34:02 cosimone joins (~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3)
08:34:18 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
08:35:58 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:36:15 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:36:37 narendra joins (~user@2a02:8109:b63f:ff7c::56c2)
08:37:16 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
08:42:11 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:42:29 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:43:19 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:44:03 DNH joins (~DNH@2a02:8108:1100:16d8:f00d:18c8:3973:574b)
08:46:09 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:46:27 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:48:07 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:48:16 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 264 seconds)
08:48:25 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:49:29 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
08:51:09 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
08:52:19 deadmarshal joins (~deadmarsh@95.38.228.153)
08:54:39 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
08:54:57 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
08:55:58 zaquest joins (~notzaques@5.130.79.72)
08:56:26 ChanServ sets mode +o dibblego
08:56:53 machinedgod joins (~machinedg@24.105.81.50)
08:57:18 dibblego sets mode +b *!~artaxerxe@*
08:57:27 dibblego sets mode +b *!artaxerxe@*
08:57:29 dibblego sets mode -b *!~artaxerxe@*
08:57:50 jstolarek joins (~jstolarek@137.220.120.162)
08:58:33 max22- joins (~maxime@2a01cb0883359800537b01ac6af61ec5.ipv6.abo.wanadoo.fr)
08:59:40 acidjnk_new joins (~acidjnk@p200300d0c7271e72fcf154b5eecf3df6.dip0.t-ipconnect.de)
09:01:06 _bo joins (~bo@217.18.216.247)
09:02:37 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
09:03:37 × trcc quits (~trcc@2-104-60-169-cable.dk.customer.tdc.net) (Remote host closed the connection)
09:04:09 trcc joins (~trcc@2-104-60-169-cable.dk.customer.tdc.net)
09:05:49 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:06:06 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:08:16 × trcc quits (~trcc@2-104-60-169-cable.dk.customer.tdc.net) (Ping timeout: 245 seconds)
09:08:26 james[m]12 joins (~jamesnina@2001:470:69fc:105::1:4203)
09:10:06 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:10:23 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:11:42 boxscape_ joins (~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de)
09:13:15 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:356c:6df7:ff7f:48a3) (Remote host closed the connection)
09:14:55 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:15:12 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:15:21 × ehamberg quits (sid18208@id-18208.hampstead.irccloud.com) ()
09:17:11 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
09:17:36 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:36 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:39 allbery_b is now known as geekosaur
09:20:31 boxscape joins (~boxscape@user/boxscape)
09:21:02 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 252 seconds)
09:21:36 ehamberg_ joins (sid18208@id-18208.hampstead.irccloud.com)
09:22:11 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
09:23:04 × mvk quits (~mvk@2607:fea8:5cc1:fa00::4702) (Ping timeout: 264 seconds)
09:25:49 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:26:07 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:26:34 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:27:52 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
09:29:47 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:30:05 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:30:06 mc47 joins (~mc47@xmonad/TheMC47)
09:30:09 × mikoto-chan quits (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
09:31:49 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:32:07 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:32:35 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
09:33:15 deadmarshal joins (~deadmarsh@95.38.228.153)
09:33:23 × max22- quits (~maxime@2a01cb0883359800537b01ac6af61ec5.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
09:35:20 kuribas joins (~user@ptr-25vy0i8s19mxk1vvjxp.18120a2.ip6.access.telenet.be)
09:35:23 cfricke joins (~cfricke@user/cfricke)
09:40:33 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:40:51 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:44:31 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:44:49 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:45:37 × curiousgay quits (~curiousga@77-120-141-90.kha.volia.net) (Quit: Leaving)
09:49:47 × xcmw quits (~textual@dyn-72-33-2-173.uwnet.wisc.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:53:01 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:53:19 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:54:59 ubert joins (~Thunderbi@p200300ecdf0ba2aae6b318fffe838f33.dip0.t-ipconnect.de)
09:56:19 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
09:57:37 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
09:59:17 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
09:59:34 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
09:59:36 MaybeJustJames joins (~jacol@2001:981:4ea3:1:a8b4:6ac6:c93b:9bcf)
10:00:05 <MaybeJustJames> Hi all
10:00:26 <boxscape> hi
10:01:01 <MaybeJustJames> I'm a bit of a newb and have a cabal question. Is this a good place to ask?
10:01:07 <boxscape_> yeah
10:01:45 <MaybeJustJames> My app depends on a library. I would like to modify the library with some `traceIO` debugging though
10:02:13 <MaybeJustJames> Is `cabal install --lib` from the library thr right way to build my app against the modified library?
10:02:14 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
10:02:51 <boxscape_> no, you probably want a cabal.project file in which you specify the path of your modified library
10:02:59 <boxscape_> let me look up the correct syntax...
10:03:08 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:03:09 <MaybeJustJames> Ah ok! Excellent I was hoping for that
10:03:17 <MaybeJustJames> Thankyou so much!
10:03:49 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:04:28 Lord_of_Life_ is now known as Lord_of_Life
10:04:37 <boxscape_> MaybeJustJames see this answer: https://stackoverflow.com/a/49418110/17327400
10:04:48 <merijn> Or just the cabal.project reference here: https://cabal.readthedocs.io/en/latest/cabal-project.html
10:04:49 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:04:56 <MaybeJustJames> Brilliant! Thankyou very much!
10:04:57 <[exa]> the first example here pretty much sums up what I put almost everywhere https://cabal.readthedocs.io/en/3.4/cabal-project.html
10:05:09 <merijn> [exa]: Too slow :p
10:05:18 <[exa]> merijn: I'm ashamed
10:05:54 mmhat joins (~mmh@55d4269f.access.ecotel.net)
10:06:16 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 264 seconds)
10:07:12 deadmarshal joins (~deadmarsh@95.38.228.153)
10:08:41 max22- joins (~maxime@2a01cb08833598007acc2e8deff42dd7.ipv6.abo.wanadoo.fr)
10:10:21 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
10:10:38 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
10:12:11 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 252 seconds)
10:12:50 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
10:13:32 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
10:13:39 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
10:13:58 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
10:18:44 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
10:19:28 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f) (Ping timeout: 264 seconds)
10:21:21 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
10:21:40 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
10:21:44 nschoe joins (~quassel@178.251.84.79)
10:22:08 <arahael> I've got two issues at the moment with my Haskell:
10:23:05 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Ping timeout: 256 seconds)
10:23:07 <arahael> 1) I can't get this line to compile: env <- newEnv Discover <&> set (field @"envLogger") lgr . set (field @"envRegion") NorthVirginia -- It seems that I'm missing some sort of very complex type. Actually I should pastebin that error.
10:23:39 <arahael> https://gist.github.com/arafangion/82c31f1dfe01c9cc559bbc6abc0ce699
10:24:12 <arahael> 2) And the other issue, is when I have this error, it seems to produce an 'invalid byte sequence' - I suspect because the error message has colours. Can I disable colours from 'cabal build'?
10:25:52 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
10:26:09 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
10:27:18 × DNH quits (~DNH@2a02:8108:1100:16d8:f00d:18c8:3973:574b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:27:32 <kuribas> arahael: seems pretty clear: The type Env' Identity does not contain a field named 'envRegion'
10:27:54 <kuribas> arahael: you are setting a field on (Env' Identity), which doesn't have that field.
10:28:12 <arahael> kuribas: That doesn't make sense to me, though. Hmm, so I need to somehow make it not (Env' Identity)
10:29:16 <kuribas> what's Env?
10:29:36 <kuribas> maybe you miss another fmap?
10:29:45 <arahael> kuribas: Possible, I'm trying to do this: https://github.com/brendanhay/amazonka/blob/develop/examples/src/Example/S3.hs#L49
10:29:53 × cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds)
10:30:52 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 264 seconds)
10:32:04 <kuribas> arahael: try these lenses? https://hackage.haskell.org/package/amazonka-1.6.1/docs/Network-AWS.html#t:HasEnv
10:32:56 <arahael> kuribas: I'm using amazonka 2.0, though, I think they've changed the way they've done those lenses.
10:34:24 <kuribas> arahael: link?
10:36:01 <arahael> Should be this: https://github.com/brendanhay/amazonka/tree/main though I'm not on quite exactly that revision.
10:36:29 cheater joins (~Username@user/cheater)
10:38:17 × pfurla quits (~pfurla@2804:14d:5c81:4104:f9a9:132:7129:df1c) (Quit: gone to sleep. ZZZzzz…)
10:39:18 <arahael> kuribas: I notice that Env is a type `Env' Identity', and yet, there is this line: https://github.com/brendanhay/amazonka/blob/aeecded1501510d607082bb9a65aa5086755251f/lib/amazonka/src/Amazonka/Env.hs#L91
10:39:22 <jackdk> arahael: what are your imports? Do you have the bulk of the example somewhere?
10:39:24 <arahael> Which clearly shows the envRegion I'm attempting to set.
10:39:36 <arahael> jackdk: Let me push up my changes!
10:40:41 <arahael> https://github.com/arafangion/auslansocial/blob/main/Main.hs#L211 <-- 211 there is the broken line.
10:41:06 <arahael> jackdk: I've noticed your PR's are now merged in, but I'm still using your PR directly.
10:42:35 <arahael> jackdk: It compiles if I remove everything to the right of (and including) the '<&>' bit on that line, though I doubt it runs. (Though, I notice NorthVirginia seems to be the default, so it might well run)
10:42:41 <jackdk> arahael: field names in Env start with an underscore now
10:43:00 <arahael> jackdk: Oh, and I have to put the underscore in that string?
10:43:04 <jackdk> I think I had to do that to avoid a name clash.
10:43:05 <jackdk> yeah
10:43:42 <arahael> That compiles.
10:44:06 <jackdk> yeah that's right I had to move the definition of the Env' type into Amazonka.Auth for annoying hs-boot related reasons to support certain STS operations, and that module already had an envRegion variable
10:44:23 <arahael> hat's that syntax again? I tried to look up type applications, but they were full of examples such as @Int, but didn't explain the @"foo" bit.
10:44:54 <jackdk> "foo" there is a type of kind `Symbol` - the kind of type-level stirngs
10:45:10 <jackdk> a "kind" is like the "type" of a type
10:45:17 <jackdk> % :kind Maybe
10:45:18 <yahb> jackdk: * -> *
10:45:28 <arahael> % :kind @"foo"
10:45:29 <yahb> arahael: ; <interactive>:1:2: error: Unexpected type application: "foo"
10:45:43 <tomsmeding> % :set -XTypeApplications -XDataKinds
10:45:43 <yahb> tomsmeding:
10:45:43 <jackdk> % :set -XTypeApplications -XDataKinds
10:45:44 <yahb> jackdk:
10:45:49 <tomsmeding> :)
10:45:53 <arahael> % :kind "foo"
10:45:53 <yahb> arahael: GHC.Types.Symbol
10:46:00 <arahael> Ooh, interesting.
10:46:03 <jackdk> % :set -XNoStarIsType
10:46:03 <yahb> jackdk:
10:46:08 <arahael> But "foo" and "bar" are the same kind, I guess?
10:46:09 <jackdk> % :kind Maybe
10:46:09 <yahb> jackdk: Type -> Type
10:46:28 <jackdk> `Type` is the kind of types taht may have values: `Int`, `Bool`, `Maybe Char`, ...
10:46:38 <tomsmeding> arahael: the types "foo" and "bar" are different, but have the same kind; just like the values "foo" and "bar" are different, but have the same type
10:47:18 <tomsmeding> % :k Monad
10:47:18 <yahb> tomsmeding: (Type -> Type) -> Constraint
10:47:25 <tomsmeding> in case you hadn't seen that before
10:48:03 <arahael> tomsmeding: I've seen that before, and I believe I understand it, but... I'm a bit lost with https://gitlab.haskell.org/ghc/ghc/-/wikis/type-application
10:48:41 <tomsmeding> where are you lost?
10:49:26 <arahael> The syntax.
10:49:46 <arahael> Consider `map @Int @Bool isEven xs`
10:49:56 <tomsmeding> the part where it conflicts with as-patterns, like 'f list@(x:xs) = x : f list' ?
10:49:58 <tomsmeding> or the rest :p
10:50:00 <arahael> That reads like a four-argument function to me.
10:50:02 <tomsmeding> ah
10:50:08 <boxscape> % :set -fprint-explicit-foralls
10:50:08 <yahb> boxscape:
10:50:11 <tomsmeding> % :t map
10:50:12 <yahb> tomsmeding: forall {a} {b}. (a -> b) -> [a] -> [b]
10:50:14 <boxscape> % :t +v map
10:50:15 <yahb> boxscape: forall a b. (a -> b) -> [a] -> [b]
10:50:18 <tomsmeding> there are your four arguments
10:50:33 <arahael> Ah, I see.
10:51:10 <tomsmeding> in fact there is a proposal floating around to create syntax for defining _explicit_ type arguments; something like 'forall a ->' instead of 'forall a.'
10:51:19 <arahael> Now `field @"foo"` makes more sense. It's a single-argument 'field', which requires not a value, but an explicit type.
10:51:29 <arahael> And the '@' allows me to specify a type.
10:51:32 <tomsmeding> and then that argument wouldn't be passed using @, but as a normal argument
10:51:40 <boxscape> toms not just floating around but accepted at this point
10:51:42 <tomsmeding> yes
10:51:48 <jackdk> link?
10:51:49 <kuribas> tomsmeding: like dependent types?
10:51:51 <tomsmeding> _accepted_?
10:51:55 <boxscape> (whoops I failed to press tab)
10:52:03 <tomsmeding> kuribas: it's a proposal by Richard Eisenberg on the road to dependent haskell, yes :p
10:52:11 <boxscape> https://github.com/ghc-proposals/ghc-proposals/pull/281
10:52:37 <tomsmeding> wow!
10:52:40 <arahael> My other question was...
10:52:51 <arahael> How do I get 'cabal build' to stop prettifying my build errors?
10:52:51 <tomsmeding> that's fresh off the press
10:52:58 <tomsmeding> cabal build | cat
10:53:39 DNH joins (~DNH@2a02:8108:1100:16d8:f00d:18c8:3973:574b)
10:54:01 <kuribas> In the beginning it felt weird to be able to pass types as argument, but it actually makes sense.
10:54:15 <kuribas> If you think of it as a function that generates another function.
10:54:28 <arahael> tomsmeding: I can't use pipes like that in a shakefile - and it's the shakefile that's tripping over the colours.
10:54:30 <kuribas> So you take a polymorphic function and generate a monomorphic function.
10:54:46 <arahael> kuribas: It already makes sense to me, I think.
10:54:58 <tomsmeding> kuribas: I still think of it as overriding type inference, in a way (as in: being there before type inference even starts, and fixing the type beforehand)
10:55:04 <kuribas> Of course in haskell you cannot use the type in the function body, since the type is erased.
10:55:56 <tomsmeding> arahael: the point of the pipe is to ensure that when cabal calls isatty(STDOUT_FILENO), that returns false
10:56:04 <arahael> tomsmeding: Ie, I'm using this function: https://hackage.haskell.org/package/shake-0.19.6/docs/Development-Shake.html#v:cmd_
10:56:04 <kuribas> tomsmeding: yeah, that's more technically correct.
10:56:49 <tomsmeding> arahael: you might actually have success running your whole shake build with | cat after it
10:56:54 <tomsmeding> but that's not a solution per se
10:57:35 <arahael> tomsmeding: Nah, it doesn't work, just tried it.
10:57:40 <tomsmeding> oh
10:57:45 <arahael> I still get: fd:7: hGetContents: invalid argument (invalid byte sequence)
10:58:08 <tomsmeding> oh cabal build seems to use colour always? that'a bug
10:58:45 <arahael> Ah, and yeah, it does, even when you pass it through |cat.
10:59:03 <kuribas> Will DH allow unlifing of DataKinds?
11:00:04 <kuribas> DH looks to me like dependent types light...
11:00:13 <kuribas> It doesn't really make haskell a dependently typed language.
11:00:17 <boxscape> If understand correctly what you're asking, DH will have something like `foo :: foreach (x :: Nat) -> x + x :~: 2 x`, which would indicate that the `x` is not erased and can be used in the function body
11:00:43 <tomsmeding> arahael: cabal --ghc-options=-fdiagnostics-color=never build
11:00:45 <boxscape> s/2 x/2 * x
11:00:59 <tomsmeding> except that will only work if you remove build caches beforehand (dist-newstyle in particular)
11:01:02 <kuribas> boxscape: but that wouldn't work with Types?
11:01:07 <tomsmeding> because https://github.com/haskell/cabal/issues/6177#issuecomment-518307005
11:01:14 <kuribas> boxscape: foo :: foreach (x :: Type) -> ...
11:01:21 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
11:01:26 <boxscape> kuribas: not by default but the idea is to make it work for types eventually
11:01:41 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:02:10 <boxscape> one goal is to unify type families and term-level functions
11:02:20 <kuribas> I feel conflicted about this. It's nice to have more type system features, but couldn't that effort be better spend in making true dependently typed language better?
11:02:23 <boxscape> so if you can write something as a type family, you should be able to write it as a regular function eventually
11:02:32 <arahael> tomsmeding: Interesting.
11:02:47 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:03:43 <boxscape> kuribas: Richard's thesis has some comments on this in section "3.3 Why Haskell?" https://richarde.dev/papers/2016/thesis/eisenberg-thesis.pdf#chapter.3
11:03:45 <tomsmeding> ah, so it's a bug in ghc: ghc doesn't check isatty(1) before using colours
11:04:28 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds)
11:04:35 <arahael> interesting. Well, I'm happy with passing that flag explicitly, do you have the bug reference, incidentally?
11:05:10 <arahael> I do notice that now it seems to be reinstalling and recompiling *everything*, I guess because I've changed a ghc-option, which is unfortunate.
11:05:11 <tomsmeding> arahael: not yet besides https://github.com/haskell/cabal/issues/6177 and the linked #6147
11:05:19 × akspecs__ quits (~akspecs@user/akspecs) (Quit: WeeChat 3.2)
11:06:02 <arahael> Thanks. :)
11:06:29 jakalx joins (~jakalx@base.jakalx.net)
11:07:14 <boxscape> > <kuribas> It doesn't really make haskell a dependently typed language. -- I think that's necessarily what it looks like while it's in the process of becoming a dependently typed language - I don't think the stated goal is to keep it at "dependent types light"
11:07:16 <lambdabot> <hint>:1:1: error: parse error on input ‘<’
11:07:36 <boxscape_> sorry lambdabot
11:07:54 <arahael> boxscape_: I keep running into that frequently, myself, - I frequently quote using >
11:08:03 <kuribas> "Dependent Haskell emphatically does not strive to be a proof system" <= neither does idris.
11:08:44 <boxscape> "Idris embraces partiality, but then refuses to evaluate partial functions during type-checking"
11:09:28 <kuribas> boxscape: you can cheat with "believe_me" :)
11:09:38 <boxscape> hm fair
11:09:42 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds)
11:09:57 <kuribas> boxscape: but I think the idea is that if you allow partiality, then the whole proof system collapses.
11:10:21 <boxscape> which is fine if your intention is not to make a proof system ;)
11:10:43 <kuribas> I disagree, you still want your type level computations to be valid.
11:11:04 <tomsmeding> arahael: _something_ in GHC responds to the GHC_COLORS environment variable, but I've been able to find exactly 0 documentation on it -- good luck :p https://gitlab.haskell.org/ghc/ghc/-/issues/13718 (and I have to go now)
11:11:19 <kuribas> boxscape: If I put a constraint on a type, I want the type system to ensure it holds.
11:12:23 <kuribas> boxscape: I mean, the only reason to have type level computations, is to improve the consistency of the program.
11:12:31 gehmehgeh joins (~user@user/gehmehgeh)
11:12:41 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:13:18 <boxscape> kuribas: That is a decent argument but Haskell already has ways that allow you to violate that, e.g. Type :: Type, so arguably it doesn't make sense to strive for soundness in one area while other areas still make the type system unsound
11:13:32 <arahael> tomsmeding: Thanks for your help! :D
11:13:45 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:14:16 <kuribas> boxscape: well, I guess idris *is* a proof system, but it's not the primary purpose.
11:17:27 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:17:51 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
11:19:11 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
11:19:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:20:10 <boxscape> apropos unsoundness - I always thought it was kind of funny that this works
11:20:11 <boxscape> % undefined @_ @(Proxy (_ :: Void))
11:20:11 <yahb> boxscape: Proxy
11:20:53 <boxscape> % Proxy @_ @(Proxy (_ :: Void)) -- this might be less confusing
11:20:54 <yahb> boxscape: ; <interactive>:24:1: error:; * Cannot apply expression of type `Proxy w0'; to a visible type argument `(Proxy (_ :: Void))'; * In the expression: Proxy @_ @(Proxy (_ :: Void)); In an equation for `it': it = Proxy @_ @(Proxy (_ :: Void))
11:21:00 <boxscape> arg
11:21:23 <boxscape> % Proxy @(Proxy (_ :: Void)) -- this might be less confusing
11:21:23 <yahb> boxscape: Proxy
11:21:37 deadmarshal joins (~deadmarsh@95.38.228.153)
11:24:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:25:15 × vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds)
11:25:25 <arahael> Curious, even with --ghc-options=-fdiagnostics-color=never, my shakefile still stumbles over the invalid byte sequence.
11:25:31 <arahael> Will figure it out another day.
11:25:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:30:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:31:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:35:35 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:35:54 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
11:36:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:37:26 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:37:28 × emf quits (~emf@2620:10d:c090:400::5:9a5b) (Ping timeout: 264 seconds)
11:39:52 emf joins (~emf@2620:10d:c090:400::5:d28b)
11:41:48 <jackdk> it's not a utf-8 thing?
11:42:56 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:43:15 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:44:36 <arahael> It might well be. I'll try it in binary mode - I can tell shake to use ByteStrings instead of trying to interpret whatever as whatever unicode.
11:44:48 <arahael> (I think I can, anyway)
11:44:56 <arahael> But not tonight. :(
11:46:37 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:46:54 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
11:47:04 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 264 seconds)
11:48:44 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:49:01 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
11:50:41 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:51:00 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
11:53:01 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:53:19 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
11:53:23 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:54:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:55:32 lavaman joins (~lavaman@98.38.249.169)
11:57:33 pfurla joins (~pfurla@2804:14d:5c81:4104:4c11:ba21:da7d:dd69)
11:57:39 × namkeleser quits (~namkelese@101.175.102.188) (Quit: Client closed)
11:59:23 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
11:59:41 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:00:52 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
12:01:28 <kuribas> How do you handle non-local exits?
12:01:36 <kuribas> error seems a bit harsh...
12:02:00 <kuribas> I could use ExceptT, and catch the error at toplevel...
12:02:42 <kuribas> Basically I have an IO function, and at an error I want to write an error message and exit the function
12:03:13 <Rembane> :t throwIO -- maybe?
12:03:14 <lambdabot> Exception e => e -> IO a
12:03:40 <kuribas> well, I already wrote the error message to stdout...
12:03:56 <kuribas> Or use the exception to format it? hmm...
12:04:35 <kuribas> eventually I'll process the errors, and put them back into the input file...
12:05:18 <kuribas> maybe throwIO with a custom error is not such a bad idea...
12:10:42 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:10:59 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:12:39 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:12:57 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:13:52 <zero> can i make a program where i run some stuff and then exit and run a terminal command?
12:14:11 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
12:14:47 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
12:15:00 lavaman joins (~lavaman@98.38.249.169)
12:15:08 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
12:15:15 <boxscape> zero is it acceptable if the haskell program exits only after the terminal command has completed?
12:15:39 <yushyin> execve?
12:16:25 <zero> bad description, sorry. i want to make a program that takes some input, does some stuff and then "turn into" another program
12:17:29 <zero> yushyin: i think that's it, thanks
12:18:23 deadmarshal_ joins (~deadmarsh@95.38.229.118)
12:18:45 <zero> https://hackage.haskell.org/package/procex
12:19:08 <zero> boxscape: yes i think so
12:19:42 <zero> that's even better
12:19:49 × deadmarshal quits (~deadmarsh@95.38.228.153) (Ping timeout: 256 seconds)
12:19:51 <merijn> Why not just
12:19:54 <merijn> @hackage process
12:19:54 <lambdabot> https://hackage.haskell.org/package/process
12:19:59 <boxscape> from your initial question I would have suggested using something like System.Process.readProcess
12:20:07 <boxscape> (in the package merijn linked)
12:20:29 <merijn> tbh, the high level interface of process is kinda bad, imo
12:20:38 <merijn> but that procex is linux only, so also terrible >.>
12:20:50 <zero> can i for instance open vim with readProcess?
12:21:10 <zero> let the user do some stuff, and then exit?
12:22:19 <hpc> vim is trickier than say, curl
12:22:22 <hpc> but it's doable
12:22:57 <geekosaur> well. not trickier idf you're not feeding inpu tor catching output
12:23:22 <geekosaur> depends on what exactly you're doing
12:24:56 filwisher joins (2e6936c793@2604:bf00:561:2000::170)
12:25:04 × narendra quits (~user@2a02:8109:b63f:ff7c::56c2) (Ping timeout: 268 seconds)
12:26:37 <[exa]> zero: might be useful to have a look at how others do it, e.g. git with EDITOR
12:28:03 <zero> i was thinking of that example precisely
12:28:55 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer)
12:29:28 <merijn> The trick is that git doesn't interact with your editor at all
12:29:41 <boxscape> or ghci with :e
12:29:44 <boxscape> % :e
12:29:44 <yahb> boxscape: No files to edit.
12:29:45 <merijn> It just starts the editor attached (and taking over) the terminal git runs in
12:29:52 fr33domlover joins (~fr33@2.53.150.205)
12:30:44 <merijn> tbh, if you want complex interactions with child programs and the user's terminal, what you should do is order a copy of "Advanced Programming in the UNIX Environment, 3rd edition" and ignore anything anybody on the internet says unless they cite that book >.>
12:31:06 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
12:32:51 <merijn> in fact, if you even plan to do anything that interacts with other processes, terminals, network sockets or anything remotely system-y on a unix-like system you should just get that book and ignore the internet >.>
12:35:05 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:35:23 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:35:33 × cosimone quits (~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3) (Ping timeout: 268 seconds)
12:37:13 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:37:19 <hpc> merijn: there's a who shaves the barber paradox in there somewhere :P
12:37:32 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:39:21 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:39:40 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:41:20 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:41:27 <merijn> Possibly, but I'm 100% sure the average unix-y software I used would be less shitty if more people read that freaking book >.>
12:41:39 <merijn> Hell, you don't even have to read it, just consult it as a reference
12:41:39 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:41:45 mario joins (~mario@31.147.205.13)
12:41:56 <merijn> Maybe then people will finally stop using fucking fork() >.<
12:43:36 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:43:54 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:45:34 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
12:45:40 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
12:45:52 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
12:47:53 Codaraxis joins (~Codaraxis@user/codaraxis)
12:49:04 <maerwald> and use the more complicated posix_spawn?
12:49:17 × dawdler quits (~dawdler@user/dawdler) (Ping timeout: 256 seconds)
12:49:26 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
12:49:30 <maerwald> even creating C ffi for that is hard, because there are 20 or so and they're all related
12:50:40 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 264 seconds)
12:52:47 dawdler joins (~dawdler@user/dawdler)
12:56:00 <merijn> maerwald: posix_spawn has a non-zero chance of being correct
12:56:29 <merijn> My reaction to people who say they can use fork safely is the same as to the people who claim they can safely use C or C++: "I don't believe you"
12:57:11 <maerwald> start by implementing the C ffi in haskell then, because it doesn't exist
12:57:19 <jonathanx> I'm struggling with persistent. I've added a custom PersistField instance for a type of mine, and I've just stricted it up a bit, which means that I have db data that fail deserialization. I use selectList (https://hackage.haskell.org/package/persistent-2.13.2.1/docs/Database-Persist-Class.html#v:selectList) to retrieve data. When the query matches db data that fail deserialization, an exception is thrown, and need to be
12:57:19 <jonathanx> caught. This makes me sad, since I would prefer if the sematics of selectList was akin to catMaybes, i.e. simply discard db data that fails serialization. Is there any way to configure this? Also, being able to hook up logging to failures would be nice, but I'd prefer it if the operation didn't error out completely just because the data of one of the matching rows are faulty.
12:57:44 × max22- quits (~maxime@2a01cb08833598007acc2e8deff42dd7.ipv6.abo.wanadoo.fr) (Ping timeout: 252 seconds)
12:57:59 <merijn> maerwald: I don't need it at the moment and don't have the extra time
12:58:08 <merijn> jonathanx: How come data is failing deserialisation?
12:58:28 <maerwald> merijn: then I'm confused how you can reccomend it :p
12:58:45 <merijn> jonathanx: persistent pretty much it assumes it is in control of the database and therefore erroneous data is a serious corruption
12:58:58 <merijn> maerwald: process using posix_spawn and covers most usecases
12:59:07 <maerwald> uhm...
12:59:10 <jonathanx> I'm working in an event sourced system, and we have decided to fail some old events due to them violating an invariant that we failed to enforce previously
12:59:19 <kuribas> yikes, why do haskell DB libraries assume you only want to code in haskell...
12:59:29 <merijn> maerwald: Also, as I never recommended "using posix_spawn" I said "You can't use fork"
12:59:52 <merijn> jonathanx: You'd have to implement the persistent typeclasses manually to handle that scenario
13:00:19 <merijn> jonathanx: Instead of relying on TH to generate the PersistField and PersistEntity classes
13:00:22 mario is now known as spaceseller
13:04:37 <merijn> maerwald: yeah, yeah, you don't like process "because you don't know what it does", but you're an outlier and I'm not gonna adjust my advice to account for your quirks :p
13:04:58 <maerwald> merijn: process is also funny cross-platform
13:05:08 <merijn> For 98.5% of all haskell users they're better off using process than anything else
13:05:18 <geekosaur> everything is funny cross-platform
13:05:21 <maerwald> stack even does some CPP, because process behaves different on windows and unix
13:05:28 <merijn> maerwald: And if you truly wanna be pedantic even GHC is fucky
13:05:35 <maerwald> absolutely
13:05:43 <merijn> See the complete inability to specify a CLOEXEC flag for opening files
13:06:49 narendra joins (~user@2a02:8109:b63f:ff7c::56c2)
13:07:02 <maerwald> merijn: uh, I thought I had fixed that
13:07:19 <merijn> maerwald: Who knows? I can't find the code in base and docs say nothing
13:07:25 × spaceseller quits (~mario@31.147.205.13) (Quit: Leaving)
13:07:46 <maerwald> https://github.com/haskell/unix/commit/c7d88b3612fdf74a7964a670d6e79128f97f46b0
13:07:57 <geekosaur> I'd expect that to be in unix, not base. it's kinda meaningless for windows
13:08:13 <merijn> I don't want Dependent Haskell or LinearTypes, I want more predictable/transparent low level interfaces, exceptions, etc.
13:08:16 <maerwald> it wasn't in unix for a long time
13:08:34 <geekosaur> since windows has no sane way to do exec
13:08:34 <maerwald> merijn: haskellers care very little about low level correctness
13:08:39 <merijn> Right, so base and bytestring are still entirely broken in the presense of both fork and process due to lack of CLOEXEC
13:08:55 <merijn> geekosaur: Rightfully so, because exec is dumb >.<
13:09:21 <maerwald> it's more "zomg, effects systems will save us"
13:09:21 <merijn> maerwald: But I don't wanna redo all GHCs optimisations to make my own low-level Haskell :(
13:10:46 <merijn> maerwald: to be fair, almost no other language does either :p
13:10:51 <maerwald> the last time I dealt with effects systems I ended up debugging why the unit test effect interpreter and the actual effect interpreter have diverging behavior
13:10:58 <merijn> Maybe Rust, but I haven't looked at it enough to say
13:11:19 <maerwald> so my tests, passed, but everything collapsed against the real thing
13:11:44 <merijn> I mean, don't go around expecting python to have any sane low level behaviour, it's nightmare fuel
13:11:55 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
13:11:57 <maerwald> that's why I prototype in posix shell
13:12:31 × ystael quits (~ystael@user/ystael) (Ping timeout: 256 seconds)
13:13:09 kadir joins (~kadir@88.251.54.110)
13:14:03 fef joins (~thedawn@user/thedawn)
13:15:25 <maerwald> I'd have switched to rust if it wasn't that verbose... not good for your RSI, too much typing
13:16:53 lavaman joins (~lavaman@98.38.249.169)
13:19:17 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:19:36 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:19:51 viluon joins (uid453725@id-453725.helmsley.irccloud.com)
13:21:31 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:21:48 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:22:09 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
13:22:53 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:23:16 ystael joins (~ystael@user/ystael)
13:25:31 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:25:50 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:25:54 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
13:29:29 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:29:47 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:30:39 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
13:31:17 × deadmarshal_ quits (~deadmarsh@95.38.229.118) (Ping timeout: 252 seconds)
13:31:43 <boxscape> make a Haskell EDSL that allows you to generate rust code
13:33:05 deadmarshal joins (~deadmarsh@95.38.229.118)
13:35:43 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:36:02 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:39:43 × deadmarshal quits (~deadmarsh@95.38.229.118) (Ping timeout: 256 seconds)
13:40:13 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
13:42:09 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:42:27 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:43:43 max22- joins (~maxime@2a01cb08833598002b3ca9ff186b1f37.ipv6.abo.wanadoo.fr)
13:45:12 <tomsmeding> haskell is exceedingly flexible for making edsl's, but I'm not sure it's quite flexible enough to make something that makes writing rust code less verbose
13:46:26 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer)
13:47:17 slack1256 joins (~slack1256@191.126.99.89)
13:48:26 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
13:48:51 cosimone joins (~user@93-47-231-3.ip115.fastwebnet.it)
13:49:46 × pfurla quits (~pfurla@2804:14d:5c81:4104:4c11:ba21:da7d:dd69) (Quit: gone to sleep. ZZZzzz…)
13:51:26 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
13:51:44 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
13:51:58 shriekingnoise joins (~shrieking@186.137.144.80)
13:53:08 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:53:47 lavaman joins (~lavaman@98.38.249.169)
13:55:20 __monty__ joins (~toonn@user/toonn)
13:57:18 deadmarshal joins (~deadmarsh@95.38.229.118)
13:58:28 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
14:00:08 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
14:00:25 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
14:01:11 × max22- quits (~maxime@2a01cb08833598002b3ca9ff186b1f37.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
14:01:38 reumeth joins (~reumeth@user/reumeth)
14:04:21 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Remote host closed the connection)
14:04:45 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
14:05:51 × narendra quits (~user@2a02:8109:b63f:ff7c::56c2) (Quit: ERC 5.4.1 (IRC client for GNU Emacs 29.0.50))
14:06:16 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds)
14:06:50 <EvanR> with enough template haskell, you can do anything xD
14:07:33 <boxscape> you can even add CPP on top
14:08:10 waleee joins (~waleee@h-82-196-111-63.na.cust.bahnhof.se)
14:14:13 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
14:14:51 × waleee quits (~waleee@h-82-196-111-63.na.cust.bahnhof.se) (Ping timeout: 256 seconds)
14:16:37 Lycurgus joins (~juan@98.4.112.204)
14:19:28 <tomsmeding> EvanR: at that point you're just writing a parser :p
14:21:13 lbseale joins (~ep1ctetus@user/ep1ctetus)
14:21:48 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
14:22:19 <tomsmeding> hm, with the right EDSL design, what you _might_ gain is using the haskell metalanguage in place of macro definitions. With sufficient type-safety, you aren't going to get any more hygienic macros
14:25:13 <EvanR> it says here for ghc 9.2.1: Merging of ghc-exactprint into the GHC tree, providing infrastructure for source-to-source program rewriting out-of-the-box.
14:25:27 <EvanR> I dunno what that means but uh
14:25:46 <EvanR> sounds like DSL stuff
14:26:24 lbseale_ joins (~ep1ctetus@user/ep1ctetus)
14:27:03 slac11455 joins (~slack1256@191.125.99.65)
14:27:43 aliosablack joins (~chomwitt@2a02:587:dc16:f200:12c3:7bff:fe6d:d374)
14:27:47 <boxscape> there's a short talk on youtube about it https://www.youtube.com/watch?v=GkoQbJofm1A
14:28:06 × aliosablack quits (~chomwitt@2a02:587:dc16:f200:12c3:7bff:fe6d:d374) (Remote host closed the connection)
14:28:07 × chomwitt quits (~chomwitt@2a02:587:dc16:f200:12c3:7bff:fe6d:d374) (Read error: Connection reset by peer)
14:28:31 chomwitt joins (~chomwitt@2a02:587:dc16:f200:12c3:7bff:fe6d:d374)
14:28:43 <lbseale_> I have a situation where I have a small number of objects (2 - 5 max), which have arbitrary (but guaranteed unique) labels. I want to put them in some data structure, where I can read / replace them. Is there a way to do this safely?
14:28:49 <boxscape> I think it's mainly for tools that interact with Haskell source code, not DSLs
14:29:01 × slack1256 quits (~slack1256@191.126.99.89) (Ping timeout: 256 seconds)
14:29:35 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Ping timeout: 256 seconds)
14:30:42 <geekosaur> yeh, I think it's for Haskell source plugins which previously were pretty limited
14:30:54 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
14:30:55 <tomsmeding> EvanR: I think that is related to source-to-source _Haskell_ rewriting, where spacing, comments etc. are preserved. Not terribly relevant to EDSLs, I think -- though I don't really know for sure
14:31:22 <tomsmeding> oh, as boxscape said
14:31:29 curiousgay joins (~curiousga@77-120-141-90.kha.volia.net)
14:31:32 <tomsmeding> and everyone else
14:31:58 <tomsmeding> someone explain lenses to lbseale_, I don't know anything about them
14:32:29 <lbseale_> tomsmeding, lol noooo I don't want that to be the answer
14:32:46 <tomsmeding> lbseale_: would a simple record type be okay? data Thing = Thing { obj1 :: A, obj2 :: B, obj3 :: C }
14:33:13 <EvanR> yes seems like a record question really
14:33:16 <lbseale_> It would except I don't know how many objects there are or what their labels are at compile-time
14:33:24 <tomsmeding> if 't :: Thing', then 'obj1 t' is the first object in it; 't { obj1 = s }' is a new thing with the first object replaced by s
14:33:31 <EvanR> extensible records, or heterogeneous map
14:33:54 <tomsmeding> lbseale_: https://hackage.haskell.org/package/dependent-map-0.4.0.0/docs/Data-Dependent-Map.html#t:DMap
14:34:14 <tomsmeding> or, are those objects different types?
14:34:31 <tomsmeding> if no, simple Data.Map
14:34:35 <tomsmeding> if yes, DMAP
14:34:37 <tomsmeding> * DMap
14:34:54 <lbseale_> they're all the same type
14:34:55 <EvanR> 2 to 5 max, hell use [(String,a)] xD
14:35:09 <tomsmeding> % import qualified Data.Map.Strict as Map
14:35:10 <yahb> tomsmeding:
14:35:27 <tomsmeding> % data Label = Lab1 | Lab2 | Lab3
14:35:28 <yahb> tomsmeding:
14:35:31 <tomsmeding> % data Label = Lab1 | Lab2 | Lab3 deriving (Eq, Ord, Show)
14:35:31 <yahb> tomsmeding:
14:35:48 <tomsmeding> % let mp = Map.fromList [(Lab1, 123), (Lab2, 456)]
14:35:49 <yahb> tomsmeding:
14:35:52 <tomsmeding> % Map.lookup Lab1 mp
14:35:52 <yahb> tomsmeding: Just 123
14:35:54 <tomsmeding> % Map.lookup Lab3 mp
14:35:54 <yahb> tomsmeding: Nothing
14:36:08 <tomsmeding> % Map.insert Lab2 789 mp
14:36:08 <yahb> tomsmeding: fromList [(Lab1,123),(Lab2,789)]
14:36:14 <tomsmeding> lbseale_: seems like a simple map would do :p
14:36:23 <lbseale_> yeah this is nice
14:36:49 <tomsmeding> which is effectively [(Label, a)] except that it also scales to >5 things
14:37:03 <lbseale_> I wish that I didn't have to handle the `Maybe` type from looking up values in the `Map`
14:37:04 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
14:37:04 <tomsmeding> well, and also except that it doesn't allow duplicate labels
14:37:18 <EvanR> you didn't say that all labels are occupied though?
14:37:22 <lbseale_> because I pinky-promise my `Map` will always have the labels I want to look up
14:37:28 <lbseale_> oh, my mistake, yes they are
14:37:31 <tomsmeding> % :t (Map.!)
14:37:32 <yahb> tomsmeding: forall {k} {a}. Ord k => M.Map k a -> k -> a
14:37:42 <tomsmeding> % :set -fno-print-explicit-foralls
14:37:42 <yahb> tomsmeding:
14:37:43 <tomsmeding> % :t (Map.!)
14:37:43 <yahb> tomsmeding: Ord k => M.Map k a -> k -> a
14:37:44 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Remote host closed the connection)
14:37:53 <tomsmeding> that will `error` if the key doesn't exist :p
14:37:56 <EvanR> wait wait... you don't know how many, but they are unique and you know they are always there?
14:38:08 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
14:38:14 <tomsmeding> % mp Map.! Lab3
14:38:14 <EvanR> is this illogical
14:38:15 <yahb> tomsmeding: *** Exception: Map.!: given key is not an element in the map; CallStack (from HasCallStack):; error, called at libraries/containers/containers/src/Data/Map/Internal.hs:633:17 in containers-0.6.4.1:Data.Map.Internal
14:38:19 <tomsmeding> % mp Map.! Lab2
14:38:20 <yahb> tomsmeding: 456
14:38:49 <tomsmeding> EvanR: external program properties that are not expressed in the type system. Welcome to reality :p
14:39:03 <lbseale_> tomsmeding, yeah I thought this would be the answer
14:39:06 <EvanR> but how do you not crash?
14:40:03 <lbseale_> EvanR, it's a library being called by code that reads in the objects and guarantees that their labels are unique. There can be an arbitrary quantity of them, but in practice there won't be many
14:40:39 <EvanR> so your key set is always coming from a place that built the map
14:40:51 <lbseale_> yes
14:41:06 <lbseale_> so I'll just do the unsafe lookups and handle them appropriately
14:41:22 <tomsmeding> you can try to make this more type-safe, but for questionable benefit
14:41:49 <EvanR> i'm curious how you will do lookups with keys when they're unknown xD
14:41:50 <lbseale_> that's not appealing, I'd prefer my code be simple and a little unclean
14:42:06 <EvanR> more realistically it seems like you'd just spell out the whole map and use the keys that are there
14:42:16 <geekosaur> presumably the keys are transmitted separately?
14:42:25 <EvanR> :thonk:
14:42:39 <EvanR> keys have to be in the map...
14:42:55 <geekosaur> % M.keys mp
14:42:55 <yahb> geekosaur: [Lab1,Lab2]
14:43:03 <lbseale_> EvanR, there are times when I want to make arbitrary subsets of these objects, then update just that subset
14:43:13 <lbseale_> so like, I know what keys I took out
14:43:27 <lbseale_> but there could be many of them, and I don't know what they are
14:43:43 <EvanR> ok well I'm not sure we made this very safe xD
14:44:53 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
14:45:32 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 252 seconds)
14:45:49 <boxscape> seems like the sort of thing you can make type safe with existential types and Symbol. But yeah probably wouldn't result in simple code
14:47:29 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
14:47:47 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
14:49:27 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
14:49:45 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
14:51:25 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
14:51:43 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
14:52:15 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
14:53:42 × DNH quits (~DNH@2a02:8108:1100:16d8:f00d:18c8:3973:574b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:54:27 <lbseale_> ok, thanks guys! I think I know what to do
14:54:49 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:54:49 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:54:49 wroathe joins (~wroathe@user/wroathe)
14:54:59 LukeHoersten joins (~LukeHoers@user/lukehoersten)
14:55:03 <lbseale_> I was gonig to use NonEmpty Map, since I can at least guarantee that
14:55:30 <Hecate> hi lbseale_ :)
14:55:37 <Hecate> how are you doing?
14:55:59 × acidjnk_new quits (~acidjnk@p200300d0c7271e72fcf154b5eecf3df6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
14:57:21 <lbseale_> Hecate, I'm well! I was just looking at your suggestions. How are you?
14:57:47 DNH joins (~DNH@2a02:8108:1100:16d8:f00d:18c8:3973:574b)
14:58:27 lbseale_ is now known as lbseale
15:00:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:02:55 max22- joins (~maxime@2a01cb08833598007c2e741a7c59ca1a.ipv6.abo.wanadoo.fr)
15:04:31 AlexZenon joins (~alzenon@178.34.160.14)
15:04:59 Alex_test joins (~al_test@178.34.160.14)
15:05:07 lavaman joins (~lavaman@98.38.249.169)
15:05:55 <boxscape> Is there an advent of code room specific to Haskell?
15:06:09 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
15:06:26 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
15:08:06 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
15:09:44 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
15:10:54 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
15:11:01 <merijn> Not really?
15:11:03 <merijn> Here :p
15:11:22 <merijn> That reminds me, someone should update the topic to include the #haskell leaderboard
15:12:20 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
15:12:49 ChanServ sets mode +o geekosaur
15:12:54 <geekosaur> point me to it?
15:13:34 geekosaur doesn't do AoC
15:13:35 <merijn> I can't, glguy created it and I don't think I can see the code?
15:13:44 pfurla joins (~pfurla@2804:14d:5c81:4104:4c11:ba21:da7d:dd69)
15:14:06 <boxscape_> yep unless someone remembers it from last year (and glguy hasn't changed it) he will have to tell us
15:14:59 × xsperry quits (~xs@user/xsperry) (Killed (NickServ (GHOST command used by ahahaha!~xs@cpe-188-129-101-182.dynamic.amis.hr)))
15:15:22 xsperry joins (~xs@user/xsperry)
15:16:09 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
15:16:20 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
15:17:25 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:17:25 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
15:17:25 wroathe joins (~wroathe@user/wroathe)
15:18:36 <geekosaur> bah, my logs don't include it (spent a couple years using webchat so no logs from then, sigh)
15:18:42 geekosaur sets mode -o geekosaur
15:19:31 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
15:20:35 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
15:21:07 retroid_ joins (~retro@97e2ba2e.skybroadband.com)
15:21:50 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
15:23:08 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
15:24:16 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f) (Ping timeout: 264 seconds)
15:25:00 <Hecate> lbseale: fairly good, thank you very much. :) Managed to get the Functions lesson merged after many months of review :')
15:25:08 × retro_ quits (~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds)
15:25:45 × retroid_ quits (~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds)
15:26:27 retroid_ joins (~retro@97e2ba2e.skybroadband.com)
15:26:46 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
15:27:23 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
15:30:28 x88x88x joins (~cheeg@gateway/vpn/pia/x88x88x)
15:31:46 jeetelongname joins (~jeet@eduroam-public-46.nat.port.ac.uk)
15:32:26 xkuru joins (~xkuru@user/xkuru)
15:36:40 <zincy> Can someone help me with this type error? https://gist.github.com/therewillbecode/34b38f409c8cdf2b92f4edc0a417c734
15:37:00 <zincy> Ill kinded expression whilst playing with Hedgehog state machine testing
15:39:02 <tomsmeding> zincy: does PSitDown take two arguments here? pure $ PSitDown (GNewPlayer (T.pack $ show $ length ps) cs)
15:39:13 <tomsmeding> oh I'm blind
15:39:36 <tomsmeding> zincy: what's the type of Command
15:40:19 <tomsmeding> zincy: also, don't those Nothings in 'gen' need to be 'pure Nothing' or something?
15:44:29 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!)
15:44:52 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
15:46:10 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
15:46:16 slowButPresent joins (~slowButPr@user/slowbutpresent)
15:49:14 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
15:54:38 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
15:59:30 <EvanR> two lines of code that satisfy the type checker but are wildly different xD
15:59:44 <EvanR> putC c 0 "" = [c]
15:59:49 <EvanR> putC c 0 "" = "c"
15:59:56 <EvanR> I guess that's why we need tests xD
16:00:54 <boxscape> EvanR: or just turn on -Wall
16:03:05 × deadmarshal quits (~deadmarsh@95.38.229.118) (Ping timeout: 256 seconds)
16:04:54 × ouro_boros quits (~ouroboros@2804:14c:65e4:93f6::1001) (Remote host closed the connection)
16:04:57 ec_ joins (~ec@gateway/tor-sasl/ec)
16:05:17 ouro_boros joins (~ouroboros@2804:14c:65e4:93f6:a589:7295:b475:5b03)
16:05:50 <janus> does the version of ghc used imply which version of bytestring is used?
16:06:23 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
16:08:14 <davean> janus: not past very vaguely
16:10:20 <janus> ok so all this breakage is just happening because 0.10 was long-lived and isn't compatible with base 4.16. so almost noone has encountered the error because nobody uses ghc 9.2 yet
16:10:26 × slac11455 quits (~slack1256@191.125.99.65) (Remote host closed the connection)
16:11:17 <davean> what breakage?
16:11:39 <davean> 0.11 came out over a year ago
16:12:05 <janus> i just had to send lots of patches for this. for tzdata, HaTeX, wuss
16:12:26 <janus> and sendfile
16:12:40 <davean> Huh, I've been on bytestring 0.11 for ages
16:12:49 <davean> what caused the breaks?
16:13:17 <janus> people have 'bytestring < 0.11' in their cabal files
16:13:28 <EvanR> I'll get back to you when I figure out how to do that with cabal, for now moving on
16:14:02 <davean> EvanR: you need to know how to turn on -Wall with cabal? jsut --ghc-option=-Wall
16:14:02 <janus> even ftp-client has bytestring < 0.11 even though its source repository doesn't have it. does it come from the trustees?
16:14:19 <janus> @package ftp-client
16:14:19 <lambdabot> https://hackage.haskell.org/package/ftp-client
16:14:56 <davean> no, but it would be bad if there wasn't such a requirement
16:15:24 <janus> Megan Robinson must have uploaded a package with constraints that aren't in the source repo... how rare
16:15:24 <EvanR> what... I turned on -Wall somehow... cool
16:16:10 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
16:16:32 <sclv> janus are you aware of —allow-newer?
16:16:49 <janus> sclv: yes :P but it's a hack. i shame myself for using it
16:17:05 <davean> I shame you for using FTP, but here we are
16:17:20 <janus> i usually just use source-repository-package because then i can send a PR once it compiles
16:17:24 shapr enables PASV
16:17:34 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
16:17:44 <janus> except for sendfile, i had to learn to use darcs :P
16:17:45 <zincy> tomsmeding: https://hackage.haskell.org/package/hedgehog-1.0.5/docs/Hedgehog.html#t:Command
16:18:08 <zincy> tomsmeding: Don't think it needs to be pure Nothing according to the examples I have seen
16:18:33 <tomsmeding> zincy: but gen returns something in the Gen monad, right?
16:18:42 <tomsmeding> or otherwise that do block makes no sense
16:19:26 <janus> davean: can't make the freight forwarders implement new stuff...
16:19:57 <zincy> tomsmeding: Yeah you are right, https://github.com/hedgehogqa/haskell-hedgehog/blob/f8247c1519df37bc324caf8f8af8849816433332/hedgehog-example/src/Test/Example/Registry.hs#L145
16:20:19 <zincy> look there in the examples I think for gen you need to put it in Var
16:20:57 <davean> janus: just tell them sftp is super ftp
16:21:54 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
16:22:02 <davean> janus: packages that just have constraints that turn out to be tighter than required can just do a revision though, no new version required.
16:22:39 <janus> davean: but i am only supposed to ask for revisions if the maintainer isn't responding, right? i was thinking to wait 2 weeks
16:23:07 <zincy> tomsmeding: I think var is for something else. Actually look at the command type again
16:23:08 <zincy> Maybe (gen (input Symbolic))
16:24:15 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:97df:ebe3:251c:f0f6) (Quit: WeeChat 2.8)
16:24:32 ChanServ sets topic to "https://www.reddit.com/r/haskell | Admin: #haskell-ops | Offtopic: #haskell-offtopic | https://downloads.haskell.org | Paste code/errors: https://paste.tomsmeding.com | Logs: https://ircbrowse.tomsmeding.com/browse/lchaskell | AoC Leaderboard: 43100-84040706"
16:25:12 <davean> janus: you can ask the maintainer to do a revision
16:25:16 lavaman joins (~lavaman@98.38.249.169)
16:25:41 × jeetelongname quits (~jeet@eduroam-public-46.nat.port.ac.uk) (Remote host closed the connection)
16:25:50 <janus> aaah right. i just think it is so confusing when the repo is out of sync with hackage
16:26:03 <janus> took me a long time to notice what was happening with ftp-client...
16:26:19 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
16:26:21 <shapr> janus: darcs taught me about ControlMaster for ssh
16:26:44 × _bo quits (~bo@217.18.216.247) (Ping timeout: 252 seconds)
16:27:49 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
16:30:10 ub joins (~Thunderbi@p200300ecdf0ba2aaa54fdd1e9768c0b5.dip0.t-ipconnect.de)
16:32:06 <sclv> i think for stack repos sometimes they use stack to generate the bounds _on upload_
16:32:33 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
16:33:58 <janus> oooh that explains it
16:34:57 <janus> shapr: i wanna use darcs, it's just so few people using it
16:35:07 <janus> if i had to choose between sourcehut and darcs, i'd choose sourcehut
16:36:55 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:37:31 <Franciman> haskell has punished me
16:37:41 <Franciman> the interpreter in haskell takes 1.9s to compute the sum of the first 10M numbers
16:37:48 <Franciman> my zig version takes 3.1s
16:38:01 <Franciman> I feel I can overperform haskell though
16:38:06 <Franciman> I literally have no optimization
16:38:15 <Franciman> and haskell is packed with strange quirks to make things super fast
16:38:21 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
16:38:28 <boxscape> but not in the interpreter
16:38:37 <boxscape> unless "the interpreter" does not refer to ghci
16:38:45 <Franciman> it refers to my software
16:38:46 jeetelongname joins (~jeet@eduroam-public-46.nat.port.ac.uk)
16:38:51 <Franciman> my software in haskell is faster than my software in zig
16:38:51 <boxscape> ah, I see
16:39:07 <janus> Franciman: do you need bignum for that?
16:39:14 <Franciman> nono, plain int64
16:39:31 <davean> Why is your Haskell version so slow?
16:39:43 <Franciman> it's an interpreter for my programming language
16:39:52 <Franciman> so it's my language that is slow
16:40:02 <davean> Ah, must be doing a lot of extra work
16:40:08 <Franciman> https://github.com/Franciman/ellipse/blob/stable/src/Eval.hs
16:40:28 <davean> Oh my yes it is
16:41:08 <Franciman> like where?
16:41:10 Franciman wants to learn
16:41:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
16:42:01 <[exa]> Franciman: what's the zig version out of curiosity?
16:42:35 <Franciman> I want to make clear that it's Franciman's zig version, as that one is Franciman's haskell version
16:42:36 <davean> well you seem to have no persistent property for your datastructure, from the evaluator's code, and you leave your valeus as references to thunks
16:42:39 <Franciman> so this does not mean much
16:42:45 <davean> you probably want to be leaf strict, spine lazy here
16:42:50 ncopa3 joins (~ncopa@gbr2-dev1.alpinelinux.org)
16:42:51 <Franciman> one sec [exa]
16:43:22 × haskl quits (~haskl@user/haskl) (Ping timeout: 256 seconds)
16:43:51 OscarH_ joins (~OscarH@90.201.86.195)
16:43:52 codolio joins (~dolio@130.44.130.54)
16:43:54 dwt__ joins (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net)
16:43:55 haskl joins (~haskl@user/haskl)
16:43:56 madnight joins (~madnight@static.59.103.201.195.clients.your-server.de)
16:43:56 × OscarH quits (~OscarH@90.201.86.195) (Ping timeout: 256 seconds)
16:43:56 × dwt_ quits (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net) (Ping timeout: 256 seconds)
16:44:01 bgamari_ joins (~bgamari@64.223.235.131)
16:44:01 oats_ joins (~thomas@user/oats)
16:44:25 aforemny_ joins (~aforemny@static.248.158.34.188.clients.your-server.de)
16:44:30 × bcoppens_ quits (~bartcopp@vpn2.bartcoppens.be) (Ping timeout: 256 seconds)
16:44:30 × dolio quits (~dolio@130.44.130.54) (Ping timeout: 256 seconds)
16:44:30 × dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
16:44:30 × hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 256 seconds)
16:44:31 × heath quits (~heath@user/heath) (Ping timeout: 256 seconds)
16:44:31 × Patternmaster quits (~georg@li1192-118.members.linode.com) (Ping timeout: 256 seconds)
16:44:31 × jackhill quits (~jackhill@kalessin.dragonsnail.net) (Ping timeout: 256 seconds)
16:44:34 dtman34_ joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
16:44:57 <Franciman> oh btw, haskell version takes 0.9s
16:45:01 × x88x88x quits (~cheeg@gateway/vpn/pia/x88x88x) (Ping timeout: 256 seconds)
16:45:04 × piele quits (~piele@tbonesteak.creativeserver.net) (Ping timeout: 256 seconds)
16:45:04 × ncopa quits (~ncopa@gbr2-dev1.alpinelinux.org) (Ping timeout: 256 seconds)
16:45:05 × anderson quits (~ande@user/anderson) (Ping timeout: 256 seconds)
16:45:05 × dminuoso quits (~dminuoso@user/dminuoso) (Ping timeout: 256 seconds)
16:45:05 × aforemny quits (~aforemny@static.248.158.34.188.clients.your-server.de) (Ping timeout: 256 seconds)
16:45:05 × madnight_ quits (~madnight@static.59.103.201.195.clients.your-server.de) (Ping timeout: 256 seconds)
16:45:05 × Teacup quits (~teacup@user/teacup) (Ping timeout: 256 seconds)
16:45:05 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 256 seconds)
16:45:05 × nisstyre quits (~wes@user/nisstyre) (Ping timeout: 256 seconds)
16:45:05 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 256 seconds)
16:45:05 × bgamari quits (~bgamari@64.223.235.131) (Ping timeout: 256 seconds)
16:45:05 × oats quits (~thomas@user/oats) (Ping timeout: 256 seconds)
16:45:05 × caubert quits (~caubert@136.244.111.235) (Ping timeout: 256 seconds)
16:45:05 × spoofer quits (~spoofer@64.185.111.205) (Ping timeout: 256 seconds)
16:45:05 × mmaruseacph2 quits (~mihai@198.199.100.72) (Ping timeout: 256 seconds)
16:45:08 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.3)
16:45:13 Teacup_ joins (~teacup@user/teacup)
16:45:17 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
16:45:19 <Franciman> just updating libraries
16:45:21 dminuoso joins (~dminuoso@user/dminuoso)
16:45:24 <Franciman> lol
16:45:24 piele joins (~piele@tbonesteak.creativeserver.net)
16:45:36 oats_ is now known as oats
16:46:08 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:46:11 bcoppens joins (~bartcopp@vpn2.bartcoppens.be)
16:46:12 jackhill joins (~jackhill@kalessin.dragonsnail.net)
16:46:13 hiredman joins (~hiredman@frontier1.downey.family)
16:46:20 Patternmaster joins (~georg@li1192-118.members.linode.com)
16:46:22 heath joins (~heath@user/heath)
16:46:35 spoofer joins (~spoofer@64.185.111.205)
16:46:37 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
16:46:39 cods joins (~fred@82-65-232-44.subs.proxad.net)
16:46:50 mmaruseacph2 joins (~mihai@198.199.100.72)
16:46:55 caubert joins (~caubert@136.244.111.235)
16:47:05 anderson joins (~ande@user/anderson)
16:47:43 <Franciman> [exa]: https://github.com/Franciman/telescope/blob/main/src/machine/machine.zig
16:47:45 madnight_ joins (~madnight@static.59.103.201.195.clients.your-server.de)
16:47:47 bgamari joins (~bgamari@2001:470:e438::1)
16:47:49 dwt_ joins (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net)
16:48:12 × madnight quits (~madnight@static.59.103.201.195.clients.your-server.de) (Read error: Connection reset by peer)
16:48:25 × dwt__ quits (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net) (Ping timeout: 256 seconds)
16:48:25 dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
16:48:59 × dtman34_ quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
16:48:59 × bgamari_ quits (~bgamari@64.223.235.131) (Ping timeout: 256 seconds)
16:50:44 × niko quits (~niko@libera/staff/niko) (Ping timeout: 606 seconds)
16:51:00 <Franciman> let's see how many cache misses I do
16:51:02 <Franciman> that may be relevant
16:51:11 <davean> Franciman: high - thats part of what I was refering to
16:51:29 <davean> not as high as real code would see though because you have a tiny working set
16:51:30 <Franciman> it's astonishing that in haskell I can do tree walking without getting infinitely many cache misses
16:51:35 <davean> so whats really more relivent is the conditional branches
16:52:22 <Franciman> uhm I understand
16:52:52 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
16:53:33 codolio is now known as dolio
16:53:48 <davean> Franciman: so in Haskell you're mostly doing a tree walk instead of a tree walk of a tree walk
16:54:07 <Franciman> lol in zig I have 51% of cache misses
16:54:17 <Franciman> I am sure I can get this under haskell
16:54:25 <Franciman> well I am cheating hard, I have no memory management
16:54:41 <Franciman> but that may cause cache misses T.T
16:55:17 <Franciman> davean: I am not sure I understand what's slow with the environment, though
16:55:33 <Franciman> you want me to have strict leaves in a lazy tree
16:55:38 <Franciman> isn't that what is happening already?
16:56:51 <[exa]> Franciman: is it allocating stuff?
16:56:58 <Franciman> yep
16:56:59 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Remote host closed the connection)
16:57:01 <Franciman> I use an arena allocator
16:57:14 <Franciman> I first request a page of memory from the OS
16:57:21 <[exa]> why do you need to allocate stuff for sum(1..10M) ?
16:57:22 <Franciman> then fill it
16:57:28 <Franciman> I need to allocate call frames
16:57:34 <Franciman> which contain pointers and arguments
16:57:38 <[exa]> oh is that recursive?
16:57:40 <Franciman> yep
16:57:49 mikoto-chan joins (~mikoto-ch@esm-84-240-99-143.netplaza.fi)
16:58:18 nisstyre joins (~wes@user/nisstyre)
16:58:21 niko joins (~niko@libera/staff/niko)
16:58:44 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
16:58:49 <[exa]> so it basically makes some O(10M) of stack?
16:59:13 <[exa]> that might just explain all of the cache misses.
17:00:26 <davean> Franciman: how do you run your test in your repository?
17:00:32 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
17:00:54 <Franciman> [exa]: in haskell it does very few cache misses though, ghc working its magic
17:01:11 <Franciman> davean: cabal run ellipse tree
17:01:14 <Franciman> ah wait
17:01:20 <Franciman> I also have abenchmerak
17:01:43 <Franciman> with criterion
17:01:57 <Franciman> note that what you run dependds on the file example.ll
17:02:05 <Franciman> so one sec, let me update with sum
17:02:11 <Franciman> (now it computes fibonacci 40)
17:03:37 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
17:03:54 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
17:04:01 <[exa]> Franciman: there's a nice GC trick with nursery
17:06:49 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
17:08:15 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
17:08:22 × dawdler quits (~dawdler@user/dawdler) (Remote host closed the connection)
17:08:30 lbseale_ joins (~ep1ctetus@user/ep1ctetus)
17:09:22 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
17:09:26 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
17:11:55 <Franciman> oh I see
17:12:04 <Franciman> what does it do?
17:12:26 <Franciman> davean: now if you run `cabal build ellipse && time cabal run ellipse tree`
17:12:30 <Franciman> you get a timing
17:12:30 <EvanR> why does hp2ps output for heap profiles (-hc) always show a time axis from 0 to 0.8 seconds regardless of how long the program runs
17:12:52 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Ping timeout: 264 seconds)
17:12:58 <EvanR> the graph seems to look like a time graph
17:13:42 <Franciman> if you want more precise measures there is the benchmark using criterion,
17:13:46 <Franciman> cabal bench bench
17:13:49 <Franciman> but it takes a lot of time :P
17:14:05 <Franciman> ah ok no, cool
17:15:42 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:15:56 jakalx joins (~jakalx@base.jakalx.net)
17:16:47 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 252 seconds)
17:17:06 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
17:18:13 × jeetelongname quits (~jeet@eduroam-public-46.nat.port.ac.uk) (Remote host closed the connection)
17:18:16 × Lycurgus quits (~juan@98.4.112.204) (Ping timeout: 264 seconds)
17:18:53 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:23:32 × xff0x quits (~xff0x@2001:1a81:52c5:f300:6673:fb4d:a3aa:9d2) (Remote host closed the connection)
17:24:03 xff0x joins (~xff0x@2001:1a81:52c5:f300:8200:618:b8e3:ab90)
17:24:23 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Remote host closed the connection)
17:24:58 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
17:25:16 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Remote host closed the connection)
17:25:25 jonatanb joins (~accio@31-178-144-108.dynamic.chello.pl)
17:27:26 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:31:58 cv joins (~cv@202.164.130.248)
17:32:14 cv is now known as almight
17:32:40 × concrete-houses quits (~g@209.6.150.53) (Ping timeout: 264 seconds)
17:33:14 <almight> Beginner here
17:33:15 <almight> Why do most modules in haskell start with Data.Something is that a convention
17:33:15 <almight> is this a practice for projects as well or just for libraries
17:34:07 concrete-houses joins (~g@209.6.150.53)
17:34:37 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
17:35:37 Erutuon joins (~Erutuon@user/erutuon)
17:36:01 <davean> almight: Who said they did?
17:36:14 <almight> I saw a lot many
17:36:18 <almight> Data.Aeson
17:36:19 × pfurla quits (~pfurla@2804:14d:5c81:4104:4c11:ba21:da7d:dd69) (Quit: gone to sleep. ZZZzzz…)
17:37:04 <lyxia> almight: it is an old convention, many modern packages don't follow it anymore.
17:37:04 <maerwald> maybe it means "Datastructure"
17:37:07 <maerwald> e.g. Data.List
17:39:04 <almight> lyxia so what is the convention now
17:39:05 <almight> is it to go package names similar to java
17:39:05 <almight> like if I have a project haskell-api I go with Haskell.API. etc etc
17:40:42 <davean> almight: module names are heirarchical (in practice), they categorize - packages categorized as Data related start with Data
17:40:50 <davean> many start with other things
17:41:27 <davean> I assure you you also saw Control.
17:41:46 <almight> yeah you are right
17:42:18 <davean> Network., HTTP., they start with what groups them
17:45:03 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
17:45:21 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
17:45:45 gehmehgeh joins (~user@user/gehmehgeh)
17:47:02 × fr33domlover quits (~fr33@2.53.150.205) (Ping timeout: 252 seconds)
17:51:17 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
17:51:18 <geekosaur> whne hierarchical module names were introduced they went a bit wild with the hierarchies, and the result made little sense
17:51:36 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
17:52:05 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
17:53:07 jeetelongname joins (~jeet@148.197.248.46)
17:55:15 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
17:55:22 <boxscape> Is there a simple way to take an instance of Data.Data and produce a String similar to what a derived Show instance would produce?
17:55:34 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
17:55:40 × jeetelongname quits (~jeet@148.197.248.46) (Client Quit)
17:57:20 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
17:57:37 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
17:57:50 × johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
17:58:22 jeetelongname joins (~jeet@148.197.248.46)
17:59:22 johnw joins (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
17:59:52 × jeetelongname quits (~jeet@148.197.248.46) (Read error: Connection reset by peer)
17:59:58 <jle`> hm .. probably not
18:00:08 <jle`> you can print the constructor easily though
18:00:13 <jle`> but the contents are a different story
18:00:45 <boxscape> hm, okay, thanks
18:00:48 <jle`> hm, but i do wonder now how close you can get
18:01:19 <jle`> hm...
18:01:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
18:01:38 <jle`> if all of the contents have types that are ADT's
18:01:47 <jle`> all the way down to the bottom
18:01:55 <jle`> then you could probably get there
18:02:26 <boxscape> (The type I'm interested in is HsExpr from ghc)
18:02:54 jeetelongname joins (~jeet@eduroam-public-46.nat.port.ac.uk)
18:03:19 <jle`> oh, you can also do it with Integer, Char, but not String
18:03:27 <jle`> ooh, you can maybe special-case string
18:03:40 <Tisoxin> or rather, expand it?
18:03:40 <boxscape> yeah
18:03:41 <Tisoxin> What utilities are there to test Template Haskell?
18:04:13 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
18:04:35 <jle`> boxscape: so uh, there is a way for many cases, but not necessarily simple unless someone has already written out the library
18:04:46 <boxscape> yeah, okay
18:05:36 <boxscape> (showing just the constructor gets me about 80% of the value, so that's probably good enough for now)
18:05:41 <jle`> this might be helpful for inspection, if it still builds https://hackage.haskell.org/package/data-tree-print
18:05:53 <geekosaur> I thought HsExpr came with an instance of Pretty or whatever ghc calls it
18:05:59 <boxscape> oh, neat
18:06:16 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
18:06:33 <boxscape> geekosaur: yes but that just prints out Haskell source code, not very useful when what I'm interested in is the structure of the HsExpr
18:06:43 <boxscape> as a Haskell type
18:07:37 <jle`> if you're just doing it for debugging you can probably standlone deriving it
18:08:10 × almight quits (~cv@202.164.130.248) (Quit: Client closed)
18:08:11 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
18:08:17 <boxscape> I tried, I spend 15 minutes adding ever more complex constraints ghc asked me to add to the derived instances before giving up
18:08:41 <boxscape> the "Trees that grow" structure doesn't make it very obvious which types ultimately need an instance
18:08:51 <boxscape> s/spend/spent
18:08:53 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 256 seconds)
18:09:07 <jle`> fair enough
18:09:16 pfurla joins (~pfurla@201.17.118.230)
18:09:21 kadir parts (~kadir@88.251.54.110) (WeeChat 3.3)
18:09:54 <boxscape> (on the other hand, adding adding a standalone derived Show instance to CoreExpr was pretty straightforward)
18:09:56 <boxscape> s/adding//
18:10:27 jakalx joins (~jakalx@base.jakalx.net)
18:11:54 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:13:38 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
18:13:55 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
18:15:05 LukeHoersten joins (~LukeHoers@user/lukehoersten)
18:18:31 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
18:18:37 × mbuf quits (~Shakthi@122.174.165.234) (Quit: Leaving)
18:19:48 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Client Quit)
18:21:36 LukeHoersten joins (~LukeHoers@user/lukehoersten)
18:26:43 × jonatanb quits (~accio@31-178-144-108.dynamic.chello.pl) (Quit: Leaving...)
18:27:38 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f) (Remote host closed the connection)
18:29:04 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 264 seconds)
18:29:56 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
18:34:26 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
18:34:28 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
18:40:23 × rkrishnan quits (~user@122.171.76.46) (Ping timeout: 252 seconds)
18:41:33 × ub quits (~Thunderbi@p200300ecdf0ba2aaa54fdd1e9768c0b5.dip0.t-ipconnect.de) (Quit: ub)
18:41:56 ub joins (~Thunderbi@p200300ecdf0ba2aaa54fdd1e9768c0b5.dip0.t-ipconnect.de)
18:42:02 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
18:44:05 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.3)
18:44:14 <Franciman> ok, I tried a sum 100
18:44:22 <Franciman> and I crush, totally destroy the haskell implementation
18:44:28 <Franciman> so it's all about memory management
18:44:29 <Franciman> T.T
18:44:33 zebrag joins (~chris@user/zebrag)
18:44:45 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
18:45:10 <EvanR> @src 100
18:45:10 <lambdabot> Source not found. You type like i drive.
18:45:13 <EvanR> @src sum
18:45:13 <lambdabot> sum = foldl (+) 0
18:45:20 <EvanR> oof xD
18:45:34 <EvanR> I hope you didn't beat that implementation
18:45:44 <EvanR> it would be so sad
18:46:07 <dsal> The real sum is similar.
18:46:36 <dsal> Oh, maybe I'm thinking of an older one: sum = getSum #. foldMap' Sum
18:47:03 <dsal> This is why I get so annoyed when people are like, "OMG! Don't use `sum` it's a very bad idea!"
18:47:08 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
18:47:52 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
18:48:02 <dsal> Yeah, the previous release was: sum = getSum #. foldMap Sum
18:48:52 <EvanR> maybe there is magic strictness analysis
18:49:08 <dsal> They added a ' in the latest release.
18:52:59 <EvanR> for all Foldables?
18:53:19 <dsal> That's what sum says.
18:53:40 _bo joins (~bo@217.18.216.247)
18:53:41 <EvanR> o_O
18:53:48 <dsal> product also uses foldMap'
18:54:12 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
18:54:24 <oats> I was tweaking my advent of code framework project, and discovered a trick with GADTs that lets me put `Day` records with different "internal" types into the same list. I thought it would be cool if a Day were just a record with a day number, a parser, and the part1 & part2 functions, but quickly realized you couldn't put different `Day a` values in the same list.
18:54:24 <oats> But GADTs let you hide the `a` somehow??? I'm not 100% sure why this is valid, any insight would be nice: https://github.com/oatberry/aoc2021-haskell/blob/main/src/Common.hs#L18
18:54:32 zebrag joins (~chris@user/zebrag)
18:55:16 <awpr> those are "existential types"
18:55:35 <EvanR> GADTs + RankN = existential
18:55:57 <dsal> Oh, I was just about to ask that question.
18:56:07 <dsal> I don't know the weird dependency graph these extensions have.
18:56:20 <dsal> I expected to see ExistentialQuantification turned on there.
18:56:30 <oats> dsal, seems to work without that
18:56:33 <EvanR> that's something else
18:56:37 <oats> assuming you're responding to me :P
18:56:44 <EvanR> data Foo = forall a . Bar a
18:57:00 <EvanR> and is weird xD
18:57:00 <awpr> when matching the `Day` constructor, type variables come into existence that can't be related to anything outside the GADT pattern match (except to the extent the other things in the GADT help you do that)
18:57:13 pragma- stares at "You type like i drive."
18:57:39 <awpr> `data Foo = forall a. Bar a` that's just the non-GADT syntax for the same thing as `data Foo where Bar :: forall a. a -> Foo a`
18:57:57 <awpr> GADTs the extension enables that by default IIRC
18:58:24 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
18:58:57 <oats> so am I going to get a unique specialization of `runDay` for each of the different `Day` values it gets run on?
18:59:08 <awpr> er, `forall a. a -> Foo` I mean
18:59:11 <EvanR> I think you need rankN types too
18:59:20 <oats> again, this compiles as is :P
18:59:28 <EvanR> whu
18:59:47 <EvanR> whatever I wish like 19 extensions were just always on xD
18:59:58 <oats> haha
19:00:16 <awpr> the file enables GADTs, that should be sufficient to allow this (and it seemingly is)
19:01:15 <dsal> GADTs isn't documented to imply existential quantification. I'm just going to be confused and try to see if I can get my package delivered.
19:01:16 <EvanR> you can hide the different a, but then the burden is on you to figure out how to do anything with them after the type is forgotten
19:01:20 <awpr> I'm not sure I'd call the `runDay`s applied to different records "specializations" exactly, but they do have "different" types internally for the parsed input and part1/part2 results
19:01:22 <EvanR> you're right
19:02:04 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
19:02:04 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
19:02:04 finn_elija is now known as FinnElija
19:02:13 <dsal> How I haskell: Write code I want. Follow errors until GHC says my code is perfect.
19:02:21 × max22- quits (~maxime@2a01cb08833598007c2e741a7c59ca1a.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
19:02:58 <EvanR> gutter bumper programming
19:03:41 <awpr> GHC user guide: "`ExistentialQuantification` | Enables liberalized type synonyms"
19:04:30 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:06:18 <awpr> okay from a quick experiment it looks like `GADTs` does not enable the non-GADT `ExistentialQuantification` syntax, but GADT constructors can still have existentials (by having a forall in their type). so it seems like `ExistentialQuantification` is specifically about the non-GADT syntax for existentials
19:06:37 kennyd joins (~bc8165b6@cerf.good1.com)
19:08:44 <hololeap_> what was the CPP "macro" or whatever that checks to see if you're on linux or windows, and is there a reference somewhere for these?
19:08:52 hololeap_ is now known as hololeap
19:09:02 <tomsmeding> yeah, looking in compiler/GHC/Driver/Session.hs in the ghc source, ExistentialQuantification is really not implied by anything
19:09:15 <tomsmeding> hololeap: there is no standard for that
19:09:21 <tomsmeding> there is only convention
19:09:29 <tomsmeding> __linux__ works IIRC
19:10:00 <tomsmeding> hololeap: https://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros
19:10:25 <tomsmeding> (see also the link for other windows compilers)
19:11:06 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f) (Remote host closed the connection)
19:11:28 <monochrom> But it does on my GHC 8.10.7. I have: {-# language GADTs #-} module N where data X = forall a. X a
19:13:08 <monochrom> Also 9.2.1
19:13:12 <hololeap> ok. I'm trying to patch a library so that it doesn't use the deprecated system-filepath package, and I _think_ they are trying to do some path manipulations in a portable way. it isn't entirely clear why they're still using that package
19:14:21 <hololeap> https://github.com/hololeap/happstack-server/commit/4cd5dc843f300a8f0ef9eec42f347088141e121a
19:15:08 <hololeap> so I was considering adding some check to import System.FilePath.Posix or System.FilePath.Windows
19:15:49 <geekosaur> doesn't System.Filepath do that check?
19:15:58 <awpr> hmm, indeed it does on 8.10.4. replit.com has 8.6, so apparently it was changed between then
19:16:07 <hololeap> oh, maybe it does
19:16:31 <hololeap> it just says that it re-exports System.Filepath.Posix on my local docs, but that's probably because I'm on linux
19:17:03 <hololeap> geekosaur: yeah it does. thanks for that info
19:17:12 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
19:18:05 <hololeap> cool. that means my patch will be portable as-is
19:19:38 <hololeap> I had to re-create the commonPrefix function because it doesn't have any equivalent in the filepath package that I can find
19:19:39 <hololeap> https://github.com/hololeap/happstack-server/commit/4cd5dc843f300a8f0ef9eec42f347088141e121a#diff-1927ef8b0f037f9a41033f83ef3102f7bd49aced7564e17f7f4696b7e33378ffR393-R401
19:20:32 × pfurla quits (~pfurla@201.17.118.230) (Quit: gone to sleep. ZZZzzz…)
19:22:02 <hololeap> just curious if anyone can find any improvements on that, or if it's premade somewhere I didn't notice. I don't want to add any new packages to the .cabal file, so no dlist or unordered-containers
19:23:43 <hololeap> it doesn't seem like it's used anywhere but that one function, so it's probably fine
19:26:58 MoC joins (~moc@user/moc)
19:27:24 <zero> there is no better way to indent this? https://paste.jrvieira.com/1638300408372
19:28:54 <monochrom> I put "let args" on the same line.
19:28:58 <geekosaur> I'd probably "cuddle" `args` and the first following guard, and reindent the others accordingly
19:29:15 <monochrom> Optionally, I put "let args | null d = Right (ny, nd)" on the same line.
19:29:28 <geekosaur> are you using a formatter? I think this is one of the things people complain about with ormolu?
19:29:42 <janus> hololeap: what's the point of `commonPrefix [a, b] == a`? couldn't you just have 'a `isPrefixOf` b'?
19:30:04 <monochrom> <cynical>ormolu would also put "=" on its own line </cynical>
19:30:12 × viluon quits (uid453725@id-453725.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
19:30:28 <hololeap> janus: that's just what they had originally, and you're right
19:30:35 <geekosaur> and I think it prefers 2 to 3
19:30:46 <geekosaur> (spaces indentation that is)
19:31:27 <janus> hololeap: well since we're touching the code we may as well simplify it... i can't see how commonPrefix could be superior in any sense, this is not even specific to paths
19:32:46 <monochrom> This can go deep into algebra thinking (equations) vs analysis thinking (<='s).
19:33:03 <hololeap> the system-filepath package doesn't treat FilePath as a type synonym for String, so I think they had to do things a little differently
19:33:14 <monochrom> You are looking at "meet(a,b)=a iff a<=b".
19:33:17 <zero> let args | ... works but let args\n | ... gives me a syntax errr
19:34:27 <geekosaur> check your indentation
19:34:32 <zero> https://paste.jrvieira.com/1638300858476
19:34:36 <zero> ^ this errors
19:34:36 <Franciman> I just need to understand haskell's memory tricks
19:34:58 <geekosaur> right, it has to be indented past the start of `args` by at least one space
19:35:12 <geekosaur> layout is a bit finicky
19:35:54 <geekosaur> so if you have the | under the `r` or further right it'll work
19:35:55 <janus> hololeap: btw will you be sending a PR? we also use happstack
19:36:20 deadmarshal joins (~deadmarsh@95.38.229.118)
19:36:34 <zero> geekosaur: hate layout -.-
19:36:43 <Franciman> +1 zero
19:36:45 <Franciman> +1 zero
19:36:56 <monochrom> You can always use {;} to override layout.
19:37:21 <hololeap> janus: yes, I will
19:37:22 max22- joins (~maxime@2a01cb088335980070cf7b273a01dbc1.ipv6.abo.wanadoo.fr)
19:37:24 <monochrom> do { ny <- ... ; nd <- ...; let {args | ... }; run args }
19:37:31 <Franciman> ;)
19:38:11 <hololeap> and I don't use it. I'm trying to get rid of system-file{io,path} from gentoo-haskell and there are a few packages that still use it
19:38:23 <hololeap> so I've been doing some janitorial work ;)
19:39:12 <yushyin> layout is fine, you just need to learn the rules
19:39:17 <hololeap> volunteer janitorial work
19:40:07 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
19:41:11 <janus> hololeap: oh nice, let's hope maintainers will be responsive! thanks for doing the work
19:42:55 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
19:43:13 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
19:44:35 zincy_ joins (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186)
19:48:27 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
19:48:56 <zero> yushyin: the rules are not fine
19:49:10 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:50:25 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
19:50:38 <zero> losing the indentation level context significance is a mistake from a visual interface design prespective. basic gestalt
19:51:44 <zero> but that's a talk for another time
19:52:45 <dsal> zero: if the compiler can't tell what you mean, would another programmer?
19:53:40 <monochrom> dsal, I think that this is a lost cause because in zero's anecdotal example, yes I can.
19:53:49 <zero> i'm not excusing my mistake, i'm criticizing layout rules
19:54:09 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
19:54:36 <monochrom> Generally, if someone who doesn't know the whole picture argues from armchair high horse, don't engage.
19:54:56 <monochrom> Recall my memoized randomization model!
19:55:28 <monochrom> memoized randomization post-mortem rationalization
19:56:10 <dolio> Every programming language has examples where a programmer can figure out what was meant, but the compiler can't because of its particular rules.
19:56:11 trcc joins (~trcc@2-104-60-169-cable.dk.customer.tdc.net)
19:56:39 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
19:56:44 <boxscape> that means it's time to replace parsers by neural networks :P
19:56:45 <zero> i would argue that the inverse is also true
19:56:50 × zincy_ quits (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186) (Remote host closed the connection)
19:56:56 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
19:57:02 <zero> monochrom: you've lost me there
19:57:14 cheater joins (~Username@user/cheater)
19:57:19 zincy_ joins (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186)
19:57:36 <monochrom> No, you lost me first with your "context" "significance" "visual" "design" high horse.
19:58:25 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:59:22 × trcc quits (~trcc@2-104-60-169-cable.dk.customer.tdc.net) (Client Quit)
20:01:08 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:02:53 econo joins (uid147250@user/econo)
20:03:52 <zero> ah
20:04:22 <int-e> boxscape: that's okay if your model of programming is to write something and run it so that *something* happens.
20:04:31 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
20:04:46 <int-e> personally I want to have more control than that
20:05:05 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 252 seconds)
20:05:11 <geekosaur> shades of watfiv
20:07:02 juhp joins (~juhp@128.106.188.82)
20:07:15 <zero> monochrom: tldr having the level of indentation signify context (having similar contexts vertically align) is a powerful psychvisual tool. misalignment (as layout not only permits but incentivies) difficults interpretation
20:07:27 <zero> (sorry if my english is too broken)
20:08:28 <zero> *pychovisual *incentivizes
20:08:42 <monochrom> But the Haskell layout rules does not encourage misalignment.
20:09:04 <zero> i disagree
20:09:08 <monochrom> It just doesn't accept certain alignments you think are "intuitive".
20:10:03 <geekosaur> personally I think the alignment you wanted to use makes little sense
20:10:12 <yushyin> layout enforces this even more, imo. if something is not further indented than the previous lexeme, why should it be part of it?
20:10:18 <monochrom> And it has to reject them because the layout decoding algorithm is working under restrictions. It cannot afford to be smarter.
20:10:27 <geekosaur> try adding a second binding after the first and see how much sense your indentation makes
20:10:33 <yushyin> ^ this
20:12:00 <zero> i'm not focused on my earlier example. i agree with you there
20:12:21 <zero> again, i'm not defending my mistake
20:12:48 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
20:13:25 × kuribas quits (~user@ptr-25vy0i8s19mxk1vvjxp.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
20:14:22 <boxscape> zero do you have an example in mind of something that you are criticizing?
20:15:09 lavaman joins (~lavaman@98.38.249.169)
20:15:56 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
20:16:03 pfurla joins (~pfurla@2804:14d:5c81:4104:f9a9:132:7129:df1c)
20:16:10 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
20:16:45 lavaman joins (~lavaman@98.38.249.169)
20:19:45 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:20:04 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
20:21:02 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
20:23:43 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:24:02 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
20:25:05 <Franciman> can I use cachegrind on an haskell executable?
20:27:41 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:28:00 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
20:29:40 <Hecate> Franciman: I think you should be able to do so
20:30:02 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
20:30:33 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
20:31:34 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
20:31:38 <geekosaur> you may find that +RTS -V0 makes the output more sane
20:32:21 <sm> there was a blog post on it recently, perhaps from tweag
20:32:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f) (Remote host closed the connection)
20:32:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
20:34:10 Erutuon joins (~Erutuon@user/erutuon)
20:35:53 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
20:37:11 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:38:52 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:39:10 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
20:40:24 × curiousgay quits (~curiousga@77-120-141-90.kha.volia.net) (Remote host closed the connection)
20:40:51 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
20:41:11 kmein joins (~weechat@user/kmein)
20:42:40 <Franciman> thanks y'all
20:43:29 <Franciman> now what's left is making sense of the output
20:43:31 <Franciman> AHAH
20:49:05 × zincy_ quits (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186) (Remote host closed the connection)
20:49:21 zincy_ joins (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186)
20:49:28 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Read error: Connection reset by peer)
20:50:13 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
20:51:17 × MoC quits (~moc@user/moc) (Quit: Konversation terminated!)
20:56:35 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:56:40 × _bo quits (~bo@217.18.216.247) (Ping timeout: 256 seconds)
20:56:54 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
20:58:34 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
20:58:53 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
21:02:07 LukeHoersten joins (~LukeHoers@user/lukehoersten)
21:03:41 curiousgay joins (~curiousga@77-120-141-90.kha.volia.net)
21:03:56 × zincy_ quits (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186) (Remote host closed the connection)
21:05:10 zincy_ joins (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186)
21:05:54 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:06:48 maroloccio joins (~marolocci@151.53.155.184)
21:07:24 × zincy_ quits (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186) (Remote host closed the connection)
21:08:15 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
21:10:32 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 252 seconds)
21:12:12 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
21:12:16 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
21:12:29 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
21:13:37 × deadmarshal quits (~deadmarsh@95.38.229.118) (Ping timeout: 256 seconds)
21:13:37 × alx741 quits (~alx741@181.196.69.176) (Ping timeout: 256 seconds)
21:14:16 acidjnk_new joins (~acidjnk@p200300d0c7271e72351a12a888efd4cb.dip0.t-ipconnect.de)
21:14:18 geekosaur joins (~geekosaur@xmonad/geekosaur)
21:16:02 zincy_ joins (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186)
21:17:24 lavaman joins (~lavaman@98.38.249.169)
21:20:26 <dsal> My new MacBook arrived. Has twice as much ram as my Thinkpad. In an hour, I might be able to start setting up nix...
21:20:45 × zincy_ quits (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186) (Remote host closed the connection)
21:21:05 <dsal> Lots of memory means I don't have to learn to write good code.
21:21:15 Guest17 joins (~Guest17@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
21:21:33 <geekosaur> there's something about the nature of programmers in there somewhere
21:21:33 <dolio> You should program in Agda, then.
21:22:49 <sm> congrats!
21:23:47 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
21:24:22 sshine_ is now known as sshine
21:24:30 × MaybeJustJames quits (~jacol@2001:981:4ea3:1:a8b4:6ac6:c93b:9bcf) (Remote host closed the connection)
21:26:25 × michalz quits (~michalz@185.246.204.62) (Remote host closed the connection)
21:26:30 alx741 joins (~alx741@186.178.109.129)
21:28:07 pavonia joins (~user@user/siracusa)
21:29:26 <ephemient> is https://stackage.org down for everybody or just me?
21:29:53 <janus> ephemient: down for me too
21:30:02 <sm> responding slowly at least
21:30:12 <geekosaur> down/very slow here too
21:30:19 <maerwald> dsal: and lots of storage means you can use resource hogs like nix
21:30:29 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Quit: Textual IRC Client: www.textualapp.com)
21:31:21 <geekosaur> just loaded
21:31:26 × reumeth quits (~reumeth@user/reumeth) (Ping timeout: 252 seconds)
21:32:44 <sm> I feel a disturbance in the Force.. like a sudden influx of new haskell users
21:33:01 zincy_ joins (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186)
21:33:06 jgeerds joins (~jgeerds@55d45b75.access.ecotel.net)
21:33:06 <Rembane> New semester perhaps?
21:33:13 <sm> it's dsal.
21:33:26 <EvanR> Like a billion python users suddenly just... gone
21:33:27 <sm> unleashing the new macbook
21:33:45 <EvanR> (to haskell)
21:34:06 × jeetelongname quits (~jeet@eduroam-public-46.nat.port.ac.uk) (Ping timeout: 245 seconds)
21:35:13 <Rembane> 's gonna be legendary
21:35:34 <Franciman> is there any known trick to force things to go in the cache?
21:35:43 <dsal> maerwald: I do use resource hogs like nix. :)
21:35:49 <Rembane> Franciman: What cache? What things?
21:36:07 <ephemient> ok hmm it *is* responding, but taking like a minute per request. I wonder what's going on with it.
21:36:11 <dsal> I didn't go crazy on storage, though. 1TB goes pretty far.
21:36:56 × alx741 quits (~alx741@186.178.109.129) (Ping timeout: 252 seconds)
21:37:11 <EvanR> heh, cache wisperer
21:37:16 <Franciman> Rembane: L1 cache
21:37:24 <Franciman> of the CPU
21:38:07 <sm> I think reading and optimising the generated core would be one important step
21:39:12 <maerwald> dsal: that's quickly full with nix and docker
21:40:07 <dsal> I gc'd 100GB of nix last week.
21:40:25 <dsal> I don't do much docking
21:40:57 <maerwald> oh, gc actually worked for you?
21:40:58 <dsal> Docker seems so much worse than nix where they overlap.
21:41:10 <dsal> gc always works for me, but it overshot
21:41:19 × Guest17 quits (~Guest17@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
21:41:20 <maerwald> I think last time I tried it just busted everything
21:41:44 <dsal> There were two requirements of ghc that apparently weren't declared
21:41:51 <dsal> Oh, maybe that's what you meant. :)
21:42:13 <maerwald> ah well... my expectations when using nix are very low
21:45:22 <maerwald> GCing docker is less dangerous
21:45:39 <maerwald> but I usually just delete the entire store
21:45:59 <maerwald> because GC takes half an hour, doing who knows what
21:46:17 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Ping timeout: 252 seconds)
21:48:04 × pfurla quits (~pfurla@2804:14d:5c81:4104:f9a9:132:7129:df1c) (Quit: Textual IRC Client: www.textualapp.com)
21:49:29 pfurla joins (~pfurla@2804:14d:5c81:4104:b590:8966:cd38:8f41)
21:50:11 alx741 joins (~alx741@181.196.69.153)
21:51:59 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
21:53:51 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
21:55:08 <monochrom> dsal: Congrats! Lots of RAM means you can run JHC in its default mode which doesn't do GC at all bwahahaha
21:55:47 <monochrom> Enjoy GCless hard real-time Haskell!
21:56:14 <energizer> i want to find a correct implementation of complex duration comparisons like "years 1 + days 1 < years 1 + days 2". does haskell have something like that?
21:56:32 <dsal> Which year?
21:57:05 a6a45081-2b83 joins (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507)
21:57:08 vysn joins (~vysn@user/vysn)
21:57:17 <energizer> *i want to find a correct implementation of complex duration comparisons like "years 1 + days 1 < years 1 + days 99". does haskell have something like that?
21:57:21 <janus> even without a GC, is it possible to do constant-time memory allocation? only with no heap usage, right?
21:57:50 <geekosaur> you can do it the way the nursery does it
21:57:51 <monochrom> Allocation has always been constant-time IIUC.
21:58:27 <monochrom> including heap allocation. (What else is there in the context of Haskell?)
21:58:34 <geekosaur> it's only gc of and into generations > 0 that are slower
21:58:56 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
21:59:26 <geekosaur> energizer, how much do you care about things like leap years?
21:59:34 <dsal> energizer: you'd have to define "year" more rigidly than generally useful. Even "day" isn't necessarily the same duration all the time
21:59:41 <geekosaur> time is *hard* to do right
21:59:55 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
21:59:58 <energizer> i dont think any answer to those questions will result in "years 1 + days 1 < years 1 + days 99" being false
22:00:02 <dsal> Nobody understands time
22:00:02 × chomwitt quits (~chomwitt@2a02:587:dc16:f200:12c3:7bff:fe6d:d374) (Ping timeout: 252 seconds)
22:00:26 <geekosaur> https://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time
22:00:40 <monochrom> OK, I can see that a malloc-free pair of C, if it uses a free-list implementation, could be non-constant because the 1st node of the free list is too small and you have to walk through the whole list looking for a big one.
22:00:43 <energizer> i dont think this is a falsehood
22:01:38 <monochrom> But without any notion of free or GC, you can have a much dumber allocator. It can be just "heap_pointer += n".
22:01:51 sprout joins (~quassel@2a02:a467:ccd6:1:14f6:792c:9624:6b14)
22:02:09 <monochrom> (which GHC does, too, at the price of needing a much smarter GCer)
22:03:16 × a6a45081-2b83 quits (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507) (Remote host closed the connection)
22:03:43 deadmarshal joins (~deadmarsh@95.38.115.243)
22:03:49 <monochrom> energizer: I think I will just refer you to the "time" library package, which comes with GHC, and look into all those Data.Time.* modules and find what you need.
22:04:37 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
22:04:47 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:05:15 × sprout_ quits (~quassel@2a02:a467:ccd6:1:4de4:2055:b8c4:f1e) (Ping timeout: 264 seconds)
22:06:18 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f) (Remote host closed the connection)
22:06:35 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
22:08:07 × ub quits (~Thunderbi@p200300ecdf0ba2aaa54fdd1e9768c0b5.dip0.t-ipconnect.de) (Quit: ub)
22:08:10 <energizer> looks like a nice time library. how correct is it, on a scale from normal to formally verified?
22:08:14 <monochrom> And in case you feel information overload, the two most important types are UTCTime (for an absolute point in time) and NominalDiffTime (for a duration).
22:08:30 <monochrom> Normal.
22:08:47 <energizer> thanks
22:08:49 AlexNoo joins (~AlexNoo@178.34.160.14)
22:09:10 <EvanR> time is relative
22:09:23 <EvanR> not everything needs to care about leap seconds, or even time zones
22:09:51 <energizer> relative?
22:10:03 <EvanR> times not only a construct but there are many to choose from xD
22:10:27 <energizer> sure, like anything
22:10:27 <sm> energizer: the time library is very good and probably more correct than most things out there
22:10:35 <EvanR> https://i.imgur.com/g6rTcZK.png
22:10:45 <janus> i guess the my question is confusing because of the haskell heap not being equal to the c heap
22:11:13 <monochrom> Yeah :)
22:11:32 <janus> the runtime may not even start if it requests too much stack space. and if overcommitting is off, there would be some limit at which it can't malloc
22:11:43 <monochrom> Heap implementation is very different between a malloc-free language and a GCed language.
22:12:20 <energizer> nice diagram EvanR
22:13:37 <monochrom> Or rather, a language with transparent pointers and a language with opague pointers.
22:14:15 <monochrom> Transparent pointers forbidding compaction, while opague pointers allowing compaction, for example.
22:15:33 <janus> but haskell has both, no?
22:15:48 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
22:16:10 <janus> the ffi suggests that it has, i think?
22:16:10 <monochrom> Haskell 2010 doesn't. GHC does, in terms of primitive pinned byte arrays.
22:16:26 <monochrom> Yeah, it has C malloc.
22:16:42 slack1256 joins (~slack1256@191.126.99.71)
22:18:11 <monochrom> FFI's C malloc really uses your libc. So it is a different heap space from the GC'ed heap for normal Haskell code.
22:18:52 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
22:19:24 × deadmarshal quits (~deadmarsh@95.38.115.243) (Ping timeout: 256 seconds)
22:20:22 <hpc> what i read from that diagram is in practice, always use UTC and ZonedTime
22:20:26 <janus> if i give something a Storable instance, is it copied to the C heap when needed? and then copied back?
22:20:32 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
22:20:59 <monochrom> Orthogonal.
22:21:16 <monochrom> If the space was obtained from malloc then it's already in the C heap.
22:21:38 mestre joins (~mestre@191.177.175.57)
22:21:52 <monochrom> Storable does not specify how to allocate, at all. It only specifies size, peek, poke.
22:21:55 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
22:22:23 <monochrom> But OK, peeking and poking do not cause copying.
22:24:25 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
22:24:43 <monochrom> err, do not cause copying between two heaps.
22:24:44 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
22:24:57 <monochrom> (Clearly, copying between memory and registers, yes.)
22:25:29 <monochrom> You do not even know that the address is in the heap space, and it should not matter.
22:26:19 lavaman joins (~lavaman@98.38.249.169)
22:26:40 <monochrom> Suppose the C side has "int xxx;" at the top level. A certain piece of C code decides to call a certain piece of Haskell code with &xxx. The Haskell side should still be able to peek and poke it. Totally not heap.
22:26:41 <janus> hmm yeah i guess i imagined it the wrong way around. the usual style is to write a haskell wrapper for a c struct, which can then be filled from haskell. then i can pick any allocation strategy and pass that pointer into C, and C won't care where it is
22:26:50 <boxscape> are there any reasons to believe that this shouldn't work? https://github.com/ghc-proposals/ghc-proposals/discussions/463
22:26:51 <boxscape> (Allowing type family applications in instances if they can be fully evaluated)
22:26:58 × slack1256 quits (~slack1256@191.126.99.71) (Remote host closed the connection)
22:27:44 <janus> i don't even need to know about the haskell heaps to do that, i just need to know the pointer is stable as long as i am inside my withForeignPtr block
22:28:29 <hpc> boxscape: type families always felt like a logical extension of type aliases to me
22:28:37 <hpc> and you can write instance Num String just fine
22:28:39 <hpc> +1 from me
22:28:44 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:28:54 <boxscape> yeah, that's true
22:29:10 <awpr> aren't they often referred to as "type synonym families", too?
22:29:21 <hpc> a partially applied type family is like a partially applied type alias, it just doesn't work
22:29:38 <boxscape> awpr yep, in fact the error message mentioned in the discussion does
22:29:43 <hpc> type X a b = Y a b is very different from type X a = Y a
22:32:55 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
22:33:07 yauhsien joins (~yauhsien@61-231-58-114.dynamic-ip.hinet.net)
22:33:12 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
22:33:28 <janus> it just seems intuitively to me like, if i have that previous model with a C struct with hsc2hs or something, and I have a matching haskell record that i use to fill that struct, copying will be needed, these are two separate data structures
22:34:14 <monochrom> Yeah that kind of copying has to happen.
22:34:46 <monochrom> I worded "peeking and poking does not cause copying" wrong. Oops. I meant something else.
22:35:56 <janus> i thought Daan Leijnen's new "functional but in-place" paradigm is meant to prevent copying
22:36:07 <janus> maybe it also makes it easier to treat records like C structs
22:36:28 <janus> *Leijen
22:37:16 <geekosaur> you still have the problem of data representation
22:37:32 × yauhsien quits (~yauhsien@61-231-58-114.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
22:37:50 <geekosaur> linked lists just aren't going to match up with anything useful C-side
22:38:34 <monochrom> In the case of Haskell, laziness causes a necessary difference between Haskell types and C types.
22:40:46 <janus> why can't linked list match up with anything useful on the C side? if the linked list is instantiated with a particular type that maps to a struct, the linked list can be compiled to a tag and an optional pointer to the next element.
22:41:46 <monochrom> Hrm I forgot polymorphism too. Parametric polymorphic also gets in the way.
22:42:16 <hpc> janus: laziness
22:42:32 <janus> ah ok, i thought monochrom and geekosaur were making different points
22:43:13 <monochrom> Actually I don't know geekosaur's point :)
22:43:27 <monochrom> But your "instantiated" reminds me.
22:43:36 <geekosaur> no, they're different aspects of the same point. (and "anything useful" here means in part that there is no *standard* linked list representation in C)
22:46:27 <janus> that just means a standard needs to be written ;)
22:46:53 <janus> we could argue that C is impossible to link because there is no universal ABI. but no, we just have decide on an ABI and be consistent, then it can work
22:48:41 <janus> i suspect that doesn't address the laziness point. as far as i understood, it is related to how C doesn't have sum types? so different constructors need to reuse the same space and C doesn't provide an elegant way to do that
22:49:25 <janus> hence the 'tag' which is not a language level construct, but just some ad-hoc way
22:50:04 <monochrom> So, what you said works for C++, which takes the stance of "you don't have a parametric polymorphic function, you have a template, compiler does code duplication (even at the source level) at monomorphic use sites".
22:50:23 <monochrom> But FPers tend not to do that.
22:50:31 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
22:50:38 sproso joins (~sproso@d137-186-73-215.abhsia.telus.net)
22:50:47 <monochrom> FPers do this: If you have "f :: a -> a", it's compiled to "void *f(void *)"
22:50:52 <geekosaur> janus, laziness requires that a value be represented as a pointer
22:51:23 <geekosaur> we have a strict (or C/machine style if you prefer) Int# (or Int64# as of 9.2.1), and a lazy Int
22:51:35 <geekosaur> which is an I# Int64# under the hood
22:52:03 <monochrom> So even if you call it as "f (4 :: Int)" it goes as "allocate heap object to store 4, pass address to f".
22:52:29 <monochrom> And then laziness doubles down on that because the void* can point to either thunk or value.
22:52:32 <geekosaur> and laziness comes in because we always work with a pointer to that, so that pointer could be undefined
22:52:37 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:41f2:b4d5:142e:946f)
22:52:41 <geekosaur> or a pointer to an unrealized computation
22:52:50 <janus> right, i don't know how to address laziness . Leijen probably punted on that :P
22:53:17 <monochrom> I don't think FBIP does laziness at all. Does Koka do laziness?
22:54:18 <janus> i don't know, maybe it could have something like idris where you can opt-in to laziness.
22:55:23 <monochrom> I'm dumb, it's very easy to see. Just look at the APP rule :)
22:56:35 <monochrom> Hrm, maybe not this one. "expression e1 is translated to ref-counted expression e2". Now I know nothing haha.
22:57:18 × zincy_ quits (~zincy@2a00:23c8:970c:4801:4cc1:c671:40b5:6186) (Remote host closed the connection)
22:58:15 <maerwald> let's get rid of laziness
22:59:55 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
23:00:02 <monochrom> It looks like eager.
23:00:12 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
23:01:28 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 264 seconds)
23:01:51 × jstolarek quits (~jstolarek@137.220.120.162) (Ping timeout: 256 seconds)
23:02:57 __monty__ joins (~toonn@user/toonn)
23:03:16 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
23:03:23 <Axman6> maerwald: we'll get around to it one day, I'm sure
23:03:48 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
23:04:05 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
23:04:59 <monochrom> When it is really demanded, yes. >:)
23:06:00 <geekosaur> that will be a sad day
23:06:19 <geekosaur> when haskell abandons its core principle
23:06:34 <maerwald> SPJ said the next Haskell might be strict
23:06:58 <monochrom> No worries geekosaur, I (and I think Axman6) were doing meta-punning on laziness! Can't you see? >:)
23:08:25 <maerwald> I think laziness is a failed experiment. It only really serves compiler optimizations, but creates more headache for the users and is a poor streaming hack
23:09:47 <monochrom> No, I think it's successful. "f bottom = bottom" sucks.
23:10:17 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
23:10:56 <monochrom> if-then-else not being a function sucks.
23:11:35 <monochrom> I do not think of laziness as the only solution to streaming. I only admit that I do benefit from it, but only when it's appropriate.
23:11:51 <dibblego> can't write map in terms of foldr with scala, that sucks
23:11:52 <jackdk> At least we have Data.Bool.bool
23:12:10 <jackdk> and take n . sort
23:12:29 ChanServ sets mode -o dibblego
23:12:46 <monochrom> But as said, my reason for preferring laziness is because it enables "f True x y = x; f False x y = y".
23:13:14 <monochrom> I tried to do that in Python. It was disappointing.
23:13:20 <dibblego> map f = foldr ((:) . f) [] -- I like laziness because it enables this
23:13:29 <monochrom> I then tried to do that in Scheme. It was also disappointing.
23:13:32 <maerwald> you can have laziness in strict languages
23:13:39 <maerwald> but the language is strict
23:13:50 <dibblego> with so much effort that it is not worth it, yes
23:13:53 <janus> monochrom: you tried refactoring through a if-then-else? or you tried writing lazy python by putting everything in lambdas?
23:14:19 <dibblego> I have also tried this with python, but the failure was obviously imminent
23:14:36 <monochrom> I tried the simple-minded "def f(b, x, y): if b return x else return y"
23:14:44 <dibblego> dead
23:15:14 <monochrom> Well, that reminded me that I needed to do "def f(b, x, y): if b return x() else return y()". Well, that sucks.
23:15:18 <dibblego> def f(b, x, y): if b return x() else return y() # but ya can do laziness in a strict language!
23:15:32 <hpc> yeah, and then you have to be able to say "function of zero arguments" with a straight face
23:15:37 <monochrom> Also, it's not the same. You lose memoization.
23:15:42 <janus> i wonder with this question how people can have such different perspectives... is it because monochrom encounters a lot more infinite loops than maerwald? surely the problem domain must have something to do with it
23:16:00 <monochrom> Or put it theoretically, call-by-name is not call-by-need.
23:16:23 × pfurla quits (~pfurla@2804:14d:5c81:4104:b590:8966:cd38:8f41) (Quit: gone to sleep. ZZZzzz…)
23:16:23 <hpc> i think it comes from just how you think about the definitions of things
23:16:35 <hpc> that definition of f leans heavily on equational reasoning
23:16:44 <janus> i mean, why does it matter how to reason about bottom if bottom never occurs? it could tip the scale if you have more bottoms than the next person
23:17:03 <kennyd> @src and
23:17:03 <lambdabot> and = foldr (&&) True
23:17:04 <geekosaur> but bottom does occur in strict languages
23:17:06 <maerwald> janus: when you've experienced complicated laziness issues in production that cost the business a lot of money and engineering time, you realize that for many thing, you don't actually want it. High-performance libraries already depend on hacks and whatnot, not on naive laziness
23:17:23 <geekosaur> it just means hangs or crashes
23:17:28 <kennyd> @src any
23:17:28 <lambdabot> any p = or . map p
23:17:32 <maerwald> every library I looked at that uses laziness to implement streaming sucks
23:17:36 <maerwald> (e.g. tar)
23:17:51 <maerwald> so you don't even want it for that
23:17:59 <monochrom> Only with a total language are you really free of bottom.
23:18:07 <maerwald> for networking, even the maintainers of said packages say they don't want laziness in their code
23:18:40 <monochrom> The rest, it depends on whether you focus on operational or denotational semantics.
23:18:51 <maerwald> the only pro argument I constantly hear is that you get neat optimizations tricks
23:18:52 <kennyd> for `any p = or . map p', all functions involved need to be lazy
23:18:57 <kennyd> +to work
23:19:05 <dibblego> you saw compositional arguments earlier
23:19:05 <janus> geekosaur: hangs or crashes are the worst though ;) i think request timeout is tested less than just normal failures like permission denied
23:19:09 <maerwald> but if you implement a high performance library you may do these tricks yourself anyway
23:19:21 <monochrom> If you focus on operational semantics, then, by the time your control flow is inside your function, you are assured that all parameters are non-bottoms, yes.
23:19:51 <monochrom> But if you focuse on denotational semantics, then "f bottom = bottom" is still there, it's a true statement.
23:21:52 × vysn quits (~vysn@user/vysn) (Ping timeout: 264 seconds)
23:21:52 <maerwald> and... have you ever used a library where the performance characteristics depends heavily on laziness or inlining? Those properties constantly break
23:22:40 <dibblego> yes, no they don't
23:23:01 <dibblego> > take 2 (map (+1) [1..])
23:23:02 <lambdabot> [2,3]
23:23:06 <dibblego> still works, phew
23:23:18 × gawen quits (~gawen@user/gawen) (Quit: cya)
23:23:24 <maerwald> erm
23:23:30 <maerwald> I'm not talking about silly repl examples :p
23:23:39 <int-e> inlining and rewrite rules are everywhere
23:23:50 <maerwald> yep and they constantly break
23:23:56 <maerwald> see streamly
23:24:01 <dibblego> oh, you mean poorly designed libraries that focus on operational semantics while trying to exploit laziness? No, I haven't used those libraries, since I don't bother picking them up to begin with.
23:24:17 <maerwald> aha
23:24:39 <maerwald> well, lens/optics also play that game
23:24:44 <maerwald> you don't use those?
23:24:50 <dibblego> of course I do, and no they don't
23:25:10 <maerwald> absolutely... they're affected by small GHC changes
23:25:37 <maerwald> or a PR unknowingly breaking laziness
23:25:38 <monochrom> Food for thought: tibbe is a battle-tested Haskeller, and his style guide recommends: lazy functions, eager data.
23:25:40 <int-e> lists, bytestring, vector ... everything with fusion. it's just constant factors but those matter
23:25:47 <dibblego> I worked on data-lens before lens existed, and now I use mostly lens — please show me where it broke in all those years
23:25:48 <maerwald> except those are smart guys understanding GHC
23:25:57 <maerwald> but don't tell me that's easy or common
23:26:28 <int-e> these things are battle-tested and relatively robust but it does hurt when they fail
23:26:41 <maerwald> dibblego: it's constantly fixed up, that's what I said
23:26:55 <monochrom> It would have said "turn on StrictData, but don't turn on Strict" if it were written after those extensions were introduced.
23:27:04 <dibblego> perhaps I don't know what this means, "those properties constantly break"
23:27:21 <maerwald> I'm not going to pull out all the issues now :)
23:27:32 <dibblego> then I won't know what "properties"
23:27:35 <monochrom> And indeed that's also the advice from other front-line Haskellers.
23:27:53 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
23:28:26 geekosaur does not see the page-long list of updates that would corroborate
23:28:33 <maerwald> Haskell is a performance debugging nightmare
23:28:39 gawen joins (~gawen@user/gawen)
23:28:50 <jackdk> there's a warning in the haddocks for either (^?) or preview that says if you see space leaks, try `firstOf` instead because the First monoid is lazy
23:28:52 <maerwald> and laziness is one of the reasons
23:29:14 <dibblego> when I think of properties breaking, I think of e.g. this:
23:29:20 <dibblego> scala> def map[A, B](f: A => B, x: Stream[A]): Stream[B] = x.foldRight(Stream.empty[B])((a, b) => Stream.cons(f(a), b))
23:29:26 <dibblego> scala> streamMap((_: Int) + 1, Stream.continually(1)).take(5)
23:29:26 <dibblego> java.lang.StackOverflowError
23:29:28 <maerwald> the last memory leak I found in cardano a week ago
23:29:54 <maerwald> after 2hours I stopped searching and just filed a bug
23:29:57 <dibblego> s/map/streamMap
23:30:23 <monochrom> OK I'm going to be elitist. I'm going to agree up to this much: Eagerness is a better idea, for programmers below let's say the 50th percentile.
23:30:33 <dibblego> I will support this notion.
23:31:07 <kennyd> <maerwald> Haskell is a performance debugging nightmare <- why do trollish statements like this get tolerate? it is not the first time I've heard something similar from the same person either
23:31:09 <hpc> banning recursion is also a better idea for that same group
23:31:25 <dsal> Only allow them to use fix
23:31:26 <monochrom> :)
23:32:01 <maerwald> kennyd: that's my production experience
23:32:04 <monochrom> Laziness is a power tool and is also harder to use. I am aware of the cost and benefit, and I chose it.
23:32:09 <yushyin> kennyd: it is always the same discussions with always the same participants in here
23:32:24 <kennyd> maerwal, I don't care, you are using loaded language for trolling and attention
23:32:28 <maerwald> monochrom: have you worked on a large scale Haskell codebase that needs to meet certain performance criteria?
23:32:36 <monochrom> No.
23:32:50 <maerwald> kennyd: loaded language? :D
23:32:50 <monochrom> But tibbe has.
23:32:56 <maerwald> monochrom: yeah, me too
23:33:13 <maerwald> and even after hiring expensive Haskell consultants they couldn't figure it out :D
23:33:43 <monochrom> What I have experience is in observing students in the lower 50th percentile vs students in the upper 50th percentile.
23:33:45 <dibblego> I have done this. Yes, figuring it out after the code is written (poorly) is one of the most difficult situations. It can be done though.
23:33:46 <maerwald> so I don't think this has much to do with elitism
23:33:55 <maerwald> GHC is a moving target
23:33:59 <maerwald> laziness is a moving target
23:34:13 <maerwald> you need to invest a lot of manpower in it
23:34:25 <maerwald> facebook does, cardano does (but they struggle too)
23:34:28 × cosimone quits (~user@93-47-231-3.ip115.fastwebnet.it) (Ping timeout: 264 seconds)
23:34:34 <dibblego> I would like to see all the manpower in my code because of laziness
23:34:44 <monochrom> Laziness, recursion, non-operational reasoning of code... a lot of nice things are out of reach for the lower ones, yes, can't be helped.
23:34:49 <dibblego> as the example above illustrates, quite the opposite is true
23:34:57 <hpc> facebook is a bad example, they've written their own php implementation from scratch multiple times
23:35:07 <hpc> if you want to argue "lots of manpower"
23:35:55 <janus> hpc: how does a php implementation disprove that they have a lot of manpower?
23:36:14 <maerwald> there's a reason standard chartered uses Mu, which is strict
23:36:26 <hpc> janus: if haskell requires such a wasteful amount of expert-written code, so does the most popular language in the world
23:36:43 <hpc> and somehow the web hasn't collapsed
23:36:49 <monochrom> I think hpc means: Having re-implemented PHP multiple times disproves that the immense manpower was spent majorly on fighting laziness.
23:37:30 <maerwald> monochrom: then you haven't read Simon Mars last post on the GHC/base breaking discussion, where he explained how new GHC versions break their performance characteristics
23:37:30 <monochrom> If anything, it was spent on fixing PHP, no? >:)
23:39:51 × sproso quits (~sproso@d137-186-73-215.abhsia.telus.net) (Quit: Client closed)
23:39:55 <janus> maerwald: where can i find that ? i tried googling for it, couldn't see it
23:40:53 <maerwald> https://github.com/haskell/core-libraries-committee/issues/12#issuecomment-971794515
23:41:23 × sus quits (zero@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
23:41:50 <janus> thanks
23:41:53 <maerwald> https://github.com/composewell/streamly/issues/1061 is also a good read
23:42:21 <maerwald> you can also search the cardano issue tracker for performance issues :p
23:42:46 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
23:42:51 <yushyin> :p:p
23:42:51 dagit joins (~dagit@2001:558:6025:38:6476:a063:d05a:44da)
23:42:55 × max22- quits (~maxime@2a01cb088335980070cf7b273a01dbc1.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
23:43:04 hskpractice joins (~hskpracti@94-255-217-215.cust.bredband2.com)
23:43:11 <hpc> one person-year on a typical software team is a month or two, and they forked the core tools
23:43:19 <hpc> from my experience that's not bad at all
23:43:20 <concrete-houses> postgresql is harder to program than I had thought
23:43:23 <concrete-houses> sql too
23:43:26 <concrete-houses> its hell
23:43:30 <maerwald> or https://github.com/yesodweb/wai/pull/752#issuecomment-501531386
23:43:43 <concrete-houses> but how do you save data in haskell?
23:44:13 <concrete-houses> maybe forth is the answer
23:44:38 <sm> a much higher proportion of haskell issues are performance issues. In part because there are fewer of the other kind
23:45:19 <dsal> concrete-houses: postgresql has been in development for decades. I'd expect if it were easy it would've been finished in the 90s. :)
23:45:34 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:46:02 jeetelongname joins (~jeet@eduroam-public-46.nat.port.ac.uk)
23:46:29 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
23:46:55 <maerwald> or in optics: https://github.com/well-typed/optics/pull/277
23:47:01 <maerwald> I can do this all day
23:47:07 <sm> positive view: you freed up a bunch of time by avoiding uncontrolled effects and unclear semantics, now you can afford to spend more time chasing performance
23:47:25 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
23:47:45 × hskpractice quits (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
23:47:57 <maerwald> so... if you really claim laziness doesn't affect your performance code... you have never written performant code. Yes, StrictData is neat (I enable it a lot), but not enough
23:48:36 <hpc> maerwald: now do python
23:48:42 <maerwald> I do
23:48:50 <hpc> find all the garbage collection and GIL bugs :P
23:49:11 <maerwald> I know a couple of folks who write high-performance python code... it's a dark art too
23:49:24 <hpc> or javascript, find all the useless roundtrips in popular frameworks
23:50:11 <janus> concrete-houses: using bitcoin you can store data with their forth-based scripting language ;) (joking!)
23:50:18 <hpc> and then find all the other stupid problems like having a hundred copies of the is-false package in node_modules
23:51:29 <maerwald> I found writing high performance code in Go much easier, because the language is so dumb
23:51:34 <maerwald> and that's a good thing for that goal
23:51:35 <janus> concrete-houses: i almost think you're joking but the debate is in a way also typical of #haskell i think, because it is about leaving the pure world and things get ugly. thinking of acid-state which burned some people in here. almost seems like your question could open that wound
23:52:27 <EvanR> what's wrong with acid-state
23:52:43 <hpc> EvanR: data in an acid-state database needs to fit entirely in memory
23:52:48 <EvanR> concrete-houses, I'm thinking of taking sqlite out for a spin
23:53:08 <maerwald> ixset-typed
23:53:19 <maerwald> btw... another performance nightmare ;p
23:53:22 <EvanR> hpc, ok that's understood. What's the problem? xD
23:53:30 <maerwald> but it's actually neat
23:53:37 <maerwald> @hackage ixset-typed
23:53:37 <lambdabot> https://hackage.haskell.org/package/ixset-typed
23:53:59 <janus> it's like that perfect moment where i can't decide whether a question is a troll or if i am just in #haskell :D
23:54:20 <hpc> how can haskell be real if our eyes aren't real
23:54:31 <EvanR> real eyes realize real lies
23:55:43 <EvanR> so is it that acid-state has no API for knowing if you're getting close to your limit or something
23:55:52 <EvanR> unlike e.g. the bounds on Int
23:56:20 × hiruji quits (~hiruji@user/hiruji) (Quit: ZNC 1.8.2 - https://znc.in)
23:56:34 <hpc> more that it doesn't really make that clear on its own
23:56:44 <hpc> and people writing about it made it sound like it could replace postgres
23:56:55 <hpc> it was an expectation thing
23:57:17 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:57:20 <EvanR> that's like the number zero thing I learned about acid-state
23:57:36 <hpc> ah
23:57:56 <EvanR> it seems like the defining characteristic, because I don't believe "acid" usually xD
23:59:15 <EvanR> when acid state was written I don't think people had like 16G of memory
23:59:47 <EvanR> oh yeah, and GHC uses like 3x your live data for gc maintenance
23:59:53 jinsun joins (~quassel@user/jinsun)

All times are in UTC on 2021-11-30.