2021/08/18

2021-08-18 00:05:13 +0200fresheyeball(~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net)
2021-08-18 00:08:49 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-18 00:12:20 +0200cheater(~Username@user/cheater)
2021-08-18 00:13:25 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 268 seconds)
2021-08-18 00:14:10 +0200aarvar(~aaron@2601:602:a080:fa0:c9d0:9f94:946c:b2f0) (Ping timeout: 240 seconds)
2021-08-18 00:17:36 +0200 <lechner> Hi, in source files, are SQL queries best entered as mklti-line strings?
2021-08-18 00:17:45 +0200 <lechner> multi
2021-08-18 00:18:20 +0200 <monochrom> Depends on whether it looks nicer?
2021-08-18 00:18:41 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 248 seconds)
2021-08-18 00:19:29 +0200michalz(~michalz@185.246.204.62) (Remote host closed the connection)
2021-08-18 00:20:10 +0200benin036932(~benin@183.82.178.142)
2021-08-18 00:20:39 +0200dajoer(~david@user/gvx)
2021-08-18 00:20:47 +0200 <lechner> it's too long for a single line. is there an alternative?
2021-08-18 00:20:51 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-18 00:21:10 +0200 <monochrom> Then make it multi-line.
2021-08-18 00:21:34 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-08-18 00:22:13 +0200 <lechner> ouay, thanus!
2021-08-18 00:22:25 +0200 <lechner> okay thanks!
2021-08-18 00:22:41 +0200 <lechner> changed some keks
2021-08-18 00:22:41 +0200 <sm> I often do s = unlines [
2021-08-18 00:22:41 +0200 <sm> ...
2021-08-18 00:22:41 +0200 <sm> ]
2021-08-18 00:22:59 +0200 <lechner> sm: i liue that!
2021-08-18 00:23:04 +0200 <lechner> like
2021-08-18 00:23:06 +0200 <sm> there are nice libs like `here` but they bring complications
2021-08-18 00:23:51 +0200 <lechner> as a previous Perl addict, i'll explore
2021-08-18 00:24:19 +0200 <sm> quasiquoter, so maybe less well supported by some
2021-08-18 00:24:19 +0200 <sm> platforms/some tools, eg
2021-08-18 00:24:45 +0200 <monochrom> unlines inserts newlines. not sure you want newlines in the middle of a SQL query.
2021-08-18 00:24:59 +0200 <sm> and just another dependency, so another source of problems
2021-08-18 00:25:34 +0200 <lechner> hm
2021-08-18 00:25:49 +0200 <sm> oh I think those are fine for postgres at least ? if not then yes, unwords
2021-08-18 00:27:23 +0200 <monochrom> unwords is more intuitive, yeah, you do expect to insert a space into ["select", "foo", "where"], which even multi-line string doesn't do for you and you'll be puzzled.
2021-08-18 00:27:57 +0200acidjnk_new3(~acidjnk@p200300d0c72b955208843bbbc6b733a4.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-08-18 00:28:26 +0200notzmv(~zmv@user/notzmv)
2021-08-18 00:29:10 +0200 <monochrom> ah I guess SQL uses ; to mark the end, so it is happy with newlines left right and centre.
2021-08-18 00:29:27 +0200 <hpc> left right and inner
2021-08-18 00:30:22 +0200 <sm> it's nice to see a a big query nicely formatted on multiple lines in logs, when debugging etc
2021-08-18 00:30:26 +0200 <hpc> i vote multiline strings
2021-08-18 00:30:40 +0200 <hpc> it's a bit ugly, but having to faff about with list syntax is worse imo
2021-08-18 00:31:11 +0200 <sm> hpc: what kind are those again ? something with / line endings ?
2021-08-18 00:31:35 +0200 <monochrom> \
2021-08-18 00:31:48 +0200 <monochrom> "hello I am \
2021-08-18 00:31:53 +0200 <monochrom> \monochrom"
2021-08-18 00:32:58 +0200 <sm> yeah those seem really ugly and tool-unfriendly but I will give it another try
2021-08-18 00:33:20 +0200 <monochrom> In fact, it doesn't have to have a newline in the middle. It's generally \whitespaces\
2021-08-18 00:33:32 +0200 <monochrom> > "hello I am \ \monochrom"
2021-08-18 00:33:34 +0200 <lambdabot> "hello I am monochrom"
2021-08-18 00:34:36 +0200 <hpc> in my experience the only tool that matters is ghc :P
2021-08-18 00:35:00 +0200 <sm> hm, not for me
2021-08-18 00:35:09 +0200 <monochrom> I would blame it on the tools if they're unfriendly to a piece of very-standardized-for-over-20-years Haskell syntax that merely needs a simple regex to recognize.
2021-08-18 00:35:30 +0200hiruji`(~hiruji@2606:6080:1001:18:8d41:9604:d435:36b6) (Quit: ZNC 1.8.2 - https://znc.in)
2021-08-18 00:35:40 +0200fernand(~fernand@179.156.35.4) (Ping timeout: 240 seconds)
2021-08-18 00:35:42 +0200 <monochrom> We are not even talking about recognizing layouts.
2021-08-18 00:35:58 +0200 <sm> ha, surely a simple regex will solve everything
2021-08-18 00:36:25 +0200 <hpc> it'll certainly solve most regular problems :P
2021-08-18 00:36:28 +0200 <monochrom> But emacs haskell-mode works pretty much correctly with this one.
2021-08-18 00:37:10 +0200 <glguy> My vim recognizes haskell's multiline strings. I forget if that's default or not though
2021-08-18 00:37:12 +0200 <monochrom> It does still have a bug but it can be mitigated by deleting and re-inserting some double quotes.
2021-08-18 00:38:15 +0200 <sm> these paper cuts add up
2021-08-18 00:38:37 +0200 <hpc> my vim gets confused sometimes by multiline strings, but that's just syntax highlighting
2021-08-18 00:38:37 +0200 <sm> i'd be interested to know what percentage of haskell projects use that syntax
2021-08-18 00:38:46 +0200 <hpc> my ide is a vertical split terminal with ghci on one side
2021-08-18 00:38:52 +0200 <glguy> I redid the haskell.vim syntax highlighting locally
2021-08-18 00:39:22 +0200Atum_(~IRC@user/atum/x-2392232) (Quit: Atum_)
2021-08-18 00:41:01 +0200 <sm> hpc: not even ghcid ? brutal :)
2021-08-18 00:41:33 +0200 <monochrom> I haven't needed ghcid since -fdefer-type-errors was introduced.
2021-08-18 00:41:44 +0200vysn(~vysn@user/vysn) (Remote host closed the connection)
2021-08-18 00:42:22 +0200 <hpc> i like minimalism
2021-08-18 00:42:30 +0200 <glguy> Just having ghcid's reload-on-save behavior changes the way I write Haskell
2021-08-18 00:42:56 +0200 <hpc> (also i have learned minimalism over time - sometimes i use vi instead of vim because i don't know what's installed)
2021-08-18 00:43:20 +0200 <monochrom> I use vim.tiny. vi lacks cursor keys.
2021-08-18 00:43:54 +0200 <hpc> it's probably vim.tiny, just whatever the distro's /bin/vi is
2021-08-18 00:44:03 +0200fendor(~fendor@77.119.161.62.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-18 00:44:13 +0200 <monochrom> Either that, or it lacks supporting cursor keys when in insert mode.
2021-08-18 00:44:42 +0200 <hpc> it's both - i remember using real vi aaaaaages ago
2021-08-18 00:45:14 +0200 <sm> cursor keys are always broken one way or another
2021-08-18 00:45:25 +0200 <sm> it's a law
2021-08-18 00:45:53 +0200 <hpc> sometimes i enjoy when they don't work
2021-08-18 00:46:00 +0200 <hpc> once i put the konami code in my ssh password
2021-08-18 00:46:12 +0200 <sm> in terminals, at least
2021-08-18 00:46:28 +0200 <monochrom> hahaha
2021-08-18 00:52:40 +0200lavaman(~lavaman@98.38.249.169)
2021-08-18 00:52:42 +0200 <pompez> Hi, new and learning Haskell. I am wondering -- why does the this short snippet (https://paste.tomsmeding.com/6iIA5HM8) evaluate as I'd expect it to? I'd expect 2 input prompts and then evaluating as a 2 elements long IO [String]. But the program just doesn't stop with the prompts. Could it be something about IO that prevents it from being lazily evaluated?
2021-08-18 00:53:11 +0200 <pompez> *doesn't
2021-08-18 00:53:24 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 00:54:11 +0200 <hpc> you're mixing evaluation and execution
2021-08-18 00:54:39 +0200 <hpc> execution is strict (unless you use a few specific definitions that use lazy IO)
2021-08-18 00:55:10 +0200 <sclv> sequence just runs the io actions one after the other
2021-08-18 00:55:38 +0200 <hpc> and since you use repeat, it's going to keep asking forever
2021-08-18 00:56:04 +0200 <hpc> now what you can do is write something like do {lineActions <- repeat getLine; sequence (take 2 lineActions)}
2021-08-18 00:56:19 +0200 <hpc> er
2021-08-18 00:56:22 +0200 <pompez> I tried that and it worked as expected
2021-08-18 00:56:37 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 00:56:40 +0200 <hpc> that first line is let ...=... but you know what i mean
2021-08-18 00:56:54 +0200 <pompez> I do
2021-08-18 00:56:59 +0200 <monochrom> You're expecting the equivalent of: if you have "main = getLine >> getLine >> return ()", it will never need any input from you.
2021-08-18 00:57:01 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-08-18 00:57:07 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-08-18 00:57:07 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 00:57:39 +0200 <monochrom> I can respect that expectation if you don't know better a priori, but one single empirical test readily debunks that mental model.
2021-08-18 00:58:51 +0200 <monochrom> Let's get more whimsical and philosophical. If you have "main = putStrLn "hello"" and run it but you don't look, does the printing happen?
2021-08-18 00:59:17 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-18 00:59:23 +0200 <pompez> monochrom: That example (with a test) really helps
2021-08-18 00:59:25 +0200jay-invariant(~jay@c-24-4-6-169.hsd1.ca.comcast.net) (Quit: Leaving)
2021-08-18 00:59:26 +0200 <sclv> i'd need to look to find out :-)
2021-08-18 00:59:37 +0200 <sclv> like maybe the computer caught fire
2021-08-18 00:59:44 +0200 <pompez> Hah
2021-08-18 01:00:09 +0200 <hpc> @quote warm
2021-08-18 01:00:10 +0200 <lambdabot> edwardk says: i think the comonads are warm fuzzy, and the monads are warm sticky. its easy to get out of a comonad, its soft and you like wearing it. monads on the other hand stick to you and are
2021-08-18 01:00:10 +0200 <lambdabot> icky
2021-08-18 01:00:18 +0200 <pompez> Well, but would it be impossible to do inputs in a lazy manner?
2021-08-18 01:00:28 +0200sclvhas debugged far too many things to trust anything happens
2021-08-18 01:00:33 +0200 <monochrom> That's the realm of getContents.
2021-08-18 01:00:59 +0200 <hpc> @quote 286.ghc
2021-08-18 01:00:59 +0200 <lambdabot> cjeris says: vincenz: no, on a 286 GHC feels warm, like a little fire you can warm your hands at. wait, that smells funny. wait, that was my CPU.
2021-08-18 01:01:18 +0200 <monochrom> I generally discourage it unless you have proved that you can perfectly predict lazy evaluation.
2021-08-18 01:01:19 +0200 <sclv> you can look at the source of sequence, and write a similar version that calls `unsafePerformIO` every time it actually executes an IO action, and that would correspond to what you're looking for
2021-08-18 01:01:25 +0200 <sclv> but I do _not_ recommend this in practice :-)
2021-08-18 01:01:49 +0200 <hpc> more directly, there's unsafeInterleaveIO
2021-08-18 01:02:06 +0200 <sclv> oh right, i meant to say interleave rather than what i did
2021-08-18 01:02:41 +0200 <hpc> and just to emphasize, the word "unsafe" there is not just for fun
2021-08-18 01:02:51 +0200 <pompez> Well, I am not intending to do something just because. But why is it not used in practice?
2021-08-18 01:02:52 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-08-18 01:02:58 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-08-18 01:03:08 +0200 <sclv> unsafeInterleaveIO basically takes an `IO a` and "delays" it so that when you get the `a` out of it, it doesn't actually perform the IO action until the `a` is evaluated. So hrm... you could map unsafeInterleave over your list, then sequence it..?
2021-08-18 01:03:22 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 245 seconds)
2021-08-18 01:03:29 +0200 <hpc> pompez: evaluation order isn't guaranteed, so tying execution to evaluation makes execution order not guaranteed
2021-08-18 01:03:34 +0200 <sclv> its not used in practice because predicting evaluation order is tricky, and can lead to surprising effects, even for seasoned programmers
2021-08-18 01:04:01 +0200 <sclv> and at times things may be repeatedly executed you expected to only be executed once, or things you thought would be executed never are
2021-08-18 01:04:07 +0200 <monochrom> We want I/O to jump-start lazy evaluation (lest there is really nothing to evaluate). This is simplest if I/O is not lazy.
2021-08-18 01:04:31 +0200 <sclv> so the sequencing the IO monad provides gives nice guardrails that help reasoning
2021-08-18 01:04:34 +0200 <pompez> Makes sense
2021-08-18 01:04:35 +0200 <monochrom> Besides, we don't really want to answer the kind of whimsical philosophical question I posed.
2021-08-18 01:05:05 +0200 <monochrom> "if no one is looking, should getLine and putStrLn do anything?"
2021-08-18 01:05:24 +0200 <monochrom> You don't want to go down that rabbit hole. They do their jobs here and now. KISS.
2021-08-18 01:05:27 +0200 <sclv> (note: I have used and do use these primitives carefully, and in situations that warrant it, but only after thinking really hard, consulting, and deciding it actually makes sense. and even then i've made mistakes and been surprised)
2021-08-18 01:05:44 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-08-18 01:05:55 +0200Guest84(~Guest84@2406:3003:2006:447e:a859:4a56:2629:b84e)
2021-08-18 01:07:27 +0200 <pompez> Could you maybe recommend a good resource that talks about evaluationand execution as it pertains to Haskell?
2021-08-18 01:08:57 +0200 <sclv> https://www.seas.upenn.edu/~cis194/fall16/lectures/06-io-and-monads.html ?
2021-08-18 01:09:07 +0200 <sclv> I suggest playing around yourself just a little longer as you have been
2021-08-18 01:09:15 +0200 <sclv> and you'll probably get a good intuition fast
2021-08-18 01:10:53 +0200 <pompez> Will do
2021-08-18 01:10:57 +0200 <pompez> And thanks a lot
2021-08-18 01:13:55 +0200notzmv(~zmv@user/notzmv)
2021-08-18 01:20:17 +0200hiruji(~hiruji@user/hiruji)
2021-08-18 01:20:35 +0200 <Cale> pompez: Evaluation is the process of turning expressions into values, typically for the purposes of deciding which pattern matches, or occasionally in order to turn an expression of a function type into a lambda so that it can be applied.
2021-08-18 01:20:59 +0200 <Cale> pompez: In Haskell, that process doesn't cause anything user-visible to happen apart from memory being allocated and the CPU getting hot.
2021-08-18 01:22:15 +0200 <Cale> Instead, IO action values describe effects. Evaluating the expression for an IO action doesn't cause the effect to occur, it just possibly does some work to figure out which thing to do is being described.
2021-08-18 01:23:03 +0200 <Cale> Execution is the process of carrying out the effects described by IO action values. In a compiled program, the IO action called 'main' gets executed, and you can also execute IO actions by giving them to ghci.
2021-08-18 01:23:53 +0200aarvar(~aaron@2601:602:a080:fa0:2492:1e35:77f6:26e2)
2021-08-18 01:24:11 +0200 <Cale> (It will magically notice when an expression denotes an IO action and execute it for you as well as print the result of the execution. Otherwise, it just tries to use 'show' on things to turn them into a String to print.)
2021-08-18 01:25:15 +0200 <hpc> one useful thing to note here is that there's no in-language notion of "just execute this" - just sequencing which is "after this executes, execute this"
2021-08-18 01:25:22 +0200Matthia__(~Matthias1@2603-8001-b545-4900-55c2-9e3a-8dc6-4263.res6.spectrum.com) (Remote host closed the connection)
2021-08-18 01:25:47 +0200lbseale(~lbseale@user/ep1ctetus)
2021-08-18 01:25:48 +0200 <hpc> and no in-language notion of "just evaluate this" either - just "in order to evaluate this, you need to evaluate that"
2021-08-18 01:25:55 +0200 <Cale> Yeah, do-blocks let you combine a bunch of IO actions to produce another IO action, and those are syntax sugar for a chain of uses of (>>=) which basically does the same.
2021-08-18 01:26:01 +0200argento(~argent0@168-227-97-23.ptr.westnet.com.ar)
2021-08-18 01:26:02 +0200Matthias1(~Matthias1@2603-8001-b545-4900-55c2-9e3a-8dc6-4263.res6.spectrum.com)
2021-08-18 01:27:10 +0200 <hpc> and when you're figuring out how something gets evaluated, think in terms of chains of those if-thens
2021-08-18 01:27:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-18 01:28:52 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net) (Ping timeout: 245 seconds)
2021-08-18 01:29:03 +0200 <hpc> (also when someone says "expr is strict in x", they're saying "in order to evaluate expr, you need to evaluate x")
2021-08-18 01:29:50 +0200superbil(~superbil@1-34-176-171.HINET-IP.hinet.net) (Ping timeout: 252 seconds)
2021-08-18 01:30:52 +0200Matthias1(~Matthias1@2603-8001-b545-4900-55c2-9e3a-8dc6-4263.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-08-18 01:32:27 +0200 <lbseale> I am using haddock to generate some docs, and it's working, but it's ignoring my input for the title. Instead of the title it just says "ml" in the top-left. Anyone know what to do?
2021-08-18 01:32:33 +0200 <pompez> Cale: Are list comprehensions with <- also just synax sugar for the same thing?
2021-08-18 01:33:35 +0200 <Cale> pompez: Basically. You could also desugar them in terms of concatMap, but that is equivalent to the (>>=) for lists.
2021-08-18 01:33:59 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-08-18 01:34:19 +0200 <hpc> [f x | x <- something; boolean expression] translates to do {x <- something; guard (boolean expression); pure (f x)}
2021-08-18 01:34:26 +0200 <monochrom> Instead of answering that question, I would evade it and answer "the generated asm code is the same", and "does it really matter how to compiler gets there?"
2021-08-18 01:34:27 +0200 <lambdabot> Alternative f => Bool -> f ()
2021-08-18 01:35:00 +0200 <hpc> there's a language extension that makes list comprehensions work for more than just lists, but it's a bit of a gimmick
2021-08-18 01:35:06 +0200 <monochrom> or at least, s/the generated asm code/after optimizations, the generated asm code/
2021-08-18 01:35:17 +0200 <hpc> i like do notation better, personally
2021-08-18 01:35:58 +0200 <monochrom> s/how to compiler/how the compiler/
2021-08-18 01:35:58 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net)
2021-08-18 01:37:10 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2021-08-18 01:41:43 +0200polyphem(~polyphem@ip5f5ac3ae.dynamic.kabel-deutschland.de)
2021-08-18 01:45:55 +0200slack1256(~slack1256@181.203.101.233) (Ping timeout: 268 seconds)
2021-08-18 01:48:10 +0200pompez(~martin@user/pompez) (Ping timeout: 240 seconds)
2021-08-18 01:50:57 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net) (Ping timeout: 245 seconds)
2021-08-18 01:57:02 +0200superbil(~superbil@1-34-176-171.HINET-IP.hinet.net)
2021-08-18 01:57:25 +0200Matthias1(~Matthias1@2603-8001-b545-4900-0d81-0ba2-5923-c2fb.res6.spectrum.com)
2021-08-18 01:59:46 +0200fernand(~fernand@179.156.35.4)
2021-08-18 01:59:56 +0200thyriaen(~thyriaen@x4dbf521a.dyn.telefonica.de)
2021-08-18 02:00:24 +0200Matthias1(~Matthias1@2603-8001-b545-4900-0d81-0ba2-5923-c2fb.res6.spectrum.com) (Remote host closed the connection)
2021-08-18 02:00:27 +0200fabfianda(~fabfianda@mob-5-91-112-128.net.vodafone.it) (Remote host closed the connection)
2021-08-18 02:00:57 +0200polyphem(~polyphem@ip5f5ac3ae.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2021-08-18 02:01:47 +0200Matthias1(~Matthias1@2603-8001-b545-4900-0d81-0ba2-5923-c2fb.res6.spectrum.com)
2021-08-18 02:03:46 +0200polyphem(~polyphem@2a00:20:c044:9066:4432:d689:6451:b719)
2021-08-18 02:07:13 +0200fabfianda(~fabfianda@mob-5-91-112-128.net.vodafone.it)
2021-08-18 02:10:48 +0200Guest84(~Guest84@2406:3003:2006:447e:a859:4a56:2629:b84e) (Quit: Client closed)
2021-08-18 02:12:12 +0200polyphem(~polyphem@2a00:20:c044:9066:4432:d689:6451:b719) (Ping timeout: 245 seconds)
2021-08-18 02:13:02 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 02:16:40 +0200aarvar(~aaron@2601:602:a080:fa0:2492:1e35:77f6:26e2) (Ping timeout: 240 seconds)
2021-08-18 02:16:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 02:20:40 +0200fernand(~fernand@179.156.35.4) (Ping timeout: 240 seconds)
2021-08-18 02:20:56 +0200Xnuk(~xnuk@vultr.xnu.kr) (Quit: ZNC - https://znc.in)
2021-08-18 02:21:12 +0200Xnuk(~xnuk@vultr.xnu.kr)
2021-08-18 02:22:41 +0200 <lechner> Hi, i can't find much documentation or many examples for here/heredoc. Do any of them support the pipe-less syntax shown here? https://www.reddit.com/r/haskell/comments/8ereh/a_here_document_syntax/c091t96
2021-08-18 02:23:11 +0200chomwitt(~chomwitt@ppp-94-67-193-240.home.otenet.gr) (Remote host closed the connection)
2021-08-18 02:24:12 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 245 seconds)
2021-08-18 02:27:58 +0200lavaman(~lavaman@98.38.249.169)
2021-08-18 02:29:43 +0200 <lechner> never mind, i think Data.String.Here does!
2021-08-18 02:31:25 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 244 seconds)
2021-08-18 02:39:53 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2021-08-18 02:46:40 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
2021-08-18 02:47:57 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 245 seconds)
2021-08-18 03:04:19 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-18 03:09:12 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 245 seconds)
2021-08-18 03:15:36 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Quit: Leaving)
2021-08-18 03:16:57 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-18 03:18:46 +0200tabemann_tabemann
2021-08-18 03:20:30 +0200Cajun(~Cajun@user/cajun)
2021-08-18 03:24:02 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 03:26:32 +0200lbseale(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-08-18 03:36:53 +0200machinedgod(~machinedg@24.105.81.50)
2021-08-18 03:41:10 +0200pbrisbin(~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) (Ping timeout: 240 seconds)
2021-08-18 03:47:45 +0200keutoi(~keutoi@157.48.90.57)
2021-08-18 03:47:55 +0200xff0x(~xff0x@2001:1a81:535d:2700:6b08:445c:db9b:4d20) (Ping timeout: 258 seconds)
2021-08-18 03:48:00 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 268 seconds)
2021-08-18 03:49:38 +0200xff0x(~xff0x@2001:1a81:5394:ea00:e22:1073:dc28:9e41)
2021-08-18 03:50:50 +0200polyphem(~polyphem@2a02:810d:640:776c:f4c0:a27a:540e:c15e)
2021-08-18 03:58:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-18 03:59:40 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2021-08-18 04:00:53 +0200alx741(~alx741@181.196.68.125) (Quit: alx741)
2021-08-18 04:01:44 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-18 04:11:13 +0200td_(~td@muedsl-82-207-238-133.citykom.de) (Ping timeout: 248 seconds)
2021-08-18 04:12:16 +0200ahlk(~user@2600:1700:31c0:3a10::48)
2021-08-18 04:13:11 +0200td_(~td@94.134.91.158)
2021-08-18 04:15:38 +0200thyriaen_(~thyriaen@dynamic-077-013-081-232.77.13.pool.telefonica.de)
2021-08-18 04:16:48 +0200sleblanc(~sleblanc@user/sleblanc)
2021-08-18 04:17:18 +0200rubix(~user@2601:602:9502:c70:b7f7:ce5b:5e25:126d)
2021-08-18 04:19:10 +0200thyriaen(~thyriaen@x4dbf521a.dyn.telefonica.de) (Ping timeout: 240 seconds)
2021-08-18 04:22:05 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-08-18 04:22:05 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (zinc.libera.chat (Nickname regained by services)))
2021-08-18 04:22:05 +0200finn_elijaFinnElija
2021-08-18 04:23:05 +0200thyriaen_(~thyriaen@dynamic-077-013-081-232.77.13.pool.telefonica.de) (Remote host closed the connection)
2021-08-18 04:23:40 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 240 seconds)
2021-08-18 04:27:25 +0200Matthias1(~Matthias1@2603-8001-b545-4900-0d81-0ba2-5923-c2fb.res6.spectrum.com) (Read error: Connection reset by peer)
2021-08-18 04:28:03 +0200Matthias1(~Matthias1@cpe-76-170-236-166.socal.res.rr.com)
2021-08-18 04:30:24 +0200hiruji(~hiruji@user/hiruji) (Quit: ZNC 1.8.2 - https://znc.in)
2021-08-18 04:30:38 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-08-18 04:30:39 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-08-18 04:30:42 +0200allbery_bgeekosaur
2021-08-18 04:36:27 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-18 04:38:18 +0200hiruji(~hiruji@user/hiruji)
2021-08-18 04:41:33 +0200obs(~obscur1ty@user/obs/x-5924898) (Read error: Connection reset by peer)
2021-08-18 04:46:25 +0200 <lechner> Hi, could someone please explain this error with postgres-simple? https://paste.debian.net/1208064/
2021-08-18 04:48:20 +0200 <Axman6> you probably need to add a type annotation so the compiler knows what type you actually want
2021-08-18 04:48:38 +0200 <lechner> where, though?
2021-08-18 04:49:01 +0200 <c_wraith> anywhere that specifies it
2021-08-18 04:49:21 +0200 <lechner> output?
2021-08-18 04:49:29 +0200 <c_wraith> type inference means you can mention the type anywhere and it will be plumbed through appropriately
2021-08-18 04:49:33 +0200 <Axman6> (rows :: [Foo]) <- query... or something. that might need a language extension though
2021-08-18 04:50:09 +0200 <Axman6> if you use `rows` somewhere, you can also add it there by replacing `rows` with `(rows :: [Foo])`
2021-08-18 04:51:24 +0200Seby(~Seby@115.98.232.63)
2021-08-18 04:51:40 +0200 <lechner> what's the easiest way to print rows? i think it's a [String]
2021-08-18 04:52:06 +0200 <c_wraith> (mapM_ putStrLn) ?
2021-08-18 04:52:25 +0200 <c_wraith> and... it's probably not a [String]
2021-08-18 04:52:47 +0200 <c_wraith> I don't think that instance exists
2021-08-18 04:53:49 +0200 <c_wraith> lechner: it's polymorphic in the return type. it can be anything that has an appropriate instance
2021-08-18 04:54:08 +0200 <lechner> yeah, i get that
2021-08-18 04:54:16 +0200 <c_wraith> though it will have runtime errors if the instance doesn't fit the returned data
2021-08-18 04:54:42 +0200 <lechner> i just cant figure out what i will get back
2021-08-18 04:55:24 +0200 <c_wraith> then how could the compiler? :P
2021-08-18 04:56:04 +0200 <c_wraith> the fact is, we can't tell you.
2021-08-18 04:56:10 +0200 <c_wraith> it depends on the query
2021-08-18 04:56:34 +0200 <lechner> yeah it's my first time with pg-simple
2021-08-18 04:56:56 +0200 <c_wraith> for quick'n'dirty, you probably want a tuple type
2021-08-18 04:57:14 +0200 <c_wraith> with a number of elements matching the number of things you're selecting, and appropriate types for each element
2021-08-18 04:57:16 +0200 <lechner> single column
2021-08-18 04:58:05 +0200 <lechner> https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple.html#t…
2021-08-18 04:58:11 +0200 <lechner> sorry
2021-08-18 04:58:38 +0200 <c_wraith> You probably want the 1-tuple, then. https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple.html#t…
2021-08-18 04:59:21 +0200 <c_wraith> try mapM_ (putStrLn . fromOnly)
2021-08-18 04:59:32 +0200 <Axman6> yeah I was going to say, Only will be the type you need
2021-08-18 04:59:49 +0200 <Axman6> so it'll return Only String's
2021-08-18 04:59:53 +0200 <lechner> Only or [Only String] ?
2021-08-18 05:00:09 +0200 <c_wraith> r ~ Only String
2021-08-18 05:00:18 +0200 <c_wraith> the return type is IO [r]
2021-08-18 05:03:33 +0200rubix(~user@2601:602:9502:c70:b7f7:ce5b:5e25:126d) (ERC (IRC client for Emacs 28.0.50))
2021-08-18 05:03:47 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-18 05:04:49 +0200 <lechner> it's magic! the calls to fromOnly inside mapM_ were enough to compile
2021-08-18 05:04:59 +0200 <c_wraith> the advantage of printing with (mapM_ (putStrLn . fromOnly)) is that type inference means that it uniquely identifies the type of r
2021-08-18 05:05:15 +0200 <lechner> yeah, it's amazing!
2021-08-18 05:05:34 +0200 <lechner> which way of printin wuold not do so?
2021-08-18 05:05:40 +0200 <lechner> printing
2021-08-18 05:05:49 +0200 <lechner> would
2021-08-18 05:06:04 +0200 <c_wraith> replacing putStrLn with print would leave the type ambiguous
2021-08-18 05:06:24 +0200 <c_wraith> or just using (mapM_ print)
2021-08-18 05:06:27 +0200iqubic(~user@2601:602:9502:c70:b7f7:ce5b:5e25:126d)
2021-08-18 05:06:41 +0200 <c_wraith> it would *work*, but the types wouldn't be inferred
2021-08-18 05:07:57 +0200Skyfire(~pyon@user/pyon) (Quit: WeeChat 3.2)
2021-08-18 05:08:21 +0200Skyfire(~pyon@user/pyon)
2021-08-18 05:08:53 +0200 <lechner> unfortunately the query result is wrong. can -simple pass Pg array types?
2021-08-18 05:09:11 +0200 <lechner> the query is otherwise tested
2021-08-18 05:09:17 +0200 <lechner> and short
2021-08-18 05:10:24 +0200 <c_wraith> looks like it
2021-08-18 05:10:28 +0200 <c_wraith> https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple-Types.…
2021-08-18 05:12:01 +0200hueso(~root@user/hueso) (Ping timeout: 248 seconds)
2021-08-18 05:14:35 +0200hueso(~root@user/hueso)
2021-08-18 05:17:26 +0200sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (Quit: WeeChat 2.9)
2021-08-18 05:19:32 +0200simon1(~simon@modemcable090.207-203-24.mc.videotron.ca)
2021-08-18 05:19:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 05:20:08 +0200 <lechner> Is there an easier way to write this? mapM_ (putStrLn $) (map ("Need " <>) $ map fromOnly rows
2021-08-18 05:21:21 +0200 <c_wraith> well, a left section of ($) is always redundant
2021-08-18 05:21:49 +0200 <lechner> point taken
2021-08-18 05:22:12 +0200 <c_wraith> and then you have three consecutive maps. well, one is a mapM_, but that could be written as sequence_ . map
2021-08-18 05:22:20 +0200 <c_wraith> you can always fuse consecutive maps
2021-08-18 05:22:43 +0200 <c_wraith> mapM_ (putStrLn . ("Need " <>) . fromOnly) rows
2021-08-18 05:22:47 +0200 <Axman6> that's mapM_ (putStrLn . ("Need "<>) . fromOnly) rows
2021-08-18 05:23:09 +0200Axman6highfives c_wraith
2021-08-18 05:23:12 +0200monochrom(trebla@216.138.220.146) (Quit: NO CARRIER)
2021-08-18 05:23:24 +0200 <lechner> i had a problem with the operator precedence of <> vs unapplied fromOnly
2021-08-18 05:23:41 +0200 <lechner> i see
2021-08-18 05:23:47 +0200 <lechner> TIL
2021-08-18 05:23:47 +0200 <c_wraith> that should be irrelevant when using a section
2021-08-18 05:25:06 +0200 <lechner> Axman6: thanks! it must be painful to watch
2021-08-18 05:26:10 +0200derelict(~derelict@user/derelict) (Ping timeout: 240 seconds)
2021-08-18 05:28:05 +0200monochrom(trebla@216.138.220.146)
2021-08-18 05:29:15 +0200 <lechner> c_wraith: thank you so much for your help! i have a VALUES vs unnest() problem but will have to solve that later tonight. great progress!
2021-08-18 05:33:27 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-08-18 05:35:14 +0200jamie101(~jamie101@pa49-199-6-183.pa.vic.optusnet.com.au)
2021-08-18 05:39:09 +0200jamie101(~jamie101@pa49-199-6-183.pa.vic.optusnet.com.au) ()
2021-08-18 05:47:01 +0200aarvar(~aaron@2601:602:a080:fa0:d9cd:315e:aa0a:fa0)
2021-08-18 05:47:28 +0200aarvar(~aaron@2601:602:a080:fa0:d9cd:315e:aa0a:fa0) (Client Quit)
2021-08-18 05:47:57 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 245 seconds)
2021-08-18 05:50:07 +0200falafel(~falafel@2601:483:4e00:2b20:e0f3:c7c1:91ca:fe6e)
2021-08-18 05:50:58 +0200u0_a253(~u0_a253@2402:9d80:247:f919:764b:d5cb:dc9:2b1d)
2021-08-18 05:51:35 +0200 <u0_a253> hello world
2021-08-18 05:54:41 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 05:55:33 +0200 <lechner> Hi, is [1, 2, 3] the same as [(1), (2), (3)] please?
2021-08-18 05:56:02 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 05:56:24 +0200 <lechner> it's for this with one column https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple-Types.…
2021-08-18 05:58:24 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-08-18 05:59:14 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-08-18 06:00:03 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-08-18 06:02:53 +0200mei(~mei@user/mei)
2021-08-18 06:04:07 +0200 <int-e> lechner: yes to your question, but it's not applicable to the documentation, which has a list of tuples, more like [(1,2), (3,4)]
2021-08-18 06:04:25 +0200 <int-e> > length [(1,2),(3,4)]
2021-08-18 06:04:27 +0200 <lambdabot> 2
2021-08-18 06:04:44 +0200 <lechner> int-e: what if my tuples contain only one element each?
2021-08-18 06:05:03 +0200 <int-e> > [(1),(2),(3),(4)]
2021-08-18 06:05:05 +0200 <lambdabot> [1,2,3,4]
2021-08-18 06:05:16 +0200 <int-e> I already said yes :-/
2021-08-18 06:06:03 +0200severen(~severen@202.36.179.72)
2021-08-18 06:07:02 +0200 <lechner> am i not doing the same thing as the example? https://paste.debian.net/1208072/
2021-08-18 06:12:04 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-08-18 06:17:09 +0200 <oak-> >[(1,),(2,),(3,),(4,)]
2021-08-18 06:17:33 +0200 <oak-> > [(1,),(2,),(3,),(4,)]
2021-08-18 06:17:35 +0200 <lambdabot> error:
2021-08-18 06:17:35 +0200 <lambdabot> • No instance for (Typeable t0)
2021-08-18 06:17:35 +0200 <lambdabot> arising from a use of ‘show_M72548533020348860047’
2021-08-18 06:18:11 +0200 <glguy> > (1,) 2
2021-08-18 06:18:13 +0200 <lambdabot> (1,2)
2021-08-18 06:18:59 +0200 <glguy> > (,1) 2
2021-08-18 06:19:01 +0200 <lambdabot> (2,1)
2021-08-18 06:20:39 +0200severen(~severen@202.36.179.72) (Quit: WeeChat 3.2)
2021-08-18 06:22:33 +0200ahlk(~user@2600:1700:31c0:3a10::48) (ERC (IRC client for Emacs 26.1))
2021-08-18 06:22:54 +0200 <int-e> https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple.html#t…
2021-08-18 06:23:01 +0200 <int-e> lechner: ^^
2021-08-18 06:24:39 +0200 <int-e> (which I found via the list of instances of ToRow)
2021-08-18 06:28:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-18 06:32:33 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 248 seconds)
2021-08-18 06:39:58 +0200derelict(~derelict@user/derelict)
2021-08-18 06:44:12 +0200derelict(~derelict@user/derelict) (Ping timeout: 245 seconds)
2021-08-18 06:44:16 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Quit: Reconnecting)
2021-08-18 06:44:31 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2021-08-18 06:51:13 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-18 06:52:54 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-08-18 06:54:51 +0200Sgeo(~Sgeo@user/sgeo)
2021-08-18 06:55:54 +0200 <nerdypepper> hiya o/, is there a parser library for haskell that can help produce loseless syntax trees? something like rowan for rust: https://github.com/rust-analyzer/rowan
2021-08-18 06:56:43 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
2021-08-18 07:01:13 +0200 <lechner> int-e: unfortunately, i have no idea where to stick that Only https://paste.debian.net/1208074/
2021-08-18 07:01:14 +0200 <Axman6> what does a "lossless syntax tree" mean?
2021-08-18 07:02:11 +0200 <Axman6> lechner: Only is for the results, not the arguments
2021-08-18 07:03:02 +0200 <nerdypepper> Axman6: it preserves whitespace, comments etc., a more common term is concrete syntax tree. the idea is you can reproduce the source text from the syntax tree
2021-08-18 07:03:35 +0200 <Axman6> you could definitely do that with any of the parser libraries I would think
2021-08-18 07:05:56 +0200 <nerdypepper> Axman6: oh yeah for sure, you can still preserve whitespace tokens etc. i was hoping to find a library that does the necessary performance optimizations for you (like rowan).
2021-08-18 07:06:33 +0200 <nerdypepper> rowan explicitly tries to avoid allocating every single token by interning whitespace and sharing structurally similar subtrees etc.
2021-08-18 07:07:26 +0200 <int-e> It's needed for the outer tuple, I think. Only (Values [blah,blub])
2021-08-18 07:07:53 +0200argento(~argent0@168-227-97-23.ptr.westnet.com.ar) (Quit: leaving)
2021-08-18 07:09:31 +0200 <Axman6> edwardk: do you have any thoughts on nerdypepper's question? It feels like trifecta/parsers should be able to do this for you, but I'm not familliar enough to say for sure
2021-08-18 07:10:36 +0200 <int-e> nerdypepper: And I think it wants ByteString or Text, never String.
2021-08-18 07:11:32 +0200 <lechner> int-e: it seems a step closer, perhaps https://paste.debian.net/1208075/
2021-08-18 07:12:16 +0200 <int-e> sorry for picking the wrong nick all the time :-/
2021-08-18 07:15:21 +0200 <Axman6> lechner: why are you using Values?
2021-08-18 07:15:31 +0200 <Axman6> it seems like you're really complicating things more than they need to be
2021-08-18 07:15:48 +0200 <lechner> please go ahead
2021-08-18 07:15:55 +0200 <iqubic> I see that #haskell survived the transition to Libera. That's good to see.
2021-08-18 07:16:01 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-08-18 07:16:17 +0200 <lechner> Axman6: 'semver' cast, maybe?
2021-08-18 07:16:28 +0200 <int-e> Well, the ToField Char indicates that it used a ToField a => ToRow [a] instance to get at ToRow String, so something went wrong apart from not using ByteString or Text (the string should be a field, not a row)
2021-08-18 07:16:40 +0200Seby(~Seby@115.98.232.63) (Ping timeout: 240 seconds)
2021-08-18 07:16:41 +0200 <Axman6> oh actually... I hadn't looked at the query very closely
2021-08-18 07:17:13 +0200 <Axman6> iqubic: irc is just a medium, #haskell will never die
2021-08-18 07:17:18 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-18 07:17:25 +0200 <iqubic> That's good to know.
2021-08-18 07:17:34 +0200int-eisn't fully following either.
2021-08-18 07:17:58 +0200 <lechner> Axman6: it's also an antijoin via EXCEPT
2021-08-18 07:19:03 +0200 <int-e> lechner: Quite possibly the strings also need Only. And by ByteString or Text, not String.
2021-08-18 07:19:14 +0200 <int-e> s/by/be/
2021-08-18 07:19:33 +0200 <Axman6> ok I can see now what you were trying to do but I have no idea how it's supposed to be done
2021-08-18 07:19:45 +0200 <lechner> without Only from the strings https://paste.debian.net/1208076/
2021-08-18 07:20:32 +0200 <lechner> Axman6: it's a value transfer issue. i could also use JSON
2021-08-18 07:20:34 +0200 <int-e> lechner: Only turns a field into a row.
2021-08-18 07:21:03 +0200 <int-e> and there is a ToField instance for Text.
2021-08-18 07:21:13 +0200 <Axman6> Have you tried `(Values ["semver"] [Only ("2.1.6" :: ByteString)])`?
2021-08-18 07:21:25 +0200 <Axman6> or Text?
2021-08-18 07:21:38 +0200 <int-e> Axman6: We're getting there. You also need Only on the outside.
2021-08-18 07:22:32 +0200 <lechner> that compile, with Text
2021-08-18 07:22:37 +0200 <lechner> compiled
2021-08-18 07:23:01 +0200 <Axman6> so all good?
2021-08-18 07:23:11 +0200 <Axman6> does the query run??? :o
2021-08-18 07:23:47 +0200 <lechner> the query isn't working
2021-08-18 07:23:58 +0200 <Axman6> now for the fun part :P
2021-08-18 07:24:38 +0200 <lechner> the query is tested; and this is the second time around
2021-08-18 07:26:05 +0200 <lechner> i can probably use PGArray with unnest or a JSON string but VALUES seemed so easy
2021-08-18 07:30:12 +0200 <edwardk> Axman6: context?
2021-08-18 07:30:16 +0200 <edwardk> *reading back*
2021-08-18 07:30:31 +0200 <Axman6> see message at XX:55
2021-08-18 07:30:39 +0200 <edwardk> lossless parsing?
2021-08-18 07:30:39 +0200 <lechner> what does the "fat" arrow here mean, please? https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple.html#v…
2021-08-18 07:31:05 +0200 <Axman6> it's a type class constraint
2021-08-18 07:31:24 +0200 <Axman6> saying that q must be an instance of the ToRow class
2021-08-18 07:31:59 +0200 <edwardk> i usually wind up building a parser for whitespace that captures everything inside the whitespace and then make sure my syntax trees are very close to the surface language syntax with little whitespace bins in the tree wherever spaces could occur. this works until you need layout and then regenerating the tree has some extra consistency crap it has to satisfy.
2021-08-18 07:32:24 +0200 <edwardk> but i don't know a general purpose 'exactprint' style library
2021-08-18 07:32:53 +0200 <edwardk> (whitespace here includes comments, etc.)
2021-08-18 07:32:59 +0200 <dibblego> we started writing one aaaaages ago
2021-08-18 07:32:59 +0200Axman6awaits the nerdsnipe to kick in...
2021-08-18 07:33:20 +0200 <edwardk> not happening. groq's keeping me busy this month and i just bought a house and am moving =)
2021-08-18 07:33:33 +0200 <Axman6> 'grats!
2021-08-18 07:34:10 +0200iqubic`(~user@2601:602:9502:c70:b7f7:ce5b:5e25:126d)
2021-08-18 07:34:19 +0200iqubic`(~user@2601:602:9502:c70:b7f7:ce5b:5e25:126d) ()
2021-08-18 07:34:53 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
2021-08-18 07:38:10 +0200iqubic(~user@2601:602:9502:c70:b7f7:ce5b:5e25:126d) (Ping timeout: 240 seconds)
2021-08-18 07:40:11 +0200 <cdsmith> Does this exist somewhere? data ReifiedInstance (cls :: Type -> Constraint) (a :: Type) where ReifiedInstance :: cls a => ReifiedInstance cls a
2021-08-18 07:42:56 +0200 <nerdypepper> Axman6: thanks for the mention, trifecta looks great, i will take a look at that. it would be a pretty mega project to rewrite something like rowan, but i am not opposed to trying that out either!
2021-08-18 07:43:11 +0200 <hsek[m]> Are there resources for me to read regarding separating API types from the DB types in `servant`? I don't really understand why because it seems really convenient. But I know that a lot of people advocate against it. https://old.reddit.com/r/haskell/comments/p64g1q/servantutil_extending_servant_with_database/h9bbp…
2021-08-18 07:44:11 +0200fabfianda(~fabfianda@mob-5-91-112-128.net.vodafone.it) (Ping timeout: 268 seconds)
2021-08-18 07:49:44 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
2021-08-18 07:51:34 +0200ablutor(~quassel@wasscher.com) (Quit: going for vitamine d)
2021-08-18 07:51:51 +0200ablutor(~quassel@wasscher.com)
2021-08-18 07:52:07 +0200 <cdsmith> hsek: Can't point to a document, but APIs have different compatibility constraints. They might start out looking similar to backend data, but over time, you'll want to migrate your storage schemas, while APIs must stay the same. That's hard to handle if they are the same type.
2021-08-18 07:55:56 +0200favonia(~favonia@user/favonia)
2021-08-18 07:59:25 +0200ozzymcduff(~mathieu@81-234-151-21-no94.tbcn.telia.com) (Remote host closed the connection)
2021-08-18 08:02:28 +0200ozzymcduff(~mathieu@81-234-151-21-no94.tbcn.telia.com)
2021-08-18 08:02:39 +0200 <hsek[m]> I see, thanks Chris Smith !
2021-08-18 08:02:41 +0200arahael(~arahael@124.170.238.106) (Ping timeout: 248 seconds)
2021-08-18 08:03:10 +0200falafel(~falafel@2601:483:4e00:2b20:e0f3:c7c1:91ca:fe6e) (Ping timeout: 240 seconds)
2021-08-18 08:03:32 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com)
2021-08-18 08:04:43 +0200Obo(~roberto@h-46-59-103-134.A498.priv.bahnhof.se)
2021-08-18 08:06:34 +0200 <lechner> int-e Axman6: it was the stupidest of all errors. the function was not called. anyway, now I have a runtime type error: Incompatible {errSQLType = "semver", errSQLTableOid = Nothing, errSQLField = "lintian_version", errHaskellType = "Text", errMessage = "types incompatible"}
2021-08-18 08:07:31 +0200 <lechner> but it's quite late here. thank you both for your help so far!
2021-08-18 08:10:17 +0200ubert(~Thunderbi@91.141.56.213.wireless.dyn.drei.com)
2021-08-18 08:12:03 +0200arahael(~arahael@203.221.97.63)
2021-08-18 08:16:43 +0200echoreply1(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (Quit: WeeChat 2.8)
2021-08-18 08:17:01 +0200Seby(~Seby@115.98.232.63)
2021-08-18 08:17:46 +0200Seby(~Seby@115.98.232.63) (Client Quit)
2021-08-18 08:17:50 +0200vysn(~vysn@user/vysn)
2021-08-18 08:18:03 +0200echoreply(~echoreply@45.32.163.16)
2021-08-18 08:18:10 +0200chomwitt(~chomwitt@2a02:587:dc0c:e200:12c3:7bff:fe6d:d374)
2021-08-18 08:20:04 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-18 08:22:45 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-08-18 08:25:16 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 08:28:47 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 245 seconds)
2021-08-18 08:32:47 +0200aegon(~mike@174.127.249.180) (Quit: Lost terminal)
2021-08-18 08:37:43 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-08-18 08:41:19 +0200smitop(~smitop@user/smitop) (Remote host closed the connection)
2021-08-18 08:42:08 +0200smitop(~smitop@user/smitop)
2021-08-18 08:43:46 +0200lortabac(~lortabac@151.73.97.57)
2021-08-18 08:44:52 +0200acidjnk_new3(~acidjnk@p200300d0c72b955250c7a959aba8feb6.dip0.t-ipconnect.de)
2021-08-18 08:48:06 +0200ubert1(~Thunderbi@91.141.56.213.wireless.dyn.drei.com)
2021-08-18 08:48:33 +0200michalz(~michalz@185.246.204.62)
2021-08-18 08:48:48 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-18 08:49:39 +0200Unhammer(~Unhammer@user/unhammer)
2021-08-18 08:59:13 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 248 seconds)
2021-08-18 09:03:11 +0200derelict(~derelict@user/derelict)
2021-08-18 09:04:15 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-08-18 09:04:40 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2021-08-18 09:05:28 +0200Lord_of_Life_Lord_of_Life
2021-08-18 09:10:46 +0200 <albet70> please unbanned 47.245.54.240
2021-08-18 09:15:00 +0200 <dibblego> albet70: read the topic
2021-08-18 09:16:52 +0200Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2021-08-18 09:23:58 +0200u0_a2531(~u0_a253@2402:9d80:247:f919:942:7578:ff92:e257)
2021-08-18 09:24:47 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-18 09:25:17 +0200lortabac(~lortabac@151.73.97.57) (Read error: Connection reset by peer)
2021-08-18 09:26:05 +0200u0_a253(~u0_a253@2402:9d80:247:f919:764b:d5cb:dc9:2b1d) (Remote host closed the connection)
2021-08-18 09:26:44 +0200u0_a2531(~u0_a253@2402:9d80:247:f919:942:7578:ff92:e257) (Remote host closed the connection)
2021-08-18 09:28:56 +0200lortabac(~lortabac@151.73.97.57)
2021-08-18 09:30:09 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 09:34:20 +0200mc47(~mc47@xmonad/TheMC47)
2021-08-18 09:35:05 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-08-18 09:39:13 +0200slack1256(~slack1256@191.125.227.92)
2021-08-18 09:40:59 +0200justache(~justache@user/justache) (Ping timeout: 252 seconds)
2021-08-18 09:41:42 +0200benin036932(~benin@183.82.178.142)
2021-08-18 09:43:00 +0200justache(~justache@user/justache)
2021-08-18 09:44:33 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 09:45:10 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 09:47:10 +0200justache(~justache@user/justache) (Ping timeout: 240 seconds)
2021-08-18 09:47:10 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-18 09:47:21 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
2021-08-18 09:49:21 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds)
2021-08-18 09:52:17 +0200justache(~justache@user/justache)
2021-08-18 09:56:07 +0200Xnuk(~xnuk@vultr.xnu.kr) (Quit: ZNC - https://znc.in)
2021-08-18 09:56:25 +0200Xnuk(~xnuk@45.76.202.58)
2021-08-18 09:58:27 +0200justache(~justache@user/justache) (Read error: Connection reset by peer)
2021-08-18 09:58:49 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-18 09:59:18 +0200justache(~justache@user/justache)
2021-08-18 09:59:32 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 10:03:16 +0200 <merijn> sshine_: I wouldn't say that's *cabal* failing, but it's a weird error. You're using a much newer version of hspec than your stack setup, but afaict the newer Hspec still exports Spec there, so that compilation still shouldn't fail
2021-08-18 10:04:50 +0200 <maralorn> maerwald: I have just tested streamly-posix with hspec 2.7.10 (because that’s the stackage-lts version). That worked. So theoretically you could lower the version bound on it.
2021-08-18 10:05:23 +0200 <merijn> sshine_: oh, I have a *wildly* speculative theory, lemme test it :)
2021-08-18 10:05:25 +0200hendursa1(~weechat@user/hendursaga)
2021-08-18 10:05:42 +0200 <maerwald> maralorn: hspec-discover as well?
2021-08-18 10:06:05 +0200slack1256(~slack1256@191.125.227.92) (Remote host closed the connection)
2021-08-18 10:06:13 +0200 <maralorn> maerwald: Yes
2021-08-18 10:06:37 +0200 <maerwald> maralorn: what version?
2021-08-18 10:06:47 +0200 <maralorn> Same
2021-08-18 10:07:20 +0200dschrempf(~dominik@2a01-036d-0118-a2d1-3c86-9363-4322-fee7.pool6.digikabel.hu)
2021-08-18 10:08:36 +0200Kirat(~Gill@103.217.122.17)
2021-08-18 10:08:40 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 244 seconds)
2021-08-18 10:08:47 +0200nschoe(~quassel@2a01:e0a:8e:a190:f185:3872:6a89:c741)
2021-08-18 10:09:57 +0200 <maralorn> maerwald: ^
2021-08-18 10:10:07 +0200 <maralorn> (forgot the highlight)
2021-08-18 10:12:25 +0200oldsk00l(~znc@ec2-3-69-166-47.eu-central-1.compute.amazonaws.com)
2021-08-18 10:12:42 +0200Kirat(~Gill@103.217.122.17) (Client Quit)
2021-08-18 10:13:39 +0200Guest48(~Guest48@2001:8003:33f0:c100:90f4:2120:7bc8:55aa)
2021-08-18 10:14:05 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-08-18 10:17:23 +0200ubert(~Thunderbi@91.141.56.213.wireless.dyn.drei.com) (Quit: ubert)
2021-08-18 10:17:24 +0200ubert1ubert
2021-08-18 10:17:39 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-08-18 10:17:39 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-08-18 10:17:42 +0200allbery_bgeekosaur
2021-08-18 10:17:42 +0200ub(~Thunderbi@91.141.56.213.wireless.dyn.drei.com)
2021-08-18 10:17:58 +0200 <merijn> sshine_: That I can't test, because I can't reproduce it locally >.> But at the very least I see a couple of errors in the repo/config
2021-08-18 10:22:07 +0200ub(~Thunderbi@91.141.56.213.wireless.dyn.drei.com) (Ping timeout: 245 seconds)
2021-08-18 10:22:36 +0200oldsk00l(~znc@ec2-3-69-166-47.eu-central-1.compute.amazonaws.com) (Remote host closed the connection)
2021-08-18 10:23:07 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-08-18 10:27:55 +0200Pickchea(~private@user/pickchea)
2021-08-18 10:30:04 +0200timCF(~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
2021-08-18 10:31:13 +0200rovert(uid389732@id-389732.tooting.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-18 10:35:41 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2021-08-18 10:36:22 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-08-18 10:36:49 +0200micro(~micro@user/micro) (Quit: Lost terminal)
2021-08-18 10:37:35 +0200micro(~micro@user/micro)
2021-08-18 10:38:25 +0200Guest48(~Guest48@2001:8003:33f0:c100:90f4:2120:7bc8:55aa) (Quit: Client closed)
2021-08-18 10:38:29 +0200fendor(~fendor@77.119.161.62.wireless.dyn.drei.com)
2021-08-18 10:40:44 +0200defanor(~defanor@tart.uberspace.net)
2021-08-18 10:43:55 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) ()
2021-08-18 10:46:54 +0200 <defanor> Hello. I've just updated to Cabal 3 (cabal-install from Debian 11 repositories), and failing to find how to install custom libraries (the ones I'm writing) properly: `cabal install --lib` appears to work fine (no errors), but then `cabal install` says "unknown package" when I'm trying to build projects dependent on such a library. Is it the intended behaviour, and how does one build projects like that with Cabal 3 (
2021-08-18 10:46:54 +0200 <defanor> except for v2- commands)?
2021-08-18 10:47:09 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 10:48:07 +0200 <merijn> defanor: tbh, you really shouldn't be using "install --lib"
2021-08-18 10:48:37 +0200 <merijn> defanor: Also, in cabal 3 the X and "v2-X" are identical
2021-08-18 10:49:11 +0200 <defanor> merijn: Oh, perhaps I had in mind v1- ones then; meant the old behaviour. What should I use instead of install, then?
2021-08-18 10:49:25 +0200 <merijn> It depends *why* you want to install
2021-08-18 10:49:45 +0200 <merijn> If it is "so I can use this in another library/project I work on" the answer is: you shouldn't use install at all
2021-08-18 10:50:20 +0200 <defanor> Indeed, to use those libraries from other projects. What should I use instead, then?
2021-08-18 10:51:45 +0200 <merijn> defanor: If the libraries are on hackage, then nothing, they will be installed automatically when you use "build" if you want to depend on local (modified?) versions of libraries or unreleased libraries, then you want to use a cabal.project file with either 1) a remote-repo entry or 2) a filled in "local-packages:" pointing at the relevant local paths
2021-08-18 10:51:51 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2021-08-18 10:52:42 +0200 <defanor> It's the latter in this case (some of those are work-related), will look into those options. Thanks!
2021-08-18 10:52:46 +0200 <merijn> defanor: See https://cabal.readthedocs.io/en/latest/cabal-project.html#specifying-the-local-packages which has examples of both
2021-08-18 10:52:49 +0200Pickchea(~private@user/pickchea) (Ping timeout: 248 seconds)
2021-08-18 10:52:49 +0200favonia(~favonia@user/favonia) (Ping timeout: 248 seconds)
2021-08-18 10:53:04 +0200 <merijn> defanor: And https://cabal.readthedocs.io/en/latest/cabal-project.html#specifying-packages-from-remote-version-…
2021-08-18 10:54:38 +0200 <merijn> defanor: For work situations where everyone is consistently using the same "internal" packages, you should probably just commit the cabal.project file to the repo for everyone to use
2021-08-18 10:56:12 +0200 <merijn> also, in the category more complicated (but thorough) solutions: It's perfectly possible to run your own private hackage server and point cabal-install at that so it will consult both the internal hackage server and public hackage
2021-08-18 11:00:02 +0200polyphem(~polyphem@2a02:810d:640:776c:f4c0:a27a:540e:c15e) (Ping timeout: 245 seconds)
2021-08-18 11:00:27 +0200 <defanor> I keep thinking of packaging everything into .deb and running an apt repository that way, to reuse a single package manager for everything (reducing the possibility of version mismatches, setting external dependencies from system repositories, etc). But will probably look into that later, just manual building for now.
2021-08-18 11:08:45 +0200fabfianda(~fabfianda@37.183.255.57)
2021-08-18 11:20:27 +0200 <defanor> Tried to build with a cabal.project, seems to work for me. The packages live in a single repository (subdirectories), so have put cabal.project into its root.
2021-08-18 11:21:17 +0200 <merijn> defanor: That's pretty much the intended use of cabal.project, yes :)
2021-08-18 11:22:03 +0200 <merijn> defanor: Note that you can specify local overrides for it in cabal.project.local (the idea being you can commit cabal.project to the repo for everyone working on it and .local has whatever tweaks specific to what you're doing)
2021-08-18 11:23:08 +0200Axma70428(~Axman6@user/axman6)
2021-08-18 11:24:41 +0200Axman6(~Axman6@user/axman6) (Ping timeout: 256 seconds)
2021-08-18 11:25:07 +0200jespada(~jespada@90.254.247.46) (Ping timeout: 245 seconds)
2021-08-18 11:27:10 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 240 seconds)
2021-08-18 11:27:41 +0200jespada(~jespada@90.254.247.46)
2021-08-18 11:29:28 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-08-18 11:39:06 +0200lavaman(~lavaman@98.38.249.169)
2021-08-18 11:39:08 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 268 seconds)
2021-08-18 11:43:38 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 258 seconds)
2021-08-18 11:50:10 +0200Pickchea(~private@user/pickchea)
2021-08-18 11:53:01 +0200PinealGlandOptic(~PinealGla@37.115.210.35)
2021-08-18 11:54:42 +0200__monty__(~toonn@user/toonn)
2021-08-18 11:56:29 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-18 11:56:42 +0200ikex1(~ash@user/ikex)
2021-08-18 11:56:55 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 11:58:15 +0200ikex(~ash@user/ikex) (Ping timeout: 268 seconds)
2021-08-18 11:58:16 +0200ikex1ikex
2021-08-18 12:01:39 +0200dschrempf(~dominik@2a01-036d-0118-a2d1-3c86-9363-4322-fee7.pool6.digikabel.hu) (Ping timeout: 258 seconds)
2021-08-18 12:01:47 +0200tinwood(~tinwood@canonical/tinwood) (Remote host closed the connection)
2021-08-18 12:02:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-08-18 12:03:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:04:49 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2021-08-18 12:04:49 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
2021-08-18 12:04:49 +0200tinwood(~tinwood@canonical/tinwood)
2021-08-18 12:05:14 +0200lortabac(~lortabac@151.73.97.57) (Quit: WeeChat 2.8)
2021-08-18 12:09:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-18 12:09:41 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:11:45 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 248 seconds)
2021-08-18 12:13:03 +0200jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2021-08-18 12:13:20 +0200jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-08-18 12:14:37 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-08-18 12:15:43 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:16:59 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 12:20:13 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-08-18 12:20:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-08-18 12:21:17 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
2021-08-18 12:21:19 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:21:58 +0200 <albet70> dibblego, is there a limit days for banned user or permanent?
2021-08-18 12:22:27 +0200 <[exa]> albet70: there's another channel for that, see topic
2021-08-18 12:22:51 +0200 <albet70> oh, I see, sorry
2021-08-18 12:25:55 +0200PinealGlandOptic(~PinealGla@37.115.210.35) (Quit: leaving)
2021-08-18 12:26:17 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-08-18 12:27:01 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:28:20 +0200polyphem(~polyphem@2a02:810d:640:776c:f4c0:a27a:540e:c15e)
2021-08-18 12:29:10 +0200kilolympus(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net)
2021-08-18 12:30:14 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 12:33:16 +0200ChanServ+o dibblego
2021-08-18 12:33:30 +0200dibblego-b *!*@47.245.54.240
2021-08-18 12:33:31 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-18 12:33:44 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-18 12:33:46 +0200ChanServ-o dibblego
2021-08-18 12:34:49 +0200Guest372(~xxx@47.245.54.240)
2021-08-18 12:36:17 +0200chomwitt(~chomwitt@2a02:587:dc0c:e200:12c3:7bff:fe6d:d374) (Ping timeout: 245 seconds)
2021-08-18 12:37:44 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-08-18 12:38:29 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:43:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-18 12:43:57 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 12:44:28 +0200fendor(~fendor@77.119.161.62.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-18 12:44:40 +0200acidjnk_new(~acidjnk@p200300d0c72b952850c7a959aba8feb6.dip0.t-ipconnect.de)
2021-08-18 12:47:32 +0200acidjnk_new3(~acidjnk@p200300d0c72b955250c7a959aba8feb6.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-08-18 12:57:49 +0200fvr(uid503686@id-503686.highgate.irccloud.com)
2021-08-18 13:01:04 +0200alx741(~alx741@181.196.68.125)
2021-08-18 13:01:04 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 13:03:29 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 13:04:33 +0200ubert(~Thunderbi@91.141.56.213.wireless.dyn.drei.com) (Ping timeout: 248 seconds)
2021-08-18 13:05:25 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 13:06:26 +0200dsrt^(~dsrt@209.65.131.194) (Ping timeout: 258 seconds)
2021-08-18 13:08:24 +0200chomwitt(~chomwitt@ppp-94-67-193-240.home.otenet.gr)
2021-08-18 13:08:54 +0200AlexNoo_(~AlexNoo@94.233.241.41)
2021-08-18 13:12:52 +0200AlexZenon(~alzenon@94.233.240.231) (Ping timeout: 268 seconds)
2021-08-18 13:12:52 +0200Alex_test(~al_test@94.233.240.231) (Ping timeout: 268 seconds)
2021-08-18 13:12:52 +0200AlexNoo(~AlexNoo@94.233.240.231) (Ping timeout: 268 seconds)
2021-08-18 13:16:24 +0200Alex_test(~al_test@94.233.241.41)
2021-08-18 13:16:49 +0200AlexZenon(~alzenon@94.233.241.41)
2021-08-18 13:22:22 +0200lortabac(~lortabac@151.73.97.57)
2021-08-18 13:22:41 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 248 seconds)
2021-08-18 13:25:18 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-08-18 13:27:23 +0200jumper149(~jumper149@80.240.31.34)
2021-08-18 13:29:59 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-08-18 13:35:21 +0200Matthias1(~Matthias1@cpe-76-170-236-166.socal.res.rr.com) (Remote host closed the connection)
2021-08-18 13:36:21 +0200Matthias1(~Matthias1@cpe-76-170-236-166.socal.res.rr.com)
2021-08-18 13:37:59 +0200Matthias1(~Matthias1@cpe-76-170-236-166.socal.res.rr.com) (Read error: Connection reset by peer)
2021-08-18 13:42:11 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 13:43:33 +0200favonia(~favonia@user/favonia)
2021-08-18 13:43:51 +0200_\_(~o@user/ding) (Quit: ___)
2021-08-18 13:44:04 +0200_\_(~o@user/ding)
2021-08-18 13:44:06 +0200dschrempf(~dominik@92-249-159-252.pool.digikabel.hu)
2021-08-18 13:46:17 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 245 seconds)
2021-08-18 13:47:59 +0200 <Hecate> am sad
2021-08-18 13:48:04 +0200 <Hecate> I had a very nice usecase for Comonads
2021-08-18 13:48:11 +0200 <Hecate> and turns out `getField` does the job
2021-08-18 13:48:18 +0200 <Hecate> (with probably less overhead lol)
2021-08-18 13:48:26 +0200aguapesada(~aguapesad@2804:14c:8793:8e2f:a406:863b:f810:2d4c)
2021-08-18 13:49:23 +0200 <hpc> ah yes, truly your life is full of hardships :D
2021-08-18 13:50:38 +0200 <hpc> i had something similar with Cont, until i realized something entirely different instead
2021-08-18 13:55:10 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 13:56:47 +0200lortabac_(~lortabac@151.73.3.232)
2021-08-18 13:58:22 +0200lortabac(~lortabac@151.73.97.57) (Ping timeout: 245 seconds)
2021-08-18 14:00:09 +0200benin036932(~benin@183.82.178.142)
2021-08-18 14:01:58 +0200ubert(~Thunderbi@178.115.35.155.wireless.dyn.drei.com)
2021-08-18 14:03:02 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-08-18 14:04:40 +0200keutoi(~keutoi@157.48.90.57) (Ping timeout: 240 seconds)
2021-08-18 14:05:10 +0200lortabac_lortabac
2021-08-18 14:12:33 +0200lavaman(~lavaman@98.38.249.169)
2021-08-18 14:15:47 +0200 <merijn> hpc: I actually have a use of Cont in my code!
2021-08-18 14:15:55 +0200 <merijn> And I even understood it when I wrote it!
2021-08-18 14:16:10 +0200 <merijn> Don't understand shit about it anymore, but it still works, so I just don't touch it :p
2021-08-18 14:18:29 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 14:20:49 +0200 <hpc> hah
2021-08-18 14:22:32 +0200 <lechner> Hi, I have postgresql-simple working via 'text'/Data.Text result types. Can the module hadle more custom conversions, such as from SEMVER from the Pg extension pg-simple to SemVer.Version from 'semver' in Haskell?
2021-08-18 14:22:46 +0200 <lechner> pg-semver
2021-08-18 14:22:57 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds)
2021-08-18 14:29:22 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-18 14:31:25 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-08-18 14:33:04 +0200Pickchea(~private@user/pickchea) (Ping timeout: 258 seconds)
2021-08-18 14:38:16 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 14:38:22 +0200acidjnk_new(~acidjnk@p200300d0c72b952850c7a959aba8feb6.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-08-18 14:39:27 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 14:41:36 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 14:47:04 +0200pbrisbin(~patrick@pool-108-16-214-93.phlapa.fios.verizon.net)
2021-08-18 14:49:17 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
2021-08-18 14:50:01 +0200acidjnk_new(~acidjnk@p200300d0c72b952850c7a959aba8feb6.dip0.t-ipconnect.de)
2021-08-18 14:54:09 +0200ubert(~Thunderbi@178.115.35.155.wireless.dyn.drei.com) (Quit: ubert)
2021-08-18 14:54:27 +0200ubert(~Thunderbi@178.115.35.155.wireless.dyn.drei.com)
2021-08-18 14:59:54 +0200chomwitt(~chomwitt@ppp-94-67-193-240.home.otenet.gr) (Ping timeout: 258 seconds)
2021-08-18 15:07:03 +0200 <maerwald> how to convert `[Word8]` to `ByteArray#`?
2021-08-18 15:07:53 +0200 <Hecate> < hpc> ah yes, truly your life is full of hardships :D // This is the only hardship in my life that is relevant to this channel :p
2021-08-18 15:08:38 +0200 <Hecate> maerwald: 'coerce' ? :p
2021-08-18 15:09:07 +0200 <Hecate> no more seriously, maerwald, 'byteArrayFromList :: Prim a => [a] -> ByteArray'
2021-08-18 15:09:15 +0200 <maerwald> I'm already doing that
2021-08-18 15:09:21 +0200 <maerwald> it doesn't yield an unlifted type
2021-08-18 15:09:34 +0200 <Hecate> oh shit yes
2021-08-18 15:09:36 +0200 <Hecate> sorry
2021-08-18 15:09:48 +0200 <maerwald> unpacking from the constructor, oddly, also doesn't
2021-08-18 15:10:29 +0200 <maerwald> so `(\(BA.ByteArray ba) -> ba) . BA.byteArrayFromList $ ws` doesn't work
2021-08-18 15:13:47 +0200Guest40(~Guest40@2a02:6b64:708f:0:9101:3c1b:1de7:cf00)
2021-08-18 15:13:47 +0200acidjnk_new(~acidjnk@p200300d0c72b952850c7a959aba8feb6.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-08-18 15:14:17 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com)
2021-08-18 15:17:48 +0200 <Guest40> is this the best place to get beginner help for haskell?
2021-08-18 15:18:22 +0200 <dminuoso> Whether it's the best that's for you to decide.
2021-08-18 15:18:39 +0200 <dminuoso> But we welcome beginners in this channel.
2021-08-18 15:19:10 +0200 <dminuoso> We also have #haskell-beginners which is less noisy, but dont feel pressured to go there. Sometimes this channel can be busy. :)
2021-08-18 15:19:28 +0200 <Guest40> that's nice, was just wondering because i didn't see anyone sending messages
2021-08-18 15:19:42 +0200 <Guest40> and whether people usually help out
2021-08-18 15:19:48 +0200 <Guest40> i'll make sure to join , thanks
2021-08-18 15:20:06 +0200 <dminuoso> You will usually have better response times in here
2021-08-18 15:20:21 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-08-18 15:20:38 +0200 <Lycurgus> and it's newbie friendly unlike some other langs/channels
2021-08-18 15:21:16 +0200 <dminuoso> Indeed, dont be scared away if people start off with advanced discussions. We dont mind beginner questions at all, even if they are very basic. :)
2021-08-18 15:22:31 +0200AlexNoo_AlexNoo
2021-08-18 15:22:48 +0200 <Guest40> thank you
2021-08-18 15:27:30 +0200 <merijn> Guest40: Activity here is spiky :p Also, most US people are asleep and the EU people are (pretending) to work :p
2021-08-18 15:31:14 +0200 <maerwald> is dlist good at fusing?
2021-08-18 15:31:55 +0200 <maerwald> example: https://paste.tomsmeding.com/GOQCMLgl
2021-08-18 15:32:09 +0200 <maerwald> I wonder if it will nicely build the bytestring or keep the list in memory
2021-08-18 15:35:23 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 15:35:48 +0200 <albet70> could Cont replace Maybe or Either?
2021-08-18 15:35:59 +0200Sgeo(~Sgeo@user/sgeo)
2021-08-18 15:36:46 +0200 <janus> how would it? it has only one constructor
2021-08-18 15:37:05 +0200wxallowed(~d4@151.51.133.244) (Ping timeout: 258 seconds)
2021-08-18 15:37:24 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-08-18 15:38:27 +0200 <albet70> oh I forget that, they all can do early exit in >>=, so I wonder that
2021-08-18 15:39:40 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-08-18 15:40:23 +0200 <albet70> Cont can jump back to the beginning in the >>= chain, how would it?
2021-08-18 15:40:23 +0200 <janus> but any definition of >>= can do early exit, surely that doesn't make them all replacements for Maybe/Either?
2021-08-18 15:40:34 +0200 <dminuoso> albet70: Cont can implement all the other haskell-writable monads.
2021-08-18 15:40:37 +0200 <dminuoso> All.
2021-08-18 15:41:46 +0200 <albet70> dminuoso how would it?
2021-08-18 15:42:57 +0200 <albet70> I wonder who create or discover Cont first?
2021-08-18 15:45:11 +0200tengu1(~tengu1@cpe-70-121-244-14.neb.res.rr.com)
2021-08-18 15:45:40 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 15:46:37 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 15:46:41 +0200 <dminuoso> albet70: https://web.archive.org/web/20150925081214/https://www.fpcomplete.com/user/dpiponi/the-mother-of-a…
2021-08-18 15:50:40 +0200chomwitt(~chomwitt@ppp-94-67-193-240.home.otenet.gr)
2021-08-18 15:52:24 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 15:54:30 +0200 <JavierNeira[m]> the original post, still available was http://blog.sigfpe.com/2008/12/mother-of-all-monads.html
2021-08-18 15:54:48 +0200slack1256(~slack1256@191.125.227.92)
2021-08-18 15:56:43 +0200ec(~ec@gateway/tor-sasl/ec)
2021-08-18 15:58:14 +0200lortabac(~lortabac@151.73.3.232) (Quit: WeeChat 2.8)
2021-08-18 16:00:36 +0200[Kalisto](~nico@user/kalisto/x-8968079)
2021-08-18 16:01:16 +0200 <[Kalisto]> hi
2021-08-18 16:01:28 +0200 <[Kalisto]> i am trying to compile an old project of mine and i get this error
2021-08-18 16:01:30 +0200 <[Kalisto]> https://paste.tomsmeding.com/dVLlVsCb
2021-08-18 16:01:37 +0200 <[Kalisto]> i don't know what to do
2021-08-18 16:01:39 +0200 <[Kalisto]> :(
2021-08-18 16:01:58 +0200 <[Kalisto]> in the cabal file i have this
2021-08-18 16:01:59 +0200 <[Kalisto]> build-depends: base >=4.11 && <4.12, gd >=3000.7 && <3000.8, mtl >=2.2 && <2.3, parsec >=3.1 && <3.2
2021-08-18 16:03:08 +0200 <raehik> it looks like your installed GHC is too new for your base dependency
2021-08-18 16:03:17 +0200 <merijn> That, yeah
2021-08-18 16:03:22 +0200 <dminuoso> [__1] rejecting: base-4.14.1.0/installed-4.14.1.0 (conflict: miniLogo => base>=4.11 && <4.12)
2021-08-18 16:03:42 +0200 <[Kalisto]> oh
2021-08-18 16:03:46 +0200 <raehik> you could loosen the dependency and see if it works, or install an older GHC
2021-08-18 16:03:51 +0200 <dminuoso> [Kalisto]: This reads: miniLogo induces a base dependency (you can, more or less, equate this with GHC version) of >=4.11 && <4.12
2021-08-18 16:04:08 +0200 <[Kalisto]> i am compiling it inside a docker container
2021-08-18 16:04:12 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 16:04:16 +0200 <dminuoso> [Kalisto]: And it rejects the (installed) base package of version 4.14.1.0 because it conflicts with that constraint I just cited.
2021-08-18 16:04:39 +0200 <[Kalisto]> i tried to, but I got errors
2021-08-18 16:04:42 +0200 <[Kalisto]> No instance for (MonadFail Data.Functor.Identity.Identity)
2021-08-18 16:04:53 +0200 <[Kalisto]> i just want to compile it :P
2021-08-18 16:06:37 +0200 <[Kalisto]> thanks
2021-08-18 16:08:31 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Ping timeout: 252 seconds)
2021-08-18 16:09:12 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-08-18 16:12:21 +0200sleblanc(~sleblanc@user/sleblanc) (Ping timeout: 258 seconds)
2021-08-18 16:12:55 +0200 <[Kalisto]> it's alive, alive! :P
2021-08-18 16:13:07 +0200 <[Kalisto]> I used the 8.4.4 docker image and it worked
2021-08-18 16:13:10 +0200 <[Kalisto]> thank you
2021-08-18 16:13:47 +0200Guest40(~Guest40@2a02:6b64:708f:0:9101:3c1b:1de7:cf00) (Quit: Client closed)
2021-08-18 16:15:11 +0200wxallowed(~d4@151.51.135.6)
2021-08-18 16:22:30 +0200dschrempf(~dominik@92-249-159-252.pool.digikabel.hu) (Quit: WeeChat 3.2)
2021-08-18 16:23:15 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-08-18 16:25:08 +0200gambpang(~ishipman@207.181.230.156)
2021-08-18 16:26:24 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 16:28:44 +0200gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2021-08-18 16:28:49 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-08-18 16:29:26 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-18 16:30:31 +0200ec(~ec@gateway/tor-sasl/ec)
2021-08-18 16:31:32 +0200pompez(~martin@user/pompez)
2021-08-18 16:33:13 +0200 <tomsmeding> it seems like the major thing impacting compatibility with early-8 series with now is MonadFail
2021-08-18 16:33:57 +0200 <tomsmeding> will ghc have one major compatibility-breaking change every major series? :p First FAM, then MonadFail
2021-08-18 16:34:57 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 16:37:23 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-08-18 16:39:15 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 16:41:18 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 16:44:48 +0200peterhil_(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-08-18 16:45:23 +0200 <albet70> dminuoso, very good article, Cont can jump back, so [] can? but [] can't early exit in jump back
2021-08-18 16:45:29 +0200artem(uid512590@id-512590.highgate.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-18 16:46:35 +0200 <gambpang> Setting aside style considerations, is there any reason to prefer expressions like `f $ g $ h $ x` in a codebase to `f . g . h $ x` (or vice versa)?
2021-08-18 16:47:17 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 16:47:28 +0200 <albet70> dminuoso, now I feel I can use Cont to do something but I don't understand it
2021-08-18 16:48:05 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 268 seconds)
2021-08-18 16:48:09 +0200Guest87(~Guest87@2a01:c23:5d93:6500:cd2c:9f7f:eeb2:be5b)
2021-08-18 16:48:23 +0200Boomerang(~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 258 seconds)
2021-08-18 16:50:14 +0200jumper149(~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
2021-08-18 16:51:40 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 240 seconds)
2021-08-18 16:51:45 +0200 <albet70> and in that article, it does not mention the notorious callCC
2021-08-18 16:53:47 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 245 seconds)
2021-08-18 16:54:43 +0200 <merijn> albet70: Not understanding Cont is normal :p
2021-08-18 16:55:02 +0200 <merijn> I've written non-trivial code using Cont, but it still melts my brain each time >.>
2021-08-18 16:55:10 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-18 16:55:25 +0200s-h-i-n-o-b-i(~quassel@104.244.75.124)
2021-08-18 16:56:15 +0200 <albet70> merijn do u have some classic examples for ContT r IO a?
2021-08-18 16:56:38 +0200 <albet70> when should I use ContT?
2021-08-18 16:56:46 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
2021-08-18 16:56:53 +0200 <merijn> albet70: Did you see the SO example on "ContT as bracket" yet?
2021-08-18 16:56:58 +0200 <albet70> which case it should be used?
2021-08-18 16:57:14 +0200 <merijn> https://stackoverflow.com/questions/26436095/what-are-good-haskell-conventions-for-managing-deeply…
2021-08-18 16:57:14 +0200 <albet70> not yet
2021-08-18 16:57:16 +0200skykanin(~skykanin@115.81-166-221.customer.lyse.net)
2021-08-18 16:57:17 +0200 <merijn> That one
2021-08-18 16:57:23 +0200 <merijn> Which is what I mostly use it for too
2021-08-18 17:01:45 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-08-18 17:02:43 +0200Pickchea(~private@user/pickchea)
2021-08-18 17:02:56 +0200dajoer(~david@user/gvx) (Quit: leaving)
2021-08-18 17:03:01 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
2021-08-18 17:04:21 +0200Obo(~roberto@h-46-59-103-134.A498.priv.bahnhof.se) (Quit: WeeChat 2.8)
2021-08-18 17:05:36 +0200Guest87(~Guest87@2a01:c23:5d93:6500:cd2c:9f7f:eeb2:be5b) (Quit: Client closed)
2021-08-18 17:06:22 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
2021-08-18 17:06:26 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Remote host closed the connection)
2021-08-18 17:07:22 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2021-08-18 17:07:41 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-08-18 17:08:15 +0200 <albet70> some people said Cont can do branch control or jump back
2021-08-18 17:08:38 +0200 <albet70> full of magic
2021-08-18 17:09:28 +0200 <kuribas> is "fromListWith (++) " quadratic in the combining function?
2021-08-18 17:10:08 +0200 <albet70> :t maybe
2021-08-18 17:10:09 +0200 <lambdabot> b -> (a -> b) -> Maybe a -> b
2021-08-18 17:10:12 +0200 <kuribas> nvm, it is prepending, ...
2021-08-18 17:11:09 +0200 <albet70> when b ~ Cont r a, it can be used to something?
2021-08-18 17:13:25 +0200tengu1(~tengu1@cpe-70-121-244-14.neb.res.rr.com) (Quit: Client closed)
2021-08-18 17:14:05 +0200qbt(~edun@user/edun)
2021-08-18 17:14:57 +0200qbt(~edun@user/edun) (Remote host closed the connection)
2021-08-18 17:15:43 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-08-18 17:17:03 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 17:17:36 +0200 <kuribas> albet70: probably...
2021-08-18 17:18:15 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 17:18:51 +0200ec(~ec@gateway/tor-sasl/ec)
2021-08-18 17:19:14 +0200nate1(~nate@2600:1010:b02a:2679:7ca9:9738:1435:e8d1)
2021-08-18 17:20:26 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 17:20:48 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-08-18 17:22:38 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 17:22:56 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-08-18 17:23:23 +0200hendursaga(~weechat@user/hendursaga)
2021-08-18 17:24:40 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 17:27:54 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk)
2021-08-18 17:28:14 +0200ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-08-18 17:28:45 +0200 <c_wraith> kuribas: prepending is the bad case for nested calls to (++). I expect fromListWith (++) would be pretty bad if there were a lot of duplicated keys
2021-08-18 17:28:51 +0200ec(~ec@gateway/tor-sasl/ec)
2021-08-18 17:30:15 +0200burnsidesLlama(~burnsides@client-8-71.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-18 17:30:39 +0200skykanin(~skykanin@115.81-166-221.customer.lyse.net) (Quit: WeeChat 3.2)
2021-08-18 17:31:01 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-08-18 17:31:48 +0200 <c_wraith> kuribas: oh, wait. English is ambiguous in fun ways. I see what you meant by "prepending", and you're right about that. I still think fromListWith (++) would be bad in the worst case.
2021-08-18 17:32:35 +0200 <kuribas> c_wraith: it's prepending like [el] ++ rest, but that's assuming the input has all singletons.
2021-08-18 17:33:04 +0200 <kuribas> c_wraith: or small lists, then it's still fine.
2021-08-18 17:33:06 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
2021-08-18 17:33:18 +0200 <kuribas> actually it's always linear...
2021-08-18 17:33:40 +0200t0zy(~t0zy@49.207.220.61)
2021-08-18 17:35:11 +0200 <c_wraith> kuribas: a quick check of the source says it's using foldl'
2021-08-18 17:35:20 +0200 <c_wraith> kuribas: which is the bad case for (++)
2021-08-18 17:36:10 +0200 <kuribas> c_wraith: dependends on the direction they apply it?
2021-08-18 17:36:48 +0200 <kuribas> fromListWith (++) [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")] == fromList [(3, "ab"), (5, "aba")]
2021-08-18 17:36:52 +0200 <kuribas> (from the docs)
2021-08-18 17:37:15 +0200 <kuribas> that looks like prepending...
2021-08-18 17:38:15 +0200 <c_wraith> oh, weird. that isn't the order I would expect the arguments at all
2021-08-18 17:38:21 +0200 <kuribas> Ah in insertWith: If the key does exist, the function will insert the pair (key, f new_value old_value).
2021-08-18 17:40:21 +0200 <c_wraith> well, I guess that makes fromListWith (++) efficient. But also not at all the operation I'd expect it to be
2021-08-18 17:41:06 +0200 <kuribas> what do you expect then?
2021-08-18 17:41:17 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-08-18 17:43:40 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-18 17:44:21 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
2021-08-18 17:46:08 +0200 <dminuoso> gambpang: the latter is refactorable, the former not.
2021-08-18 17:46:10 +0200nate1(~nate@2600:1010:b02a:2679:7ca9:9738:1435:e8d1) (Ping timeout: 240 seconds)
2021-08-18 17:46:19 +0200 <dminuoso> Or rather "easily refactorable"
2021-08-18 17:47:45 +0200favonia(~favonia@user/favonia) (Ping timeout: 248 seconds)
2021-08-18 17:48:30 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-08-18 17:51:15 +0200qbt(~edun@user/edun)
2021-08-18 17:52:10 +0200ubert(~Thunderbi@178.115.35.155.wireless.dyn.drei.com) (Ping timeout: 240 seconds)
2021-08-18 17:52:13 +0200 <c_wraith> kuribas: I'd expect it to apply the function to the args in the opposite order such that fromListWith f [(1,a),(1,b),(1,c)] === fromList [(1, (a `f` b) `f' c)]
2021-08-18 17:52:32 +0200 <c_wraith> err. `f` the second time, too.
2021-08-18 17:53:10 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2021-08-18 17:53:14 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-18 17:53:27 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-18 17:57:00 +0200cheater(~Username@user/cheater)
2021-08-18 17:57:36 +0200slack1256(~slack1256@191.125.227.92) (Remote host closed the connection)
2021-08-18 17:57:42 +0200pavonia(~user@user/siracusa)
2021-08-18 17:58:56 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 18:00:36 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-18 18:01:34 +0200Cajun(~Cajun@user/cajun)
2021-08-18 18:02:36 +0200lbseale(~lbseale@user/ep1ctetus)
2021-08-18 18:03:10 +0200aguapesada(~aguapesad@2804:14c:8793:8e2f:a406:863b:f810:2d4c) (Quit: CoreIRC for Android - www.coreirc.com)
2021-08-18 18:04:21 +0200ec(~ec@gateway/tor-sasl/ec)
2021-08-18 18:07:35 +0200 <kuribas> c_wraith: seems they optimized for (++) then :)
2021-08-18 18:08:43 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 18:09:35 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 18:12:44 +0200favonia(~favonia@user/favonia)
2021-08-18 18:13:22 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-08-18 18:15:01 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-08-18 18:16:07 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 252 seconds)
2021-08-18 18:16:25 +0200benin0369321(~benin@183.82.178.142)
2021-08-18 18:19:09 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Remote host closed the connection)
2021-08-18 18:19:58 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 268 seconds)
2021-08-18 18:19:59 +0200benin0369321benin036932
2021-08-18 18:20:19 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi)
2021-08-18 18:22:58 +0200Atum_(~IRC@user/atum/x-2392232)
2021-08-18 18:24:44 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-08-18 18:26:48 +0200econo(uid147250@user/econo)
2021-08-18 18:36:07 +0200 <dminuoso> gambpang: To elaborate on what I said earlier, writing `f . g . h $ x` or `(f . g . h) x` allows for mechanical refactoring since you can just take the composition and float it into a binding, e.g. let q = f . g . h in q x.
2021-08-18 18:38:34 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 18:39:09 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-08-18 18:40:21 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 18:44:17 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 18:50:41 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 248 seconds)
2021-08-18 18:52:00 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 18:52:04 +0200ubert(~Thunderbi@178.115.48.151.wireless.dyn.drei.com)
2021-08-18 19:02:13 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
2021-08-18 19:02:18 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-08-18 19:04:50 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-08-18 19:05:16 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-08-18 19:07:57 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-18 19:08:22 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 245 seconds)
2021-08-18 19:08:27 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-08-18 19:10:12 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-18 19:10:28 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-08-18 19:12:54 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-18 19:13:45 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-08-18 19:15:20 +0200simon1sim590
2021-08-18 19:15:56 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-18 19:16:11 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-08-18 19:16:18 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 19:16:22 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-08-18 19:18:16 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-08-18 19:18:49 +0200chomwitt(~chomwitt@ppp-94-67-193-240.home.otenet.gr) (Ping timeout: 252 seconds)
2021-08-18 19:20:05 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 19:20:13 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-18 19:24:39 +0200jakalx(~jakalx@base.jakalx.net)
2021-08-18 19:31:12 +0200fef(~thedawn@user/thedawn)
2021-08-18 19:34:22 +0200fresheyeball(~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
2021-08-18 19:40:02 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 245 seconds)
2021-08-18 19:40:07 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 19:41:10 +0200 <gambpang> dminuoso: Yeah, that's a point in favor for sure. Is it likely that the two variants wind up producing the ~same core/machine code?
2021-08-18 19:41:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-18 19:42:06 +0200 <dminuoso> Im not confident enough to answer this.
2021-08-18 19:43:25 +0200 <dminuoso> But honestly, that line of thought smells like premature optimization.
2021-08-18 19:43:37 +0200 <dminuoso> I'd worry about writing expressive, readable and maintainable code first.
2021-08-18 19:44:13 +0200 <Drew[m]1> I would be shocked if `let q = f . g . h in q x` did not inline to `(f . g . h) x`
2021-08-18 19:44:36 +0200 <dminuoso> Drew[m]1: I presume they meant ($) vs (.)
2021-08-18 19:45:03 +0200Pickchea(~private@user/pickchea)
2021-08-18 19:45:04 +0200 <dminuoso> I know GHC has some hacks in place for ($), and if memory serves right ($) actually gets completely elided in the intermediate representation to make runST work.
2021-08-18 19:45:27 +0200 <dminuoso> But Im not confident to make a claim here.
2021-08-18 19:46:01 +0200 <Drew[m]1> {-# INLINE (.) #-}
2021-08-18 19:46:01 +0200 <Drew[m]1> (.) f g = \x -> f (g x)
2021-08-18 19:46:21 +0200 <Drew[m]1> Oops that was meant to be on seperate lines
2021-08-18 19:46:23 +0200chomwitt(~chomwitt@ppp-94-67-193-240.home.otenet.gr)
2021-08-18 19:46:47 +0200 <dminuoso> And then we begin to have discussions about how the inliner works..
2021-08-18 19:46:55 +0200 <dminuoso> Or rather the simplifier
2021-08-18 19:46:58 +0200 <monochrom> I cite premature optimization too. If this is in a hotspot, read core and asm code, and/or benchmark. If this is not in a hotspot, why are you worrying.
2021-08-18 19:47:00 +0200 <Drew[m]1> Yeah
2021-08-18 19:49:19 +0200 <monochrom> And even if it's in a hotspot and the more humane code is under-optimized, the GHC people will love to know your use case, then go think about how to optimize it. There is still a possible future in which the humane version is optimized.
2021-08-18 19:51:10 +0200 <dminuoso> I mean granted, there's certain behaviors that generally lead to more performant code.
2021-08-18 19:52:13 +0200 <dminuoso> But that's something you generally develop with experience, and are often still wrong.
2021-08-18 19:52:37 +0200 <monochrom> Drew[m]1, it did come out as seperate lines, no worries, your IRC client split it for you :)
2021-08-18 19:52:49 +0200 <dminuoso> `String`, despite having a horribly inefficient cache-hostile representation, seems to perform generally good enough to not be a hot spot in any of my programs..
2021-08-18 19:52:57 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-08-18 19:53:11 +0200 <dminuoso> At least not a measurable/relevant hotspot
2021-08-18 19:53:54 +0200 <davean> tring HIGHLY depends on wher in the code it is, also when it is a problem its generally a very spread out problem
2021-08-18 19:53:59 +0200 <monochrom> Idiomatic Haskell tends not to do heavy string processing in the first place anyway. This is not Perl or Tcl or shell script.
2021-08-18 19:54:04 +0200 <davean> But it can be the best option in some cases
2021-08-18 19:57:29 +0200 <monochrom> HTML scrappers would need optimized strings. But HTML scrappers are no longer hip this year. (Yes, 5 or 10 years ago it was hip, every other day someone would come here saying "I'm writing an HTML scrapper, this is taking 1GB for a 100MB file...")
2021-08-18 19:59:03 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com)
2021-08-18 20:01:23 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-18 20:02:04 +0200 <maerwald> ppl are doing that with haskell
2021-08-18 20:02:06 +0200 <maerwald> see xeno
2021-08-18 20:02:48 +0200 <maerwald> Here's a maintained fork https://gitlab.com/migamake/xeno
2021-08-18 20:03:22 +0200 <maerwald> oddly, it's faster than some C parsers
2021-08-18 20:03:34 +0200 <maerwald> but it's not idiomatic haskell in any sense
2021-08-18 20:03:49 +0200 <maerwald> just bytestring trickery optimizing to pointer tricks
2021-08-18 20:04:45 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-18 20:04:48 +0200polyphem(~polyphem@2a02:810d:640:776c:f4c0:a27a:540e:c15e) (Read error: Connection reset by peer)
2021-08-18 20:05:13 +0200 <davean> maerwald: I don't know what Haskell you're reading, pointer tricks on bytestrings is what most of the Haskell I've read lately is all about! :)
2021-08-18 20:05:42 +0200 <maerwald> I'll be impressed if we have a fast streamly based XML parser
2021-08-18 20:05:44 +0200 <maerwald> not before
2021-08-18 20:06:11 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-08-18 20:06:37 +0200 <monochrom> Well yeah, ever since bytestring, HTML scrapper performance became a solved problem.
2021-08-18 20:07:22 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-08-18 20:08:54 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-18 20:10:59 +0200keutoi(~keutoi@223.238.95.231)
2021-08-18 20:16:39 +0200aegon(~mike@174.127.249.180)
2021-08-18 20:22:18 +0200 <dminuoso> code optimizing to memory tricks is a fairly legit and common thing to do to make code fast..
2021-08-18 20:22:25 +0200 <dminuoso> just saying..
2021-08-18 20:27:03 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2021-08-18 20:27:22 +0200 <monochrom> :)
2021-08-18 20:27:55 +0200 <aegon> huh, how do you go about testing somethign that requires a postgresql connection trying to reason about testing functions that interact with postgresql simple, should i create a dummy db and test against that :?
2021-08-18 20:28:19 +0200 <dminuoso> aegon: That's probably the most common way, yes.
2021-08-18 20:28:58 +0200 <dminuoso> Depending on what you want to test, possibly mocking or some tagless final encoding could also help. Also, if you can write code that is portable with sqlite as well, you can use sqlite for testing.
2021-08-18 20:29:41 +0200 <dminuoso> Or you can use unit tests if you can decouple the logic from the database
2021-08-18 20:29:51 +0200 <dminuoso> And bypass the need for a database entirely
2021-08-18 20:30:06 +0200 <maerwald> dminuoso: I dunno, in haskell it feels particularly fragile (and often is), because how things optimize/inline may change drastically from GHC to GHC and library version
2021-08-18 20:31:29 +0200keutoi(~keutoi@223.238.95.231) (Ping timeout: 248 seconds)
2021-08-18 20:33:07 +0200keutoi(~keutoi@157.47.26.152)
2021-08-18 20:34:25 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
2021-08-18 20:36:24 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2021-08-18 20:48:24 +0200keutoi(~keutoi@157.47.26.152) (Quit: leaving)
2021-08-18 20:48:25 +0200t0zy(~t0zy@49.207.220.61) (Remote host closed the connection)
2021-08-18 20:48:40 +0200t0zy(~t0zy@49.207.220.61)
2021-08-18 20:51:15 +0200 <dsal> aegon: I've done something like this by modeling my effects separately in a class and then having different effect providers. This also helped me when I suspected I had a performance issue in my DB layer which ended up being unaffected by a memory-only provider.
2021-08-18 20:54:32 +0200 <gambpang> In case ppl care, the context is that we prefer `f . g . h $ x` (or `(f . g . h) x`) at work exactly because of that "obvious factorization" and nobody knew what if any costs there were over using chaining ($)
2021-08-18 20:55:28 +0200 <Cale> gambpang: The compiled code will typically be identical
2021-08-18 20:56:18 +0200d0ku(~d0ku@178.43.198.70.ipv4.supernova.orange.pl)
2021-08-18 20:58:43 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 20:59:10 +0200d0ku(~d0ku@178.43.198.70.ipv4.supernova.orange.pl) (Client Quit)
2021-08-18 20:59:21 +0200d0ku(~d0ku@178.43.198.70.ipv4.supernova.orange.pl)
2021-08-18 21:04:26 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-18 21:04:42 +0200tput(~tim@S0106a84e3fe54613.ed.shawcable.net)
2021-08-18 21:08:24 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-08-18 21:14:51 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 21:14:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 21:17:46 +0200gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2021-08-18 21:18:28 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-18 21:18:41 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-08-18 21:18:54 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 21:21:24 +0200Cajun(~Cajun@user/cajun)
2021-08-18 21:22:44 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-08-18 21:40:10 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2021-08-18 21:42:06 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-18 21:42:18 +0200ystael(~ystael@user/ystael) (Read error: Connection reset by peer)
2021-08-18 21:43:50 +0200gethuen(uid502979@id-502979.stonehaven.irccloud.com)
2021-08-18 21:45:25 +0200burnside_(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 21:45:26 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-18 21:46:09 +0200alx741(~alx741@181.196.68.125) (Ping timeout: 248 seconds)
2021-08-18 21:48:58 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-08-18 21:49:08 +0200 <aegon> dsal: dminuoso: roger that I'll try each and see how things vary maybe i should have used persistant vs postgresql-simple
2021-08-18 21:52:40 +0200fabfianda(~fabfianda@37.183.255.57) (Ping timeout: 240 seconds)
2021-08-18 21:57:55 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-08-18 21:59:39 +0200alx741(~alx741@181.196.69.234)
2021-08-18 22:01:58 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net)
2021-08-18 22:03:37 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-18 22:05:40 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 268 seconds)
2021-08-18 22:11:47 +0200hendursaga(~weechat@user/hendursaga) (Remote host closed the connection)
2021-08-18 22:12:23 +0200hendursaga(~weechat@user/hendursaga)
2021-08-18 22:12:34 +0200chisui(~chisui@200116b8681e48004d4a4305e410a0e6.dip.versatel-1u1.de)
2021-08-18 22:13:39 +0200burnside_(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 22:13:44 +0200 <chisui> Hey, does anyone have a clue why the sound is skipping in this application? https://github.com/chisui/fsynth/blob/master/src/Main.hs I fear that the reason is that it's the context switch from the generating thread to the writing one.
2021-08-18 22:14:08 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 22:16:11 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-18 22:16:22 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 22:16:32 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-18 22:16:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-18 22:17:04 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 22:17:24 +0200gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2021-08-18 22:18:08 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-18 22:18:41 +0200 <shapr> chisui: does it help any to spawn off play as a separate thread?
2021-08-18 22:19:12 +0200 <shapr> you have -threaded, so I'd guess garbage collection is already on a separate thread?
2021-08-18 22:19:25 +0200 <dsal> I'm suspicious of `threadDelay 50`
2021-08-18 22:19:53 +0200 <davean> shapr: uh? Is it using hte pauseless GC?
2021-08-18 22:19:59 +0200 <davean> Otherwise thats not how threads and GC work
2021-08-18 22:20:14 +0200 <chisui> shapr: spawning a new thread doesn't help :(
2021-08-18 22:20:54 +0200 <chisui> dsal: the delay is just so that the buffer doesn't overflow. I checked and the buffer is always full enough when popped.
2021-08-18 22:20:55 +0200 <dsal> Is it using too much CPU, or too little?
2021-08-18 22:21:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-18 22:21:42 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-08-18 22:21:48 +0200 <chisui> dsal: Oh, it uses 100% on both threads it got.
2021-08-18 22:22:07 +0200 <dsal> `threadDelay` is often used as an approximation for a solution to a different problem.
2021-08-18 22:23:30 +0200 <davean> Yah, you usually want to wait until a specific time has happened, or something
2021-08-18 22:23:44 +0200 <chisui> dsal: Yeah, I should probably use something like a `TBQueue`. Unfortunately sdl2 requires the callback to be in `IO`
2021-08-18 22:24:03 +0200 <dsal> Sounds like too much CPU. :) I'd think this wouldn't be particularly expensive. Profiling might help you understand where all the CPU is going, but in general, I don't think any work should be done if there's nothing that needs computation.
2021-08-18 22:24:04 +0200 <dsal> :t atomically
2021-08-18 22:24:05 +0200 <lambdabot> error: Variable not in scope: atomically
2021-08-18 22:24:09 +0200 <dsal> boo
2021-08-18 22:24:17 +0200 <dsal> % :t atomically
2021-08-18 22:24:17 +0200 <yahb> dsal: STM a -> IO a
2021-08-18 22:24:57 +0200 <chisui> is that safe to use in a multythreaded environment?
2021-08-18 22:25:07 +0200 <davean> of course
2021-08-18 22:25:09 +0200 <davean> thats the point
2021-08-18 22:25:48 +0200 <dsal> Most other languages with multithreading support wish they could do this. :)
2021-08-18 22:25:59 +0200 <tomsmeding> chisui: the thing about STM is that all the STM actions within a single 'atomically' block should happen, well, atomically; how it does that in practice is try running it, and if it detects another thread has done something simultaneously, it rolls back and tries again
2021-08-18 22:26:40 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2021-08-18 22:27:04 +0200 <tomsmeding> where a mutex is "pessimistic concurrency", i.e. always paying the cost of locking expecting that races are going to happen often, STM is "optimistic concurrency", i.e. just going for it and paying when there actually ended up being a race
2021-08-18 22:27:32 +0200 <davean> tomsmeding: Uh, thats an implimentaiton detail that can vary
2021-08-18 22:27:37 +0200 <tomsmeding> I know
2021-08-18 22:27:56 +0200 <tomsmeding> but I think it's helpful in getting an intuitive understanding about what's even going on here, and how it _can_ even be implemented
2021-08-18 22:28:01 +0200favonia(~favonia@user/favonia) (Ping timeout: 252 seconds)
2021-08-18 22:28:13 +0200 <davean> I mean it can be implimented as a mutex too
2021-08-18 22:28:14 +0200 <tomsmeding> I often find that when I have no idea how something could even be implemented, I have no feeling for how to work with it
2021-08-18 22:28:21 +0200 <tomsmeding> okay fair
2021-08-18 22:28:35 +0200 <tomsmeding> then read it as a bit of evangelising about why STM is cool :)
2021-08-18 22:28:38 +0200 <stevenxl> Can someone point out to me what is wrong with ths stack.yaml file:
2021-08-18 22:28:40 +0200 <davean> Ok :)
2021-08-18 22:28:45 +0200 <tomsmeding> or, why ghc's implementation of it is cool
2021-08-18 22:28:48 +0200 <stevenxl> https://www.irccloud.com/pastebin/nUoRzgeh/
2021-08-18 22:28:58 +0200 <davean> tomsmeding: Its no the the coolest!
2021-08-18 22:29:10 +0200stevenxlGives me a warning "Unrecognized field in Snapshot: extra-deps".
2021-08-18 22:29:12 +0200 <davean> tomsmeding: people have played with ones that use HTM, ones that have guarrenteed progress and fairness ...
2021-08-18 22:29:28 +0200 <davean> well, I don't know that the HTM ever happened
2021-08-18 22:30:41 +0200 <stevenxl> https://www.irccloud.com/pastebin/066TZS1X/
2021-08-18 22:30:51 +0200stevenxlEven that simple file gives me an error, and that is supposedly the default.
2021-08-18 22:30:58 +0200 <chisui> Ok, I'll will change to stm. Somehow I'm still not convinced that this will fix the issue
2021-08-18 22:31:53 +0200 <tomsmeding> stevenxl: can you give the full command you're invoking, and the full error?
2021-08-18 22:32:19 +0200stevenxlHi tomsmeding - thank you for the offer to help. Apparently, A custom snapshot doesn't use extra-deps, they go under packages.
2021-08-18 22:33:02 +0200 <tomsmeding> oh this is not a stack.yaml of a project?
2021-08-18 22:33:47 +0200 <dsal> chisui: My guess is that the issue is that you're burning all the cores and putting in time delays to try to artificially slow stuff down. Just organize information exchanges with queues and have a thread keeping it populated and let the other one read from it when it needs it. Shouldn't be using much CPU.
2021-08-18 22:34:08 +0200stevenxltomsmeding: I completely missed the fact that we have a `stack.yaml` which points to a resolver.
2021-08-18 22:34:24 +0200ystael(~ystael@user/ystael)
2021-08-18 22:35:05 +0200 <chisui> dsal: It' would be great if there was a streaming library that supports this.
2021-08-18 22:36:04 +0200 <dsal> Asking for data from IO is just `atomically . readTBQueue`
2021-08-18 22:36:16 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
2021-08-18 22:36:23 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-08-18 22:36:35 +0200 <adamCS> chisui: Maybe streamly? (https://hackage.haskell.org/package/streamly)
2021-08-18 22:37:05 +0200 <chisui> should I use a bare TBQueue or chunk the data further?
2021-08-18 22:37:06 +0200jolly(~jolly@208.180.97.158)
2021-08-18 22:37:21 +0200 <chisui> adamCS: thanks, I'll take a look
2021-08-18 22:37:39 +0200 <davean> chisui: lots of streaming libraries can do this sort of thing
2021-08-18 22:38:07 +0200hexfive(~eric@50.35.83.177)
2021-08-18 22:38:22 +0200 <dsal> chisui: What you decide `a` should be there is up to you. Easy enough to change.
2021-08-18 22:40:07 +0200cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2021-08-18 22:40:16 +0200 <tomsmeding> chisui: how many things are you planning on pushing on that queue per second
2021-08-18 22:40:33 +0200 <tomsmeding> if that's 44100 things, then probably chunk that a bit :)
2021-08-18 22:40:44 +0200cheater(~Username@user/cheater)
2021-08-18 22:41:05 +0200 <chisui> tomsmeding: It's currently running on a sample rate of 48k ;)
2021-08-18 22:41:23 +0200 <davean> chisui: haha, whats your latency requirement?
2021-08-18 22:41:31 +0200 <davean> chisui: use that to calculate chunk size
2021-08-18 22:41:37 +0200 <davean> but 48kps is nothing
2021-08-18 22:41:53 +0200 <davean> I do that many web requests in a thread
2021-08-18 22:43:05 +0200 <tomsmeding> TBQueue is the classic two-lists implementation of a queue, so it will do a list reversal of roughly the whole queue every once in a while
2021-08-18 22:43:27 +0200 <tomsmeding> while throughput is fine, that's probably not great for latency, depending on exactly how large the queue will be
2021-08-18 22:43:28 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it)
2021-08-18 22:43:36 +0200 <davean> chisui: I'd probably make the chunks half the size of your latency requirement
2021-08-18 22:44:10 +0200 <davean> as a first default
2021-08-18 22:44:22 +0200 <chisui> I think that sdl always requests a fixed size chunk. I'll just use that
2021-08-18 22:45:01 +0200 <davean> chisui: last I knew it was configurable
2021-08-18 22:45:17 +0200pompez(~martin@user/pompez) (Quit: WeeChat 3.2)
2021-08-18 22:45:23 +0200 <chisui> yeah, but once it's configured it doesn't change randomly right?
2021-08-18 22:45:41 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-18 22:46:35 +0200 <davean> chisui: right, but you need to pick the size of that based on your latency requirement, so its just moving the problem
2021-08-18 22:55:37 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
2021-08-18 22:57:00 +0200fvr(uid503686@id-503686.highgate.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-18 23:01:25 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-18 23:01:42 +0200nschoe(~quassel@2a01:e0a:8e:a190:f185:3872:6a89:c741) (Ping timeout: 245 seconds)
2021-08-18 23:01:56 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-18 23:03:39 +0200acidjnk_new(~acidjnk@p200300d0c72b952850c7a959aba8feb6.dip0.t-ipconnect.de)
2021-08-18 23:03:52 +0200wrengr_awaywrengr
2021-08-18 23:05:40 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2021-08-18 23:08:19 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-08-18 23:08:50 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-08-18 23:09:31 +0200favonia(~favonia@user/favonia)
2021-08-18 23:10:22 +0200 <chisui> Thank's everyone. Using TBQueue together with sensibly sized chunks worked wonders.
2021-08-18 23:11:56 +0200 <tomsmeding> 🎉
2021-08-18 23:14:31 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-08-18 23:15:30 +0200 <monochrom> :)
2021-08-18 23:15:58 +0200hexfive(~eric@50.35.83.177) (Quit: WeeChat 3.0)
2021-08-18 23:17:35 +0200chisui(~chisui@200116b8681e48004d4a4305e410a0e6.dip.versatel-1u1.de) (Quit: Client closed)
2021-08-18 23:17:46 +0200 <monochrom> Yeah in your case you just go "atomically (enqueue this)" and "atomically (dequeue that)" and that's your IO level.
2021-08-18 23:18:00 +0200chisui(~chisui@200116b8681e48004d4a4305e410a0e6.dip.versatel-1u1.de)
2021-08-18 23:18:54 +0200 <monochrom> The STM level needs to be more fine-grained because "enqueue this" for example is multiple lines of STM code.
2021-08-18 23:19:10 +0200 <monochrom> or more precisely, multiple operations.
2021-08-18 23:20:10 +0200 <chisui> monochrom: are you talking about the current version I pushed?
2021-08-18 23:20:11 +0200 <monochrom> And other people will also have use cases requiring "atomically (enqueue this and dequeue something else)".
2021-08-18 23:20:24 +0200 <monochrom> I think yes. I haven't checked.
2021-08-18 23:21:10 +0200ubert(~Thunderbi@178.115.48.151.wireless.dyn.drei.com) (Ping timeout: 240 seconds)
2021-08-18 23:21:21 +0200 <tomsmeding> chisui: you just missed one message https://ircbrowse.tomsmeding.com/browse/lchaskell?id=145828#trid145828
2021-08-18 23:22:05 +0200 <chisui> Ah, that makes sense
2021-08-18 23:22:18 +0200 <monochrom> Oh, that. I missed that too haha.
2021-08-18 23:30:49 +0200machinedgod(~machinedg@24.105.81.50)
2021-08-18 23:33:07 +0200pgib(~textual@173.38.117.86)
2021-08-18 23:34:40 +0200qbt(~edun@user/edun) (Ping timeout: 240 seconds)
2021-08-18 23:38:11 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Read error: Connection reset by peer)
2021-08-18 23:44:23 +0200 <dsal> chisui: do you still need that IORef?
2021-08-18 23:45:08 +0200 <chisui> dsal: I use it to fill a single chunk.
2021-08-18 23:45:09 +0200 <dsal> I guess I don't quite understand that part.
2021-08-18 23:50:08 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection)
2021-08-18 23:53:55 +0200polyphem(~polyphem@2a02:810d:640:776c:f4c0:a27a:540e:c15e)
2021-08-18 23:56:37 +0200zebrag(~chris@user/zebrag)
2021-08-18 23:58:47 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)