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.