2021-12-30 00:01:45 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 00:05:21 +0100 | jumper149 | (~jumper149@static.6.71.203.116.clients.your-server.de) (Quit: WeeChat 3.3) |
2021-12-30 00:06:22 +0100 | jinsun | (~quassel@user/jinsun) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-30 00:15:15 +0100 | otherwise | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 00:20:02 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 268 seconds) |
2021-12-30 00:21:03 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2021-12-30 00:21:16 +0100 | xb0o2 | (~xb0o2@user/xb0o2) (Quit: Client closed) |
2021-12-30 00:21:25 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-12-30 00:21:42 +0100 | incertia_ | (~incertia@24.42.241.219) |
2021-12-30 00:22:19 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 256 seconds) |
2021-12-30 00:22:19 +0100 | incertia_ | 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 +0100 | coolnickname | (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 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 268 seconds) |
2021-12-30 00:30:40 +0100 | AlexNoo_ | (~AlexNoo@94.233.241.181) |
2021-12-30 00:30:40 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 00:33:05 +0100 | Alex_test | (~al_test@178.34.163.120) (Ping timeout: 256 seconds) |
2021-12-30 00:33:17 +0100 | AlexZenon | (~alzenon@178.34.163.120) (Ping timeout: 240 seconds) |
2021-12-30 00:34:02 +0100 | AlexNoo | (~AlexNoo@178.34.163.120) (Ping timeout: 240 seconds) |
2021-12-30 00:35:33 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 00:37:03 +0100 | Alex_test | (~al_test@94.233.241.181) |
2021-12-30 00:37:43 +0100 | AlexZenon | (~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 +0100 | Gurkenglas | (~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 +0100 | lavaman | (~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 +0100 | Bartol_ | (~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 +0100 | madjestic | (~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 +0100 | alx741 | (~alx741@181.199.42.79) |
2021-12-30 00:49:02 +0100 | DNH | (~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 +0100 | DNH | (~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 +0100 | max22- | (~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 +0100 | jtomas | (~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 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 268 seconds) |
2021-12-30 00:54:33 +0100 | alx741 | (~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 +0100 | vglfr | (~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 +0100 | vglfr | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 01:14:08 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-12-30 01:14:08 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-12-30 01:14:11 +0100 | allbery_b | geekosaur |
2021-12-30 01:17:13 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:7898:e7cb:a448:daff) (Quit: Textual IRC Client: www.textualapp.com) |
2021-12-30 01:17:45 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 01:17:45 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 01:17:45 +0100 | wroathe | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 01:20:56 +0100 | Omen | (~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 +0100 | desantra | (~skykanin@user/skykanin) |
2021-12-30 01:21:31 +0100 | bitdex | (~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 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2021-12-30 01:22:18 +0100 | bitdex | (~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 +0100 | Feuermagier | (~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 +0100 | zaquest | (~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 +0100 | zaquest | (~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 +0100 | waleee | (~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 +0100 | waleee | (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) |
2021-12-30 01:37:07 +0100 | madjestic | (~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 +0100 | alx741 | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 01:51:34 +0100 | desantra | (~skykanin@user/skykanin) (Quit: WeeChat 3.3) |
2021-12-30 01:51:58 +0100 | mvk | (~mvk@2607:fea8:5cdd:f000::917a) |
2021-12-30 01:52:28 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 01:53:56 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-30 01:53:56 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 01:54:25 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 01:55:27 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-12-30 01:55:33 +0100 | AlexNoo__ | (~AlexNoo@94.233.241.181) |
2021-12-30 01:55:43 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
2021-12-30 01:56:07 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
2021-12-30 01:58:32 +0100 | AlexNoo_ | (~AlexNoo@94.233.241.181) (Ping timeout: 240 seconds) |
2021-12-30 02:02:24 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 268 seconds) |
2021-12-30 02:04:53 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-30 02:11:16 +0100 | phma | (~phma@2001:5b0:211f:d0f8:a0d5:904f:4002:7904) (Read error: Connection reset by peer) |
2021-12-30 02:11:44 +0100 | phma | (phma@2001:5b0:211f:d0f8:a0d5:904f:4002:7904) |
2021-12-30 02:12:05 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) |
2021-12-30 02:12:17 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 02:14:34 +0100 | infinity0 | (~infinity0@occupy.ecodis.net) (Ping timeout: 260 seconds) |
2021-12-30 02:14:46 +0100 | infinity0 | (~infinity0@occupy.ecodis.net) |
2021-12-30 02:16:47 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2021-12-30 02:19:32 +0100 | otherwise | (~otherwise@c-71-231-39-206.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2021-12-30 02:23:01 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-12-30 02:30:53 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 02:36:42 +0100 | kmein | (~weechat@user/kmein) (Quit: ciao kakao) |
2021-12-30 02:40:37 +0100 | acidjnk | (~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2021-12-30 02:41:30 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 02:42:49 +0100 | kmein | (~weechat@user/kmein) (Client Quit) |
2021-12-30 02:43:05 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 02:46:24 +0100 | kmein | (~weechat@user/kmein) (Client Quit) |
2021-12-30 02:46:42 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 02:48:42 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 02:50:29 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 268 seconds) |
2021-12-30 02:51:55 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 02:51:55 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 02:51:55 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 02:52:20 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection) |
2021-12-30 02:53:05 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 02:54:09 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 02:54:13 +0100 | gcdotdev | (~gcdotdev@user/gcdotdev) |
2021-12-30 02:54:32 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-12-30 02:56:39 +0100 | kmein | (~weechat@user/kmein) (Quit: ciao kakao) |
2021-12-30 02:56:57 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 02:57:23 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 250 seconds) |
2021-12-30 02:59:03 +0100 | gcdotdev | (~gcdotdev@user/gcdotdev) (Quit: Client closed) |
2021-12-30 03:05:22 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 03:06:18 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-30 03:06:33 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 03:07:08 +0100 | otherwise | (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) |
2021-12-30 03:10:27 +0100 | fjmorazan | (~quassel@user/fjmorazan) (Quit: fjmorazan) |
2021-12-30 03:11:00 +0100 | fjmorazan | (~quassel@user/fjmorazan) |
2021-12-30 03:11:45 +0100 | curiousgay | (~curiousga@77-120-141-90.kha.volia.net) (Ping timeout: 256 seconds) |
2021-12-30 03:12:08 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 03:14:31 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-90.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-12-30 03:18:15 +0100 | moonlighter69 | (~moonlight@47.146.14.64) |
2021-12-30 03:18:41 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 03:26:23 +0100 | ajb | (~ajb@cupid.whatbox.ca) (Remote host closed the connection) |
2021-12-30 03:28:14 +0100 | kmein | (~weechat@user/kmein) (Quit: ciao kakao) |
2021-12-30 03:28:33 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 03:29:04 +0100 | moonlighter69 | (~moonlight@47.146.14.64) (Remote host closed the connection) |
2021-12-30 03:31:36 +0100 | kmein | (~weechat@user/kmein) (Client Quit) |
2021-12-30 03:31:52 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 03:33:01 +0100 | infinity0 | (~infinity0@occupy.ecodis.net) (Ping timeout: 240 seconds) |
2021-12-30 03:33:48 +0100 | kmein | (~weechat@user/kmein) (Client Quit) |
2021-12-30 03:34:06 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 03:34:21 +0100 | ajb | (~ajb@cupid.whatbox.ca) |
2021-12-30 03:34:27 +0100 | infinity0 | (~infinity0@occupy.ecodis.net) |
2021-12-30 03:35:19 +0100 | kmein | (~weechat@user/kmein) (Client Quit) |
2021-12-30 03:35:37 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 03:36:43 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 03:37:15 +0100 | waleee | (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds) |
2021-12-30 03:38:48 +0100 | kmein | (~weechat@user/kmein) (Client Quit) |
2021-12-30 03:38:57 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds) |
2021-12-30 03:39:07 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 03:41:13 +0100 | octeep[m] | (~octeepoct@2001:470:69fc:105::1:3dbf) (Quit: Client limit exceeded: 20000) |
2021-12-30 03:43:54 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2021-12-30 03:45:45 +0100 | xff0x | (~xff0x@port-92-193-205-13.dynamic.as20676.net) (Ping timeout: 256 seconds) |
2021-12-30 03:46:48 +0100 | Codaraxis_ | (~Codaraxis@user/codaraxis) |
2021-12-30 03:47:46 +0100 | xff0x | (~xff0x@2001:1a81:527e:7f00:c95b:8db9:d638:e5ae) |
2021-12-30 03:50:51 +0100 | Codaraxis | (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds) |
2021-12-30 03:54:36 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 03:58:36 +0100 | Movedtosridoneem | (~sridmatri@2001:470:69fc:105::1c2) (Quit: Client limit exceeded: 20000) |
2021-12-30 03:59:14 +0100 | n3rdy1 | (~n3rdy1@2600:1700:4570:3480::41) |
2021-12-30 04:07:42 +0100 | infinity0 | (~infinity0@occupy.ecodis.net) (Remote host closed the connection) |
2021-12-30 04:12:12 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4) |
2021-12-30 04:12:12 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 04:12:30 +0100 | infinity0 | (~infinity0@occupy.ecodis.net) |
2021-12-30 04:12:34 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) |
2021-12-30 04:19:27 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 04:23:07 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-12-30 04:23:32 +0100 | danso | (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds) |
2021-12-30 04:23:32 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 04:24:46 +0100 | danso | (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) |
2021-12-30 04:25:28 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 268 seconds) |
2021-12-30 04:37:17 +0100 | danso | (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds) |
2021-12-30 04:39:16 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-30 04:40:12 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 04:44:16 +0100 | danso | (~danso@d67-193-121-2.home3.cgocable.net) |
2021-12-30 04:47:49 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds) |
2021-12-30 04:47:56 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2021-12-30 04:47:56 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2021-12-30 04:47:56 +0100 | finn_elija | FinnElija |
2021-12-30 04:52:39 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 04:53:17 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-12-30 04:56:01 +0100 | td_ | (~td@muedsl-82-207-238-009.citykom.de) (Ping timeout: 256 seconds) |
2021-12-30 04:57:30 +0100 | td_ | (~td@94.134.91.217) |
2021-12-30 05:07:39 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2021-12-30 05:08:34 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Quit: Leaving) |
2021-12-30 05:08:50 +0100 | SummerSonw | (~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 +0100 | octeep[m] | (~octeepoct@2001:470:69fc:105::1:3dbf) |
2021-12-30 05:10:39 +0100 | SridharRatnakum4 | (~sridmatri@2001:470:69fc:105::1c2) |
2021-12-30 05:10:41 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 05:14:57 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Ping timeout: 240 seconds) |
2021-12-30 05:15:37 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2021-12-30 05:18:19 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-30 05:18:21 +0100 | Morrow | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 05:29:23 +0100 | mbuf | (~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 +0100 | deadmarshal | (~deadmarsh@95.38.115.121) |
2021-12-30 05:37:39 +0100 | dsrt^ | (~dsrt@207.5.54.6) (Remote host closed the connection) |
2021-12-30 05:40:16 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 05:44:37 +0100 | n3rdy1 | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 05:58:55 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 06:00:26 +0100 | zebrag | (~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 +0100 | alfonsox | (~quassel@103.92.42.182) |
2021-12-30 06:02:37 +0100 | mvk | (~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 +0100 | phma | (phma@2001:5b0:211f:d0f8:a0d5:904f:4002:7904) (Read error: Connection reset by peer) |
2021-12-30 06:11:53 +0100 | phma | (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 +0100 | alx741 | (~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 +0100 | notzmv | (~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 +0100 | alx741 | (~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 +0100 | theproffesor_ | (~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 +0100 | the_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 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 06:23:07 +0100 | sirlensalot | (~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 +0100 | lavaman | (~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 +0100 | nuh^ | (~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 +0100 | alx741 | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 06:49:57 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 06:50:56 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2021-12-30 06:51:57 +0100 | antony | (~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 +0100 | vglfr | (~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 +0100 | wroathe | (~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 +0100 | alx741 | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 07:13:50 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 07:13:50 +0100 | wroathe | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 07:14:52 +0100 | antony | (~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 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2021-12-30 07:20:22 +0100 | jco | (~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 +0100 | merijn | (~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 +0100 | seer | (~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 +0100 | seer | Inst |
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 +0100 | Omen | (~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 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-30 07:31:50 +0100 | ensyde | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 07:32:58 +0100 | vglfr | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 07:36:42 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 07:36:42 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 07:37:45 +0100 | <maerwald[m]> | xD |
2021-12-30 07:39:27 +0100 | analognoise | (~analognoi@185.216.74.46) |
2021-12-30 07:41:29 +0100 | wroathe | (~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 +0100 | alx741 | (~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 +0100 | vglfr | (~vglfr@88.155.6.191) (Ping timeout: 256 seconds) |
2021-12-30 07:56:46 +0100 | asco2 | (~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 +0100 | spaceseller | (~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 +0100 | InternetCitizen | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 08:08:01 +0100 | vglfr | (~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 +0100 | vglfr | (~vglfr@88.155.6.191) (Ping timeout: 240 seconds) |
2021-12-30 08:12:31 +0100 | vglfr | (~vglfr@88.155.6.191) |
2021-12-30 08:12:48 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 08:13:08 +0100 | falafel | (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) |
2021-12-30 08:13:43 +0100 | yauhsien | (~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 +0100 | vglfr | (~vglfr@88.155.6.191) (Ping timeout: 256 seconds) |
2021-12-30 08:17:48 +0100 | vglfr | (~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 +0100 | yauhsien | (~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 +0100 | SummerSonw | (~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 +0100 | burnsidesLlama | (~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 +0100 | asco2 | (~asco2@c-73-202-117-7.hsd1.ca.comcast.net) (Quit: Client closed) |
2021-12-30 08:25:59 +0100 | burnsidesLlama | (~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 +0100 | burnsidesLlama | (~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 +0100 | alx741 | (~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 +0100 | alx741 | (~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 +0100 | Jing | (~hedgehog@2604:a840:3::1067) |
2021-12-30 08:57:06 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 08:57:16 +0100 | x88x88x | (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Remote host closed the connection) |
2021-12-30 08:58:01 +0100 | x88x88x | (~x88x88x@149.28.53.172) |
2021-12-30 08:58:10 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-12-30 09:00:30 +0100 | nschoe | (~quassel@178.251.84.79) |
2021-12-30 09:01:47 +0100 | nschoe | (~quassel@178.251.84.79) (Client Quit) |
2021-12-30 09:02:53 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 09:04:17 +0100 | falafel | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 09:11:00 +0100 | shriekingnoise | (~shrieking@186.137.144.80) (Quit: Quit) |
2021-12-30 09:15:19 +0100 | coolnickname | (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 +0100 | xff0x | (~xff0x@2001:1a81:527e:7f00:c95b:8db9:d638:e5ae) (Remote host closed the connection) |
2021-12-30 09:17:59 +0100 | xff0x | (~xff0x@2001:1a81:527e:7f00:b856:ac3b:a520:4a41) |
2021-12-30 09:20:34 +0100 | alx741 | (~alx741@181.199.42.79) |
2021-12-30 09:20:36 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 09:21:14 +0100 | max22- | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) |
2021-12-30 09:21:56 +0100 | foul_owl | (~kerry@212.102.47.57) (Ping timeout: 252 seconds) |
2021-12-30 09:22:14 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-12-30 09:22:24 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-12-30 09:22:27 +0100 | allbery_b | geekosaur |
2021-12-30 09:26:11 +0100 | alx741 | (~alx741@181.199.42.79) (Read error: Connection reset by peer) |
2021-12-30 09:27:26 +0100 | foul_owl | (~kerry@212.102.47.57) |
2021-12-30 09:28:38 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-12-30 09:30:16 +0100 | alfonsox | (~quassel@103.92.42.182) (Remote host closed the connection) |
2021-12-30 09:30:40 +0100 | KvL | (~KvL@user/KvL) |
2021-12-30 09:39:39 +0100 | eggplantade | (~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 +0100 | ksqsf | (~user@134.209.106.31) |
2021-12-30 09:40:02 +0100 | analognoise | (~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 +0100 | alx741 | (~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 +0100 | nuh^ | (~nuh@207.5.54.6) (Remote host closed the connection) |
2021-12-30 09:50:04 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 09:55:59 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 09:55:59 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 09:55:59 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 09:56:51 +0100 | nhatanh02 | (~satori@123.24.172.30) |
2021-12-30 10:00:53 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2021-12-30 10:04:18 +0100 | cfricke | (~cfricke@user/cfricke) |
2021-12-30 10:08:21 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 10:08:22 +0100 | acidjnk | (~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de) |
2021-12-30 10:11:39 +0100 | nhatanh02 | (~satori@123.24.172.30) (Ping timeout: 256 seconds) |
2021-12-30 10:13:20 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 10:17:42 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-12-30 10:17:42 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-12-30 10:17:45 +0100 | allbery_b | geekosaur |
2021-12-30 10:18:57 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-12-30 10:19:01 +0100 | lavaman | (~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 +0100 | nhatanh02 | (~satori@123.24.172.30) |
2021-12-30 10:22:59 +0100 | <Nate[m]12> | s/softwares/software/ |
2021-12-30 10:24:07 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-12-30 10:26:26 +0100 | tzh | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 10:30:41 +0100 | szkl | (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 +0100 | AlexNoo__ | 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 +0100 | nhatanh02 | (~satori@123.24.172.30) (Ping timeout: 256 seconds) |
2021-12-30 10:40:08 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 10:40:31 +0100 | cosimone | (~user@93-34-133-35.ip49.fastwebnet.it) |
2021-12-30 10:43:57 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-12-30 10:44:43 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds) |
2021-12-30 10:45:09 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) |
2021-12-30 10:45:54 +0100 | hyiltiz | (~quassel@31.220.5.250) |
2021-12-30 10:47:17 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-12-30 10:48:08 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 10:50:17 +0100 | hyiltiz | (~quassel@31.220.5.250) (Ping timeout: 240 seconds) |
2021-12-30 10:51:26 +0100 | jco | (~jco@90-228-194-139-no542.tbcn.telia.com) (Remote host closed the connection) |
2021-12-30 10:51:37 +0100 | Inst | (~delicacie@2601:6c4:4080:3f80:452b:5b2:a00e:7e62) (Ping timeout: 240 seconds) |
2021-12-30 10:53:35 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
2021-12-30 10:54:46 +0100 | hyiltiz | (~quassel@31.220.5.250) |
2021-12-30 10:59:41 +0100 | max22- | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 250 seconds) |
2021-12-30 11:04:03 +0100 | jinsun | (~quassel@user/jinsun) |
2021-12-30 11:04:47 +0100 | alx741 | (~alx741@181.199.42.79) |
2021-12-30 11:06:11 +0100 | chomwitt | (~chomwitt@2a02:587:dc1e:c100:12c3:7bff:fe6d:d374) |
2021-12-30 11:09:57 +0100 | vglfr | (~vglfr@88.155.6.191) (Ping timeout: 240 seconds) |
2021-12-30 11:12:39 +0100 | mvk | (~mvk@2607:fea8:5cdd:f000::917a) |
2021-12-30 11:16:57 +0100 | ensyde | (~Omen@2600:1702:2e30:1a40:8511:a2a3:f354:5a5e) (Ping timeout: 240 seconds) |
2021-12-30 11:20:28 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-12-30 11:21:28 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-90.elisa-laajakaista.fi) |
2021-12-30 11:22:19 +0100 | alx741 | (~alx741@181.199.42.79) (Read error: Connection reset by peer) |
2021-12-30 11:25:43 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-30 11:27:25 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
2021-12-30 11:27:55 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2021-12-30 11:30:38 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 252 seconds) |
2021-12-30 11:35:15 +0100 | mastarija | (~mastarija@2a05:4f46:e0e:5000:d11e:1641:cfb6:79c3) |
2021-12-30 11:39:09 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 11:42:17 +0100 | spaceseller | (~spacesell@31.147.205.13) (Quit: Leaving) |
2021-12-30 11:46:24 +0100 | ksqsf | (~user@134.209.106.31) (Remote host closed the connection) |
2021-12-30 11:46:57 +0100 | xff0x | (~xff0x@2001:1a81:527e:7f00:b856:ac3b:a520:4a41) (Ping timeout: 240 seconds) |
2021-12-30 11:48:11 +0100 | xff0x | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 11:53:19 +0100 | vglfr | (~vglfr@88.155.12.39) |
2021-12-30 11:53:30 +0100 | max22- | (~maxime@2a01cb088335980042a847f93091dac4.ipv6.abo.wanadoo.fr) |
2021-12-30 11:53:48 +0100 | DNH | (~DNH@ip5f5abb04.dynamic.kabel-deutschland.de) |
2021-12-30 11:54:44 +0100 | mastarija | (~mastarija@2a05:4f46:e0e:5000:d11e:1641:cfb6:79c3) (Quit: Leaving) |
2021-12-30 11:56:46 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 11:56:46 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 11:56:46 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 11:59:39 +0100 | vglfr | (~vglfr@88.155.12.39) (Read error: Connection reset by peer) |
2021-12-30 12:00:17 +0100 | vglfr | (~vglfr@88.155.12.39) |
2021-12-30 12:01:47 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
2021-12-30 12:03:41 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 12:07:35 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 12:12:17 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 12:16:43 +0100 | DNH | (~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 +0100 | alx741 | (~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 +0100 | jakalx | (~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 +0100 | alx741 | (~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 +0100 | acidjnk | (~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 +0100 | int-e | would 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 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) |
2021-12-30 12:40:07 +0100 | deadmarshal | (~deadmarsh@95.38.115.121) (Ping timeout: 256 seconds) |
2021-12-30 12:42:26 +0100 | eggplantade | (~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 +0100 | KvL | (~KvL@user/KvL) (Quit: KvL) |
2021-12-30 12:43:54 +0100 | KvL | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 12:46:18 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) |
2021-12-30 12:46:55 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
2021-12-30 12:47:25 +0100 | foul_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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 12:50:19 +0100 | KvL | (~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 +0100 | jakalx | (~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 +0100 | Rum | (~bourbon@user/rum) |
2021-12-30 12:54:10 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2021-12-30 12:54:27 +0100 | synthmeat | (~synthmeat@user/synthmeat) (Quit: WeeChat 3.0) |
2021-12-30 12:55:12 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 12:55:13 +0100 | synthmeat | (~synthmeat@user/synthmeat) |
2021-12-30 12:56:50 +0100 | antony | (~The_viole@203.77.49.232) |
2021-12-30 12:57:37 +0100 | KvL | (~KvL@user/KvL) |
2021-12-30 12:57:46 +0100 | <otherwise> | thanks Int-e and fendor |
2021-12-30 13:00:18 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) |
2021-12-30 13:01:24 +0100 | foul_owl | (~kerry@94.140.8.106) |
2021-12-30 13:13:01 +0100 | antony | (~The_viole@203.77.49.232) (Quit: Leaving) |
2021-12-30 13:13:21 +0100 | antony | (~The_viole@203.77.49.232) |
2021-12-30 13:13:22 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 13:13:23 +0100 | antony | (~The_viole@203.77.49.232) (Remote host closed the connection) |
2021-12-30 13:13:29 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Quit: Leaving) |
2021-12-30 13:13:50 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 13:16:16 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Client Quit) |
2021-12-30 13:16:34 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 13:16:51 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Client Quit) |
2021-12-30 13:17:01 +0100 | Rum | (~bourbon@user/rum) (Quit: WeeChat 3.4) |
2021-12-30 13:17:07 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 13:17:34 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Client Quit) |
2021-12-30 13:17:50 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 13:18:52 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
2021-12-30 13:18:52 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 13:23:58 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2021-12-30 13:26:17 +0100 | ishutin | (~ishutin@80-95-82-198.pool.digikabel.hu) (Ping timeout: 240 seconds) |
2021-12-30 13:28:12 +0100 | ishutin | (~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 +0100 | xff0x | (~xff0x@2001:1a81:527e:7f00:c538:8d07:2658:ecf) (Ping timeout: 268 seconds) |
2021-12-30 13:33:22 +0100 | xff0x | (~xff0x@2001:1a81:527e:7f00:128f:5c47:b7cd:f118) |
2021-12-30 13:34:25 +0100 | curiousgay | (~curiousga@77-120-141-90.kha.volia.net) |
2021-12-30 13:35:25 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 13:36:26 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-12-30 13:37:22 +0100 | deadmarshal | (~deadmarsh@95.38.115.121) |
2021-12-30 13:39:15 +0100 | Jing | (~hedgehog@2604:a840:3::1067) (Remote host closed the connection) |
2021-12-30 13:39:54 +0100 | Jing | (~hedgehog@2604:a840:3::1067) |
2021-12-30 13:40:46 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 13:44:13 +0100 | Kaiepi | (~Kaiepi@216.208.243.198) (Ping timeout: 240 seconds) |
2021-12-30 13:53:25 +0100 | Kaiepi | (~Kaiepi@216.208.243.103) |
2021-12-30 13:58:52 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 13:59:30 +0100 | raehik | (~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) |
2021-12-30 14:00:37 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds) |
2021-12-30 14:02:59 +0100 | max22- | (~maxime@2a01cb088335980042a847f93091dac4.ipv6.abo.wanadoo.fr) (Ping timeout: 252 seconds) |
2021-12-30 14:03:36 +0100 | KvL | (~KvL@user/KvL) (Quit: KvL) |
2021-12-30 14:03:45 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2021-12-30 14:03:45 +0100 | otherwise | (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) () |
2021-12-30 14:04:37 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 14:04:45 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2021-12-30 14:13:32 +0100 | raehik | (~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) (Ping timeout: 240 seconds) |
2021-12-30 14:16:20 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:19:00 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 14:19:00 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 14:19:00 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 14:20:37 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
2021-12-30 14:20:56 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 14:23:10 +0100 | nhatanh02 | (~satori@123.24.172.30) |
2021-12-30 14:23:49 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2021-12-30 14:26:23 +0100 | CiaoSen | (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2021-12-30 14:27:47 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:33:30 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:33:44 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:33:51 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:34:05 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:34:13 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:34:20 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2021-12-30 14:34:27 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:34:34 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:34:47 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2021-12-30 14:34:48 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:34:56 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:35:09 +0100 | spaceseller | (~spacesell@31.147.205.13) |
2021-12-30 14:35:10 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:35:17 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:35:23 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-12-30 14:35:32 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:35:39 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:35:55 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:36:02 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:36:16 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:36:24 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:36:38 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:36:46 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:36:59 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:37:07 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:37:22 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:37:23 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 14:37:30 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:37:44 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:37:52 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:38:06 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:38:14 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:38:28 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:38:36 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:38:50 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:38:58 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:39:11 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:39:12 +0100 | InternetCitizen | (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
2021-12-30 14:39:19 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:39:33 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:39:41 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:39:55 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:40:03 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:40:16 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:40:24 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:40:38 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:40:46 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:40:59 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:41:07 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:41:22 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:41:29 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:41:44 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:41:51 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:42:05 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:42:13 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:42:28 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:42:36 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:42:50 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:42:57 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:43:12 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:43:20 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:43:34 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:43:42 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:43:56 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:44:04 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:44:18 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:44:26 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:44:40 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:44:47 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:45:02 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:45:10 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:45:24 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:45:31 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:45:45 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 14:45:53 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-30 14:52:20 +0100 | desantra | (~skykanin@user/skykanin) |
2021-12-30 14:52:52 +0100 | desantra | (~skykanin@user/skykanin) (Client Quit) |
2021-12-30 14:53:09 +0100 | zincy | (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) |
2021-12-30 14:54:22 +0100 | desantra | (~skykanin@user/skykanin) |
2021-12-30 14:55:31 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 15:02:01 +0100 | shriekingnoise | (~shrieking@186.137.144.80) |
2021-12-30 15:02:17 +0100 | spaceseller | (~spacesell@31.147.205.13) (Quit: Leaving) |
2021-12-30 15:02:40 +0100 | spaceseller | (~spacesell@31.147.205.13) |
2021-12-30 15:05:13 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 15:05:20 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Read error: Connection reset by peer) |
2021-12-30 15:05:33 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2021-12-30 15:10:20 +0100 | desantra | (~skykanin@user/skykanin) (Quit: WeeChat 3.3) |
2021-12-30 15:16:20 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 15:18:58 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
2021-12-30 15:19:21 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in) |
2021-12-30 15:19:49 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2021-12-30 15:20:37 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
2021-12-30 15:23:21 +0100 | max22- | (~maxime@2a01cb0883359800fd0e15f8c1058ba6.ipv6.abo.wanadoo.fr) |
2021-12-30 15:24:03 +0100 | alx741 | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-12-30 15:27:44 +0100 | spaceseller | (~spacesell@31.147.205.13) (Quit: Leaving) |
2021-12-30 15:27:55 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2021-12-30 15:36:19 +0100 | zebrag | (~chris@user/zebrag) |
2021-12-30 15:38:24 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 15:38:24 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 15:38:24 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 15:42:24 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 15:44:40 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 15:45:24 +0100 | kalxd[m]1 | (~kalxdmatr@2001:470:69fc:105::1:576e) |
2021-12-30 15:47:16 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 15:48:43 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 250 seconds) |
2021-12-30 15:49:18 +0100 | cheater | (~Username@user/cheater) |
2021-12-30 15:49:23 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
2021-12-30 15:51:16 +0100 | bollu | (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 +0100 | tafa | (~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 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan) |
2021-12-30 15:56:35 +0100 | tafa | (~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 +0100 | merijn | (~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 +0100 | merijn | (~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 +0100 | alx741 | (~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 +0100 | coot | (~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 +0100 | acidjnk | (~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de) |
2021-12-30 16:07:43 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2021-12-30 16:08:06 +0100 | coot | (~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 +0100 | geekosaur | bets 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 +0100 | CiaoSen | (~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 +0100 | alx741 | (~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 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
2021-12-30 16:20:03 +0100 | <[exa]> | ;_; |
2021-12-30 16:25:39 +0100 | wroathe | (~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 +0100 | kjak | (~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 +0100 | SummerSonw | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 16:36:11 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 16:37:34 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
2021-12-30 16:41:08 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 16:41:21 +0100 | shapr` | (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
2021-12-30 16:41:46 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 16:41:46 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 16:41:46 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 16:42:31 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) |
2021-12-30 16:42:37 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
2021-12-30 16:42:57 +0100 | madjestic | (~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 +0100 | shapr` | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
2021-12-30 16:46:17 +0100 | mvk | (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds) |
2021-12-30 16:46:37 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2021-12-30 16:49:08 +0100 | neurocyte0132889 | (~neurocyte@94.46.76.127) |
2021-12-30 16:49:08 +0100 | neurocyte0132889 | (~neurocyte@94.46.76.127) (Changing host) |
2021-12-30 16:49:08 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) |
2021-12-30 16:51:03 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2021-12-30 16:51:35 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2021-12-30 16:54:50 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
2021-12-30 16:59:05 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 17:00:08 +0100 | utk | (~utk@2001:470:69fc:105::1:2fe0) (Quit: You have been kicked for being idle) |
2021-12-30 17:00:19 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 17:00:19 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 17:00:19 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 17:04:09 +0100 | kmein | (~weechat@user/kmein) (Quit: ciao kakao) |
2021-12-30 17:04:50 +0100 | kmein | (~weechat@user/kmein) |
2021-12-30 17:05:25 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2021-12-30 17:05:32 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2021-12-30 17:09:05 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-12-30 17:09:05 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 17:09:57 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-12-30 17:13:16 +0100 | thevishy | (~Nishant@2405:201:f005:c007:2dcc:1488:1871:6935) |
2021-12-30 17:13:47 +0100 | gaff | (~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 +0100 | ProfSimm | (~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 +0100 | cosimone | (~user@93-34-133-35.ip49.fastwebnet.it) (Remote host closed the connection) |
2021-12-30 17:23:22 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 17:24:38 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2021-12-30 17:26:10 +0100 | alx741 | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 17:33:37 +0100 | machined1od | (~machinedg@24.105.81.50) |
2021-12-30 17:33:45 +0100 | machined1od | (~machinedg@24.105.81.50) (Client Quit) |
2021-12-30 17:35:05 +0100 | raehik | (~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) |
2021-12-30 17:37:36 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds) |
2021-12-30 17:38:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 17:38:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 17:38:25 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 17:38:38 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Read error: No route to host) |
2021-12-30 17:39:14 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-12-30 17:42:18 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-12-30 17:42:19 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) |
2021-12-30 17:44:37 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2021-12-30 17:45:56 +0100 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) |
2021-12-30 17:48:42 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 17:53:04 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 17:54:06 +0100 | mastarija | (~mastarija@2a05:4f46:e0e:5000:d11e:1641:cfb6:79c3) |
2021-12-30 17:54:32 +0100 | raehik | (~raehik@2a00:23c6:4c83:a901:95bf:f7ec:7b7d:c21e) (Ping timeout: 268 seconds) |
2021-12-30 18:03:18 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection) |
2021-12-30 18:03:39 +0100 | bollu | (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-30 18:05:06 +0100 | coolnickname | (uid531864@user/coolnickname) (Quit: Connection closed for inactivity) |
2021-12-30 18:05:59 +0100 | shapr | (~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 +0100 | lavaman | (~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 +0100 | azimut | (~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 +0100 | alx741 | (~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 +0100 | machined1od | (~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 +0100 | machined2od | (~machinedg@24.105.81.50) |
2021-12-30 18:13:37 +0100 | machined2od | (~machinedg@24.105.81.50) (Client Quit) |
2021-12-30 18:13:41 +0100 | machined1od | (~machinedg@24.105.81.50) (Client Quit) |
2021-12-30 18:13:45 +0100 | machinedgod | (~machinedg@24.105.81.50) (Quit: leaving) |
2021-12-30 18:13:53 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2021-12-30 18:14:05 +0100 | machinedgod | (~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 +0100 | monochrom | disbelieve 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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 18:16:39 +0100 | sirlensalot | (~sirlensal@ool-44c5f8c9.dyn.optonline.net) |
2021-12-30 18:16:48 +0100 | merijn | (~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 +0100 | gaff | (~gaff@49.207.212.166) () |
2021-12-30 18:20:27 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
2021-12-30 18:21:05 +0100 | machined1od | (~machinedg@24.105.81.50) |
2021-12-30 18:21:19 +0100 | machinedgod | (~machinedg@24.105.81.50) (Quit: leaving) |
2021-12-30 18:21:40 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
2021-12-30 18:23:05 +0100 | mbuf | (~Shakthi@122.162.67.169) (Quit: Leaving) |
2021-12-30 18:25:22 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Ping timeout: 268 seconds) |
2021-12-30 18:27:25 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2021-12-30 18:28:06 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-30 18:29:53 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 18:29:53 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 18:29:53 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 18:30:29 +0100 | econo | (uid147250@user/econo) |
2021-12-30 18:31:37 +0100 | vglfr | (~vglfr@88.155.12.39) (Ping timeout: 240 seconds) |
2021-12-30 18:34:40 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 18:34:55 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2021-12-30 18:35:14 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 268 seconds) |
2021-12-30 18:35:24 +0100 | cheater | (~Username@user/cheater) |
2021-12-30 18:37:20 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-12-30 18:38:32 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
2021-12-30 18:39:19 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 18:47:26 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 18:48:41 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) |
2021-12-30 18:51:19 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2021-12-30 18:51:51 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 18:52:29 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds) |
2021-12-30 18:56:02 +0100 | acidjnk | (~acidjnk@p200300d0c7271e9910698cbf36694c68.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2021-12-30 18:57:01 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Ping timeout: 250 seconds) |
2021-12-30 18:57:11 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 18:59:54 +0100 | dignissimus | (~dignissim@88-104-68-62.dynamic.dsl.as9105.com) |
2021-12-30 19:00:01 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
2021-12-30 19:02:00 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 19:03:28 +0100 | neurocyte0132889 | (~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 +0100 | coot_ | (~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 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Ping timeout: 256 seconds) |
2021-12-30 19:07:57 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2021-12-30 19:11:01 +0100 | n3rdy1 | (~n3rdy1@2600:1700:4570:3480::41) |
2021-12-30 19:11:55 +0100 | zmt01 | (~zmt00@user/zmt00) |
2021-12-30 19:11:57 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 240 seconds) |
2021-12-30 19:15:42 +0100 | spaceseller_ | (~spacesell@31.147.205.13) |
2021-12-30 19:18:07 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 19:18:34 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2021-12-30 19:22:35 +0100 | neurocyte0132889 | (~neurocyte@94.46.76.127) |
2021-12-30 19:22:35 +0100 | neurocyte0132889 | (~neurocyte@94.46.76.127) (Changing host) |
2021-12-30 19:22:35 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) |
2021-12-30 19:22:56 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-12-30 19:22:57 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 19:23:15 +0100 | spaceseller_ | (~spacesell@31.147.205.13) (Quit: Leaving) |
2021-12-30 19:24:37 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-12-30 19:25:18 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 19:25:47 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-30 19:27:42 +0100 | tomku | (~tomku@user/tomku) (Read error: Connection reset by peer) |
2021-12-30 19:30:02 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) |
2021-12-30 19:33:52 +0100 | tomku | (~tomku@user/tomku) |
2021-12-30 19:37:56 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2021-12-30 19:38:20 +0100 | thevishy | (~Nishant@2405:201:f005:c007:2dcc:1488:1871:6935) (Quit: Leaving) |
2021-12-30 19:40:39 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 19:41:03 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 19:41:03 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 19:41:03 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 19:42:34 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-12-30 19:44:03 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2021-12-30 19:44:58 +0100 | johnw | (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in) |
2021-12-30 19:46:30 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 19:48:41 +0100 | learner-monad | (~ehanneken@user/learner-monad) |
2021-12-30 19:48:59 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-30 19:51:47 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) |
2021-12-30 19:53:30 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 19:54:46 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
2021-12-30 19:57:35 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2021-12-30 19:58:09 +0100 | coolnickname | (uid531864@user/coolnickname) |
2021-12-30 20:00:23 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 20:02:43 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 20:04:02 +0100 | max22- | (~maxime@2a01cb0883359800fd0e15f8c1058ba6.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
2021-12-30 20:04:49 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
2021-12-30 20:05:49 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-30 20:08:13 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Read error: No route to host) |
2021-12-30 20:09:55 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) |
2021-12-30 20:11:43 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 20:11:43 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 20:11:43 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 20:14:47 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-30 20:15:21 +0100 | ensyde | (~ensyde@2600:1702:2e30:1a40:d506:18a6:e0ef:8a3a) |
2021-12-30 20:15:53 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2021-12-30 20:16:00 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Read error: No route to host) |
2021-12-30 20:18:00 +0100 | mikoto-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 +0100 | alx741 | (~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 +0100 | travv0 | (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 +0100 | madjestic | (~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 +0100 | raehik | (~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 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-12-30 20:31:32 +0100 | zer0bitz | (~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 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds) |
2021-12-30 20:37:21 +0100 | tomsmeding | is still amused that Haskell has a concept of an uppercase symbol |
2021-12-30 20:38:00 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 20:39:31 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2021-12-30 20:39:50 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-12-30 20:40:05 +0100 | nhatanh02 | (~satori@123.24.172.30) (Ping timeout: 256 seconds) |
2021-12-30 20:40:14 +0100 | yauhsien | (~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 +0100 | alx741 | (~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 +0100 | yauhsien | (~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 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-12-30 20:51:38 +0100 | InternetCitizen | (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 252 seconds) |
2021-12-30 20:51:49 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Client Quit) |
2021-12-30 20:51:58 +0100 | max22- | (~maxime@2a01cb08833598003c7cbbeb6c92ab00.ipv6.abo.wanadoo.fr) |
2021-12-30 20:52:02 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-12-30 20:54:13 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) |
2021-12-30 20:55:08 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-30 20:59:17 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
2021-12-30 20:59:20 +0100 | wroathe | (~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 +0100 | Erutuon | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 21:03:36 +0100 | Feuermagier_ | (~Feuermagi@84.17.49.78) |
2021-12-30 21:05:01 +0100 | juhp | (~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 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) (Ping timeout: 240 seconds) |
2021-12-30 21:05:57 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 21:06:20 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 21:06:21 +0100 | justsomeguy | (~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 +0100 | juhp | (~juhp@128.106.188.82) |
2021-12-30 21:07:02 +0100 | epolanski | (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 +0100 | Vajb | (~Vajb@nabiicwveotvxswi5-2.v6.elisa-mobile.fi) (Ping timeout: 268 seconds) |
2021-12-30 21:10:46 +0100 | Vajb | (~Vajb@2001:999:230:a44e:bc17:5155:7945:add1) |
2021-12-30 21:11:14 +0100 | eggplantade | (~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 +0100 | merijn | (~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 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-12-30 21:19:29 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) |
2021-12-30 21:19:57 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
2021-12-30 21:20:08 +0100 | hughjfchen[m] | (~hughjfche@2001:470:69fc:105::c29d) (Quit: Client limit exceeded: 20000) |
2021-12-30 21:22:37 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2021-12-30 21:23:58 +0100 | alx741 | (~alx741@181.199.42.79) |
2021-12-30 21:24:49 +0100 | yauhsien | (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 268 seconds) |
2021-12-30 21:27:03 +0100 | alx741 | (~alx741@181.199.42.79) (Read error: Connection reset by peer) |
2021-12-30 21:28:08 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-12-30 21:28:08 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-12-30 21:28:11 +0100 | allbery_b | geekosaur |
2021-12-30 21:29:06 +0100 | euandreh | (~euandreh@191.181.59.160) (Ping timeout: 245 seconds) |
2021-12-30 21:29:13 +0100 | otherwise | (~otherwise@2601:602:880:90f0:9dc:9663:8c4e:291b) |
2021-12-30 21:29:59 +0100 | InternetCitizen | (~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 +0100 | hughjfchen[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 +0100 | mvk | (~mvk@2607:fea8:5cdd:f000::917a) |
2021-12-30 21:34:20 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 21:34:20 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 21:34:20 +0100 | wroathe | (~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 +0100 | burnsidesLlama | (~burnsides@dhcp168-010.wadham.ox.ac.uk) |
2021-12-30 21:41:48 +0100 | jeetelongname | (~jeet@88-111-159-26.dynamic.dsl.as9105.com) |
2021-12-30 21:42:34 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-30 21:44:13 +0100 | alx741 | (~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 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 240 seconds) |
2021-12-30 21:45:09 +0100 | merijn | (~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 +0100 | coot_ | (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot_) |
2021-12-30 21:49:29 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 21:49:47 +0100 | dignissimus | (~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 +0100 | madjestic | (~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 +0100 | dignissimus | (~dignissim@88-104-68-62.dynamic.dsl.as9105.com) |
2021-12-30 21:57:27 +0100 | pavonia | (~user@user/siracusa) |
2021-12-30 22:01:51 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-12-30 22:07:53 +0100 | alx741 | (~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 +0100 | falafel | (~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 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-30 22:12:17 +0100 | dignissimus | (~dignissim@88-104-68-62.dynamic.dsl.as9105.com) (Ping timeout: 268 seconds) |
2021-12-30 22:12:27 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2021-12-30 22:13:28 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 22:14:17 +0100 | mvk | (~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 +0100 | kaph | (~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 +0100 | kaph | (~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 +0100 | doyougnu | (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 252 seconds) |
2021-12-30 22:28:34 +0100 | falafel | (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Remote host closed the connection) |
2021-12-30 22:28:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 22:28:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 22:28:52 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 22:28:57 +0100 | falafel | (~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 +0100 | zer0bitz | (~zer0bitz@194.34.133.91) (Ping timeout: 268 seconds) |
2021-12-30 22:31:19 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 22:32:02 +0100 | johnw | (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) |
2021-12-30 22:32:48 +0100 | falafel_ | (~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 +0100 | uam | (uid360535@id-360535.hampstead.irccloud.com) |
2021-12-30 22:33:25 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2021-12-30 22:35:37 +0100 | falafel | (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds) |
2021-12-30 22:36:05 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 22:37:16 +0100 | acidjnk | (~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de) |
2021-12-30 22:37:37 +0100 | falafel_ | (~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 +0100 | dignissimus | (~dignissim@88-104-68-62.dynamic.dsl.as9105.com) |
2021-12-30 22:42:07 +0100 | mvk | (~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 +0100 | eggplantade | (~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 +0100 | euandreh | (~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 +0100 | coolnickname | (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 +0100 | falafel_ | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 22:54:41 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-12-30 22:57:03 +0100 | Kaiepi | (~Kaiepi@216.208.243.103) (Read error: Connection reset by peer) |
2021-12-30 22:57:41 +0100 | falafel__ | (~falafel@cpe-76-168-195-162.socal.res.rr.com) |
2021-12-30 22:58:22 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 22:58:53 +0100 | CiaoSen | (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2021-12-30 22:58:57 +0100 | deadmarshal | (~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 +0100 | falafel_ | (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds) |
2021-12-30 23:01:00 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2021-12-30 23:01:57 +0100 | falafel__ | (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 240 seconds) |
2021-12-30 23:03:12 +0100 | ezzieyguywuf | (~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 +0100 | Guest13 | (~Guest13@p200300c8973682c385b00e33b8703e1f.dip0.t-ipconnect.de) |
2021-12-30 23:05:47 +0100 | Guest13 | (~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 +0100 | zincy_ | (~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 +0100 | takuan | (~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 +0100 | alx741 | (~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 +0100 | alx741 | (~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 +0100 | madjestic | (~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 +0100 | cheater | (~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 +0100 | cheater | (~Username@user/cheater) |
2021-12-30 23:30:20 +0100 | coot | (~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 +0100 | notzmv | (~zmv@user/notzmv) |
2021-12-30 23:36:34 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
2021-12-30 23:37:13 +0100 | Everything | (~Everythin@37.115.210.35) |
2021-12-30 23:37:41 +0100 | Midjak2 | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
2021-12-30 23:38:15 +0100 | Midjak2 | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Client Quit) |
2021-12-30 23:38:15 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Client Quit) |
2021-12-30 23:38:54 +0100 | alx741 | (~alx741@157.100.93.160) |
2021-12-30 23:39:30 +0100 | max22- | (~maxime@2a01cb08833598003c7cbbeb6c92ab00.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2021-12-30 23:41:33 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-12-30 23:41:55 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-30 23:42:01 +0100 | Katarushisu | (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
2021-12-30 23:42:38 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2021-12-30 23:43:12 +0100 | Katarushisu | (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) |
2021-12-30 23:43:22 +0100 | Midjak | (~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 +0100 | vglfr | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-30 23:49:19 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-30 23:49:19 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-30 23:51:18 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2021-12-30 23:51:45 +0100 | Codaraxis__ | (~Codaraxis@user/codaraxis) |
2021-12-30 23:52:25 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:7457:6675:c5ec:bb4b) |
2021-12-30 23:55:53 +0100 | Codaraxis_ | (~Codaraxis@user/codaraxis) (Ping timeout: 268 seconds) |
2021-12-30 23:57:05 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-12-30 23:57:05 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-12-30 23:57:09 +0100 | allbery_b | geekosaur |