2021/12/30

2021-12-30 00:01:45 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 00:05:21 +0100jumper149(~jumper149@static.6.71.203.116.clients.your-server.de) (Quit: WeeChat 3.3)
2021-12-30 00:06:22 +0100jinsun(~quassel@user/jinsun) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-30 00:15:15 +0100otherwise(~otherwise@c-71-231-39-206.hsd1.wa.comcast.net)
2021-12-30 00:15:55 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2021-12-30 00:19:25 +0100alx741(~alx741@157.100.93.160)
2021-12-30 00:20:02 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 268 seconds)
2021-12-30 00:21:03 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-30 00:21:16 +0100xb0o2(~xb0o2@user/xb0o2) (Quit: Client closed)
2021-12-30 00:21:25 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-30 00:21:42 +0100incertia_(~incertia@24.42.241.219)
2021-12-30 00:22:19 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 256 seconds)
2021-12-30 00:22:19 +0100incertia_incertia
2021-12-30 00:24:02 +0100 <glguy> int-e: is this the kind of solution you found for 21 using the independence of the two players? https://gist.github.com/glguy/f0352539902343a616663f61b4684f57#file-21-hs-L60
2021-12-30 00:24:29 +0100 <glguy> doing that runs in Time (mean ± σ): 20.7 ms ± 1.5 ms [User: 3.2 ms, System: 5.2 ms] -- which is a few ms off the RTS startup time
2021-12-30 00:25:58 +0100coolnickname(uid531864@user/coolnickname) (Quit: Connection closed for inactivity)
2021-12-30 00:25:59 +0100 <mjrosenb> ooh, replicateM, I'll need to remember that.
2021-12-30 00:27:19 +0100 <mjrosenb> glguy: that looks about like my solution
2021-12-30 00:28:39 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 268 seconds)
2021-12-30 00:30:40 +0100AlexNoo_(~AlexNoo@94.233.241.181)
2021-12-30 00:30:40 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 00:33:05 +0100Alex_test(~al_test@178.34.163.120) (Ping timeout: 256 seconds)
2021-12-30 00:33:17 +0100AlexZenon(~alzenon@178.34.163.120) (Ping timeout: 240 seconds)
2021-12-30 00:34:02 +0100AlexNoo(~AlexNoo@178.34.163.120) (Ping timeout: 240 seconds)
2021-12-30 00:35:33 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 00:37:03 +0100Alex_test(~al_test@94.233.241.181)
2021-12-30 00:37:43 +0100AlexZenon(~alzenon@94.233.241.181)
2021-12-30 00:38:19 +0100 <otherwise> it seems like type signature for length should show a list as the input. but it does not. I think this has to do with the nature of a foldable being applied one element at a time, but regardless of that it still takes a list as the input, right?
2021-12-30 00:38:28 +0100 <otherwise> :t length
2021-12-30 00:38:30 +0100 <lambdabot> Foldable t => t a -> Int
2021-12-30 00:38:37 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2021-12-30 00:38:47 +0100 <otherwise> length 3
2021-12-30 00:38:52 +0100 <otherwise> > length 3
2021-12-30 00:38:54 +0100 <lambdabot> error:
2021-12-30 00:38:54 +0100 <lambdabot> • No instance for (Num [a0]) arising from the literal ‘3’
2021-12-30 00:38:54 +0100 <lambdabot> • In the first argument of ‘length’, namely ‘3’
2021-12-30 00:39:17 +0100 <otherwise> > length 3:[]
2021-12-30 00:39:19 +0100 <lambdabot> error:
2021-12-30 00:39:19 +0100 <lambdabot> • No instance for (Num [a0]) arising from the literal ‘3’
2021-12-30 00:39:19 +0100 <lambdabot> • In the first argument of ‘length’, namely ‘3’
2021-12-30 00:39:26 +0100 <geekosaur> parentheses
2021-12-30 00:39:26 +0100 <otherwise> > length (3:[])
2021-12-30 00:39:28 +0100 <lambdabot> 1
2021-12-30 00:39:53 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-30 00:39:53 +0100 <geekosaur> what it shows is "t a", where t is any Foldable. Lists are just one type of Foldable
2021-12-30 00:40:11 +0100 <geekosaur> you can, btw, write list types that way as well
2021-12-30 00:40:21 +0100 <geekosaur> :t [] Int
2021-12-30 00:40:22 +0100 <lambdabot> error:
2021-12-30 00:40:22 +0100 <lambdabot> • Data constructor not in scope: Int
2021-12-30 00:40:22 +0100 <lambdabot> • Perhaps you meant variable ‘int’ (imported from Text.PrettyPrint.HughesPJ)
2021-12-30 00:40:30 +0100 <geekosaur> right, duh
2021-12-30 00:40:51 +0100 <_73> > length (Just 7)
2021-12-30 00:40:53 +0100 <lambdabot> 1
2021-12-30 00:40:56 +0100Bartol_(~Bartol@user/Bartol) (Remote host closed the connection)
2021-12-30 00:41:06 +0100 <geekosaur> anyway `[] Int` is a valid way to write `[Int]` and looks more like the definition using Foldable
2021-12-30 00:41:25 +0100 <geekosaur> with t ~ [] (you can think of ~ as equality for types)
2021-12-30 00:41:57 +0100 <geekosaur> > length Nothing
2021-12-30 00:41:59 +0100 <lambdabot> 0
2021-12-30 00:43:26 +0100 <otherwise> okay that is making more sense.
2021-12-30 00:43:34 +0100 <EvanR> otherwise, at some point length only worked on lists. Now it's more general. Same as sort works on list of anything with an Ord instance, not just [Int] or [Float]
2021-12-30 00:43:43 +0100 <EvanR> :t sort
2021-12-30 00:43:45 +0100 <lambdabot> Ord a => [a] -> [a]
2021-12-30 00:44:41 +0100 <EvanR> just that t in Foldable t is a type constructor so it's applied to something
2021-12-30 00:45:10 +0100 <otherwise> I struggle with the dissparate documentation. If I want to find the type for foldl, I type :t foldl in ghci, then I can type :doc foldl to get more valuable information, but then there is a schism. How do I find out what foldable t is? there is no command for pulling up documentation on that.
2021-12-30 00:45:29 +0100 <geekosaur> t is whatever Foldable you choose
2021-12-30 00:45:40 +0100 <EvanR> :i Foldable
2021-12-30 00:45:44 +0100 <geekosaur> you can use :info Foldable to find types with Foldable instances
2021-12-30 00:45:58 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-30 00:46:43 +0100 <EvanR> :doc Foldable
2021-12-30 00:46:47 +0100 <EvanR> cool beans
2021-12-30 00:46:52 +0100 <geekosaur> also that list will get longer as you import more things
2021-12-30 00:48:20 +0100 <otherwise> oh, I just didnt capitalize foldable ('smacks forhead')
2021-12-30 00:48:48 +0100 <otherwise> also I forgot about :i
2021-12-30 00:48:57 +0100 <geekosaur> conceptually, a Foldable type is any type that can be flattened to a list
2021-12-30 00:49:00 +0100alx741(~alx741@181.199.42.79)
2021-12-30 00:49:02 +0100DNH(~DNH@2a02:8108:1100:16d8:7898:e7cb:a448:daff) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-12-30 00:49:59 +0100 <monochrom> Eventually you need to migrate to the web browser and read the HTML doc version. There is an online copy and there is also a copy on your disk.
2021-12-30 00:50:42 +0100 <mjrosenb> I don't think I've ever looked at the copy on my disk
2021-12-30 00:50:47 +0100 <monochrom> Doing everything at the REPL is self-defeating, given that "REPL" in this case means not exceeding a VT100 via a 300-baud modem.
2021-12-30 00:50:54 +0100 <EvanR> > toList ('a','b') -- horrible example of Foldable converting something to a list xD
2021-12-30 00:50:55 +0100 <lambdabot> "b"
2021-12-30 00:51:10 +0100DNH(~DNH@2a02:8108:1100:16d8:7898:e7cb:a448:daff)
2021-12-30 00:51:14 +0100 <mjrosenb> although, that would probably solve the problem of "the thing I get when I search for Data.Map is the docs for containers-0.4.0.0"
2021-12-30 00:51:20 +0100 <geekosaur> the instance everyone loves to hate
2021-12-30 00:51:32 +0100 <monochrom> I mean, it's not like ghci is equivalent to DrRacket or Mathematica notebooks.
2021-12-30 00:51:39 +0100 <geekosaur> mjrosenb, there's usually a link at the top that will take you to the latest version
2021-12-30 00:51:57 +0100max22-(~maxime@2a01cb0883359800f9d8f30ac05a4f67.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-12-30 00:52:03 +0100 <geekosaur> although if what it shows you is old enough there won't be. but you can take that itself as a warning
2021-12-30 00:52:40 +0100jtomas(~jtomas@153.red-83-53-252.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-12-30 00:52:50 +0100 <geekosaur> also, try searching hoogle instead of a general search engine
2021-12-30 00:54:33 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 268 seconds)
2021-12-30 00:54:33 +0100alx741(~alx741@181.199.42.79) (Read error: Connection reset by peer)
2021-12-30 00:57:38 +0100 <Henson> ok, I figured some things out with the problem I was having. I got rid of TVars and used MVars, and the same problems happens, so it's not the TVars or MVars that's the problem. It's also not the TVar doubly-linked list either. I have a thread that captures images from the cameras and puts them into the captured images list (either in an MVar, TVar, or TVar linked list). I thought...
2021-12-30 00:58:48 +0100 <Henson> that the problem was with laziness and the camera images not being evaluated. When printing out the image size everything worked perfectly. However, it doesn't have to print anything related to the image, just printing /something/ from the thread is enough to make it work. If the thread doesn't print anything, it's like it doesn't even run properly and gets all jammed up. Is there anything...
2021-12-30 00:59:09 +0100 <Henson> I thought investigate with this threading problem (using the async library) where it doesn't seem like the thread loop is running reliably?
2021-12-30 00:59:22 +0100 <Henson> I thought investigate -> I should investigate
2021-12-30 00:59:32 +0100 <geekosaur> if the thread is defined incorrectly, all it may do is create a thunk that gets forced later
2021-12-30 01:00:03 +0100 <geekosaur> this is a common mistake with concurrency in Haskell
2021-12-30 01:00:16 +0100 <Henson> how would a thread be defined incorrectly?
2021-12-30 01:00:33 +0100 <geekosaur> generally its operations are too lazy
2021-12-30 01:01:17 +0100 <Henson> would doing a single putStr "." to fix the problem be something that would be a hallmark of this kind of problem?
2021-12-30 01:01:33 +0100 <geekosaur> it can be, yes
2021-12-30 01:01:36 +0100vglfr(~vglfr@88.155.24.19) (Ping timeout: 245 seconds)
2021-12-30 01:01:39 +0100 <Henson> ok, that might be what's going on
2021-12-30 01:01:58 +0100 <geekosaur> if that forces everything else to happen instead of being passed back as one big unevaluated thunk
2021-12-30 01:02:10 +0100vglfr(~vglfr@88.155.24.19)
2021-12-30 01:02:45 +0100 <geekosaur> at this point, since we can't see the code, it might be best to point you to
2021-12-30 01:02:50 +0100 <geekosaur> @where parconc
2021-12-30 01:02:50 +0100 <lambdabot> https://www.safaribooksonline.com/library/view/parallel-and-concurrent/9781449335939/
2021-12-30 01:04:10 +0100 <EvanR> Henson, btw, are you using unsafePerformIO anywhere?
2021-12-30 01:04:11 +0100 <Henson> the thread is just a function that calls a C function to get an image from the camera, then puts that image onto the end of a list in an MVar. I just call "handle <- async functionName" to get it rolling, then later "cancel handle" it.
2021-12-30 01:04:37 +0100 <EvanR> or unsafeInterleaveIO
2021-12-30 01:05:04 +0100 <geekosaur> use $! whenh setting the MVar, maybe
2021-12-30 01:05:17 +0100 <glguy> mjrosenb: I cleaned up that solution to deal with the off-by-one-turn "error" I introduced and worked around :) now it probably looks even more like yours https://glguy.net/advent/sln_2021_21/Main.html
2021-12-30 01:05:18 +0100 <EvanR> because normally when you fork a thread, it definitely runs
2021-12-30 01:05:25 +0100 <Henson> EvanR: no, all of the functions calling the camera functions happen in IO. They're also defined as "foreign import ccall unsafe" which apparently can block the calling thread until the function returns, which I think is resonable. I don't know if it block the entire runtime, or just the thread calling it. Each camera has these functions called by a separate Haskell thread.
2021-12-30 01:05:27 +0100 <geekosaur> otherwise the MVar ends up a list of thunks to be evaluated later
2021-12-30 01:05:30 +0100 <EvanR> regardless of whether someone evaluates something somewhere
2021-12-30 01:05:57 +0100 <EvanR> are you using the -threaded flag
2021-12-30 01:06:05 +0100 <Henson> EvanR: yeah, even without the printing, the thread does run, but very unreliably and sporadically
2021-12-30 01:06:08 +0100 <Henson> EvanR: yes
2021-12-30 01:06:28 +0100 <geekosaur> unsafe has a number of side effects, some of which may be unexpected (like preventing garbage collection)
2021-12-30 01:07:11 +0100 <geekosaur> and will blokc the runtime if not -threaded and possibly even with -threaded (moral: never use unsafe if it blocks. really.)
2021-12-30 01:07:20 +0100 <Henson> geekosaur: should I be using "safe" instead?
2021-12-30 01:08:29 +0100 <Henson> geekosaur: setting the MVar like this: putMVar $! mvarName mvarContents
2021-12-30 01:08:56 +0100 <EvanR> that definitely evaluates mvarName
2021-12-30 01:09:07 +0100 <EvanR> maybe that's the problem, you missed
2021-12-30 01:09:08 +0100 <geekosaur> putMVar mvarName $! mvarContents
2021-12-30 01:09:28 +0100 <geekosaur> the other would be a type error because it treats mvarName as a function
2021-12-30 01:10:04 +0100 <geekosaur> and yes, "safe" is preferable. it's slightly slower with respect to Haskell but avoids a lot of problems and won't break unexpectedly
2021-12-30 01:10:19 +0100 <hpc> generally you don't want to "unsafe" unless you know what you're doing
2021-12-30 01:11:13 +0100 <hpc> it's not one of those goofy keywords that doesn't have a human-interpretable meaning, it's there to make you look at it
2021-12-30 01:11:18 +0100alx741(~alx741@157.100.93.160)
2021-12-30 01:14:08 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-12-30 01:14:08 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-12-30 01:14:11 +0100allbery_bgeekosaur
2021-12-30 01:17:13 +0100DNH(~DNH@2a02:8108:1100:16d8:7898:e7cb:a448:daff) (Quit: Textual IRC Client: www.textualapp.com)
2021-12-30 01:17:45 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 01:17:45 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 01:17:45 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 01:18:45 +0100 <Henson> hpc: well, it looks like changing "unsafe" to "safe" makes it work now. I wrote the FFI part of the code several years ago, and at the time I guess I thought "unsafe" was the right choice. You're right about the name implying that it's not safe to use, but for some reason I've since forgotten I chose to use it. Obviously I chose poorly :-)
2021-12-30 01:19:25 +0100 <Henson> geekosaur: does the $! for setting the MVar also apply to TVars? Can I do something like "atomically $ writeTVar tvarName $! contents" ?
2021-12-30 01:20:19 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 01:20:56 +0100Omen(~Omen@2600:1702:2e30:1a40:8511:a2a3:f354:5a5e)
2021-12-30 01:21:03 +0100 <EvanR> unsafe comes with extra caveats and requirements to satisfy, things the compiler can't check
2021-12-30 01:21:27 +0100desantra(~skykanin@user/skykanin)
2021-12-30 01:21:31 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-12-30 01:21:54 +0100 <Henson> EvanR: is "safe" the call that blocks Haskell? Does it only block the thread that is calling it, or the whole runtime?
2021-12-30 01:22:00 +0100 <hpc> if that's just strict ($) i don't see why not
2021-12-30 01:22:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-30 01:22:18 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-30 01:23:29 +0100 <EvanR> your thread blocks until the call returns regardless. Blocking the whole runtime is a function of -threaded or not, number of capabilities, I'm not sure what the interactions are
2021-12-30 01:23:42 +0100 <Henson> ok, I've got some directions to investigate. It seems to work now with "safe" and MVars, so I'll go back to the TVar code add switch to "safe" and see if that works, and add "$!" if it doesn't help.
2021-12-30 01:26:03 +0100 <EvanR> you can also do
2021-12-30 01:26:07 +0100 <EvanR> evaluate contents
2021-12-30 01:26:21 +0100 <EvanR> atomically (writeTVar tv contents)
2021-12-30 01:26:50 +0100 <Henson> EvanR: so with "-threaded" it should be similar to calling the image capture functions from C threads, right? Haskell doesn't have something like the GIL in Python where it doesn't do concurrency well. From what I've read, Haskell should have excellent concurrency and multi-processing abilities, right?
2021-12-30 01:26:57 +0100 <geekosaur> it's just strict $ and yes that should also work
2021-12-30 01:27:13 +0100 <geekosaur> as long as you use -threaded, yes
2021-12-30 01:27:45 +0100 <geekosaur> note that not using -threaded can lead to some not well tested areas of the runtime, although it's also more debuggable for non-RTS-related stuff
2021-12-30 01:28:06 +0100 <geekosaur> but if you're using threads like this you *really* want -threaded
2021-12-30 01:28:52 +0100 <geekosaur> this said, iirc even without -threaded a call like that will be run separately in an RTS-owned thread and let the rest of the program run normally
2021-12-30 01:29:44 +0100 <geekosaur> (unless you use "unsafe", in which case on your own head be it)
2021-12-30 01:31:20 +0100Feuermagier(~Feuermagi@user/feuermagier)
2021-12-30 01:31:49 +0100 <Henson> geekosaur: haha, "on your own head be it" :-)
2021-12-30 01:31:53 +0100 <monochrom> Haha would be funny if it's just a matter of -threaded all along.
2021-12-30 01:31:59 +0100 <Henson> hahaha
2021-12-30 01:32:10 +0100 <EvanR> yeah I asked that almost first thing
2021-12-30 01:32:22 +0100 <EvanR> when I saw unsafe
2021-12-30 01:32:40 +0100 <Henson> geekosaur: this will be running on a multi-core system, and the plan is to make liberal use of threads and all the system's cores
2021-12-30 01:32:48 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2021-12-30 01:34:07 +0100 <monochrom> You should default to "safe" until you have hard proof that performance matters to the point you need "unsafe", and even then you pay a price somewhere else and you need to decide if it's worth it.
2021-12-30 01:34:20 +0100zaquest(~notzaques@5.130.79.72)
2021-12-30 01:34:33 +0100 <Henson> monochrom: ok
2021-12-30 01:34:51 +0100 <monochrom> And it is a trivally easy default. If you don't say "unsafe" then it's "safe". Yes, one of those nice times when it takes effort to add a bug.
2021-12-30 01:35:15 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 268 seconds)
2021-12-30 01:35:24 +0100 <hpc> once you're using -threaded there's various things you can try to make sure your ffi stays on one capability and the rest of the code stays well away from it
2021-12-30 01:35:45 +0100 <hpc> that might minimize the "ffi halting other threads" thing
2021-12-30 01:36:39 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2021-12-30 01:37:07 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
2021-12-30 01:37:50 +0100 <Henson> hpc: what kinds of things?
2021-12-30 01:38:50 +0100alx741(~alx741@157.100.93.160)
2021-12-30 01:40:47 +0100 <hpc> forkOS, and a thing i don't remember the name for that decides what capabilities a forkIO thread can live on
2021-12-30 01:40:49 +0100 <Henson> by the way, everyone, thanks so much for all your advice. I've got several avenues to pursue to try to resolve the problem.
2021-12-30 01:41:14 +0100 <Henson> hpc: something about pinned OS threads, right?
2021-12-30 01:41:43 +0100 <hpc> something like that? i have never had a use case for it so it was always "oh that's neat" whenever i scroll through haddock
2021-12-30 01:48:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 01:51:34 +0100desantra(~skykanin@user/skykanin) (Quit: WeeChat 3.3)
2021-12-30 01:51:58 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a)
2021-12-30 01:52:28 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 01:53:56 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 01:53:56 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 01:54:25 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 01:55:27 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-30 01:55:33 +0100AlexNoo__(~AlexNoo@94.233.241.181)
2021-12-30 01:55:43 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
2021-12-30 01:56:07 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-12-30 01:58:32 +0100AlexNoo_(~AlexNoo@94.233.241.181) (Ping timeout: 240 seconds)
2021-12-30 02:02:24 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 268 seconds)
2021-12-30 02:04:53 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 02:11:16 +0100phma(~phma@2001:5b0:211f:d0f8:a0d5:904f:4002:7904) (Read error: Connection reset by peer)
2021-12-30 02:11:44 +0100phma(phma@2001:5b0:211f:d0f8:a0d5:904f:4002:7904)
2021-12-30 02:12:05 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 02:12:17 +0100alx741(~alx741@157.100.93.160)
2021-12-30 02:14:34 +0100infinity0(~infinity0@occupy.ecodis.net) (Ping timeout: 260 seconds)
2021-12-30 02:14:46 +0100infinity0(~infinity0@occupy.ecodis.net)
2021-12-30 02:16:47 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-12-30 02:19:32 +0100otherwise(~otherwise@c-71-231-39-206.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
2021-12-30 02:23:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-12-30 02:30:53 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 02:36:42 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2021-12-30 02:40:37 +0100acidjnk(~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2021-12-30 02:41:30 +0100kmein(~weechat@user/kmein)
2021-12-30 02:42:49 +0100kmein(~weechat@user/kmein) (Client Quit)
2021-12-30 02:43:05 +0100kmein(~weechat@user/kmein)
2021-12-30 02:46:24 +0100kmein(~weechat@user/kmein) (Client Quit)
2021-12-30 02:46:42 +0100kmein(~weechat@user/kmein)
2021-12-30 02:48:42 +0100alx741(~alx741@157.100.93.160)
2021-12-30 02:50:29 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 268 seconds)
2021-12-30 02:51:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 02:51:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 02:51:55 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 02:52:20 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
2021-12-30 02:53:05 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 02:54:09 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 02:54:13 +0100gcdotdev(~gcdotdev@user/gcdotdev)
2021-12-30 02:54:32 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-30 02:56:39 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2021-12-30 02:56:57 +0100kmein(~weechat@user/kmein)
2021-12-30 02:57:23 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
2021-12-30 02:59:03 +0100gcdotdev(~gcdotdev@user/gcdotdev) (Quit: Client closed)
2021-12-30 03:05:22 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 03:06:18 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 03:06:33 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 03:07:08 +0100otherwise(~otherwise@c-73-221-44-172.hsd1.wa.comcast.net)
2021-12-30 03:10:27 +0100fjmorazan(~quassel@user/fjmorazan) (Quit: fjmorazan)
2021-12-30 03:11:00 +0100fjmorazan(~quassel@user/fjmorazan)
2021-12-30 03:11:45 +0100curiousgay(~curiousga@77-120-141-90.kha.volia.net) (Ping timeout: 256 seconds)
2021-12-30 03:12:08 +0100alx741(~alx741@157.100.93.160)
2021-12-30 03:14:31 +0100Tuplanolla(~Tuplanoll@91-159-69-90.elisa-laajakaista.fi) (Quit: Leaving.)
2021-12-30 03:18:15 +0100moonlighter69(~moonlight@47.146.14.64)
2021-12-30 03:18:41 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 03:26:23 +0100ajb(~ajb@cupid.whatbox.ca) (Remote host closed the connection)
2021-12-30 03:28:14 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2021-12-30 03:28:33 +0100kmein(~weechat@user/kmein)
2021-12-30 03:29:04 +0100moonlighter69(~moonlight@47.146.14.64) (Remote host closed the connection)
2021-12-30 03:31:36 +0100kmein(~weechat@user/kmein) (Client Quit)
2021-12-30 03:31:52 +0100kmein(~weechat@user/kmein)
2021-12-30 03:33:01 +0100infinity0(~infinity0@occupy.ecodis.net) (Ping timeout: 240 seconds)
2021-12-30 03:33:48 +0100kmein(~weechat@user/kmein) (Client Quit)
2021-12-30 03:34:06 +0100kmein(~weechat@user/kmein)
2021-12-30 03:34:21 +0100ajb(~ajb@cupid.whatbox.ca)
2021-12-30 03:34:27 +0100infinity0(~infinity0@occupy.ecodis.net)
2021-12-30 03:35:19 +0100kmein(~weechat@user/kmein) (Client Quit)
2021-12-30 03:35:37 +0100kmein(~weechat@user/kmein)
2021-12-30 03:36:43 +0100alx741(~alx741@157.100.93.160)
2021-12-30 03:37:15 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
2021-12-30 03:38:48 +0100kmein(~weechat@user/kmein) (Client Quit)
2021-12-30 03:38:57 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
2021-12-30 03:39:07 +0100kmein(~weechat@user/kmein)
2021-12-30 03:41:13 +0100octeep[m](~octeepoct@2001:470:69fc:105::1:3dbf) (Quit: Client limit exceeded: 20000)
2021-12-30 03:43:54 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-30 03:45:45 +0100xff0x(~xff0x@port-92-193-205-13.dynamic.as20676.net) (Ping timeout: 256 seconds)
2021-12-30 03:46:48 +0100Codaraxis_(~Codaraxis@user/codaraxis)
2021-12-30 03:47:46 +0100xff0x(~xff0x@2001:1a81:527e:7f00:c95b:8db9:d638:e5ae)
2021-12-30 03:50:51 +0100Codaraxis(~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2021-12-30 03:54:36 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 03:58:36 +0100Movedtosridoneem(~sridmatri@2001:470:69fc:105::1c2) (Quit: Client limit exceeded: 20000)
2021-12-30 03:59:14 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2021-12-30 04:07:42 +0100infinity0(~infinity0@occupy.ecodis.net) (Remote host closed the connection)
2021-12-30 04:12:12 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2021-12-30 04:12:12 +0100alx741(~alx741@157.100.93.160)
2021-12-30 04:12:30 +0100infinity0(~infinity0@occupy.ecodis.net)
2021-12-30 04:12:34 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 04:19:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 04:23:07 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-30 04:23:32 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds)
2021-12-30 04:23:32 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 04:24:46 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
2021-12-30 04:25:28 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2021-12-30 04:37:17 +0100danso(~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds)
2021-12-30 04:39:16 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-30 04:40:12 +0100alx741(~alx741@157.100.93.160)
2021-12-30 04:44:16 +0100danso(~danso@d67-193-121-2.home3.cgocable.net)
2021-12-30 04:47:49 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2021-12-30 04:47:56 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-12-30 04:47:56 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2021-12-30 04:47:56 +0100finn_elijaFinnElija
2021-12-30 04:52:39 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 04:53:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-30 04:56:01 +0100td_(~td@muedsl-82-207-238-009.citykom.de) (Ping timeout: 256 seconds)
2021-12-30 04:57:30 +0100td_(~td@94.134.91.217)
2021-12-30 05:07:39 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2021-12-30 05:08:34 +0100SummerSonw(~The_viole@203.77.49.232) (Quit: Leaving)
2021-12-30 05:08:50 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 05:10:13 +0100 <InternetCitizen> why is Text so much faster than [Char] ?
2021-12-30 05:10:23 +0100 <InternetCitizen> is it some sort of Array Char?
2021-12-30 05:10:25 +0100octeep[m](~octeepoct@2001:470:69fc:105::1:3dbf)
2021-12-30 05:10:39 +0100SridharRatnakum4(~sridmatri@2001:470:69fc:105::1c2)
2021-12-30 05:10:41 +0100alx741(~alx741@157.100.93.160)
2021-12-30 05:14:57 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
2021-12-30 05:15:37 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-30 05:18:19 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-30 05:18:21 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-30 05:20:30 +0100 <InternetCitizen> it comes down to an Internal `!Array` where `data Array = ByteArray ByteArray#`
2021-12-30 05:21:08 +0100 <InternetCitizen> what do the ! and # mean?
2021-12-30 05:22:16 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 05:29:23 +0100mbuf(~Shakthi@122.162.67.169)
2021-12-30 05:29:25 +0100 <EvanR> strict Text is implemented as an array, while [Char] is a linked list
2021-12-30 05:29:31 +0100 <EvanR> of individual Chars
2021-12-30 05:30:02 +0100 <EvanR> ! in data types indicates a strict field
2021-12-30 05:30:21 +0100 <EvanR> # is found in primitives
2021-12-30 05:30:26 +0100deadmarshal(~deadmarsh@95.38.115.121)
2021-12-30 05:37:39 +0100dsrt^(~dsrt@207.5.54.6) (Remote host closed the connection)
2021-12-30 05:40:16 +0100alx741(~alx741@157.100.93.160)
2021-12-30 05:44:37 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2021-12-30 05:52:35 +0100 <InternetCitizen> EvanR: what does it mean for ByteArray to be a primitive? could I expect it to be a u8* in LLVM?
2021-12-30 05:54:15 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 05:58:55 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 06:00:26 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-12-30 06:01:20 +0100 <catern> what do you call a language which distinguishes pure and impure functions? (the obvious answer is "functional" but making such a distinction doesn't require you to have first-class functions)
2021-12-30 06:02:28 +0100alfonsox(~quassel@103.92.42.182)
2021-12-30 06:02:37 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
2021-12-30 06:07:55 +0100 <maerwald[m]> catern: huh?
2021-12-30 06:08:06 +0100 <maerwald[m]> That somehow makes no sense
2021-12-30 06:08:49 +0100 <remexre> catern: "effect typed" maybe?
2021-12-30 06:09:34 +0100 <maerwald[m]> 1. there are pure and non-pure functional languages, 2. Haskell does NOT distinguish between pure and impure functions (which is why unsafeperformIO is so dangerous)
2021-12-30 06:10:26 +0100phma(phma@2001:5b0:211f:d0f8:a0d5:904f:4002:7904) (Read error: Connection reset by peer)
2021-12-30 06:11:53 +0100phma(phma@2001:5b0:211f:42c8:a947:49ab:30cf:8035)
2021-12-30 06:12:14 +0100 <int-e> glguy: yeah, that's the kind of code I got, though it's more, uhm, monolithic (and handles the alternation between players differently): https://paste.tomsmeding.com/7eezQWz5
2021-12-30 06:12:16 +0100 <catern> maerwald[m]: re 1, yes that's another great reason why "functional" is the wrong answer. re 2, it does if you ignore unsafePerformIO and friends
2021-12-30 06:12:26 +0100 <int-e> (slightly cleaned up from my previous paste)
2021-12-30 06:12:30 +0100 <catern> remexre: maybe but that's a little verbose...
2021-12-30 06:12:33 +0100 <maerwald[m]> catern: 2. No, it doesn't
2021-12-30 06:12:45 +0100 <catern> remexre: and you wouldn't usually say that about Haskell
2021-12-30 06:12:46 +0100 <maerwald[m]> Then you have a misconception of what purity is
2021-12-30 06:12:49 +0100alx741(~alx741@181.199.42.79)
2021-12-30 06:12:51 +0100 <int-e> (still uncommented though)
2021-12-30 06:13:17 +0100 <maerwald[m]> all functions in Haskell are pure to the compiler
2021-12-30 06:13:38 +0100 <maerwald[m]> The compiler knows nothing about IO and it isn't treated special
2021-12-30 06:13:53 +0100 <remexre> catern: I wouldn't b/c haskell doesn't make that distinction; I would agree with maerwald; (a -> m b) is a pure function in the absence of shenanigans
2021-12-30 06:14:06 +0100 <catern> fine, fine
2021-12-30 06:14:21 +0100 <catern> what do you call a language which distinguishes pure and impure expressions?
2021-12-30 06:14:37 +0100 <maerwald[m]> I'm not sure such a language exists even
2021-12-30 06:14:43 +0100 <remexre> Koka does, doesn't it?
2021-12-30 06:14:53 +0100 <catern> (haskell clearly does...)
2021-12-30 06:14:58 +0100notzmv(~zmv@user/notzmv)
2021-12-30 06:15:51 +0100 <maerwald[m]> remexre: does the compiler know about purity and automatically distinguish that, regardless of types?
2021-12-30 06:16:02 +0100 <remexre> catern: is `Reader (\x -> x)` a pure or impure expression
2021-12-30 06:16:33 +0100 <int-e> glguy: oh and I didn't do anything clever (\live wins -> 27*live - wins) for the accounting the number of positions since the main point for me was asymptotic performance
2021-12-30 06:16:50 +0100 <remexre> maerwald[m]: I believe so
2021-12-30 06:17:19 +0100 <maerwald[m]> Even C compilers have a concept of pure functions, but you annotate them as such and the compiler will make no effort to prove it
2021-12-30 06:17:31 +0100 <glguy> int-e: I don't know if that was clever or not... I was torn between computing that directly and indirection as in my solution so taht I could have a simpler unfoldr generated list
2021-12-30 06:17:34 +0100 <maerwald[m]> So if you mess up, you get optimization dependent bugs
2021-12-30 06:18:02 +0100 <remexre> ig I should amend, "I believe so, but in the same way Rust lifetime analysis is separate from typechecking"
2021-12-30 06:18:12 +0100 <glguy> int-e: It's fun seeing the very similar structure in an almost completely different presentation :)
2021-12-30 06:18:24 +0100 <glguy> you're really enjoying pattern synonyms!
2021-12-30 06:18:25 +0100 <catern> remexre: impure, of course
2021-12-30 06:18:30 +0100 <glguy> guard patterns*
2021-12-30 06:18:33 +0100 <int-e> I really am
2021-12-30 06:18:45 +0100alx741(~alx741@181.199.42.79) (Read error: Connection reset by peer)
2021-12-30 06:19:02 +0100 <int-e> a large part of the joy is that they're not recursive
2021-12-30 06:19:06 +0100 <remexre> catern: are datatype constructors pure functions?
2021-12-30 06:19:20 +0100 <glguy> int-e: yeah, I guess for non-recursive bindings they replace let
2021-12-30 06:19:29 +0100 <glguy> remexre: only the ones that are functions
2021-12-30 06:19:46 +0100theproffesor_(~theproffe@2601:282:847f:8010::5fff)
2021-12-30 06:19:53 +0100 <glguy> True and False aren't functions and are datatype constructors
2021-12-30 06:19:55 +0100the_proffesor(~theproffe@user/theproffesor) (Remote host closed the connection)
2021-12-30 06:19:58 +0100 <remexre> ah, fair
2021-12-30 06:20:02 +0100 <remexre> I'll amend that too
2021-12-30 06:20:42 +0100 <int-e> glguy: but they don't work nicely with `where` so there is a downside when code becomes more complex
2021-12-30 06:21:13 +0100 <remexre> catern: if you agree that the Reader constructor is a pure function and the expression (\x -> x) is pure, `Reader (\x -> x)' has to be pure as well
2021-12-30 06:21:21 +0100 <glguy> int-e: I haven't decided if it's *better* but it is faster and I like the change. I updated day 18; exploding snailfish arithmetic; such that it does all the explodes in one "pass" walking up and down the tree, tracking where it is with zippers https://glguy.net/advent/sln_2021_18/src/Main.html#explode
2021-12-30 06:22:44 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 06:23:07 +0100sirlensalot(~sirlensal@ool-44c5f8c9.dyn.optonline.net) (Quit: sirlensalot)
2021-12-30 06:25:16 +0100 <glguy> now I'm wondering if the (Maybe Int, Tree, Maybe Int) version works just as well for the single pass; need to give that a stab next
2021-12-30 06:25:17 +0100 <catern> remexre: I don't think so; I can transform any impure program into a collection of pure components, but that doesn't make it pure
2021-12-30 06:25:59 +0100 <remexre> catern: the description of an impure program may be pure
2021-12-30 06:26:38 +0100 <catern> I disagree that there's a meaningful distinction between an impure program and its description
2021-12-30 06:27:02 +0100 <remexre> would you say that `"putStrLn \"hello\""' is a description of an impure program
2021-12-30 06:27:11 +0100 <catern> sure
2021-12-30 06:27:23 +0100 <maerwald[m]> putStrLn is a pure function
2021-12-30 06:27:27 +0100 <remexre> like, that being a string literal
2021-12-30 06:27:33 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
2021-12-30 06:27:50 +0100 <int-e> glguy: it's a zipper!
2021-12-30 06:27:58 +0100 <remexre> maerwald[m]: pretend I wrote `"System.out.println(\"hello\")"' if you want :P
2021-12-30 06:28:07 +0100 <maerwald[m]> remexre: ?
2021-12-30 06:28:09 +0100nuh^(~nuh@207.5.54.6)
2021-12-30 06:28:10 +0100 <glguy> pure/impure describe /functions/
2021-12-30 06:28:22 +0100 <remexre> a string literal containing the source of a program describes the program
2021-12-30 06:28:40 +0100 <remexre> but I don't think there's a reasonable definition of impure that counts a string literal as impure
2021-12-30 06:29:01 +0100 <glguy> string literals aren't functions, so they can't be pure or impure
2021-12-30 06:29:12 +0100 <remexre> an expression could be impure, no?
2021-12-30 06:29:37 +0100 <maerwald[m]> https://www.semanticscholar.org/paper/What-is-a-Purely-Functional-Language-Sabry/63c46be541fa2f180…
2021-12-30 06:29:43 +0100 <maerwald[m]> Check that out
2021-12-30 06:30:14 +0100 <maerwald[m]> This discussion is semantically too vague
2021-12-30 06:31:10 +0100 <otherwise> is machine code pure or impure?
2021-12-30 06:31:20 +0100 <remexre> pdf link there gives me a cloudflare error 1020 >_>
2021-12-30 06:31:22 +0100 <otherwise> disregard, I don't even know what that question means
2021-12-30 06:31:23 +0100 <catern> remexre: oh - well, if you partner that with the type that the program evaluates to, yes, I'd say that's a description of an impure program
2021-12-30 06:31:34 +0100 <remexre> catern: why does the type matter?
2021-12-30 06:31:55 +0100 <catern> remexre: and to evalute that impure program to get its result, is an impure operation
2021-12-30 06:32:18 +0100 <catern> hence: it's an impure expression that gives you ()
2021-12-30 06:32:20 +0100 <remexre> right, but the expression containing the _description itself_ is pure
2021-12-30 06:32:47 +0100 <catern> I mean, I agree with glguy, it's better to talk about pure/impure in terms of functions
2021-12-30 06:33:13 +0100 <catern> anyway, I don't think it's constructive to discuss whether Haskell distinguishes pure and impure functions
2021-12-30 06:33:41 +0100 <maerwald[m]> Try this link then https://www.cambridge.org/core/journals/journal-of-functional-programming/article/what-is-a-purely…
2021-12-30 06:33:55 +0100 <maerwald[m]> catern: it doesn't distinguish them
2021-12-30 06:34:59 +0100 <remexre> I think you need some notion of an expression having an effect to talk about languages in general; in my mind, "an impure function" is shorthand for "a function f such that for some x, (f x) is an impure expression"
2021-12-30 06:36:15 +0100alx741(~alx741@157.100.93.160)
2021-12-30 06:38:54 +0100 <remexre> maerwald[m]: I'm unconvinced por is a pure operator :P
2021-12-30 06:39:18 +0100 <catern> ultimately, I think any argument you could use to argue that Haskell doesn't have some kind of distinction between pure and impure, would also apply to any language with an effect system
2021-12-30 06:40:05 +0100 <catern> in languages with an effect system you can also pass around things which you can impurely evaluate to get some value
2021-12-30 06:40:25 +0100 <otherwise> catern, do you have a line of code in mind that would illuminate your case?
2021-12-30 06:41:09 +0100 <maerwald[m]> Purity is about equivalence of evaluation strategies, not about types or execution of a program. If changing the evaluation strategy doesn't change the semantics of your program, it's "pure". That's an oversimplification, but yeah
2021-12-30 06:42:20 +0100 <catern> then all languages with effect systems are pure, because effect handling is not part of the evaluation strategy
2021-12-30 06:42:31 +0100 <catern> er, rather, isn't changed if you change the evaluation,
2021-12-30 06:42:32 +0100 <maerwald[m]> Even effects systems are mostly orthogonal
2021-12-30 06:42:33 +0100 <catern> strategy
2021-12-30 06:43:40 +0100 <maerwald[m]> You don't need an effects system for your language to be pure. And the existence of one doesn't magically make your language pure
2021-12-30 06:44:40 +0100 <catern> okay so do you know of any language which has a (statically checked) distinction between pure and impure in any way?
2021-12-30 06:45:01 +0100 <catern> i'd say that "languages with an effect system" are a clear example of such a language
2021-12-30 06:45:06 +0100 <catern> (as is Haskell)
2021-12-30 06:45:41 +0100 <maerwald[m]> I'm giving up. I think you still have a misconception of purity.
2021-12-30 06:46:21 +0100 <remexre> catern: okay, I'll go with a modification of the above; does the `Monad ((->) r)' instance imply that `(\x -> x)' is an impure function
2021-12-30 06:46:30 +0100 <remexre> the existence of that instance*
2021-12-30 06:47:39 +0100 <catern> remexre: no, I suppose not
2021-12-30 06:48:52 +0100 <remexre> then since Reader is just a newtype around that, `Reader (\x -> x)' ought to also be pure
2021-12-30 06:49:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 06:49:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 06:50:56 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-12-30 06:51:57 +0100antony(~The_viole@203.77.49.232)
2021-12-30 06:55:33 +0100 <maerwald[m]> An example of a language that can distinguish between purity and impurity would e.g. be a language that allows global mutable variables, but has knowledge about where these are used in the entire callstack and then choose different evaluation strategies based on that knowledge. I don't even think that's a good thing, because it would make reasoning very hard.
2021-12-30 06:57:51 +0100vglfr(~vglfr@88.155.24.19) (Ping timeout: 256 seconds)
2021-12-30 07:04:26 +0100 <catern> remexre: sorry, what exactly is `Reader (\x -> x)'? is that just ask?
2021-12-30 07:04:31 +0100 <remexre> yeah
2021-12-30 07:05:02 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-30 07:07:04 +0100 <catern> okay, I grant that "pure" and "impure" are fuzzy concepts... it's hard to claim "something which is parameterized over some functions and a type" is always impure... it's possible that it's a detail of *what* concrete instance it's applied to, but then that would rather weaken my argument...
2021-12-30 07:07:53 +0100 <catern> I mean, I suppose a pure implementation for State is to just throw away the puts and return a constant for the gets
2021-12-30 07:07:53 +0100alx741(~alx741@157.100.93.160)
2021-12-30 07:08:32 +0100 <maerwald[m]> purely functional isn't a fuzzy concept, but it's often used in a fuzzy way
2021-12-30 07:08:38 +0100 <remexre> I'd argue rather strongly that the existing implementation is pure too...
2021-12-30 07:10:17 +0100 <catern> remexre: that's true too
2021-12-30 07:11:30 +0100 <catern> but so is the implementation of Cont, and in some sense, so is the implementation of IO, if you run your program in a VM without access to external state/randomness
2021-12-30 07:11:49 +0100 <c_wraith> "pure" is a weird term to apply to types other than (->)
2021-12-30 07:12:05 +0100 <c_wraith> purity is a property of functions
2021-12-30 07:12:55 +0100 <remexre> c_wraith: if my language had a primitive expression (printHelloWorldAndYield42 : Nat), it would make sense to call that expression impure, no?
2021-12-30 07:13:50 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 07:13:50 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 07:13:50 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 07:14:20 +0100 <maerwald[m]> c_wraith: anything that can be evaluated can be pure or impure
2021-12-30 07:14:20 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 07:14:52 +0100antony(~The_viole@203.77.49.232) (Quit: Leaving)
2021-12-30 07:16:00 +0100 <remexre> catern: if you were to implement the Haskell RTS in a pure language, I'd agree with that
2021-12-30 07:16:04 +0100 <catern> okay, so then what even is an effect? is callCC an effect? are put/get effects? how is an effect distinguished from just any random function that is an input to another function?
2021-12-30 07:17:52 +0100 <c_wraith> maerwald[m]: and in Haskell, only functions have non-trivial evaluation. Anything else is just a data constructor.
2021-12-30 07:17:59 +0100 <remexre> I feel like I've seen a proper definition somewhere, but my loose definition is, "something you can't implement via a definitional interpreter in the untyped lambda calculus"
2021-12-30 07:17:59 +0100 <catern> remexre: I don't that's necessary :) C is monadic, everything is monadic as oleg says https://okmij.org/ftp/Computation/monadic-shell.html#All%20i/o%20is%20monadic :)
2021-12-30 07:18:46 +0100 <catern> remexre: well, so are functions which use effects "impure"?
2021-12-30 07:19:36 +0100 <remexre> catern: remembering that e.g. `Reader (\x -> x)' is a pure description of an effect, not an impure expression itself; yes
2021-12-30 07:19:38 +0100 <c_wraith> catern: depends on if the effect is the result of calling the function or not. In haskell, only a very small number of functions like unsafePerformIO, unsafeInterleaveIO, unsafeInterleaveST, etc, are doing things that are impure
2021-12-30 07:19:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-30 07:20:22 +0100jco(~jco@90-228-194-139-no542.tbcn.telia.com)
2021-12-30 07:21:33 +0100 <c_wraith> in *most* cases, what's being done is a pure calculation that results in some sort of description of an effect. This is distinguishable from actually running the effect.
2021-12-30 07:22:32 +0100 <maerwald[m]> I tried to explain that an hour ago :)
2021-12-30 07:23:07 +0100 <catern> okay, sure, but I have to go back to: does a language with an effect system distinguish pure and impure functions? an effect system also lets me compose together impure functions to produce another impure function without actually "running the effect"
2021-12-30 07:23:15 +0100 <c_wraith> man, unsafeInterleaveST hits that awkward combination of really broken when misused and really helpful when used properly.
2021-12-30 07:24:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-30 07:24:07 +0100 <remexre> catern: I mean, I'd say `traceShowId . traceShowId' is a pure expression that yields an impure function
2021-12-30 07:24:45 +0100 <remexre> traceShowId being an impure function in Haskell
2021-12-30 07:25:09 +0100 <catern> Haskell lets me create descriptions of a big chain of effects, but so do many languages - heck, even C! "printf" is a description of a bunch of effects, if I write a function "print_hello" which calls printf, then print_hello is also just a description of some effects, it's not actually run until I type ./a.out in my terminal...
2021-12-30 07:25:45 +0100 <c_wraith> catern: a language like haskell *doesn't* distinguish between pure and impure functions. That's why impure functions are so dangerous.
2021-12-30 07:25:48 +0100 <catern> but I still think there is some difference between Haskell and C here, even though they both let me make functions which describe a bunch of effects!
2021-12-30 07:25:54 +0100 <catern> make values*
2021-12-30 07:26:40 +0100seer(~delicacie@2601:6c4:4080:3f80:452b:5b2:a00e:7e62)
2021-12-30 07:26:44 +0100 <seer> @[exa]
2021-12-30 07:26:44 +0100 <lambdabot> Unknown command, try @list
2021-12-30 07:26:47 +0100 <maerwald[m]> c_wraith: I also explained that an hour ago ^^
2021-12-30 07:26:48 +0100 <catern> (although see the oleg link I just linked)
2021-12-30 07:26:53 +0100 <seer> can you help me out?
2021-12-30 07:26:56 +0100seerInst
2021-12-30 07:27:07 +0100 <Inst> I need to find a professor willing to supervise a course / seminar course I want to teach
2021-12-30 07:27:21 +0100 <Inst> what I'm trying to do is to bribe people with MMO gold equivalent of $4
2021-12-30 07:27:35 +0100 <Inst> for non-programmers etc to learn Haskell
2021-12-30 07:27:40 +0100 <remexre> catern: I think that Oleg post isn't quite unconfusing enough
2021-12-30 07:27:46 +0100 <Inst> targeted courseload is 72-144 hours
2021-12-30 07:27:56 +0100 <remexre> I think it is valid to say (and possibly valid to interpret that post as saying),
2021-12-30 07:27:59 +0100 <Inst> since this is an online course
2021-12-30 07:28:03 +0100 <Inst> taught on Twitch.tv
2021-12-30 07:28:26 +0100Omen(~Omen@2600:1702:2e30:1a40:8511:a2a3:f354:5a5e) (Leaving)
2021-12-30 07:28:41 +0100 <remexre> you can treat a string of bytes as a pure description of an impure program, and the string of bytes remains pure
2021-12-30 07:28:55 +0100 <Inst> instead of having grading, altohugh we'll have proper problem sets (which are divided into review of current lesson, spaced repetition review of previous lessons, extension of current lesson, and preview of future concepts)
2021-12-30 07:29:11 +0100 <Inst> we'll give a prize for best haskell program
2021-12-30 07:29:18 +0100 <Inst> would be $80 in MMO gold
2021-12-30 07:29:26 +0100 <Inst> $40 for second prize, $20 for third prize
2021-12-30 07:29:35 +0100 <Inst> ideal is that their stuff can be contributed to Hackage
2021-12-30 07:29:55 +0100 <remexre> and a reasonable followup might be, you could argue that an interpreter for the strings of bytes might not have to be impure, even if the language the string-of-bytes is describing is e.g. machine code
2021-12-30 07:30:01 +0100 <Inst> long-term, I want to extend that to steam and steam gift cards, with a $20 entry prize, and a $500 first prize, $250 second prize, and $125 third prize
2021-12-30 07:30:59 +0100 <Inst> interests: #1, scamming people into providing a good Windows API UI framework for Haskell
2021-12-30 07:31:14 +0100 <Inst> #2, producing a genericized Haskell course that professors can adapt to their needs
2021-12-30 07:31:37 +0100 <remexre> this argument could be made more concrete by thinking of the amd64 syscall instruction as your single effect added to http://wall.org/~lewis/2013/10/15/asm-monad.html
2021-12-30 07:31:45 +0100 <Inst> i ideally would like to produce "Accelerated Intro Computer Science in Haskell and C"
2021-12-30 07:31:48 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-30 07:31:50 +0100ensyde(~Omen@2600:1702:2e30:1a40:8511:a2a3:f354:5a5e)
2021-12-30 07:31:54 +0100 <Inst> which gives you data structures and algorithms baked in
2021-12-30 07:31:55 +0100 <remexre> and imagining an implementation of that effect that e.g. sets rax to -EAGAIN
2021-12-30 07:32:27 +0100alx741(~alx741@157.100.93.160)
2021-12-30 07:32:58 +0100vglfr(~vglfr@88.155.6.191)
2021-12-30 07:33:02 +0100 <Inst> /s/in/with
2021-12-30 07:33:16 +0100 <remexre> (okay, I think more nuance is needed abt interrupts, but we could pretend for the sake of argument that we're interpreting in Maybe and synchronous interrupts result in our interpreter yielding Nothing)
2021-12-30 07:33:37 +0100 <remexre> er wait, that's not the right post
2021-12-30 07:34:16 +0100 <c_wraith> yeah, watch out for Oleg's site - everything is anchors into one giant page
2021-12-30 07:34:18 +0100 <catern> remexre: I dunno, so I think pure and impure is fuzzy, but I still think there's something inherently impure about, e.g., the IO monad even with a really simple implementation like always EAGAIN
2021-12-30 07:35:02 +0100 <catern> remexre: and I'm willing to bite the bullet on reader if that's necessary :)
2021-12-30 07:35:19 +0100 <c_wraith> catern: if you were to accept "Haskell doesn't treat pure and impure functions differently" as simple truth, would it require you to stop and rethink your starting point?
2021-12-30 07:36:42 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 07:36:42 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 07:36:42 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 07:37:45 +0100 <maerwald[m]> xD
2021-12-30 07:39:27 +0100analognoise(~analognoi@185.216.74.46)
2021-12-30 07:41:29 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 07:48:15 +0100 <catern> okay, wait, what if there was a language where every function ended with return? every function is something like Foo -> IO Bar
2021-12-30 07:49:01 +0100 <catern> is there some concise way you would describe the difference between this language and Haskell?
2021-12-30 07:49:39 +0100 <remexre> does "everything" include (>>=)? or is bind a builtin to the language too?
2021-12-30 07:49:39 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 07:49:52 +0100 <remexre> and is it IO's return, or just "some" return
2021-12-30 07:50:28 +0100 <maerwald[m]> I have the feeling these type of questions don't lead anywhere
2021-12-30 07:52:56 +0100 <catern> remexre: yeah that was a poor description, let me just leave it at "every function has to return an IO T" and the programmer has to implement that appropriately
2021-12-30 07:53:51 +0100 <remexre> "the programmer has to implement that appropriately" -- in a separate metalanguage?
2021-12-30 07:54:20 +0100 <catern> remexre: no, by inserting appropriate calls to return and bind as appropriate
2021-12-30 07:55:21 +0100 <remexre> catern: can you give an example?
2021-12-30 07:55:39 +0100vglfr(~vglfr@88.155.6.191) (Ping timeout: 256 seconds)
2021-12-30 07:56:46 +0100asco2(~asco2@c-73-202-117-7.hsd1.ca.comcast.net)
2021-12-30 07:57:26 +0100 <catern> add x y : Int -> Int -> IO Int = return (x + y)
2021-12-30 07:57:45 +0100 <remexre> er, an example of the implementation
2021-12-30 07:57:55 +0100 <catern> not sure what you mean
2021-12-30 07:58:02 +0100 <catern> implementation of what?
2021-12-30 07:58:11 +0100spaceseller(~spacesell@31.147.205.13)
2021-12-30 07:58:23 +0100 <catern> that was an example of the code a programmer would have to write
2021-12-30 07:58:29 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
2021-12-30 07:58:40 +0100 <catern> the implementation... of the typechecker which requires every return type to be an IO t?
2021-12-30 07:58:41 +0100 <remexre> oh, in "the programmer has to implement that appropriately," was that =/= IO ?
2021-12-30 07:58:55 +0100 <remexre> well, currying gets in your way in your example :P
2021-12-30 07:59:07 +0100 <catern> ah
2021-12-30 08:00:00 +0100 <remexre> though, does that mean one can't write the identity function in that language?
2021-12-30 08:00:29 +0100 <catern> correct
2021-12-30 08:01:03 +0100 <remexre> can I take apart IO in the same way I can in Haskell?
2021-12-30 08:01:24 +0100 <catern> in what way do you mean?
2021-12-30 08:01:44 +0100 <remexre> like, IO in GHC is just a datatype
2021-12-30 08:03:13 +0100 <remexre> https://hackage.haskell.org/package/base-4.16.0.0/docs/GHC-IO.html#t:IO
2021-12-30 08:03:51 +0100 <catern> sure, you can take IO apart as much as you can in Haskell code that doesn't have access to the IO constructor
2021-12-30 08:04:17 +0100 <remexre> does unsafePerformIO exist, then?
2021-12-30 08:04:48 +0100 <catern> sure, I don't think unsafePerformIO harms the analgoy
2021-12-30 08:05:12 +0100 <remexre> okay, then I'd say that language allows impure expressions
2021-12-30 08:07:57 +0100alx741(~alx741@157.100.93.160)
2021-12-30 08:08:01 +0100vglfr(~vglfr@88.155.6.191)
2021-12-30 08:08:28 +0100 <catern> er, so is that the distinction between that language and Haskell? IOLang allows impure expressions and Haskell doesn't? or if not, what's the difference between IOLang and Haskell?
2021-12-30 08:09:02 +0100 <remexre> haskell allows impure programming all day long, you just find yourself wrapping a ton of stuff in unsafePerformIO and having a terrible awful time because of laziness
2021-12-30 08:12:13 +0100vglfr(~vglfr@88.155.6.191) (Ping timeout: 240 seconds)
2021-12-30 08:12:31 +0100vglfr(~vglfr@88.155.6.191)
2021-12-30 08:12:48 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 08:13:08 +0100falafel(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
2021-12-30 08:13:43 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 08:15:14 +0100 <maerwald[m]> catern: we answered your question multiple times in the last 2 hours: 1. Haskell doesn't distinguish between pure and impure (everything is considered pure) and 2. you can write impure expressions, but the compiler won't know and you can pick up the pieces (that's why you need NOINLINE on global IORefs)
2021-12-30 08:16:17 +0100 <int-e> . o O ( making sure there's onle a single piece to pick up )
2021-12-30 08:17:07 +0100 <catern> maerwald[m]: what's that a response to? I asked a specific question, what's the difference between IOLang which I just described, and Haskell?
2021-12-30 08:17:11 +0100vglfr(~vglfr@88.155.6.191) (Ping timeout: 256 seconds)
2021-12-30 08:17:48 +0100vglfr(~vglfr@88.155.6.191)
2021-12-30 08:17:55 +0100 <maerwald[m]> catern: "IOLang allows impure expressions and Haskell doesn't"
2021-12-30 08:18:13 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-30 08:18:28 +0100 <maerwald[m]> Please read the paper by Amr Sabry I linked twice
2021-12-30 08:19:17 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
2021-12-30 08:20:18 +0100 <remexre> I kinda wanna write an ACME.Impure module now, that's a copy of System.IO but with unsafePerformIO composed onto everything
2021-12-30 08:24:56 +0100 <int-e> remexre: try https://hackage.haskell.org/package/bytestring-0.11.2.0/docs/Data-ByteString-Internal.html#v:accur… for extra foot-shooting power
2021-12-30 08:25:27 +0100burnsidesLlama(~burnsides@dhcp168-010.wadham.ox.ac.uk) (Remote host closed the connection)
2021-12-30 08:25:38 +0100 <int-e> (can you believe that this was called `inlinePerformIO` at some point... such an innocent name)
2021-12-30 08:25:52 +0100asco2(~asco2@c-73-202-117-7.hsd1.ca.comcast.net) (Quit: Client closed)
2021-12-30 08:25:59 +0100burnsidesLlama(~burnsides@client-8-79.eduroam.oxuni.org.uk)
2021-12-30 08:26:35 +0100 <catern> remexre: just to be clear, what part if any was an answer to "what's the difference between IOLang which I just described, and Haskell?"? not that you're required to answer my questions, but if you did I didn't understand
2021-12-30 08:27:02 +0100 <remexre> there isn't a technical difference
2021-12-30 08:27:08 +0100 <remexre> the difference is a matter of convenience
2021-12-30 08:27:28 +0100 <int-e> no, it's so much worse than that
2021-12-30 08:27:54 +0100 <int-e> `IO a` imposes an order on effects
2021-12-30 08:28:19 +0100 <remexre> hm? unsafePerformIO removes it; I think IOLang is "macro-equivalent" to Haskell
2021-12-30 08:28:51 +0100 <int-e> (and from the glance I had, there's nothing in "IOLang" that relaxes that order)
2021-12-30 08:29:57 +0100burnsidesLlama(~burnsides@client-8-79.eduroam.oxuni.org.uk) (Ping timeout: 240 seconds)
2021-12-30 08:30:07 +0100 <remexre> int-e: unsafePerformIO relaxes it, dunnit?
2021-12-30 08:30:29 +0100alx741(~alx741@157.100.93.160)
2021-12-30 08:30:32 +0100 <int-e> remexre: of course, horribly so
2021-12-30 08:30:48 +0100 <remexre> so that's the thing in IOLang that relaxes the order
2021-12-30 08:35:16 +0100 <EvanR> at some point the jargon for pure/impure functions escaped from functions and random stuff in haskell can be called pure and impure, pure expressions, pure values, pure data...
2021-12-30 08:36:26 +0100 <EvanR> I'm always suspicious about whether it makes sense xD
2021-12-30 08:37:08 +0100 <int-e> sometimes it makes sense through pure luck
2021-12-30 08:37:24 +0100 <int-e> (that's a real world phenomenon)
2021-12-30 08:37:39 +0100 <EvanR> oooooh
2021-12-30 08:38:33 +0100 <remexre> imo: pure expressions are the primitive concept (scroll up ~2hrs); a pure value is a WHNF value with pure subterms or a thunk of a pure expression; and pure data isn't pure/impure, it refers (afaik) to whether something is (forceable to) a tree of constructors or not
2021-12-30 08:38:33 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 08:40:07 +0100 <EvanR> even if some of that made sense I'm not sure how good it is, jargonwise
2021-12-30 08:40:39 +0100 <EvanR> why have a word for a WHNF value, that conflicts with established usage, when we already have that
2021-12-30 08:40:58 +0100 <remexre> uh the "or a thunk" part is relevant to that
2021-12-30 08:41:24 +0100 <EvanR> anyway
2021-12-30 08:51:13 +0100Jing(~hedgehog@2604:a840:3::1067)
2021-12-30 08:57:06 +0100alx741(~alx741@157.100.93.160)
2021-12-30 08:57:16 +0100x88x88x(~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Remote host closed the connection)
2021-12-30 08:58:01 +0100x88x88x(~x88x88x@149.28.53.172)
2021-12-30 08:58:10 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-12-30 09:00:30 +0100nschoe(~quassel@178.251.84.79)
2021-12-30 09:01:47 +0100nschoe(~quassel@178.251.84.79) (Client Quit)
2021-12-30 09:02:53 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 09:04:17 +0100falafel(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
2021-12-30 09:04:19 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-12-30 09:10:48 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 09:11:00 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-12-30 09:15:19 +0100coolnickname(uid531864@user/coolnickname)
2021-12-30 09:16:13 +0100 <otherwise> > let test key xs = foldl (\acc (x,y)-> if key == x then Just y else acc) Nothing xs in test "foo" [("foo", "1234"), ("flub","4321"), ("bar","987"),("blurp","344")]
2021-12-30 09:16:14 +0100 <lambdabot> Just "1234"
2021-12-30 09:16:17 +0100 <otherwise> > let test key xs = foldl (\(x,y) acc-> if key == x then Just y else acc) xs Nothing in test "foo" [("foo", "1234"), ("flub","4321"), ("bar","987"),("blurp","344")]
2021-12-30 09:16:18 +0100 <lambdabot> error:
2021-12-30 09:16:18 +0100 <lambdabot> • Couldn't match expected type ‘(a1, a2)’
2021-12-30 09:16:18 +0100 <lambdabot> with actual type ‘Maybe a2’
2021-12-30 09:16:53 +0100 <otherwise> why does the second case fail? I switch (x,y) , acc, xs and Nothing, respectively
2021-12-30 09:17:40 +0100xff0x(~xff0x@2001:1a81:527e:7f00:c95b:8db9:d638:e5ae) (Remote host closed the connection)
2021-12-30 09:17:59 +0100xff0x(~xff0x@2001:1a81:527e:7f00:b856:ac3b:a520:4a41)
2021-12-30 09:20:34 +0100alx741(~alx741@181.199.42.79)
2021-12-30 09:20:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 09:21:14 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2021-12-30 09:21:56 +0100foul_owl(~kerry@212.102.47.57) (Ping timeout: 252 seconds)
2021-12-30 09:22:14 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-12-30 09:22:24 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-12-30 09:22:27 +0100allbery_bgeekosaur
2021-12-30 09:26:11 +0100alx741(~alx741@181.199.42.79) (Read error: Connection reset by peer)
2021-12-30 09:27:26 +0100foul_owl(~kerry@212.102.47.57)
2021-12-30 09:28:38 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-12-30 09:30:16 +0100alfonsox(~quassel@103.92.42.182) (Remote host closed the connection)
2021-12-30 09:30:40 +0100KvL(~KvL@user/KvL)
2021-12-30 09:39:39 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 09:39:41 +0100 <otherwise> okay I think i figured it out. it's in the type signature
2021-12-30 09:39:52 +0100ksqsf(~user@134.209.106.31)
2021-12-30 09:40:02 +0100analognoise(~analognoi@185.216.74.46) (Read error: Connection reset by peer)
2021-12-30 09:40:28 +0100 <otherwise> :t foldr
2021-12-30 09:40:29 +0100 <lambdabot> Foldable t => (a -> b -> b) -> b -> t a -> b
2021-12-30 09:42:51 +0100alx741(~alx741@157.100.93.160)
2021-12-30 09:43:00 +0100 <otherwise> the a in (a -> b -> b) corresponds to the 't a', which is the last input to the foldr function, which needs to be a foldable (like a list)
2021-12-30 09:43:36 +0100 <otherwise> I'm just explaining things to myself here, dont mind me.
2021-12-30 09:48:46 +0100nuh^(~nuh@207.5.54.6) (Remote host closed the connection)
2021-12-30 09:50:04 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 09:55:59 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 09:55:59 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 09:55:59 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 09:56:51 +0100nhatanh02(~satori@123.24.172.30)
2021-12-30 10:00:53 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 10:04:18 +0100cfricke(~cfricke@user/cfricke)
2021-12-30 10:08:21 +0100alx741(~alx741@157.100.93.160)
2021-12-30 10:08:22 +0100acidjnk(~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de)
2021-12-30 10:11:39 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2021-12-30 10:13:20 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 10:17:42 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-12-30 10:17:42 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-12-30 10:17:45 +0100allbery_bgeekosaur
2021-12-30 10:18:57 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-12-30 10:19:01 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-30 10:22:42 +0100 <Nate[m]12> does anyone know some good examples of accounting softwares with haskell?
2021-12-30 10:22:50 +0100nhatanh02(~satori@123.24.172.30)
2021-12-30 10:22:59 +0100 <Nate[m]12> s/softwares/software/
2021-12-30 10:24:07 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-30 10:26:26 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-12-30 10:30:16 +0100 <tomsmeding> Nate[m]12: not sure if it's precisely what you're looking for, but hledger exists
2021-12-30 10:30:39 +0100alx741(~alx741@157.100.93.160)
2021-12-30 10:30:41 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2021-12-30 10:34:40 +0100 <Nate[m]12> tomsmeding: thanks, it looks like a personal accounting software, but I was looking for software that is distributed over multiple companies for verification purposes etc.
2021-12-30 10:34:56 +0100AlexNoo__AlexNoo
2021-12-30 10:35:00 +0100 <Nate[m]12> does cardano offer such services?
2021-12-30 10:35:05 +0100 <tomsmeding> I would find it unlikely that exists, to be honest :p
2021-12-30 10:37:43 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2021-12-30 10:40:08 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 10:40:31 +0100cosimone(~user@93-34-133-35.ip49.fastwebnet.it)
2021-12-30 10:43:57 +0100gehmehgeh(~user@user/gehmehgeh)
2021-12-30 10:44:43 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2021-12-30 10:45:09 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-30 10:45:54 +0100hyiltiz(~quassel@31.220.5.250)
2021-12-30 10:47:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-30 10:48:08 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 10:50:17 +0100hyiltiz(~quassel@31.220.5.250) (Ping timeout: 240 seconds)
2021-12-30 10:51:26 +0100jco(~jco@90-228-194-139-no542.tbcn.telia.com) (Remote host closed the connection)
2021-12-30 10:51:37 +0100Inst(~delicacie@2601:6c4:4080:3f80:452b:5b2:a00e:7e62) (Ping timeout: 240 seconds)
2021-12-30 10:53:35 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2021-12-30 10:54:46 +0100hyiltiz(~quassel@31.220.5.250)
2021-12-30 10:59:41 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 250 seconds)
2021-12-30 11:04:03 +0100jinsun(~quassel@user/jinsun)
2021-12-30 11:04:47 +0100alx741(~alx741@181.199.42.79)
2021-12-30 11:06:11 +0100chomwitt(~chomwitt@2a02:587:dc1e:c100:12c3:7bff:fe6d:d374)
2021-12-30 11:09:57 +0100vglfr(~vglfr@88.155.6.191) (Ping timeout: 240 seconds)
2021-12-30 11:12:39 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a)
2021-12-30 11:16:57 +0100ensyde(~Omen@2600:1702:2e30:1a40:8511:a2a3:f354:5a5e) (Ping timeout: 240 seconds)
2021-12-30 11:20:28 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-12-30 11:21:28 +0100Tuplanolla(~Tuplanoll@91-159-69-90.elisa-laajakaista.fi)
2021-12-30 11:22:19 +0100alx741(~alx741@181.199.42.79) (Read error: Connection reset by peer)
2021-12-30 11:25:43 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-30 11:27:25 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2021-12-30 11:27:55 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-12-30 11:30:38 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2021-12-30 11:35:15 +0100mastarija(~mastarija@2a05:4f46:e0e:5000:d11e:1641:cfb6:79c3)
2021-12-30 11:39:09 +0100alx741(~alx741@157.100.93.160)
2021-12-30 11:42:17 +0100spaceseller(~spacesell@31.147.205.13) (Quit: Leaving)
2021-12-30 11:46:24 +0100ksqsf(~user@134.209.106.31) (Remote host closed the connection)
2021-12-30 11:46:57 +0100xff0x(~xff0x@2001:1a81:527e:7f00:b856:ac3b:a520:4a41) (Ping timeout: 240 seconds)
2021-12-30 11:48:11 +0100xff0x(~xff0x@2001:1a81:527e:7f00:c538:8d07:2658:ecf)
2021-12-30 11:48:53 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-12-30 11:49:50 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 11:53:19 +0100vglfr(~vglfr@88.155.12.39)
2021-12-30 11:53:30 +0100max22-(~maxime@2a01cb088335980042a847f93091dac4.ipv6.abo.wanadoo.fr)
2021-12-30 11:53:48 +0100DNH(~DNH@ip5f5abb04.dynamic.kabel-deutschland.de)
2021-12-30 11:54:44 +0100mastarija(~mastarija@2a05:4f46:e0e:5000:d11e:1641:cfb6:79c3) (Quit: Leaving)
2021-12-30 11:56:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 11:56:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 11:56:46 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 11:59:39 +0100vglfr(~vglfr@88.155.12.39) (Read error: Connection reset by peer)
2021-12-30 12:00:17 +0100vglfr(~vglfr@88.155.12.39)
2021-12-30 12:01:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-12-30 12:03:41 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 12:07:35 +0100alx741(~alx741@157.100.93.160)
2021-12-30 12:12:17 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 12:16:43 +0100DNH(~DNH@ip5f5abb04.dynamic.kabel-deutschland.de) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-12-30 12:21:24 +0100__monty__(~toonn@user/toonn)
2021-12-30 12:24:14 +0100 <otherwise> i'm trying to compare runtime differences between two definitions of factorial, but it appears I need to force strict evaluation (not lazy) to maximize efficiency for one of the definitions. Only problem is, the syntax for applying BangPatterns is not working for me...
2021-12-30 12:25:08 +0100 <int-e> @where paste
2021-12-30 12:25:08 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2021-12-30 12:27:33 +0100 <otherwise> https://paste.tomsmeding.com/EWFX3Ar1
2021-12-30 12:28:09 +0100 <otherwise> thanks, I put the cart in front of the horse, I didnt have a paste prepped
2021-12-30 12:28:45 +0100alx741(~alx741@157.100.93.160)
2021-12-30 12:31:28 +0100 <int-e> otherwise: the last attempt looks correct; did you actually enable the extension? You need {-# LANGUAGE BangPatterns #-} or invoke ghc[i] with -XBangPatterns
2021-12-30 12:32:23 +0100 <int-e> ghc actually tried to be helpful and say "Did you forget to enable BangPatterns?"
2021-12-30 12:32:49 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-30 12:33:11 +0100 <otherwise> oh
2021-12-30 12:33:16 +0100 <otherwise> no I didnt do that
2021-12-30 12:33:32 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 12:33:38 +0100 <otherwise> I've never invoked anything, so I'm not how I would, honestly
2021-12-30 12:34:02 +0100acidjnk(~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2021-12-30 12:34:13 +0100 <otherwise> import Data.-XBangPatterns or something like that?
2021-12-30 12:34:23 +0100 <int-e> ?
2021-12-30 12:34:33 +0100 <albet70> why the fish operator >=> called Kleisli composition?
2021-12-30 12:34:50 +0100 <albet70> any special used?
2021-12-30 12:34:55 +0100 <int-e> otherwise: No, the LANGUAGE pragma is what you'd use in a source file.
2021-12-30 12:35:24 +0100 <int-e> otherwise: -XBangPatterns is a command line option for ghc or ghci; in ghci, you can also use :set -XBangPatterns
2021-12-30 12:35:32 +0100int-ewould recommend the pragma actually
2021-12-30 12:36:42 +0100 <int-e> LANGUAGE pragmas got at the very beginning of a module's source code, btw, even before the `module` keyword (if you have that)
2021-12-30 12:38:05 +0100 <otherwise> oh okay, nested in the {# #} ?
2021-12-30 12:39:50 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-30 12:40:07 +0100deadmarshal(~deadmarsh@95.38.115.121) (Ping timeout: 256 seconds)
2021-12-30 12:42:26 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 12:42:29 +0100 <otherwise> definitely not in the {# #}, okay I think I'm slowly weeding out the errors, thanks! :)
2021-12-30 12:42:32 +0100KvL(~KvL@user/KvL) (Quit: KvL)
2021-12-30 12:43:54 +0100KvL(~KvL@user/KvL)
2021-12-30 12:44:57 +0100 <fendor[m]> otherwise, you put it in {-# #-}, e.g. `{-# LANGUAGE BangPatterns #-}`
2021-12-30 12:45:10 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 12:46:18 +0100DNH(~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b)
2021-12-30 12:46:55 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2021-12-30 12:47:25 +0100foul_owl(~kerry@212.102.47.57) (Ping timeout: 240 seconds)
2021-12-30 12:49:17 +0100 <otherwise> https://paste.tomsmeding.com/EfSiXa4b
2021-12-30 12:49:55 +0100alx741(~alx741@157.100.93.160)
2021-12-30 12:50:19 +0100KvL(~KvL@user/KvL) (Ping timeout: 256 seconds)
2021-12-30 12:51:49 +0100 <fendor[m]> well, you have a typo
2021-12-30 12:52:17 +0100 <fendor[m]> `-#}` vs `#-}`
2021-12-30 12:52:36 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-30 12:53:47 +0100 <otherwise> Thats why the code was golden!
2021-12-30 12:53:51 +0100 <otherwise> haha
2021-12-30 12:54:01 +0100Rum(~bourbon@user/rum)
2021-12-30 12:54:10 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 12:54:27 +0100synthmeat(~synthmeat@user/synthmeat) (Quit: WeeChat 3.0)
2021-12-30 12:55:12 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 12:55:13 +0100synthmeat(~synthmeat@user/synthmeat)
2021-12-30 12:56:50 +0100antony(~The_viole@203.77.49.232)
2021-12-30 12:57:37 +0100KvL(~KvL@user/KvL)
2021-12-30 12:57:46 +0100 <otherwise> thanks Int-e and fendor
2021-12-30 13:00:18 +0100ProfSimm(~ProfSimm@87.227.196.109)
2021-12-30 13:01:24 +0100foul_owl(~kerry@94.140.8.106)
2021-12-30 13:13:01 +0100antony(~The_viole@203.77.49.232) (Quit: Leaving)
2021-12-30 13:13:21 +0100antony(~The_viole@203.77.49.232)
2021-12-30 13:13:22 +0100alx741(~alx741@157.100.93.160)
2021-12-30 13:13:23 +0100antony(~The_viole@203.77.49.232) (Remote host closed the connection)
2021-12-30 13:13:29 +0100SummerSonw(~The_viole@203.77.49.232) (Quit: Leaving)
2021-12-30 13:13:50 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 13:16:16 +0100SummerSonw(~The_viole@203.77.49.232) (Client Quit)
2021-12-30 13:16:34 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 13:16:51 +0100SummerSonw(~The_viole@203.77.49.232) (Client Quit)
2021-12-30 13:17:01 +0100Rum(~bourbon@user/rum) (Quit: WeeChat 3.4)
2021-12-30 13:17:07 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 13:17:34 +0100SummerSonw(~The_viole@203.77.49.232) (Client Quit)
2021-12-30 13:17:50 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 13:18:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-30 13:18:52 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 13:23:58 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-30 13:26:17 +0100ishutin(~ishutin@80-95-82-198.pool.digikabel.hu) (Ping timeout: 240 seconds)
2021-12-30 13:28:12 +0100ishutin(~ishutin@92-249-182-7.pool.digikabel.hu)
2021-12-30 13:31:04 +0100_ht_(~quassel@37.120.218.158)
2021-12-30 13:31:12 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Ping timeout: 268 seconds)
2021-12-30 13:33:03 +0100xff0x(~xff0x@2001:1a81:527e:7f00:c538:8d07:2658:ecf) (Ping timeout: 268 seconds)
2021-12-30 13:33:22 +0100xff0x(~xff0x@2001:1a81:527e:7f00:128f:5c47:b7cd:f118)
2021-12-30 13:34:25 +0100curiousgay(~curiousga@77-120-141-90.kha.volia.net)
2021-12-30 13:35:25 +0100alx741(~alx741@157.100.93.160)
2021-12-30 13:36:26 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-12-30 13:37:22 +0100deadmarshal(~deadmarsh@95.38.115.121)
2021-12-30 13:39:15 +0100Jing(~hedgehog@2604:a840:3::1067) (Remote host closed the connection)
2021-12-30 13:39:54 +0100Jing(~hedgehog@2604:a840:3::1067)
2021-12-30 13:40:46 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 13:44:13 +0100Kaiepi(~Kaiepi@216.208.243.198) (Ping timeout: 240 seconds)
2021-12-30 13:53:25 +0100Kaiepi(~Kaiepi@216.208.243.103)
2021-12-30 13:58:52 +0100alx741(~alx741@157.100.93.160)
2021-12-30 13:59:30 +0100raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e)
2021-12-30 14:00:37 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
2021-12-30 14:02:59 +0100max22-(~maxime@2a01cb088335980042a847f93091dac4.ipv6.abo.wanadoo.fr) (Ping timeout: 252 seconds)
2021-12-30 14:03:36 +0100KvL(~KvL@user/KvL) (Quit: KvL)
2021-12-30 14:03:45 +0100machinedgod(~machinedg@24.105.81.50)
2021-12-30 14:03:45 +0100otherwise(~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) ()
2021-12-30 14:04:37 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 14:04:45 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 14:13:32 +0100raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) (Ping timeout: 240 seconds)
2021-12-30 14:16:20 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:19:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 14:19:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 14:19:00 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 14:20:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-30 14:20:56 +0100alx741(~alx741@157.100.93.160)
2021-12-30 14:23:10 +0100nhatanh02(~satori@123.24.172.30)
2021-12-30 14:23:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 14:26:23 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-30 14:27:47 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:33:30 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:33:44 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:33:51 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:34:05 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:34:13 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:34:20 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-30 14:34:27 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:34:34 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:34:47 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 14:34:48 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:34:56 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:35:09 +0100spaceseller(~spacesell@31.147.205.13)
2021-12-30 14:35:10 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:35:17 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:35:23 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2021-12-30 14:35:32 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:35:39 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:35:55 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:36:02 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:36:16 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:36:24 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:36:38 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:36:46 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:36:59 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:37:07 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:37:22 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:37:23 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 14:37:30 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:37:44 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:37:52 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:38:06 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:38:14 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:38:28 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:38:36 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:38:50 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:38:58 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:39:11 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:39:12 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-12-30 14:39:19 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:39:33 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:39:41 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:39:55 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:40:03 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:40:16 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:40:24 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:40:38 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:40:46 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:40:59 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:41:07 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:41:22 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:41:29 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:41:44 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:41:51 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:42:05 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:42:13 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:42:28 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:42:36 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:42:50 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:42:57 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:43:12 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:43:20 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:43:34 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:43:42 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:43:56 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:44:04 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:44:18 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:44:26 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:44:40 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:44:47 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:45:02 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:45:10 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:45:24 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:45:31 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:45:45 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 14:45:53 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-30 14:52:20 +0100desantra(~skykanin@user/skykanin)
2021-12-30 14:52:52 +0100desantra(~skykanin@user/skykanin) (Client Quit)
2021-12-30 14:53:09 +0100zincy(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
2021-12-30 14:54:22 +0100desantra(~skykanin@user/skykanin)
2021-12-30 14:55:31 +0100alx741(~alx741@157.100.93.160)
2021-12-30 15:02:01 +0100shriekingnoise(~shrieking@186.137.144.80)
2021-12-30 15:02:17 +0100spaceseller(~spacesell@31.147.205.13) (Quit: Leaving)
2021-12-30 15:02:40 +0100spaceseller(~spacesell@31.147.205.13)
2021-12-30 15:05:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 15:05:20 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Read error: Connection reset by peer)
2021-12-30 15:05:33 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 15:10:20 +0100desantra(~skykanin@user/skykanin) (Quit: WeeChat 3.3)
2021-12-30 15:16:20 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 15:18:58 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-12-30 15:19:21 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
2021-12-30 15:19:49 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-12-30 15:20:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-30 15:23:21 +0100max22-(~maxime@2a01cb0883359800fd0e15f8c1058ba6.ipv6.abo.wanadoo.fr)
2021-12-30 15:24:03 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 15:24:10 +0100_73`(~user@pool-108-49-252-36.bstnma.fios.verizon.net)
2021-12-30 15:24:21 +0100_73`(~user@pool-108-49-252-36.bstnma.fios.verizon.net) (Remote host closed the connection)
2021-12-30 15:25:37 +0100_73(~user@pool-108-49-252-36.bstnma.fios.verizon.net) (Ping timeout: 240 seconds)
2021-12-30 15:25:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-30 15:27:44 +0100spaceseller(~spacesell@31.147.205.13) (Quit: Leaving)
2021-12-30 15:27:55 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-30 15:36:19 +0100zebrag(~chris@user/zebrag)
2021-12-30 15:38:24 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 15:38:24 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 15:38:24 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 15:42:24 +0100alx741(~alx741@157.100.93.160)
2021-12-30 15:44:40 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 15:45:24 +0100kalxd[m]1(~kalxdmatr@2001:470:69fc:105::1:576e)
2021-12-30 15:47:16 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 15:48:43 +0100cheater(~Username@user/cheater) (Ping timeout: 250 seconds)
2021-12-30 15:49:18 +0100cheater(~Username@user/cheater)
2021-12-30 15:49:23 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2021-12-30 15:51:16 +0100bollu(uid233390@id-233390.helmsley.irccloud.com)
2021-12-30 15:53:44 +0100 <InternetCitizen> How does haskell having a definition for every function `t0 -> ... -> tn -> (t0, ... tn)`?
2021-12-30 15:54:22 +0100 <InternetCitizen> i.e how does it define all the functions `(,), (,,), (,,,) ...`?
2021-12-30 15:54:54 +0100tafa(~tafa@user/tafa) (Quit: ZNC - https://znc.in)
2021-12-30 15:54:55 +0100 <InternetCitizen> I opened GHCi and typed 39 commas and got a bit scared tbh
2021-12-30 15:55:01 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2021-12-30 15:56:20 +0100 <[exa]> InternetCitizen: if you overdo it a bit you might get an error saying that maximum tuple size is 62
2021-12-30 15:56:33 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
2021-12-30 15:56:35 +0100tafa(~tafa@user/tafa)
2021-12-30 15:56:53 +0100 <InternetCitizen> hahaha but how does it work? does the parser generate a constructor on the fly?
2021-12-30 15:57:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 15:57:26 +0100 <InternetCitizen> or are all 63 of them put into scope of every haskell program
2021-12-30 15:57:35 +0100 <[exa]> not sure, the tuple handling is a bit special, but generating the constructor name on the fly during parsing would make sense to me
2021-12-30 15:57:45 +0100 <[exa]> ie not sure if there's even a better way
2021-12-30 15:58:45 +0100 <[exa]> OTOH you may have a look at instances of the (,,,,,,,,,)'s, the useful ones (Show,Read,Bounded,...) usually end at like 16-tuples
2021-12-30 15:59:07 +0100 <[exa]> IIRC these are defined manually in base
2021-12-30 16:01:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-12-30 16:02:20 +0100_ht_(~quassel@37.120.218.158) (Ping timeout: 252 seconds)
2021-12-30 16:02:49 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-12-30 16:02:57 +0100 <geekosaur> the instances are manual, tuples themselves are wired-in
2021-12-30 16:04:56 +0100alx741(~alx741@157.100.93.160)
2021-12-30 16:06:40 +0100 <InternetCitizen> I tried the same thing in Rust and I was able to make a 1000-element tuple ... sheesh!
2021-12-30 16:07:07 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-30 16:07:07 +0100 <InternetCitizen> at this point I don't think the madlads even put a limit
2021-12-30 16:07:15 +0100acidjnk(~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de)
2021-12-30 16:07:43 +0100Sgeo(~Sgeo@user/sgeo)
2021-12-30 16:08:06 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 16:09:31 +0100 <geekosaur> I think ghc wouldn't have one except at some point they discovered the compiler dumped core with 63-tuples. I'm not sure anyone ever tested to see if it was fixed
2021-12-30 16:09:54 +0100 <geekosaur> mostly because we discourage tuples that big anyway
2021-12-30 16:10:30 +0100 <geekosaur> given how we do argument passing and the like, the main place to use tuples is as function return values, and a 1000-tuple there is kinda wtf
2021-12-30 16:11:11 +0100 <geekosaur> also at some point we start preferring ADTs/records so you can get values by name instead of hoping you counted right
2021-12-30 16:11:39 +0100 <InternetCitizen> I totally agree, anything larger than 2 looses any semantics for me
2021-12-30 16:11:47 +0100 <InternetCitizen> 5000 and counting
2021-12-30 16:12:21 +0100 <InternetCitizen> I'm inclinding to make a small program to see at which point does the rust compiler break
2021-12-30 16:12:32 +0100 <InternetCitizen> or if my memory will run out before
2021-12-30 16:13:22 +0100geekosaurbets 32768 or some other power of 2 matching a native (sub)word size
2021-12-30 16:13:35 +0100 <geekosaur> could take a while if that's 2^63
2021-12-30 16:13:41 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-12-30 16:14:49 +0100 <[exa]> InternetCitizen: in rust it's limited by source filesize!!1
2021-12-30 16:15:13 +0100 <InternetCitizen> how big is that?
2021-12-30 16:15:44 +0100 <[exa]> well, a lot
2021-12-30 16:16:09 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 16:16:56 +0100 <InternetCitizen> 500MB ...
2021-12-30 16:17:04 +0100 <[exa]> anyway tuples for rust are afaik basically the same as structs, I guess the real technical limit there is when LLVM breaks
2021-12-30 16:17:58 +0100 <InternetCitizen> "rustc_driver dll on Windows bundles the whole compiler and LLVM into one file"
2021-12-30 16:18:07 +0100 <[exa]> it might get pretty quick if they try to pass that stuff through stack
2021-12-30 16:18:33 +0100 <[exa]> now that's a library. :D
2021-12-30 16:19:13 +0100 <InternetCitizen> https://github.com/rust-lang/rustup/issues/2490
2021-12-30 16:19:36 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2021-12-30 16:20:03 +0100 <[exa]> ;_;
2021-12-30 16:25:39 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 16:30:28 +0100 <geekosaur> nice to know we're not the only ones who have the "suck everything into a single strict ByteString" issue
2021-12-30 16:31:17 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 268 seconds)
2021-12-30 16:31:38 +0100 <Rembane> Different types of strings are an issue everywhere imo, they just pop up in different ways.
2021-12-30 16:33:19 +0100 <geekosaur> that wasn't really the aspect I was reaching for
2021-12-30 16:33:30 +0100 <geekosaur> more the thought process that "of course it'll always fit"
2021-12-30 16:33:49 +0100SummerSonw(~The_viole@203.77.49.232) (Remote host closed the connection)
2021-12-30 16:34:26 +0100 <Rembane> Got it. I think I might've internalized a bit too much muttering about strings.
2021-12-30 16:34:31 +0100alx741(~alx741@157.100.93.160)
2021-12-30 16:36:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 16:37:34 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
2021-12-30 16:41:08 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 16:41:21 +0100shapr`(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-12-30 16:41:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 16:41:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 16:41:46 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 16:42:31 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi)
2021-12-30 16:42:37 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-12-30 16:42:57 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 240 seconds)
2021-12-30 16:43:04 +0100_73(~user@pool-108-49-252-36.bstnma.fios.verizon.net)
2021-12-30 16:46:17 +0100shapr`(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-12-30 16:46:17 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
2021-12-30 16:46:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 16:49:08 +0100neurocyte0132889(~neurocyte@94.46.76.127)
2021-12-30 16:49:08 +0100neurocyte0132889(~neurocyte@94.46.76.127) (Changing host)
2021-12-30 16:49:08 +0100neurocyte0132889(~neurocyte@user/neurocyte)
2021-12-30 16:51:03 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-30 16:51:35 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 16:54:50 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2021-12-30 16:59:05 +0100alx741(~alx741@157.100.93.160)
2021-12-30 17:00:08 +0100utk(~utk@2001:470:69fc:105::1:2fe0) (Quit: You have been kicked for being idle)
2021-12-30 17:00:19 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 17:00:19 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 17:00:19 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 17:04:09 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2021-12-30 17:04:50 +0100kmein(~weechat@user/kmein)
2021-12-30 17:05:25 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-12-30 17:05:32 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-30 17:09:05 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-12-30 17:09:05 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 17:09:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-30 17:13:16 +0100thevishy(~Nishant@2405:201:f005:c007:2dcc:1488:1871:6935)
2021-12-30 17:13:47 +0100gaff(~gaff@49.207.212.166)
2021-12-30 17:14:54 +0100 <gaff> in quickcheck, is it possible to put in multiple assertions in a property, a === b; c === d?
2021-12-30 17:16:13 +0100ProfSimm(~ProfSimm@87.227.196.109)
2021-12-30 17:17:08 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-30 17:17:58 +0100 <gaff> for example, prop_1 x y = x ===2; y === 3
2021-12-30 17:23:12 +0100cosimone(~user@93-34-133-35.ip49.fastwebnet.it) (Remote host closed the connection)
2021-12-30 17:23:22 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 17:24:38 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2021-12-30 17:26:10 +0100alx741(~alx741@157.100.93.160)
2021-12-30 17:29:35 +0100 <lyxia> @check \x y -> (x === 2) .&&. (y === 3)
2021-12-30 17:29:37 +0100 <lambdabot> *** Failed! Falsifiable (after 1 test):
2021-12-30 17:29:37 +0100 <lambdabot> 0 0 LHS 0 /= 2
2021-12-30 17:30:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 17:33:37 +0100machined1od(~machinedg@24.105.81.50)
2021-12-30 17:33:45 +0100machined1od(~machinedg@24.105.81.50) (Client Quit)
2021-12-30 17:35:05 +0100raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e)
2021-12-30 17:37:36 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2021-12-30 17:38:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 17:38:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 17:38:25 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 17:38:38 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Read error: No route to host)
2021-12-30 17:39:14 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-30 17:42:18 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-12-30 17:42:19 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi)
2021-12-30 17:44:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-30 17:45:56 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2021-12-30 17:48:42 +0100alx741(~alx741@157.100.93.160)
2021-12-30 17:53:04 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 17:54:06 +0100mastarija(~mastarija@2a05:4f46:e0e:5000:d11e:1641:cfb6:79c3)
2021-12-30 17:54:32 +0100raehik(~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) (Ping timeout: 268 seconds)
2021-12-30 18:03:18 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection)
2021-12-30 18:03:39 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-30 18:05:06 +0100coolnickname(uid531864@user/coolnickname) (Quit: Connection closed for inactivity)
2021-12-30 18:05:59 +0100shapr(~user@pool-108-28-144-11.washdc.fios.verizon.net)
2021-12-30 18:06:01 +0100 <gaff> lyxia: `&&` takes boolean, but `===` returns `Property`, so how does that work?
2021-12-30 18:06:54 +0100 <monochrom> .&&. is not &&
2021-12-30 18:07:09 +0100 <gaff> ok
2021-12-30 18:08:27 +0100 <gaff> thanks
2021-12-30 18:09:10 +0100 <gaff> i suppose likewise there is something like .||. as well
2021-12-30 18:09:21 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 18:09:31 +0100 <int-e> :t (.||.)
2021-12-30 18:09:32 +0100 <lambdabot> (STestable prop2, STestable prop1) => prop1 -> prop2 -> Test.QuickCheck.Safe.SProperty
2021-12-30 18:09:43 +0100 <gaff> yeah
2021-12-30 18:09:48 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-12-30 18:09:58 +0100 <monochrom> In retrospect I'm a bit surprised that === was not named .==.
2021-12-30 18:10:05 +0100 <gaff> love quickcheck
2021-12-30 18:10:35 +0100 <gaff> but coming with properties is quite an art
2021-12-30 18:10:53 +0100 <int-e> :t (==>)
2021-12-30 18:10:54 +0100 <lambdabot> STestable prop => Bool -> prop -> Test.QuickCheck.Safe.SProperty
2021-12-30 18:11:02 +0100 <int-e> (that one has no dots either)
2021-12-30 18:11:11 +0100 <gaff> yeah
2021-12-30 18:11:13 +0100alx741(~alx741@157.100.93.160)
2021-12-30 18:11:24 +0100 <geekosaur> proper testing is always an art
2021-12-30 18:12:12 +0100 <int-e> (You can ignore the `S` in `STestable`, there's no huge difference, except that `Testable`s embed IO and this doesn't)
2021-12-30 18:13:02 +0100machined1od(~machinedg@24.105.81.50)
2021-12-30 18:13:04 +0100 <gaff> geekosaur: no i mean coming up with properties that do not duplicate source code -- that's something tricky -- i didn't know about it until i read hughes' paper.
2021-12-30 18:13:28 +0100machined2od(~machinedg@24.105.81.50)
2021-12-30 18:13:37 +0100machined2od(~machinedg@24.105.81.50) (Client Quit)
2021-12-30 18:13:41 +0100machined1od(~machinedg@24.105.81.50) (Client Quit)
2021-12-30 18:13:45 +0100machinedgod(~machinedg@24.105.81.50) (Quit: leaving)
2021-12-30 18:13:53 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-30 18:14:05 +0100machinedgod(~machinedg@24.105.81.50)
2021-12-30 18:14:05 +0100 <monochrom> Oh there is still some value in properties that duplicate source code. It's called "white-box testing" and "path coverage" in some circles. >:)
2021-12-30 18:14:27 +0100monochromdisbelieve in those, that's right.
2021-12-30 18:16:15 +0100 <gaff> i love the idea of random test data generation ... it is amazing what bugs you can catch
2021-12-30 18:16:15 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 18:16:39 +0100sirlensalot(~sirlensal@ool-44c5f8c9.dyn.optonline.net)
2021-12-30 18:16:48 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 18:17:15 +0100 <gaff> and quickcheck design -- those guys can really do some great stuff with types
2021-12-30 18:17:41 +0100 <gaff> thanks
2021-12-30 18:17:48 +0100gaff(~gaff@49.207.212.166) ()
2021-12-30 18:20:27 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
2021-12-30 18:21:05 +0100machined1od(~machinedg@24.105.81.50)
2021-12-30 18:21:19 +0100machinedgod(~machinedg@24.105.81.50) (Quit: leaving)
2021-12-30 18:21:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-30 18:23:05 +0100mbuf(~Shakthi@122.162.67.169) (Quit: Leaving)
2021-12-30 18:25:22 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Ping timeout: 268 seconds)
2021-12-30 18:27:25 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
2021-12-30 18:28:06 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-30 18:29:53 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 18:29:53 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 18:29:53 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 18:30:29 +0100econo(uid147250@user/econo)
2021-12-30 18:31:37 +0100vglfr(~vglfr@88.155.12.39) (Ping timeout: 240 seconds)
2021-12-30 18:34:40 +0100alx741(~alx741@157.100.93.160)
2021-12-30 18:34:55 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2021-12-30 18:35:14 +0100cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-12-30 18:35:24 +0100cheater(~Username@user/cheater)
2021-12-30 18:37:20 +0100DNH(~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-12-30 18:38:32 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
2021-12-30 18:39:19 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 18:47:26 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 18:48:41 +0100DNH(~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b)
2021-12-30 18:51:19 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2021-12-30 18:51:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 18:52:29 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2021-12-30 18:56:02 +0100acidjnk(~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2021-12-30 18:57:01 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Ping timeout: 250 seconds)
2021-12-30 18:57:11 +0100alx741(~alx741@157.100.93.160)
2021-12-30 18:59:54 +0100dignissimus(~dignissim@88-104-68-62.dynamic.dsl.as9105.com)
2021-12-30 19:00:01 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
2021-12-30 19:02:00 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 19:03:28 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2021-12-30 19:04:04 +0100 <dignissimus> Can I use record syntac with GADTs? If so, have I made a mistake here? https://paste.tomsmeding.com/aeKbFFLr
2021-12-30 19:05:55 +0100 <geekosaur> I think the syntax is: data Foo where {fields} -> Constructor
2021-12-30 19:06:15 +0100 <monochrom> Heh, the correct syntax is e.g. LambdaExpression :: { lambdaVariable :: Variable, ... } -> Expression
2021-12-30 19:06:28 +0100coot_(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
2021-12-30 19:07:05 +0100 <dignissimus> Thank you!
2021-12-30 19:07:09 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Ping timeout: 256 seconds)
2021-12-30 19:07:57 +0100mc47(~mc47@xmonad/TheMC47)
2021-12-30 19:11:01 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2021-12-30 19:11:55 +0100zmt01(~zmt00@user/zmt00)
2021-12-30 19:11:57 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2021-12-30 19:15:42 +0100spaceseller_(~spacesell@31.147.205.13)
2021-12-30 19:18:07 +0100alx741(~alx741@157.100.93.160)
2021-12-30 19:18:34 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-12-30 19:22:35 +0100neurocyte0132889(~neurocyte@94.46.76.127)
2021-12-30 19:22:35 +0100neurocyte0132889(~neurocyte@94.46.76.127) (Changing host)
2021-12-30 19:22:35 +0100neurocyte0132889(~neurocyte@user/neurocyte)
2021-12-30 19:22:56 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-30 19:22:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 19:23:15 +0100spaceseller_(~spacesell@31.147.205.13) (Quit: Leaving)
2021-12-30 19:24:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-30 19:25:18 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 19:25:47 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-30 19:27:42 +0100tomku(~tomku@user/tomku) (Read error: Connection reset by peer)
2021-12-30 19:30:02 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2021-12-30 19:33:52 +0100tomku(~tomku@user/tomku)
2021-12-30 19:37:56 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-12-30 19:38:20 +0100thevishy(~Nishant@2405:201:f005:c007:2dcc:1488:1871:6935) (Quit: Leaving)
2021-12-30 19:40:39 +0100alx741(~alx741@157.100.93.160)
2021-12-30 19:41:03 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 19:41:03 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 19:41:03 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 19:42:34 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-30 19:44:03 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-12-30 19:44:58 +0100johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
2021-12-30 19:46:30 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 19:48:41 +0100learner-monad(~ehanneken@user/learner-monad)
2021-12-30 19:48:59 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 19:51:47 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 19:53:30 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 19:54:46 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-12-30 19:57:35 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-12-30 19:58:09 +0100coolnickname(uid531864@user/coolnickname)
2021-12-30 20:00:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 20:02:43 +0100alx741(~alx741@157.100.93.160)
2021-12-30 20:04:02 +0100max22-(~maxime@2a01cb0883359800fd0e15f8c1058ba6.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-12-30 20:04:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-12-30 20:05:49 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 20:08:13 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Read error: No route to host)
2021-12-30 20:09:55 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi)
2021-12-30 20:11:43 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 20:11:43 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 20:11:43 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 20:14:47 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-30 20:15:21 +0100ensyde(~ensyde@2600:1702:2e30:1a40:d506:18a6:e0ef:8a3a)
2021-12-30 20:15:53 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2021-12-30 20:16:00 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Read error: No route to host)
2021-12-30 20:18:00 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi)
2021-12-30 20:19:31 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-12-30 20:19:55 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 20:20:45 +0100 <dignissimus> I have `data Entails a b = Entails a b`, I have `type (:-) = Entails` which works fine but `(:-) = Entails` doesn't work as a synonym for the constructor, is it possible to do what I want to do?
2021-12-30 20:20:52 +0100travv0(sid293381@user/travv0)
2021-12-30 20:21:57 +0100 <tomsmeding> dignissimus: what about `data a :- b = a :- b`?
2021-12-30 20:23:07 +0100 <tomsmeding> but if you don't want that: `(:-) = Entails` doesn't work for the same reason that `Something = Entails` doesn't work; you want to define a variable, but variables must be lowercase. And "uppercase symbols" in Haskell are symbols starting with : -- except for (:) itself, that is
2021-12-30 20:23:35 +0100 <tomsmeding> but if you want to define a "fake constructor", you can use pattern synonyms :)
2021-12-30 20:24:20 +0100 <tomsmeding> (low-tech alternative: try |- )
2021-12-30 20:26:07 +0100 <dignissimus> tomsmeding: Thank you!
2021-12-30 20:26:19 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-30 20:26:34 +0100 <dignissimus> I'll have to look into pattern synonyms, I just searched it but it wasn't making intuitive sense
2021-12-30 20:26:57 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-12-30 20:27:01 +0100 <dignissimus> I think I like `data a :- b = a :- b` with `type Entails = (:-)` and `entails = (:-)`
2021-12-30 20:27:42 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-30 20:31:32 +0100zer0bitz(~zer0bitz@194.34.133.91)
2021-12-30 20:32:52 +0100_73(~user@pool-108-49-252-36.bstnma.fios.verizon.net) (Remote host closed the connection)
2021-12-30 20:33:40 +0100 <tomsmeding> dignissimus: pattern (:-) :: a -> b -> Entails a b ; pattern (:-) = Entails
2021-12-30 20:33:54 +0100 <tomsmeding> but preferably understand what they do first :)
2021-12-30 20:34:00 +0100 <tomsmeding> I like your suggestion as well, more idiomatic
2021-12-30 20:34:10 +0100 <tomsmeding> (in a way)
2021-12-30 20:37:01 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
2021-12-30 20:37:21 +0100tomsmedingis still amused that Haskell has a concept of an uppercase symbol
2021-12-30 20:38:00 +0100alx741(~alx741@157.100.93.160)
2021-12-30 20:39:31 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2021-12-30 20:39:50 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-30 20:40:05 +0100nhatanh02(~satori@123.24.172.30) (Ping timeout: 256 seconds)
2021-12-30 20:40:14 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 20:42:57 +0100 <Henson> for those interested in a follow up from yesterday's conversation, changing "unsafe" to "safe" fixed my problem. I thought that term applied to the kind of function that was being called, and not the method by which Haskell called the functions. I thought all of my functions were "unsafe" because they were in IO, not that Haskell was using an "unsafe" method of calling them.
2021-12-30 20:42:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 20:43:36 +0100 <geekosaur> yeh, I had that confusion at first as well. wish there were a better way to get that across
2021-12-30 20:44:02 +0100 <EvanR> using an IO type or not is how the "is IO" is expressed in the ffi
2021-12-30 20:44:14 +0100 <geekosaur> ironically it's almost the opposite: functions that do no IO, blocking, or memory allocation can be called "unsafe" for the most part
2021-12-30 20:44:30 +0100 <EvanR> if you don't put IO, you're promising the other end of this ffi call is pure
2021-12-30 20:44:46 +0100 <geekosaur> I think you always have to put IO
2021-12-30 20:44:55 +0100 <EvanR> for ffi bindings? no
2021-12-30 20:45:02 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-30 20:45:02 +0100 <geekosaur> you're just allows to use unsafeLocalState around the call if it isn't actually in IO
2021-12-30 20:45:08 +0100 <geekosaur> *allowed
2021-12-30 20:45:19 +0100 <EvanR> i.e. the C math library (if you're careful) can be not IO
2021-12-30 20:51:09 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-12-30 20:51:38 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 252 seconds)
2021-12-30 20:51:49 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Client Quit)
2021-12-30 20:51:58 +0100max22-(~maxime@2a01cb08833598003c7cbbeb6c92ab00.ipv6.abo.wanadoo.fr)
2021-12-30 20:52:02 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-12-30 20:54:13 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 20:55:08 +0100lavaman(~lavaman@98.38.249.169)
2021-12-30 20:59:17 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-30 20:59:20 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 21:00:01 +0100 <dignissimus> Which is preferred? `sort ctx _ = ...` or `sort ctx = const $ ...`?
2021-12-30 21:00:29 +0100Erutuon(~Erutuon@user/erutuon)
2021-12-30 21:00:29 +0100 <dignissimus> As an example: sort ctx = const $ ctx :- Judgement (TypeExpression (Kind KindType)) TypeOfKin
2021-12-30 21:01:26 +0100alx741(~alx741@157.100.93.160)
2021-12-30 21:03:36 +0100Feuermagier_(~Feuermagi@84.17.49.78)
2021-12-30 21:05:01 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 240 seconds)
2021-12-30 21:05:47 +0100 <hpc> what is that extra parameter normally?
2021-12-30 21:05:57 +0100Feuermagier(~Feuermagi@user/feuermagier) (Ping timeout: 240 seconds)
2021-12-30 21:05:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 21:06:20 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 21:06:21 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
2021-12-30 21:06:25 +0100 <dignissimus> hpc: List of "entailments"
2021-12-30 21:06:25 +0100 <tomsmeding> why make a distinction between the first and second parameter?
2021-12-30 21:06:45 +0100 <dignissimus> tomsmeding: What do you mean by that?
2021-12-30 21:06:49 +0100 <EvanR> the one with const $ is longer for no reason
2021-12-30 21:06:52 +0100 <hpc> tomsmeding: it could be like lens where you want to think of the partially applied function as a full object in and of itself
2021-12-30 21:06:57 +0100juhp(~juhp@128.106.188.82)
2021-12-30 21:07:02 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com)
2021-12-30 21:07:09 +0100 <hpc> when in doubt i would definitely go with sort ctx _ though
2021-12-30 21:07:27 +0100 <tomsmeding> dignissimus: why would you even consider writing one with a normal argument ("ctx") and one with a pointfree function ("const") -- not saying it's not a good idea, just asking what the difference is
2021-12-30 21:08:14 +0100 <EvanR> maybe the sort is the second case in a list of equations
2021-12-30 21:10:37 +0100Vajb(~Vajb@nabiicwveotvxswi5-2.v6.elisa-mobile.fi) (Ping timeout: 268 seconds)
2021-12-30 21:10:46 +0100Vajb(~Vajb@2001:999:230:a44e:bc17:5155:7945:add1)
2021-12-30 21:11:14 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2021-12-30 21:11:35 +0100 <dignissimus> tomsmeding: I don't think there's a specific reason. I have `sort :: InferenceRule` and `type InferenceRule = Context -> [Entailment] -> Entailment`
2021-12-30 21:11:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 21:11:58 +0100 <dignissimus> These are the rules https://i.imgur.com/EfeOygF.png
2021-12-30 21:12:18 +0100 <tomsmeding> dignissimus: then I'd just go with sort ctx _ =
2021-12-30 21:12:27 +0100 <dignissimus> Thank you everyone
2021-12-30 21:12:34 +0100 <dignissimus> When would const be preferred?
2021-12-30 21:12:37 +0100 <tomsmeding> that, or sort = \ctx _ -> ..., if you feel like they shouldn't be proper arguments
2021-12-30 21:13:23 +0100 <tomsmeding> if there was a meaningful difference between the first and the second argument, like if it was 'sort :: A -> Rule' where 'type Rule = B -> C', then perhaps const -- but even then I'd probably just go with 'sort ctx _ ='
2021-12-30 21:13:35 +0100 <tomsmeding> or even 'sort ctx = \_ -> ...' :)
2021-12-30 21:14:27 +0100 <EvanR> const can make passing arguments to a higher order function more convenient, similar to partialling, flip, etc
2021-12-30 21:14:47 +0100 <EvanR> or section involving $
2021-12-30 21:17:06 +0100 <EvanR> e.g. you wrote sort ctx = assuming 1 arg, then later when something wants a 2 arg function you pass (const sort)
2021-12-30 21:18:39 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-30 21:19:29 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
2021-12-30 21:19:57 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2021-12-30 21:20:08 +0100hughjfchen[m](~hughjfche@2001:470:69fc:105::c29d) (Quit: Client limit exceeded: 20000)
2021-12-30 21:22:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-30 21:23:58 +0100alx741(~alx741@181.199.42.79)
2021-12-30 21:24:49 +0100yauhsien(~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2021-12-30 21:27:03 +0100alx741(~alx741@181.199.42.79) (Read error: Connection reset by peer)
2021-12-30 21:28:08 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-12-30 21:28:08 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-12-30 21:28:11 +0100allbery_bgeekosaur
2021-12-30 21:29:06 +0100euandreh(~euandreh@191.181.59.160) (Ping timeout: 245 seconds)
2021-12-30 21:29:13 +0100otherwise(~otherwise@2601:602:880:90f0:9dc:9663:8c4e:291b)
2021-12-30 21:29:59 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-12-30 21:31:18 +0100 <otherwise> in ghci I can :set +s to show time spent during an evaluation. is there a way to add this a main.hs so that this information is also returned when running ./main (outside of ghci)?
2021-12-30 21:31:31 +0100hughjfchen[m](~hughjfche@2001:470:69fc:105::c29d)
2021-12-30 21:31:37 +0100 <EvanR> try -s
2021-12-30 21:31:39 +0100 <monochrom> No.
2021-12-30 21:31:41 +0100 <EvanR> +RTS -s
2021-12-30 21:31:54 +0100 <monochrom> Err I guess that works.
2021-12-30 21:32:36 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a)
2021-12-30 21:34:20 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 21:34:20 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 21:34:20 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 21:35:13 +0100 <otherwise> EvanR where do I put +RTS -s ?
2021-12-30 21:35:30 +0100 <EvanR> when you run ./main
2021-12-30 21:36:32 +0100 <EvanR> command line arguments
2021-12-30 21:37:15 +0100 <otherwise> hmm okay
2021-12-30 21:40:17 +0100burnsidesLlama(~burnsides@dhcp168-010.wadham.ox.ac.uk)
2021-12-30 21:41:48 +0100jeetelongname(~jeet@88-111-159-26.dynamic.dsl.as9105.com)
2021-12-30 21:42:34 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 21:44:13 +0100alx741(~alx741@157.100.93.160)
2021-12-30 21:44:30 +0100 <otherwise> omg it worked! cool, thanks EvanR
2021-12-30 21:44:37 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 240 seconds)
2021-12-30 21:45:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-30 21:45:55 +0100 <EvanR> also -S gives you a running dump of GC stats
2021-12-30 21:46:18 +0100 <EvanR> which could be interesting for a long-running program
2021-12-30 21:46:39 +0100 <otherwise> so is +RTS -s haskell specific command? also, is there a resource online for me to read more about adding commands to the end of ./main. in general?
2021-12-30 21:46:50 +0100 <EvanR> yes
2021-12-30 21:47:33 +0100 <EvanR> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html
2021-12-30 21:48:49 +0100 <geekosaur> you can also provide user-specified options not handled by the RTS; those are available to the program via https://downloads.haskell.org/ghc/latest/docs/html/libraries/base-4.16.0.0/System-Environment.html…
2021-12-30 21:49:05 +0100coot_(~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot_)
2021-12-30 21:49:29 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 21:49:47 +0100dignissimus(~dignissim@88-104-68-62.dynamic.dsl.as9105.com) (Ping timeout: 256 seconds)
2021-12-30 21:49:47 +0100 <otherwise> okay, i need to get better at navigating online GHC documentation, it seems like all my questions are answered there. However it is kind of a catch-22, because I often don't have the technical language to even ask the question properly, so that makes navigating GHC documentation more difficult at this point in my learning curve...
2021-12-30 21:50:14 +0100 <EvanR> just reading the whole manual is a thing
2021-12-30 21:50:18 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-12-30 21:50:34 +0100 <EvanR> that I haven't done, but back in the day it helped
2021-12-30 21:50:51 +0100 <geekosaur> …skipping over parts that don't make sense at first, like some of the fancy type foo
2021-12-30 21:51:29 +0100dignissimus(~dignissim@88-104-68-62.dynamic.dsl.as9105.com)
2021-12-30 21:57:27 +0100pavonia(~user@user/siracusa)
2021-12-30 22:01:51 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-12-30 22:07:53 +0100alx741(~alx741@157.100.93.160)
2021-12-30 22:08:21 +0100 <EvanR> wow lazy Writer is very lazy... and strict Writer is not very strict
2021-12-30 22:09:04 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-12-30 22:09:35 +0100 <monochrom> strict State is not very strict either.
2021-12-30 22:10:00 +0100falafel(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
2021-12-30 22:11:15 +0100 <EvanR> as long as the monoid is lazy enough should work
2021-12-30 22:11:19 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-30 22:12:17 +0100dignissimus(~dignissim@88-104-68-62.dynamic.dsl.as9105.com) (Ping timeout: 268 seconds)
2021-12-30 22:12:27 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 22:13:28 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 22:14:17 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
2021-12-30 22:14:51 +0100 <EvanR> the process of getting the results from runWriter is reminding me of the break/span thing which had surprising performance
2021-12-30 22:16:14 +0100 <EvanR> the result is a pair whose computational fate of components is inextricably linked
2021-12-30 22:19:28 +0100 <EvanR> did don knuth say way back when the only way to predict performance is to consider everything to be bits and bytes and machine code instructions xD
2021-12-30 22:19:35 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
2021-12-30 22:19:53 +0100 <EvanR> how to haskell
2021-12-30 22:19:58 +0100 <geekosaur> even that doens't work these days thanks to caching and such
2021-12-30 22:21:11 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-30 22:22:50 +0100kaph(~kaph@net-2-38-107-19.cust.vodafonedsl.it)
2021-12-30 22:24:14 +0100 <c_wraith> back when racing the beam was a thing, you had to be deterministic.
2021-12-30 22:24:33 +0100 <c_wraith> those days are long past
2021-12-30 22:25:01 +0100 <jackdk> we have CPS WriterT now, but you need the unreleased mtl-2.3 to get a MonadWriter instance for it
2021-12-30 22:26:14 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 252 seconds)
2021-12-30 22:28:34 +0100falafel(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Remote host closed the connection)
2021-12-30 22:28:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 22:28:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 22:28:52 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 22:28:57 +0100falafel(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
2021-12-30 22:29:59 +0100 <qrpnxz> iterators are just lists, laziness is super power
2021-12-30 22:30:47 +0100zer0bitz(~zer0bitz@194.34.133.91) (Ping timeout: 268 seconds)
2021-12-30 22:31:19 +0100alx741(~alx741@157.100.93.160)
2021-12-30 22:32:02 +0100johnw(~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
2021-12-30 22:32:48 +0100falafel_(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
2021-12-30 22:33:13 +0100 <EvanR> how we see ourselves: iron man, how everyone else sees us: the cosplay tron dude from programming language battle grid
2021-12-30 22:33:18 +0100uam(uid360535@id-360535.hampstead.irccloud.com)
2021-12-30 22:33:25 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-30 22:35:37 +0100falafel(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
2021-12-30 22:36:05 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 22:37:16 +0100acidjnk(~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de)
2021-12-30 22:37:37 +0100falafel_(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
2021-12-30 22:38:17 +0100 <qrpnxz> lol
2021-12-30 22:38:58 +0100 <qrpnxz> I'm going to be doing file manupulation for the first time in haskell, and i was surprised how much there is in System.IO, hopefully enough.
2021-12-30 22:39:43 +0100 <EvanR> see also Data.ByteString I/O section
2021-12-30 22:40:30 +0100 <qrpnxz> ty
2021-12-30 22:40:37 +0100dignissimus(~dignissim@88-104-68-62.dynamic.dsl.as9105.com)
2021-12-30 22:42:07 +0100mvk(~mvk@2607:fea8:5cdd:f000::917a)
2021-12-30 22:42:59 +0100 <EvanR> aaand Control.Exception since file manipulation communicates some stuff by throwing
2021-12-30 22:43:21 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-30 22:43:38 +0100 <EvanR> i.e. file not found
2021-12-30 22:43:46 +0100 <qrpnxz> ohhh, good heads up
2021-12-30 22:44:02 +0100 <dsal> qrpnxz: what kinds of files? I don't end up using system.io very much.
2021-12-30 22:44:10 +0100euandreh(~euandreh@2804:14c:33:9fe5:203e:45d6:8d1a:1058)
2021-12-30 22:45:43 +0100 <qrpnxz> I want to port a audio metadata editor from C, so audio files. Common case it will read very few bytes, if possible overwrite as much, worse case rewrite the metadata and copy the rest of the file.
2021-12-30 22:46:07 +0100 <dsal> Ah, so actual low level stuff. :)
2021-12-30 22:46:22 +0100 <qrpnxz> yeah pretty low level for the overwrite case
2021-12-30 22:47:23 +0100 <qrpnxz> and i'd like to build some of the structures by hand as well, what's idiomatic serialization in Haskell? Should I use Show or is there something more "efficient"?
2021-12-30 22:47:34 +0100 <dsal> Definitely not show.
2021-12-30 22:47:41 +0100 <qrpnxz> right
2021-12-30 22:47:55 +0100coolnickname(uid531864@user/coolnickname) (Quit: Connection closed for inactivity)
2021-12-30 22:48:14 +0100 <dsal> But it depends on the structure. I did mqtt "by hand" with a class that's I probably named "ByteMe" or something which makes a ByteStream out of a thing.
2021-12-30 22:48:57 +0100 <qrpnxz> yeah, something like that was the plan if there wasn't anything else
2021-12-30 22:49:10 +0100 <geekosaur> depends on how you want to serialize stuff. there are libraries for things like protobuf, json, yaml, bson, toml, etc.; there are libraries for Haskell-specific serialization with type information (binary, cereal), etc.
2021-12-30 22:49:35 +0100 <dsal> If you want to encode your data into mqtt packets, I've got something that will do that.
2021-12-30 22:49:35 +0100 <geekosaur> if you need to serialize for direct consumption by C/FFI, there's the Storable class
2021-12-30 22:50:44 +0100 <EvanR> if there's no library for your metadata format already I'm going to guess use `binary' package
2021-12-30 22:53:11 +0100falafel_(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
2021-12-30 22:53:25 +0100 <qrpnxz> "binary" looks like what I want, thank you all
2021-12-30 22:53:51 +0100alx741(~alx741@157.100.93.160)
2021-12-30 22:54:41 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-12-30 22:57:03 +0100Kaiepi(~Kaiepi@216.208.243.103) (Read error: Connection reset by peer)
2021-12-30 22:57:41 +0100falafel__(~falafel@cpe-76-168-195-162.socal.res.rr.com)
2021-12-30 22:58:22 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 22:58:53 +0100CiaoSen(~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-30 22:58:57 +0100deadmarshal(~deadmarsh@95.38.115.121) (Ping timeout: 240 seconds)
2021-12-30 23:00:16 +0100 <qrpnxz> storable also note worthy thanks
2021-12-30 23:00:37 +0100falafel_(~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
2021-12-30 23:01:00 +0100SummerSonw(~The_viole@203.77.49.232)
2021-12-30 23:01:57 +0100falafel__(~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 240 seconds)
2021-12-30 23:03:12 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2021-12-30 23:04:50 +0100 <dignissimus> Could somebody check the style of my code? https://paste.tomsmeding.com/BBtrf7nI
2021-12-30 23:05:43 +0100Guest13(~Guest13@p200300c8973682c385b00e33b8703e1f.dip0.t-ipconnect.de)
2021-12-30 23:05:47 +0100Guest13(~Guest13@p200300c8973682c385b00e33b8703e1f.dip0.t-ipconnect.de) (Client Quit)
2021-12-30 23:06:09 +0100 <dignissimus> I've just figured out how I want to go about doing things, I want to make sure the code can be read easily or if I've done something weird
2021-12-30 23:07:56 +0100 <EvanR> I can read it xD
2021-12-30 23:08:06 +0100 <dignissimus> Yay!
2021-12-30 23:08:27 +0100 <dignissimus> I think I'm slowly getting the hang of haskell
2021-12-30 23:09:21 +0100 <glguy> dignissimus: I'd switch to using derived Eq instances when you can, and not providing Eq instances when they are incomplete
2021-12-30 23:09:44 +0100 <glguy> In some cases with GADTs you can derive them using StandaloneDeriving when you couldn't have derived them the normal way
2021-12-30 23:10:54 +0100 <glguy> If you need a custom Eq instance for a very special reason it should have comment explaining the reason
2021-12-30 23:11:11 +0100zincy_(~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection)
2021-12-30 23:12:56 +0100 <dignissimus> glguy: Thank you! I'm a bit confused about StandaloneDeriving, after searching I've understood that it's a pragma that allows me to write deriving statements on their own, but I don't understand much else
2021-12-30 23:13:16 +0100 <glguy> in the case of your file, it's not needed
2021-12-30 23:13:40 +0100 <glguy> (you aren't using any GADTs)
2021-12-30 23:14:16 +0100 <geekosaur> it's sometimes useful when you need an instance that the original author didn't derive for you, but only in executables (otherwise, well, orphan instances are a nasty trap for the unsuspecting)
2021-12-30 23:14:41 +0100 <geekosaur> and otherwise useful because they can derive things for GADTs when normal deriving can't, as glguy said
2021-12-30 23:15:26 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-12-30 23:15:50 +0100 <geekosaur> in general I'd consider the first use a small and the second use risky because in most cases where normal deriving won't work, there's good reason it won't and not even a manually written instance will work
2021-12-30 23:16:22 +0100alx741(~alx741@157.100.93.160)
2021-12-30 23:16:43 +0100 <glguy> It's not that dire, sometimes the deriver just needs some help with the type indexes
2021-12-30 23:16:55 +0100 <glguy> you don't get a bad instance out of it
2021-12-30 23:18:02 +0100 <glguy> easy example: https://glguy.net/advent/sln_2021_22/src/Main.html#Box
2021-12-30 23:20:06 +0100 <geekosaur> right, I'm mostly thinking of the GADTs that hide existentials that can never be proven Eq
2021-12-30 23:20:25 +0100 <dignissimus> glguy: With GADTs, I initially used the GADT pragma because I wanted to encode type information expression with the `Expression` type, I then realised I couldn't do this. Now, if I remove the GADT pragma, I'm told SimpleType is an illegal GADT declaration, how come? (I can't tell why it can't be done without the extension)
2021-12-30 23:20:54 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 23:20:55 +0100 <glguy> dignissimus: You can use the GADTSyntax extension if you want to use that syntax without any of the extensions that GADTs bring along
2021-12-30 23:21:32 +0100 <dignissimus> Thank you! That worked
2021-12-30 23:22:29 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Quit: Lost terminal)
2021-12-30 23:24:50 +0100 <geekosaur> (my main complaint about the cases I'm thinking of is that ghc will happily derive something that can't work and then vomit it up at you as if it was your fault)
2021-12-30 23:24:50 +0100cheater(~Username@user/cheater) (Ping timeout: 260 seconds)
2021-12-30 23:25:41 +0100 <geekosaur> it does at least say "while typechecking a derived Eq instance" or some such, but otherwise leaves you wondering where tf that code came from
2021-12-30 23:28:20 +0100cheater(~Username@user/cheater)
2021-12-30 23:30:20 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2021-12-30 23:30:39 +0100 <ProfSimm> Could Haskell effectively model a neural network?
2021-12-30 23:32:13 +0100 <geekosaur> there's at least one although I note it's a bit out of date: https://hackage.haskell.org/package/neural
2021-12-30 23:32:26 +0100 <geekosaur> wouldn't be surprised if there are others
2021-12-30 23:35:24 +0100notzmv(~zmv@user/notzmv)
2021-12-30 23:36:34 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2021-12-30 23:37:13 +0100Everything(~Everythin@37.115.210.35)
2021-12-30 23:37:41 +0100Midjak2(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2021-12-30 23:38:15 +0100Midjak2(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Client Quit)
2021-12-30 23:38:15 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Client Quit)
2021-12-30 23:38:54 +0100alx741(~alx741@157.100.93.160)
2021-12-30 23:39:30 +0100max22-(~maxime@2a01cb08833598003c7cbbeb6c92ab00.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-12-30 23:41:33 +0100DNH(~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-12-30 23:41:55 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-30 23:42:01 +0100Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat)
2021-12-30 23:42:38 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2021-12-30 23:43:12 +0100Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net)
2021-12-30 23:43:22 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2021-12-30 23:48:14 +0100 <dignissimus> https://github.com/dignissimus/Halt/ Thus begins my ambitious project XD
2021-12-30 23:48:42 +0100 <dignissimus> I don't really see it going anywhere, agda and idris already exist and they're very good
2021-12-30 23:49:11 +0100vglfr(~vglfr@88.155.60.141)
2021-12-30 23:49:11 +0100 <dignissimus> But I'll be very happy when I've made it, I'd like to see algorithms become first class data types
2021-12-30 23:49:19 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-30 23:49:19 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-30 23:49:19 +0100wroathe(~wroathe@user/wroathe)
2021-12-30 23:51:18 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2021-12-30 23:51:45 +0100Codaraxis__(~Codaraxis@user/codaraxis)
2021-12-30 23:52:25 +0100DNH(~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b)
2021-12-30 23:55:53 +0100Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 268 seconds)
2021-12-30 23:57:05 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-12-30 23:57:05 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-12-30 23:57:09 +0100allbery_bgeekosaur