2022-06-15 00:00:24 +0200 | <CoolerX> | dsal: https://www.reddit.com/r/haskell/comments/1b3k1h/ghci_in_a_browser/ |
2022-06-15 00:00:40 +0200 | <CoolerX> | you could make haskell run in the browser |
2022-06-15 00:00:51 +0200 | <CoolerX> | they already did that for python |
2022-06-15 00:01:05 +0200 | <geekosaur> | ghcjs did that |
2022-06-15 00:01:15 +0200 | <Haskelytic> | is webasm the new Java? |
2022-06-15 00:01:15 +0200 | <dsal> | Yeah, there's ghcjs, but honestly, PureScript is pretty good. |
2022-06-15 00:01:24 +0200 | <geekosaur> | and will do it again someday (hopefully targeting 9.6) |
2022-06-15 00:02:19 +0200 | <CoolerX> | https://pyscript.net/ |
2022-06-15 00:02:29 +0200 | <dsal> | PureScript is Haskell with a couple of haskell warts removed. |
2022-06-15 00:02:30 +0200 | <CoolerX> | make https://hsscript.net |
2022-06-15 00:02:32 +0200 | n3t1 | (n3t@s45.mydevil.net) (Changing host) |
2022-06-15 00:02:32 +0200 | n3t1 | (n3t@user/n3t) |
2022-06-15 00:02:58 +0200 | <dsal> | I'm pretty happy not to write python anymore. heh |
2022-06-15 00:03:14 +0200 | <CoolerX> | purescript complies to javascript if I am not mistaken |
2022-06-15 00:03:23 +0200 | <CoolerX> | "Compile to readable JavaScript and reuse existing JavaScript code easily |
2022-06-15 00:03:23 +0200 | <Haskelytic> | CoolerX: that's a pretty neat use case |
2022-06-15 00:03:24 +0200 | <CoolerX> | " |
2022-06-15 00:03:40 +0200 | <CoolerX> | why would you have to compile to js when you don't even like js |
2022-06-15 00:03:44 +0200 | <Haskelytic> | dsal: must be nice. i'm still using python quite a bit for my work. |
2022-06-15 00:03:46 +0200 | <dsal> | Yeah, PureScript complies to pretty well plain JS. It's just curried. |
2022-06-15 00:03:50 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-173.elisa-laajakaista.fi) (Quit: Leaving.) |
2022-06-15 00:03:50 +0200 | <CoolerX> | just have it compile to webasm |
2022-06-15 00:04:20 +0200 | <dsal> | I don't particularly care as long as I can run it where I need it. The place I'm using PureScript right now wants me to feed it some JS, so I just give it the output of my PS compile. |
2022-06-15 00:04:40 +0200 | <CoolerX> | dsal: also rust has crazy meta programming with its macros |
2022-06-15 00:05:01 +0200 | <CoolerX> | rust macros use the ast directly |
2022-06-15 00:05:28 +0200 | <dsal> | I do that with TH some. It's not too bad, but there are areas it could be betterr. |
2022-06-15 00:05:40 +0200 | <dsal> | e.g., I wish I could generate documentation for the functions I generate. |
2022-06-15 00:05:48 +0200 | travisb | (~travisb@2600:1700:7990:24e0:8ef9:6ccb:409e:cd42) (Ping timeout: 250 seconds) |
2022-06-15 00:06:32 +0200 | <dsal> | e.g., I know what these do, but the documentation is poor: https://hackage.haskell.org/package/tesla-0.5.0.0/docs/Tesla-Car-Command-Alerts.html |
2022-06-15 00:06:39 +0200 | <CoolerX> | dsal: https://stackoverflow.com/questions/33999341/generating-documentation-in-macros |
2022-06-15 00:07:37 +0200 | <dsal> | I'm pleased with the implementation, though: https://github.com/dustin/tesla/blob/master/src/Tesla/Car/Command/Alerts.hs |
2022-06-15 00:08:18 +0200 | MajorBiscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) |
2022-06-15 00:09:17 +0200 | <CoolerX> | dsal: btw wasm is no longer just web |
2022-06-15 00:09:20 +0200 | <CoolerX> | you can run it locally |
2022-06-15 00:09:34 +0200 | o-90 | (~o-90@gateway/tor-sasl/o-90) (Ping timeout: 240 seconds) |
2022-06-15 00:10:49 +0200 | <dsal> | It doesn't matter if Google Sheets won't run it. |
2022-06-15 00:10:55 +0200 | julian | (~julian@20.83.116.49) |
2022-06-15 00:10:56 +0200 | <dsal> | If I want to run something locally, I'll just build it for my machine. |
2022-06-15 00:11:20 +0200 | <CoolerX> | hmm seems like there's not much support yet on the Haskell side https://www.reddit.com/r/haskell/comments/bssqgp/is_asterius_the_only_viable_haskell_to/ |
2022-06-15 00:11:52 +0200 | <yushyin> | CoolerX: https://gitlab.haskell.org/ghc/ghc/-/wikis/WebAssembly-backend |
2022-06-15 00:11:56 +0200 | dispater | (~dispater@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-06-15 00:11:56 +0200 | orcus | (~orcus@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-06-15 00:12:00 +0200 | <CoolerX> | yeah |
2022-06-15 00:12:24 +0200 | eull | (~eull@2001:9e8:9e1:2600:8ec7:d77c:2e5f:91fa) (Quit: Konversation terminated!) |
2022-06-15 00:12:33 +0200 | <CoolerX> | $ ghc --version |
2022-06-15 00:12:33 +0200 | <CoolerX> | The Glorious Glasgow Haskell Compilation System, version 8.10.7 |
2022-06-15 00:12:41 +0200 | <CoolerX> | 9.6 seems a long ways away |
2022-06-15 00:13:28 +0200 | <CoolerX> | GHC 9.2.3 Released! |
2022-06-15 00:13:42 +0200 | dispater | (~dispater@user/brprice) |
2022-06-15 00:14:12 +0200 | orcus | (~orcus@user/brprice) |
2022-06-15 00:14:39 +0200 | <geekosaur> | 9.4 has been branched and the current focus of the ghc developers is getting 9.4.1 out the door |
2022-06-15 00:15:11 +0200 | <geekosaur> | (odd numbered releases are dev releases, so there's no 9.3, that was the development branch leading to 9.4) |
2022-06-15 00:15:57 +0200 | <CoolerX> | ok |
2022-06-15 00:16:18 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 276 seconds) |
2022-06-15 00:16:26 +0200 | <CoolerX> | surprising that it took so long |
2022-06-15 00:16:30 +0200 | <yushyin> | also you still need alot of js if you write wasm |
2022-06-15 00:16:30 +0200 | <CoolerX> | wasm is not new |
2022-06-15 00:16:49 +0200 | <CoolerX> | yushyin: to do what? |
2022-06-15 00:16:57 +0200 | <CoolerX> | it depends on what you are doing I guess |
2022-06-15 00:17:28 +0200 | <yushyin> | for every DOM api or web api call you need to ffi to js |
2022-06-15 00:17:33 +0200 | <CoolerX> | that are entire games ported over that require barely a few lines of boiler plate to fetch the wasm and compile it and attach some canvas |
2022-06-15 00:17:42 +0200 | <geekosaur> | there was a long delay because 9.2's big feature was native support for M1 Macs and getting it working took a while (then it turned out to have a huge bug which required a lot more work to fix) |
2022-06-15 00:18:48 +0200 | <CoolerX> | geekosaur: wasm is older than M1 |
2022-06-15 00:18:55 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 00:18:57 +0200 | <CoolerX> | much older |
2022-06-15 00:18:58 +0200 | <geekosaur> | I wasn't talking about wasm |
2022-06-15 00:19:34 +0200 | <geekosaur> | ghcjs is fairly old at this point, but had diverged to the point that it mcouldn't be brought back into ghc. so a new js+wasm backend is being written |
2022-06-15 00:19:47 +0200 | <yushyin> | of course with libraries you wrap and hide that fact but you are still calling through js at the end of the day |
2022-06-15 00:20:15 +0200 | <zebrag> | Do you say a "cone" is "over" diagram A, B? Co-cone "under"? Hum according to ncatlab, it's not clear whether it's over or under. Likely "over" |
2022-06-15 00:20:25 +0200 | <zebrag> | ghcjs and things are cool |
2022-06-15 00:20:30 +0200 | <CoolerX> | yushyin: you don't need libraries |
2022-06-15 00:20:38 +0200 | <geekosaur> | and ghc9.x has had changes to make it easier to integrate new backends |
2022-06-15 00:20:45 +0200 | <CoolerX> | again it depends on what you are doing |
2022-06-15 00:20:54 +0200 | <yushyin> | and i didn't say you need them |
2022-06-15 00:21:01 +0200 | xff0x | (~xff0x@b133147.ppp.asahi-net.or.jp) (Quit: xff0x) |
2022-06-15 00:24:07 +0200 | xff0x | (~xff0x@2405:6580:b080:900:4ed7:6424:f0c6:c994) |
2022-06-15 00:24:59 +0200 | slack1256 | (~slack1256@186.11.82.227) |
2022-06-15 00:25:09 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 00:25:41 +0200 | MajorBiscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds) |
2022-06-15 00:26:08 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-06-15 00:26:50 +0200 | slac80159 | (~slack1256@191.125.99.70) (Ping timeout: 240 seconds) |
2022-06-15 00:27:12 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-06-15 00:27:22 +0200 | <zebrag> | So you write some haskell code and then you turn it into some js, and then it's executed in a browser as part of a webapp? How do I find examples/tutorials related to that? |
2022-06-15 00:27:33 +0200 | <zebrag> | also I understand there are many ways to do it? |
2022-06-15 00:29:30 +0200 | gurkenglas | (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2022-06-15 00:29:33 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-06-15 00:29:34 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit) |
2022-06-15 00:30:27 +0200 | monaaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
2022-06-15 00:30:53 +0200 | gurkenglas | (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) |
2022-06-15 00:31:30 +0200 | pretty_d1 | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 240 seconds) |
2022-06-15 00:31:58 +0200 | monaaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 00:32:04 +0200 | <geekosaur> | the only way curretly to compile haskell to js that can run in a browser is ghcjs |
2022-06-15 00:32:36 +0200 | <geekosaur> | there are some haskell-alikes that compile to javascript but most of them have shortcomings of one kind or another (notably that they're all strict last I checked) |
2022-06-15 00:32:42 +0200 | monaaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Client Quit) |
2022-06-15 00:32:51 +0200 | <geekosaur> | js/wasm backend for ghc itself is still a work in progress |
2022-06-15 00:33:50 +0200 | <geekosaur> | I thought there were examples along with ghcjs but I don't see any :( |
2022-06-15 00:34:22 +0200 | <CoolerX> | zebrag: https://www.tweag.io/blog/2019-12-19-asterius-diagrams/ |
2022-06-15 00:34:24 +0200 | <zebrag> | ghcjs seems a reasonable idea, are there known issues, known reasons why people would not like it? |
2022-06-15 00:34:26 +0200 | <CoolerX> | https://github.com/tweag/asterius |
2022-06-15 00:34:58 +0200 | <geekosaur> | huge runtime, for one |
2022-06-15 00:35:07 +0200 | <CoolerX> | hmm it supports cabal https://asterius.netlify.app/cabal.html |
2022-06-15 00:35:14 +0200 | Hash | stoned |
2022-06-15 00:35:21 +0200 | <zebrag> | you mean it's slow, weird, okay |
2022-06-15 00:35:27 +0200 | <geekosaur> | (that is, your translated haskell program "links" against a couple megabytes of js comprising the runtime) |
2022-06-15 00:35:46 +0200 | <zebrag> | okay |
2022-06-15 00:35:50 +0200 | <geekosaur> | mostly trying to emulate ghc behavior when js doesn't work that way |
2022-06-15 00:35:58 +0200 | <exarkun> | Someone transpiled CPython to wasm recently |
2022-06-15 00:36:12 +0200 | <exarkun> | Everyone was extremely excited to be able to download a 20mb blob to support their 20 line Python program in the browser |
2022-06-15 00:36:30 +0200 | <yushyin> | xD |
2022-06-15 00:36:34 +0200 | <exarkun> | Plus everyone is used to web pages that require 1GB of RAM to load anyway |
2022-06-15 00:36:48 +0200 | <CoolerX> | exarkun: nonsense pyscript isn't 20 MB |
2022-06-15 00:37:05 +0200 | <exarkun> | CoolerX: I hope you're not going to stomp on my rhetoric with some sundry facts |
2022-06-15 00:37:16 +0200 | <exarkun> | 20 MB, 200 MB, what's the difference! |
2022-06-15 00:37:22 +0200 | <CoolerX> | geekosaur: why not asterius ? it produces smaller runtimes " small output code (~600KB hello.wasm for a Hello World)." |
2022-06-15 00:37:36 +0200 | <geekosaur> | asterius is more or less what's being merged into ghc |
2022-06-15 00:37:40 +0200 | <CoolerX> | exarkun: you clearly were born after 2010 |
2022-06-15 00:37:57 +0200 | <CoolerX> | 20 MB and 200 MB aren't even in the same universe |
2022-06-15 00:38:04 +0200 | <exarkun> | CoolerX: Or I need to turn up my sarcasm level |
2022-06-15 00:38:10 +0200 | gurkenglas | (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2022-06-15 00:38:13 +0200 | <hpc> | 600kb? that's almost enough for anyone! |
2022-06-15 00:38:21 +0200 | <CoolerX> | XD |
2022-06-15 00:39:15 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection) |
2022-06-15 00:39:59 +0200 | <CoolerX> | hpc: if you are only using your computer to keep track of what's in your freezer, then yeah! |
2022-06-15 00:40:09 +0200 | <geekosaur> | at least the asterius devs are actively working with the ghc devs involved with the new backend |
2022-06-15 00:40:28 +0200 | <zebrag> | js executable is usually cut into smaller pieces, or something like that I don't get really clearly |
2022-06-15 00:40:29 +0200 | <CoolerX> | nice |
2022-06-15 00:40:30 +0200 | <geekosaur> | ghcjs development seems to have stopped when ghc9 came out |
2022-06-15 00:41:24 +0200 | <zebrag> | so browser doesn't have to load large piece of code all at once? |
2022-06-15 00:41:45 +0200 | <hpc> | CoolerX: it's a reference to https://skeptics.stackexchange.com/questions/2863/did-bill-gates-say-640k-ought-to-be-enough-for-e… ;) |
2022-06-15 00:41:50 +0200 | <CoolerX> | ik |
2022-06-15 00:42:25 +0200 | <hpc> | ah :P |
2022-06-15 00:42:38 +0200 | <CoolerX> | hpc: it's a reference to https://youtu.be/szdbKz5CyhA?t=143 |
2022-06-15 00:43:04 +0200 | <hpc> | haha that's awesome |
2022-06-15 00:43:25 +0200 | <CoolerX> | I actually did that at one point |
2022-06-15 00:43:30 +0200 | <CoolerX> | keeping track of pokemon names |
2022-06-15 00:44:02 +0200 | <CoolerX> | and phone numbers I think |
2022-06-15 00:44:32 +0200 | <CoolerX> | simpler times when IRC was actually the biggest chat community |
2022-06-15 00:45:24 +0200 | <hpc> | but after eternal september, so perhaps not simple enough :D |
2022-06-15 00:45:42 +0200 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2022-06-15 00:47:56 +0200 | <CoolerX> | hpc: damn it, you shouldn't have said that |
2022-06-15 00:48:11 +0200 | <CoolerX> | now this is stuck in my head again https://youtu.be/Gs069dndIYk |
2022-06-15 00:48:57 +0200 | <CoolerX> | and it's not even september yet |
2022-06-15 00:49:10 +0200 | <geekosaur[m]> | Bringing back the past |
2022-06-15 00:50:27 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) |
2022-06-15 00:57:38 +0200 | kaskal | (~kaskal@89.144.222.105) |
2022-06-15 00:58:27 +0200 | kaskal- | (~kaskal@2001:4bb8:2ae:ef0c:346b:df71:225c:5c14) (Ping timeout: 240 seconds) |
2022-06-15 00:58:32 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 248 seconds) |
2022-06-15 00:58:40 +0200 | ncf | bam |
2022-06-15 00:58:53 +0200 | bam | ncf |
2022-06-15 00:59:55 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 01:00:01 +0200 | zeenk | (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!) |
2022-06-15 01:01:14 +0200 | inversed | (~inversed@176.248.27.211) |
2022-06-15 01:05:49 +0200 | co-ONANI- | (~co-ONANI-@36.90.88.185) |
2022-06-15 01:07:12 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 260 seconds) |
2022-06-15 01:07:27 +0200 | co-ONANI- | (~co-ONANI-@36.90.88.185) (Remote host closed the connection) |
2022-06-15 01:12:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 01:14:00 +0200 | Cupcakus | (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 248 seconds) |
2022-06-15 01:19:16 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 01:21:12 +0200 | lemonsnicks | (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 250 seconds) |
2022-06-15 01:22:25 +0200 | lemonsnicks | (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
2022-06-15 01:23:04 +0200 | Alex_test | (~al_test@94.233.241.100) (Ping timeout: 248 seconds) |
2022-06-15 01:23:32 +0200 | AlexZenon | (~alzenon@94.233.241.100) (Ping timeout: 260 seconds) |
2022-06-15 01:25:12 +0200 | AlexNoo | (~AlexNoo@94.233.241.100) (Ping timeout: 248 seconds) |
2022-06-15 01:25:17 +0200 | alp | (~alp@user/alp) (Ping timeout: 260 seconds) |
2022-06-15 01:29:08 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds) |
2022-06-15 01:32:56 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-06-15 01:37:25 +0200 | jinsun__ | (~jinsun@user/jinsun) () |
2022-06-15 01:37:52 +0200 | jinsun | (~jinsun@user/jinsun) |
2022-06-15 01:40:58 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 258 seconds) |
2022-06-15 01:44:43 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 01:47:21 +0200 | nicbk | (~nicbk@user/nicbk) |
2022-06-15 01:50:42 +0200 | travisb | (~travisb@2600:1700:7990:24e0:8ef9:6ccb:409e:cd42) |
2022-06-15 01:51:22 +0200 | zerkal03 | (zerkal03@023-084-033-189.res.spectrum.com) |
2022-06-15 01:52:04 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590::8848) |
2022-06-15 01:52:55 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
2022-06-15 01:53:32 +0200 | alp | (~alp@user/alp) |
2022-06-15 01:55:04 +0200 | stackdroid18 | (14094@user/stackdroid) (Quit: hasta la vista... tchau!) |
2022-06-15 01:59:00 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590::8848) (Ping timeout: 252 seconds) |
2022-06-15 01:59:12 +0200 | pleo | (~pleo@user/pleo) (Quit: quit) |
2022-06-15 02:02:53 +0200 | lambda451[m] | (~lambda451@2001:470:69fc:105::2:1097) |
2022-06-15 02:03:12 +0200 | Kaipei | (~Kaiepi@156.34.47.253) (Remote host closed the connection) |
2022-06-15 02:03:47 +0200 | Kaipei | (~Kaiepi@156.34.47.253) |
2022-06-15 02:03:52 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::4588) |
2022-06-15 02:05:07 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::4588) (Client Quit) |
2022-06-15 02:06:00 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::4588) |
2022-06-15 02:06:16 +0200 | travisb | (~travisb@2600:1700:7990:24e0:8ef9:6ccb:409e:cd42) (Ping timeout: 250 seconds) |
2022-06-15 02:11:49 +0200 | tabemann | (~tabemann@2600:1700:7990:24e0:68f1:5d07:157d:1415) |
2022-06-15 02:14:42 +0200 | slac73952 | (~slack1256@191.125.227.90) |
2022-06-15 02:17:12 +0200 | slack1256 | (~slack1256@186.11.82.227) (Ping timeout: 260 seconds) |
2022-06-15 02:25:18 +0200 | julian | Guest1698 |
2022-06-15 02:25:18 +0200 | Guest1698 | (~julian@20.83.116.49) (Killed (sodium.libera.chat (Nickname regained by services))) |
2022-06-15 02:25:48 +0200 | Guest1698 | (~Guest1698@20.83.116.49) |
2022-06-15 02:30:25 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 258 seconds) |
2022-06-15 02:30:37 +0200 | stefan-_ | (~cri@42dots.de) (Ping timeout: 260 seconds) |
2022-06-15 02:30:56 +0200 | g04239 | (~kody@user/g04239) |
2022-06-15 02:31:31 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 02:34:18 +0200 | stefan-_ | (~cri@42dots.de) |
2022-06-15 02:36:08 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 248 seconds) |
2022-06-15 02:36:43 +0200 | Unicorn_Princess | (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection) |
2022-06-15 02:37:05 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 02:38:29 +0200 | g04239 | (~kody@user/g04239) (WeeChat 3.4.1) |
2022-06-15 02:42:47 +0200 | <shapr> | dsal: have you tried leancheck? |
2022-06-15 02:42:52 +0200 | <dsal> | I've not. |
2022-06-15 02:43:57 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 02:45:12 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 02:45:19 +0200 | [_] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-06-15 02:45:47 +0200 | xff0x | (~xff0x@2405:6580:b080:900:4ed7:6424:f0c6:c994) (Ping timeout: 260 seconds) |
2022-06-15 02:47:30 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds) |
2022-06-15 02:50:11 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 02:50:43 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 02:52:08 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 248 seconds) |
2022-06-15 02:52:52 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2022-06-15 02:55:13 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 02:56:18 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:00:57 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 03:01:52 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:03:47 +0200 | zerkal03 | (zerkal03@023-084-033-189.res.spectrum.com) (Ping timeout: 256 seconds) |
2022-06-15 03:05:23 +0200 | king_gs | (~Thunderbi@187.201.173.69) |
2022-06-15 03:05:41 +0200 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) |
2022-06-15 03:06:25 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 03:07:28 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:10:42 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2022-06-15 03:11:33 +0200 | frost | (~frost@user/frost) |
2022-06-15 03:12:02 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 260 seconds) |
2022-06-15 03:13:06 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:16:49 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2022-06-15 03:17:37 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 03:18:49 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:21:14 +0200 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2022-06-15 03:21:16 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection) |
2022-06-15 03:23:37 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 03:24:13 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:25:42 +0200 | [_] | [itchyjunk] |
2022-06-15 03:28:43 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 03:29:50 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:33:45 +0200 | king_gs | (~Thunderbi@187.201.173.69) (Quit: king_gs) |
2022-06-15 03:34:04 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 03:35:17 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:35:51 +0200 | machined1od | (~machinedg@66.244.246.252) (Ping timeout: 276 seconds) |
2022-06-15 03:44:35 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 03:45:37 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:48:54 +0200 | <dragestil> | how come cabal haddock does support latex backend |
2022-06-15 03:49:17 +0200 | <dragestil> | does not support latex backend |
2022-06-15 03:50:10 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 03:51:13 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:51:14 +0200 | <sclv> | the latex backend is ancient code largely forgotten. but also can’t you explicitly pass haddock flags fo get it? |
2022-06-15 03:51:55 +0200 | <dragestil> | sclv: not sure how. i tried cabal build --enable-documentation --latex / cabal haddock --latex |
2022-06-15 03:52:15 +0200 | causal | (~user@50.35.83.177) (Quit: WeeChat 3.5) |
2022-06-15 03:52:16 +0200 | <dragestil> | and cabal haddock --haddock-option=--latex which seems to build html instead |
2022-06-15 03:53:15 +0200 | <sclv> | this may have advice https://github.com/haskell/cabal/issues/7419 |
2022-06-15 03:53:31 +0200 | <sclv> | otherwise maybe yeah it would need a pr |
2022-06-15 03:53:59 +0200 | <dragestil> | ok thanks |
2022-06-15 03:54:23 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 03:54:29 +0200 | <dragestil> | i also wonder how to just invoke haddock directly without cabal to generate latex for a project |
2022-06-15 03:55:21 +0200 | <dragestil> | because haddock seems to expect input files - do I need to run find -iname *.hs and feed the output to haddock? |
2022-06-15 03:55:32 +0200 | <dragestil> | that seems a bit too manual |
2022-06-15 03:55:46 +0200 | <sclv> | you can run cabal haddock -v3 and then clone and modify the command line (i think v3 will print it) |
2022-06-15 03:55:47 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 03:56:46 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 03:56:57 +0200 | <dragestil> | that did print out more but not the haddock command invocation |
2022-06-15 03:57:44 +0200 | <sclv> | is that because haddocks are already built? |
2022-06-15 03:58:05 +0200 | <dragestil> | don't think so |
2022-06-15 03:58:11 +0200 | zerkal03 | (zerkal03@023-084-033-189.res.spectrum.com) |
2022-06-15 03:58:35 +0200 | <sclv> | weird. v3 prints invocation for nearly everything else |
2022-06-15 03:59:53 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
2022-06-15 04:01:01 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 04:01:44 +0200 | <dragestil> | oh actually there's something that looks like an haddock invocation, it just spans several lines |
2022-06-15 04:02:20 +0200 | <dragestil> | and the initial command is still cabal |
2022-06-15 04:02:22 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:06:52 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 260 seconds) |
2022-06-15 04:07:55 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:11:50 +0200 | td_ | (~td@muedsl-82-207-238-155.citykom.de) (Ping timeout: 240 seconds) |
2022-06-15 04:12:13 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 04:13:25 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:13:48 +0200 | td_ | (~td@muedsl-82-207-238-033.citykom.de) |
2022-06-15 04:15:11 +0200 | jao | (~jao@166.65.77.188.dynamic.jazztel.es) (Ping timeout: 256 seconds) |
2022-06-15 04:18:01 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 04:19:01 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:21:38 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) |
2022-06-15 04:23:21 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 04:23:38 +0200 | <dragestil> | https://github.com/haskell/haddock/issues/1420 looks interesting. what is Hi Haddock? |
2022-06-15 04:26:00 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 248 seconds) |
2022-06-15 04:26:14 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Ping timeout: 250 seconds) |
2022-06-15 04:27:14 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:28:27 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) |
2022-06-15 04:31:50 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 04:32:51 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:33:42 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
2022-06-15 04:37:04 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 04:38:21 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:38:46 +0200 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2022-06-15 04:38:46 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2022-06-15 04:38:46 +0200 | finn_elija | FinnElija |
2022-06-15 04:42:30 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 240 seconds) |
2022-06-15 04:42:38 +0200 | <dragestil> | sclv: lol cabal haddock --latex actually did produce tex files, but they are all under /dist-newstyle/build/x86_64-linux/ghc-x.y.z/<package name>/doc/html/ dir... |
2022-06-15 04:43:08 +0200 | <sclv> | lol |
2022-06-15 04:43:08 +0200 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
2022-06-15 04:43:57 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:44:01 +0200 | <sclv> | hie haddock is the project to produce haddocks based on the new hie files ghc generates that summarize interfaces for ides and other tools |
2022-06-15 04:44:13 +0200 | biberu | (~biberu@user/biberu) (Read error: Connection reset by peer) |
2022-06-15 04:44:24 +0200 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) |
2022-06-15 04:44:32 +0200 | biberu | (~biberu@user/biberu) |
2022-06-15 04:44:34 +0200 | <dragestil> | that's interesting. i'm hearing more and more applications of .hie files |
2022-06-15 04:48:10 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 240 seconds) |
2022-06-15 04:49:30 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:49:33 +0200 | <dragestil> | sclv: do you have a link to the project? I can't find it |
2022-06-15 04:52:20 +0200 | caubert | (~caubert@user/caubert) (Ping timeout: 248 seconds) |
2022-06-15 04:53:46 +0200 | caubert | (~caubert@user/caubert) |
2022-06-15 04:54:07 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 260 seconds) |
2022-06-15 04:55:07 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 04:55:31 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2022-06-15 04:58:34 +0200 | tabemann | (~tabemann@2600:1700:7990:24e0:68f1:5d07:157d:1415) (Remote host closed the connection) |
2022-06-15 04:58:47 +0200 | tabemann | (~tabemann@2600:1700:7990:24e0:4c02:2a0:99f2:8567) |
2022-06-15 04:59:13 +0200 | tabemann | (~tabemann@2600:1700:7990:24e0:4c02:2a0:99f2:8567) (Client Quit) |
2022-06-15 04:59:28 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 05:00:31 +0200 | hnOsmium0001 | (uid453710@user/hnOsmium0001) (Quit: Connection closed for inactivity) |
2022-06-15 05:00:42 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:05:04 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 05:06:14 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:09:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 05:09:53 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection) |
2022-06-15 05:10:43 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 05:11:48 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:14:49 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 05:15:49 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
2022-06-15 05:16:17 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 05:17:28 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:22:07 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 260 seconds) |
2022-06-15 05:22:59 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:23:34 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 05:23:44 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2022-06-15 05:24:13 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-06-15 05:25:00 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 05:27:28 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 05:27:38 +0200 | alp | (~alp@user/alp) (Ping timeout: 255 seconds) |
2022-06-15 05:28:31 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:29:40 +0200 | tabemann | (~tabemann@2600:1700:7990:24e0:313b:ace9:50c8:d6b2) |
2022-06-15 05:32:08 +0200 | whosthis | (~whosthis@97-122-203-212.hlrn.qwest.net) |
2022-06-15 05:33:23 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 05:34:07 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:38:40 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 05:39:43 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:40:30 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
2022-06-15 05:44:09 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 05:44:58 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Ping timeout: 246 seconds) |
2022-06-15 05:45:14 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:46:09 +0200 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2022-06-15 05:46:47 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-06-15 05:50:07 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 260 seconds) |
2022-06-15 05:50:48 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:51:52 +0200 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-06-15 05:53:14 +0200 | img | (~img@user/img) |
2022-06-15 05:53:20 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::4588) (Ping timeout: 250 seconds) |
2022-06-15 05:55:29 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 05:56:21 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 05:58:09 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 06:00:30 +0200 | foul_owl | (~kerry@23.82.194.92) (Ping timeout: 240 seconds) |
2022-06-15 06:00:43 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 06:01:42 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:03:32 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
2022-06-15 06:07:23 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 06:08:45 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:11:46 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-06-15 06:13:48 +0200 | k8yun | (~k8yun@user/k8yun) |
2022-06-15 06:16:04 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
2022-06-15 06:16:28 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 06:16:37 +0200 | foul_owl | (~kerry@23.82.194.107) |
2022-06-15 06:17:40 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-06-15 06:18:08 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:18:16 +0200 | Vajb | (~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06) |
2022-06-15 06:22:25 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 06:24:01 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:24:41 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2022-06-15 06:28:55 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 06:29:34 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:32:23 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 06:33:58 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 06:35:09 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:35:38 +0200 | jargon | (~jargon@184.101.186.108) |
2022-06-15 06:37:25 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
2022-06-15 06:39:34 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 06:40:50 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:45:12 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 248 seconds) |
2022-06-15 06:46:20 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:51:04 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 248 seconds) |
2022-06-15 06:51:20 +0200 | zerkal03 | (zerkal03@023-084-033-189.res.spectrum.com) () |
2022-06-15 06:51:57 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:56:41 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 06:57:35 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 06:58:14 +0200 | <sclv> | ah misspoke. hi haddock was pushing it to hi files instead of running the full pipeline. hie came later and is still wip https://summerofcode.withgoogle.com/archive/2018/projects/5011474275631104 |
2022-06-15 07:01:58 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 07:03:09 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 07:03:20 +0200 | <dragestil> | sclv: pushing what to hi files? |
2022-06-15 07:03:59 +0200 | <sclv> | the haddock data. haddock used to run the ghc pipeline directly |
2022-06-15 07:04:27 +0200 | <sclv> | now ghc embeds what haddock needs in hi files that haddock processes |
2022-06-15 07:04:35 +0200 | <dragestil> | ah ok |
2022-06-15 07:04:58 +0200 | <dragestil> | this must be long time ago because hi has been around for a loong time |
2022-06-15 07:07:03 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2022-06-15 07:07:17 +0200 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
2022-06-15 07:11:25 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 246 seconds) |
2022-06-15 07:12:16 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 07:16:32 +0200 | coot | (~coot@213.134.190.95) |
2022-06-15 07:17:05 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 07:18:07 +0200 | bilegeek | (~bilegeek@2600:1008:b062:d718:bff4:2307:526c:195f) |
2022-06-15 07:21:50 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-06-15 07:23:19 +0200 | k8yun | (~k8yun@user/k8yun) (Quit: Leaving) |
2022-06-15 07:26:48 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
2022-06-15 07:28:59 +0200 | CoolerX | (~user@user/coolerx) |
2022-06-15 07:30:07 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-06-15 07:30:45 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Remote host closed the connection) |
2022-06-15 07:42:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 07:43:41 +0200 | stoned | (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) (Quit: ZNC - https://znc.in) |
2022-06-15 07:45:23 +0200 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) |
2022-06-15 07:47:22 +0200 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection) |
2022-06-15 07:49:40 +0200 | michalz | (~michalz@185.246.204.109) |
2022-06-15 07:49:57 +0200 | CoolerX | (~user@user/coolerx) (Ping timeout: 256 seconds) |
2022-06-15 07:59:13 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 08:06:06 +0200 | [Leary] | (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Remote host closed the connection) |
2022-06-15 08:06:49 +0200 | slac73952 | (~slack1256@191.125.227.90) (Remote host closed the connection) |
2022-06-15 08:07:51 +0200 | jargon | (~jargon@184.101.186.108) (Remote host closed the connection) |
2022-06-15 08:12:34 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 08:13:14 +0200 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
2022-06-15 08:13:46 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 08:17:58 +0200 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
2022-06-15 08:25:20 +0200 | MajorBiscuit | (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) |
2022-06-15 08:26:33 +0200 | [Leary] | (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) |
2022-06-15 08:27:43 +0200 | [Leary] | (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Remote host closed the connection) |
2022-06-15 08:30:45 +0200 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Ping timeout: 256 seconds) |
2022-06-15 08:30:50 +0200 | Pickchea | (~private@user/pickchea) |
2022-06-15 08:33:45 +0200 | <dminuoso> | maerwald: Since you pointed out "once you have access to the power grid, all hope is lost anyway" - it turns out you can turn power side channels into network measurable timing side channels! |
2022-06-15 08:33:53 +0200 | <dminuoso> | Freshly released: https://www.hertzbleed.com/ |
2022-06-15 08:33:53 +0200 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2022-06-15 08:33:57 +0200 | acidjnk | (~acidjnk@p200300d0c7068b9140c628021d98d447.dip0.t-ipconnect.de) |
2022-06-15 08:34:35 +0200 | <dminuoso> | And this one seems essentially unmitigateable on existing architectures |
2022-06-15 08:37:15 +0200 | shriekingnoise | (~shrieking@201.212.175.181) (Quit: Quit) |
2022-06-15 08:37:44 +0200 | MajorBiscuit | (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 248 seconds) |
2022-06-15 08:37:58 +0200 | <Axman6> | "Why did Intel ask for a long embargo, considering they are not deploying patches? Ask Intel." heh |
2022-06-15 08:38:46 +0200 | <Square> | is there a fold like function that "parses" a list using previous and current element and returns :: (a -> a -> Bool) -> [a] -> ([a],[a]) -- (parsed,unparsed) |
2022-06-15 08:39:11 +0200 | <Square> | s/and returns/with signature like/ |
2022-06-15 08:39:44 +0200 | <Square> | idk if parse is the right word.. consumes |
2022-06-15 08:39:54 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 08:39:59 +0200 | <Axman6> | can you give an example of how you'd use it? |
2022-06-15 08:39:59 +0200 | <dminuoso> | Square: I cant make sense of your question |
2022-06-15 08:40:05 +0200 | <Square> | me neither =d |
2022-06-15 08:40:19 +0200 | <dminuoso> | If you dont even understand your own question, how are we to do it? :) |
2022-06-15 08:40:31 +0200 | <Axman6> | foo (\x y -> ???) [???] -> (???,???) -- pls fil in blanks |
2022-06-15 08:40:31 +0200 | <Square> | Ill try better. |
2022-06-15 08:40:38 +0200 | <Square> | haha |
2022-06-15 08:41:41 +0200 | <dminuoso> | Ah but I think I understand, you want something like `span/break` but with access to the previous element? |
2022-06-15 08:42:07 +0200 | <Square> | ok.. we have List.groupBy with signature : groupBy :: (a -> a -> Bool) -> [a] -> [[a]] |
2022-06-15 08:42:17 +0200 | <Square> | yeah |
2022-06-15 08:42:29 +0200 | <Square> | dminuoso, correct |
2022-06-15 08:42:30 +0200 | <dminuoso> | How does this work on the first element? |
2022-06-15 08:42:33 +0200 | <dibblego> | @type zip <*> tail |
2022-06-15 08:42:34 +0200 | <lambdabot> | [a] -> [(a, a)] |
2022-06-15 08:42:40 +0200 | <Square> | its allways included |
2022-06-15 08:42:48 +0200 | <Axman6> | can you implement that with the god of conzequtive elements, zip`ap`tail? |
2022-06-15 08:42:51 +0200 | <Square> | as in "parsed" |
2022-06-15 08:42:52 +0200 | <dminuoso> | No I mean, you dont have a previous element on the first element. |
2022-06-15 08:42:53 +0200 | Hash | (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) |
2022-06-15 08:42:55 +0200 | <Axman6> | @quote zip.ap.tail |
2022-06-15 08:42:55 +0200 | <lambdabot> | quicksilver says: zip`ap`tail - the Aztec god of consecutive numbers |
2022-06-15 08:43:17 +0200 | <Axman6> | > (zip <*> tail) [1..10] |
2022-06-15 08:43:19 +0200 | <lambdabot> | [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10)] |
2022-06-15 08:43:44 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 08:43:47 +0200 | <Square> | sweet. |
2022-06-15 08:54:48 +0200 | mixfix41 | (~sdenynine@user/mixfix41) (Ping timeout: 248 seconds) |
2022-06-15 08:57:25 +0200 | dsp | (~dsp@cpc152107-haye27-2-0-cust227.17-4.cable.virginm.net) |
2022-06-15 08:59:52 +0200 | nschoe | (~quassel@178.251.84.79) |
2022-06-15 09:01:11 +0200 | [Leary] | (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) |
2022-06-15 09:03:04 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
2022-06-15 09:04:00 +0200 | monaaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 09:04:41 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-06-15 09:06:13 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds) |
2022-06-15 09:06:26 +0200 | alp | (~alp@user/alp) |
2022-06-15 09:06:42 +0200 | haritz | (~hrtz@user/haritz) (Remote host closed the connection) |
2022-06-15 09:12:57 +0200 | littlebo1eep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 09:13:54 +0200 | chele | (~chele@user/chele) |
2022-06-15 09:14:23 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 09:16:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 09:18:44 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 09:19:29 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
2022-06-15 09:20:35 +0200 | monaaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.5) |
2022-06-15 09:20:42 +0200 | gmg | (~user@user/gehmehgeh) |
2022-06-15 09:21:07 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 09:21:34 +0200 | littlebo1eep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 09:22:52 +0200 | <tdammers> | Vulnerabilities have brand identities now. What a time to be alive! |
2022-06-15 09:23:10 +0200 | <tdammers> | Next up: vulnerabilities with an official code of conduct |
2022-06-15 09:23:20 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
2022-06-15 09:23:46 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 09:24:11 +0200 | <tdammers> | anyway, IMO the most surprising thing about hertzbleed is that nobody has come up with it before. in hindsight, people should have realized this the moment someone invented frequency scaling. |
2022-06-15 09:24:13 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) |
2022-06-15 09:24:22 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
2022-06-15 09:24:23 +0200 | <Axman6> | "You may not use this vulnerability against any minority architecture" |
2022-06-15 09:24:38 +0200 | <Axman6> | yeah - I'm surprised too. |
2022-06-15 09:24:38 +0200 | asm | (~alexander@burner.asm89.io) (Changing host) |
2022-06-15 09:24:38 +0200 | asm | (~alexander@user/asm) |
2022-06-15 09:24:40 +0200 | <tdammers> | it's all about being inclusive, amirite |
2022-06-15 09:24:49 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 09:25:01 +0200 | <Axman6> | it feels like a fix might be as simple as being able to tell the CPU to lock the frequency |
2022-06-15 09:25:30 +0200 | <tdammers> | they are addressing that; it does indeed work, but the problem with that is that you will have to lock the CPU into the *lowest* frequency in order to avoid overheating |
2022-06-15 09:25:34 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 09:25:39 +0200 | <tdammers> | so that's pretty crippling |
2022-06-15 09:25:41 +0200 | <Axman6> | "Yo, I'm doin serious shit, please hold off on changing how fast I do it" - I'm sure Intel or AMD will give it a better nmemonic |
2022-06-15 09:26:17 +0200 | <tdammers> | problem with that is that it would create an opportunity for DOS |
2022-06-15 09:26:18 +0200 | <_________> | constant-time execution enclave or something ;) |
2022-06-15 09:26:45 +0200 | <Axman6> | you kinda need constant power instructions |
2022-06-15 09:26:52 +0200 | <tdammers> | just tell the computer you're doing "yo serious shizzles" all the time, and you can force the CPU into baseline performance mode forever |
2022-06-15 09:26:55 +0200 | <Axman6> | just do ewvery single instruction using x and ~x |
2022-06-15 09:27:25 +0200 | <tdammers> | I think the ultimate solution would be to outsource all crypto stuff to a dedicated crypto coprocessor |
2022-06-15 09:28:23 +0200 | <tdammers> | or actually an entire crypto subsystem, with cryptographic memory and all that. because modern systems have more problems that power scaling |
2022-06-15 09:28:33 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 256 seconds) |
2022-06-15 09:28:50 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 09:29:13 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-06-15 09:30:36 +0200 | <tdammers> | than* |
2022-06-15 09:31:27 +0200 | Putonlalla1 | Putonlalla |
2022-06-15 09:32:53 +0200 | <jackdk> | tdammers: an opportunity for DOS? I've been waiting for this day; I still have my collection of TSRs and weird little utilities around here somewhere... |
2022-06-15 09:34:17 +0200 | <tdammers> | jackdk: it's quite simple actually. suppose there is such an instruction ("doing serious shit, keep CPU locked into baseline perf"), then it will have to be system-wide, otherwise it would be useless |
2022-06-15 09:34:31 +0200 | <tdammers> | but that means that anyone who can issue that instruction can lock the CPU into baseline perf at will |
2022-06-15 09:34:43 +0200 | <tdammers> | it's not a full DoS on its own, but it certainly helps |
2022-06-15 09:34:45 +0200 | <jackdk> | I'm just making a dumb joke about MS-DOS, ignore me |
2022-06-15 09:35:01 +0200 | <tdammers> | ah, lol, missed the TSR part |
2022-06-15 09:35:11 +0200 | <tdammers> | it's been a while since I've done that |
2022-06-15 09:35:24 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 09:35:41 +0200 | <jackdk> | I used to have all sorts of boot disks for running games on ramdisks. We'd have heaps of fun on the school computers without actually hurting anythin |
2022-06-15 09:36:19 +0200 | <tdammers> | haha, yeah |
2022-06-15 09:36:24 +0200 | <tdammers> | imagine "installing programs" |
2022-06-15 09:36:27 +0200 | flupe | (~baboum@radon.sbi.re) (Ping timeout: 240 seconds) |
2022-06-15 09:37:04 +0200 | <tomsmeding> | "imagine "installing programs"" continues to this day |
2022-06-15 09:37:32 +0200 | <tomsmeding> | fortunately most universities have machines dedicated to the pesky CS people now that allow you to run stuff |
2022-06-15 09:38:10 +0200 | [Leary] | (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Remote host closed the connection) |
2022-06-15 09:38:32 +0200 | <darkling> | Mostly only by luck, rather than any kind of policy. |
2022-06-15 09:39:57 +0200 | notzmv | (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
2022-06-15 09:39:58 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2022-06-15 09:41:22 +0200 | <tomsmeding> | around here, IT departments wouldn't allow anything close to that without policy, so no way that happens by luck |
2022-06-15 09:41:57 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 09:43:03 +0200 | MajorBiscuit | (~MajorBisc@wlan-145-94-164-215.wlan.tudelft.nl) |
2022-06-15 09:44:21 +0200 | <darkling> | The last university I worked in had consultants in to reshape the IT support department. (My recommendation? Fire the management and replace them with people who could actually manage) |
2022-06-15 09:44:38 +0200 | <darkling> | The first draft of the report from the consultants failed to acknowledge that the university did any teaching. Or research. |
2022-06-15 09:45:28 +0200 | <jackdk> | what did the university do, then? |
2022-06-15 09:45:36 +0200 | <darkling> | They did eventually manage to shoe-horn them in, but the result wasn't particularly comfortable. |
2022-06-15 09:47:05 +0200 | <darkling> | For at least 6 months afterwards, all the IT people embedded in research departments were basically still doing the local support jobs they were doing before, despite the fact they should have been doing something completely different. |
2022-06-15 09:47:13 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2022-06-15 09:47:33 +0200 | <darkling> | That didn't matter too mcuh, because none of the tasks they were meant to be doing actually reached them (because they were being done by someone else embedded in a research department) |
2022-06-15 09:47:47 +0200 | <darkling> | I left after that. :) |
2022-06-15 09:48:33 +0200 | <darkling> | (And gave the HR person in charge of the process a full frank and confidential opinion on the whole process and structure over a pint in the bar) |
2022-06-15 09:49:17 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
2022-06-15 09:50:58 +0200 | machinedgod | (~machinedg@66.244.246.252) |
2022-06-15 09:51:03 +0200 | <tdammers> | reminds me of the idea for a short story a couple folks and I came up with this weekend at zurihac |
2022-06-15 09:51:11 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 09:51:46 +0200 | <tdammers> | it's about a software engineering team who are really serious about unit tests and mocking |
2022-06-15 09:52:15 +0200 | <tdammers> | until eventually someone notices that their test framework does not touch any of the code actually running in production anymore, it's all just mocks |
2022-06-15 09:52:44 +0200 | zeenk | (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) |
2022-06-15 09:53:09 +0200 | <Logio_> | test suite of theseus |
2022-06-15 09:53:12 +0200 | Logio_ | Logio |
2022-06-15 09:55:04 +0200 | [Leary] | (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) |
2022-06-15 09:57:08 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
2022-06-15 09:57:10 +0200 | mc47 | (~mc47@xmonad/TheMC47) |
2022-06-15 09:58:21 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) |
2022-06-15 09:58:25 +0200 | <tdammers> | maybe there is no production system at all anymore, they're just maintaining a self-sufficient test suite, and whenever they "deploy to production", all that happens is that a CI server runs the whole test suite, and then runs the deployment script, which silently concludes that there is nothing to do, and reports a successful deployment |
2022-06-15 09:58:34 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-06-15 09:58:48 +0200 | <tomsmeding> | we're going haskell after all, no side effects so nothing to deploy |
2022-06-15 09:58:51 +0200 | <tomsmeding> | *doing |
2022-06-15 09:59:14 +0200 | <tdammers> | we're all just building very elaborate room heaters |
2022-06-15 09:59:23 +0200 | <jackdk> | that really needs to be written up somewhere because it's a beautiful tale |
2022-06-15 09:59:28 +0200 | <jackdk> | I've worked on test suites like that |
2022-06-15 09:59:49 +0200 | <DigitalKiwi> | what's a test suite |
2022-06-15 10:00:19 +0200 | <tdammers> | something you wear for a rehearsal wedding ceremony |
2022-06-15 10:00:33 +0200 | <tdammers> | wait no, that's "test suit", my bad |
2022-06-15 10:00:35 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 10:00:42 +0200 | <jackdk> | an executable program which patches over type-system insufficiencies |
2022-06-15 10:01:36 +0200 | <DigitalKiwi> | dependent types make test suites obsolete eh |
2022-06-15 10:01:53 +0200 | <tdammers> | alternative: a program that generates randomized metrics for the purpose of keeping management busy |
2022-06-15 10:02:05 +0200 | <DigitalKiwi> | so since Haskell has dependent types now I don't need tests? |
2022-06-15 10:02:17 +0200 | <DigitalKiwi> | perfect I am ahead of the game |
2022-06-15 10:02:23 +0200 | <tdammers> | you still need tests, but you can now run them at the type level |
2022-06-15 10:02:34 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 10:03:53 +0200 | fweht | (uid404746@id-404746.lymington.irccloud.com) |
2022-06-15 10:05:49 +0200 | <DigitalKiwi> | they said Haskell didn't have side effects but my energy bill from compiling says that is a lie |
2022-06-15 10:08:53 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Ping timeout: 255 seconds) |
2022-06-15 10:10:32 +0200 | <tomsmeding> | while it's a good joke, dependent types don't make test suites obsolete until we have type-level property-based testing :p |
2022-06-15 10:10:50 +0200 | <tomsmeding> | of which I'd have no idea what the semantics are supposed to be |
2022-06-15 10:13:26 +0200 | Topsi | (~Topsi@dyndsl-095-033-095-142.ewe-ip-backbone.de) |
2022-06-15 10:13:51 +0200 | <DigitalKiwi> | I am here (for the jokes) all week |
2022-06-15 10:15:30 +0200 | <DigitalKiwi> | type checked jokes |
2022-06-15 10:20:15 +0200 | <tdammers> | so the reason we still need test suites is because capturing every aspect of our code in types is impractical |
2022-06-15 10:20:46 +0200 | <tdammers> | dependent types allow expressing more constraints in types, but they still don't make it feasible to express *everything* in types |
2022-06-15 10:28:10 +0200 | bilegeek | (~bilegeek@2600:1008:b062:d718:bff4:2307:526c:195f) (Quit: Leaving) |
2022-06-15 10:28:19 +0200 | <maerwald[m]> | I don't understand the types obsession. You can write logic bugs in types too. |
2022-06-15 10:33:41 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5) |
2022-06-15 10:34:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 10:37:04 +0200 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2022-06-15 10:40:52 +0200 | <tdammers> | "avoiding bugs" isn't quite the right mindset |
2022-06-15 10:41:21 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 10:42:03 +0200 | <tdammers> | I like to think of types as a way of dealing with all possible values at once, instead of just a small (often size 1) set of example values |
2022-06-15 10:45:15 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-06-15 10:46:11 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
2022-06-15 10:49:50 +0200 | <tomsmeding> | maerwald[m]: and you can write logic bugs in tests too |
2022-06-15 10:50:25 +0200 | <maerwald[m]> | Yeah |
2022-06-15 10:50:26 +0200 | <tomsmeding> | as long as the two ways of expressing the same idea are different enough, the probability that the human makes the same mistake in both places becomes lower, and the value of the test (be it a type or a value test) increases |
2022-06-15 10:50:30 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
2022-06-15 10:50:36 +0200 | gurkenglas | (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) |
2022-06-15 10:51:13 +0200 | <tomsmeding> | types often have the additional property that they are a _simplification_ of the problem, which makes it less likely that you make mistakes there -- unless, that is, you go full dependently typed and encode your entire business logic in types :p |
2022-06-15 10:51:43 +0200 | <dminuoso> | A simplification of the problem? |
2022-06-15 10:51:55 +0200 | <dminuoso> | Curious, that must be why encoding simple propertiies take incredible amounts of complexity in type families and typeclasses. |
2022-06-15 10:52:11 +0200 | <tdammers> | yeah, you can simplify the problem "make sure that c really is the sum of a and b" to "make sure that iff a and b are integers, c is also an integer", for example |
2022-06-15 10:52:13 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 10:52:28 +0200 | <tomsmeding> | dminuoso: then your types are too complex to gain anything from this particular advantage, so all you have is the "two ways of expressing the same idea" |
2022-06-15 10:52:29 +0200 | <tdammers> | you lose a lot of the original problem, but you can still assert part of it |
2022-06-15 10:53:22 +0200 | <tdammers> | so, not a simpler expression of the same problem (if types could do that, we could just generate the complex implementation from the much simpler types and call it a day), but an expression of a simpler problem that captures some aspects of the original problem |
2022-06-15 10:53:39 +0200 | <tomsmeding> | tdammers++ |
2022-06-15 10:54:02 +0200 | <tomsmeding> | I was probably unclear in my formulation :p |
2022-06-15 10:54:38 +0200 | <tdammers> | that said, "a simpler expression of the same problem" is also a thing, it's the main driver of programming language research and the evolution of programming paradigms |
2022-06-15 10:54:41 +0200 | <dminuoso> | Im just saying that encoding properties via dependent types tends to be more complicated than verifying the same properties in a test or an assertion. |
2022-06-15 10:54:53 +0200 | mima | (~mmh@dhcp-138-246-3-188.dynamic.eduroam.mwn.de) |
2022-06-15 10:55:08 +0200 | <tomsmeding> | dminuoso: I explicitly excluded dependent-typing shenanigans from "simpler expression of [part of] the problem" :p |
2022-06-15 10:56:25 +0200 | <maerwald[m]> | Types are more exhaustive, but in no way simpler |
2022-06-15 10:57:38 +0200 | <tdammers> | I'll say it again: a whopping advantage of types over tests is that they automatically propagate. |
2022-06-15 10:57:52 +0200 | jespada | (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Read error: Connection reset by peer) |
2022-06-15 10:58:18 +0200 | titibandit | (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) |
2022-06-15 10:58:26 +0200 | <dminuoso> | Well sure, I mean something like `Either` encodes a very simple properties. |
2022-06-15 10:58:29 +0200 | <dminuoso> | If that's what you meant |
2022-06-15 10:59:01 +0200 | jespada | (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) |
2022-06-15 10:59:21 +0200 | coot | (~coot@213.134.190.95) |
2022-06-15 11:01:35 +0200 | <jchia[m]> | Is it a known issue with stack that built-in packages like binary cannot be overridden with extra-deps in the stack.yaml? https://github.com/commercialhaskell/stack/issues/5767 |
2022-06-15 11:02:16 +0200 | jespada_ | (~jespada@146.70.119.46) |
2022-06-15 11:03:10 +0200 | jespada | (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Ping timeout: 240 seconds) |
2022-06-15 11:04:16 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection) |
2022-06-15 11:06:00 +0200 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds) |
2022-06-15 11:06:02 +0200 | jespada | (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) |
2022-06-15 11:06:02 +0200 | chimp_ | (~Psybur@c-76-123-45-25.hsd1.va.comcast.net) |
2022-06-15 11:06:30 +0200 | jespada_ | (~jespada@146.70.119.46) (Ping timeout: 240 seconds) |
2022-06-15 11:07:50 +0200 | Psybur | (~Psybur@c-76-123-45-25.hsd1.va.comcast.net) (Ping timeout: 255 seconds) |
2022-06-15 11:18:19 +0200 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-06-15 11:19:50 +0200 | gmg | (~user@user/gehmehgeh) |
2022-06-15 11:26:02 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 11:29:15 +0200 | Colere | (~colere@about/linux/staff/sauvin) (Ping timeout: 260 seconds) |
2022-06-15 11:32:01 +0200 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-06-15 11:37:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 11:39:57 +0200 | Pickchea | (~private@user/pickchea) |
2022-06-15 11:40:47 +0200 | kuribas | (~user@ptr-17d51eors28p6gwk9l6.18120a2.ip6.access.telenet.be) |
2022-06-15 11:48:45 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 11:48:56 +0200 | notzmv | (~zmv@user/notzmv) |
2022-06-15 11:49:56 +0200 | rendar | (~rendar@user/rendar) |
2022-06-15 11:50:16 +0200 | <rendar> | `a = 1` defined a 0-args function which returns 1, but `let a = 1` ? what is the difference here? |
2022-06-15 11:52:38 +0200 | Midjak | (~Midjak@82.66.147.146) |
2022-06-15 11:54:45 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-06-15 11:55:25 +0200 | Colere | (~colere@about/linux/staff/sauvin) |
2022-06-15 11:57:12 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 248 seconds) |
2022-06-15 12:01:57 +0200 | frost | (~frost@user/frost) (Quit: Client closed) |
2022-06-15 12:04:36 +0200 | __monty__ | (~toonn@user/toonn) |
2022-06-15 12:04:38 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
2022-06-15 12:09:02 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 250 seconds) |
2022-06-15 12:09:17 +0200 | vglfr | (~vglfr@coupling.penchant.volia.net) (Remote host closed the connection) |
2022-06-15 12:09:38 +0200 | vglfr | (~vglfr@coupling.penchant.volia.net) |
2022-06-15 12:10:00 +0200 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds) |
2022-06-15 12:27:12 +0200 | z | (~wu000168@host-187-23.ilchtbc.chicago.il.us.clients.pavlovmedia.net) (Killed (NickServ (GHOST command used by Kirjava!~cake@user/kirjava))) |
2022-06-15 12:30:12 +0200 | ubert | (~Thunderbi@2a02:8109:abc0:6434:c1f3:6a1d:d03:af39) |
2022-06-15 12:30:56 +0200 | <tomsmeding> | rendar: in ghci? In ghci those two things mean (mostly) the same thing |
2022-06-15 12:31:19 +0200 | <tomsmeding> | the only differences between them in ghci come from strange implementation details that almost no-one needs to know anything about |
2022-06-15 12:31:22 +0200 | <rendar> | yes ghci |
2022-06-15 12:31:48 +0200 | <tomsmeding> | in a Haskell source file, they are completely different kinds of syntax: `a = 1` is a declaration (what you put on the top level, or in a `where` block), whereas `let a = 1 in ...` is an expression |
2022-06-15 12:31:51 +0200 | <rendar> | there are some other environments when they are not the same thing? and why "mostly"? i'm interested to get also the subtle differences |
2022-06-15 12:32:02 +0200 | <tomsmeding> | you're not interested in the subtle differences |
2022-06-15 12:32:13 +0200 | <rendar> | ok.. |
2022-06-15 12:32:28 +0200 | <tomsmeding> | with the differences that we're getting at here, you start to expose that ghci is really a stack of hacks |
2022-06-15 12:32:45 +0200 | <sm> | ...these are not the droids you're looking for... |
2022-06-15 12:32:49 +0200 | <tomsmeding> | rendar: https://gitlab.haskell.org/ghc/ghc/-/issues/20687 |
2022-06-15 12:32:59 +0200 | <tomsmeding> | for all the nitty gritty details :p |
2022-06-15 12:33:11 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2022-06-15 12:33:12 +0200 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-06-15 12:33:32 +0200 | <rendar> | oh :( |
2022-06-15 12:33:47 +0200 | haritz | (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) |
2022-06-15 12:33:48 +0200 | haritz | (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host) |
2022-06-15 12:33:48 +0200 | haritz | (~hrtz@user/haritz) |
2022-06-15 12:33:50 +0200 | <tomsmeding> | so: the only difference is in the exact interaction with laziness |
2022-06-15 12:34:00 +0200 | gmg | (~user@user/gehmehgeh) |
2022-06-15 12:34:08 +0200 | <tomsmeding> | but as a normal user, you ~never need to care about this particular detail |
2022-06-15 12:34:14 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-06-15 12:34:19 +0200 | <rendar> | ok |
2022-06-15 12:34:24 +0200 | <sm> | he can go about his business |
2022-06-15 12:34:37 +0200 | Batzy | (~quassel@user/batzy) (Quit: No Ping reply in 180 seconds.) |
2022-06-15 12:36:03 +0200 | Batzy | (~quassel@user/batzy) |
2022-06-15 12:37:53 +0200 | <rendar> | can we say that haskell takes a bit from lisp family of languages, such as prefix operators, everything is an expr, but without the ( ), and with more operators instead of literals functions call? |
2022-06-15 12:38:55 +0200 | <tomsmeding> | lisp also had the idea that doing many things with functions is good |
2022-06-15 12:39:19 +0200 | <tomsmeding> | so yes, although there are also lots of differences between haskell and the lisp family of languages |
2022-06-15 12:39:40 +0200 | <rendar> | yes.. |
2022-06-15 12:40:11 +0200 | <jackdk> | Feels to me like a long bow, but one you could draw if you really wanted |
2022-06-15 12:40:25 +0200 | <tomsmeding> | https://en.wikipedia.org/wiki/Logo_(programming_language) is a language that (aside from the built-in graphics stuff) is basically lisp without mandatory parentheses |
2022-06-15 12:40:46 +0200 | <rendar> | tomsmeding, that's very interesting comparison, yeah |
2022-06-15 12:41:01 +0200 | <tomsmeding> | oh no code examples on that page, hm |
2022-06-15 12:41:39 +0200 | <tomsmeding> | more code examples here https://en.wikipedia.org/wiki/UCBLogo |
2022-06-15 12:41:39 +0200 | <rendar> | for now, haskell seems to me very elegant and consistent, i like what i see |
2022-06-15 12:41:45 +0200 | tomsmeding | nodes |
2022-06-15 12:41:47 +0200 | <tomsmeding> | *nods |
2022-06-15 12:42:14 +0200 | <rendar> | a friend of mine said because haskell was designed by a committee of geniuses |
2022-06-15 12:43:28 +0200 | fweht | (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2022-06-15 12:43:48 +0200 | <maerwald> | Yes, by the haskell pantheon |
2022-06-15 12:46:27 +0200 | <rendar> | i guess haskell is also a good place where to learn category theory, i guess |
2022-06-15 12:52:52 +0200 | <kuribas> | I doubt it. |
2022-06-15 12:52:57 +0200 | <maerwald> | yes, every Haskeller has spent 10 years in a category theory monastery at the top of the mountains |
2022-06-15 12:53:43 +0200 | <Haskelytic> | theory gatekeepers are amazing /s :) |
2022-06-15 12:53:50 +0200 | <tomsmeding> | it's more like: if you know category theory and are learning haskell, then you see lots of parallels |
2022-06-15 12:54:08 +0200 | <tomsmeding> | if you know haskell and are learning category theory, you have to actively unlearn some of the intuitions you got in haskell :p |
2022-06-15 12:54:13 +0200 | <tomsmeding> | (not all) |
2022-06-15 12:55:11 +0200 | <kuribas> | I'd say mathematical logic and (dependent) type theory are much more useful. |
2022-06-15 12:55:41 +0200 | <kuribas> | Essentiel even if you are concerned about correctness. |
2022-06-15 12:56:11 +0200 | <kuribas> | Category theory is nothing more than a interesting curiosity. |
2022-06-15 12:56:53 +0200 | frost | (~frost@user/frost) |
2022-06-15 12:59:18 +0200 | CiaoSen | (~Jura@p200300c9571294002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-06-15 13:03:32 +0200 | <tomsmeding> | it's where some of the _inspiration_ comes from |
2022-06-15 13:04:13 +0200 | bliminse | (~bliminse@host86-132-158-77.range86-132.btcentralplus.com) (Ping timeout: 246 seconds) |
2022-06-15 13:05:34 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
2022-06-15 13:05:47 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-06-15 13:06:11 +0200 | bliminse | (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) |
2022-06-15 13:06:27 +0200 | Unicorn_Princess | (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
2022-06-15 13:07:34 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) |
2022-06-15 13:07:41 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
2022-06-15 13:07:58 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Ping timeout: 250 seconds) |
2022-06-15 13:13:17 +0200 | belphegor666 | (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) (Changing host) |
2022-06-15 13:13:17 +0200 | belphegor666 | (~satan@user/belphegor666) |
2022-06-15 13:13:43 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) |
2022-06-15 13:15:28 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
2022-06-15 13:15:40 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) |
2022-06-15 13:16:51 +0200 | <tomsmeding> | % map Data.Char.toUpper "test" |
2022-06-15 13:16:51 +0200 | <yahb2> | "TEST" |
2022-06-15 13:20:12 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
2022-06-15 13:20:24 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) |
2022-06-15 13:20:24 +0200 | <Haskelytic> | is there any value in a pure functional language *without* a static type system? |
2022-06-15 13:21:03 +0200 | <maerwald> | why not |
2022-06-15 13:21:25 +0200 | <hpc> | various lisps and such have made it work |
2022-06-15 13:22:02 +0200 | <geekosaur> | nix? |
2022-06-15 13:22:11 +0200 | <hpc> | and even when a language has mutation, you might find just to help your own thoughts it's useful to limit yourself |
2022-06-15 13:22:16 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-06-15 13:22:24 +0200 | <kuribas> | Haskelytic: what does that even mean? |
2022-06-15 13:22:25 +0200 | <maerwald> | hpc: are they purely functional? E.g. are evaluation and execution different concepts/stages? |
2022-06-15 13:22:36 +0200 | <kuribas> | like, how can you enforce purity if you don't have static types? |
2022-06-15 13:22:53 +0200 | <maerwald> | kuribas: type system has little to do with purity |
2022-06-15 13:23:52 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
2022-06-15 13:24:05 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) |
2022-06-15 13:24:11 +0200 | <hpc> | maerwald: if macros count, sure |
2022-06-15 13:24:38 +0200 | <maerwald> | well, then that settles the discussion |
2022-06-15 13:24:57 +0200 | <Haskelytic> | kuribas: as far as I can tell, the type system is just a filter for allowable expressions in your language. If you remove that, you simply run the risk of increased runtime errors, but not necessarily a loss of purity since that's orthogonal to type systems. |
2022-06-15 13:25:07 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
2022-06-15 13:25:19 +0200 | yahb2 | (~yahb2@2a01:4f8:c0c:5c7b::2) |
2022-06-15 13:25:25 +0200 | <kuribas> | Haskelytic: if you have a different syntax/monads for side effects, yes. |
2022-06-15 13:25:26 +0200 | <hpc> | :P |
2022-06-15 13:25:27 +0200 | <Haskelytic> | I could be wrong though XD |
2022-06-15 13:25:41 +0200 | <kuribas> | Haskelytic: but then, managing monads without static types seems very tedious. |
2022-06-15 13:25:55 +0200 | <Haskelytic> | Yeah that's actually what I was thinking of. |
2022-06-15 13:25:55 +0200 | <maerwald> | kuribas: IO and monads have nothing to do with purity |
2022-06-15 13:26:03 +0200 | <Franciman> | why maerwald ? |
2022-06-15 13:26:17 +0200 | <maerwald> | because purity is not defined for execution |
2022-06-15 13:26:22 +0200 | <Haskelytic> | Type systems appear to be a convenience rather than intrinsic to whether you have a pure FP lang or a traditional imperative lang |
2022-06-15 13:26:42 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2022-06-15 13:26:48 +0200 | <Haskelytic> | Sorry I'm just a noob thinking too hard about these distinctions because I'm fascinated by PLT |
2022-06-15 13:26:49 +0200 | <kuribas> | monadic IO is an elegant solution for maintaining purity when adding side-effects to a language. |
2022-06-15 13:26:58 +0200 | <maerwald> | kuribas: no |
2022-06-15 13:27:06 +0200 | <kuribas> | It's not the only way, but the alternatives are mostly worse. |
2022-06-15 13:27:39 +0200 | <maerwald> | the way purity is maintained for IO is the fact that evaluating IO does nothing and afair the RealWorld trick makes sure GHC doesn't re-order IO actions |
2022-06-15 13:27:45 +0200 | <arahael> | There's plenty of other ways, but it's hard to reason about them in a lazy and potentially concurrent environment. |
2022-06-15 13:27:46 +0200 | <kuribas> | maerwald: no, as in, it's not elegant? |
2022-06-15 13:27:55 +0200 | <Haskelytic> | are there any pure functional languages that don't use static types? |
2022-06-15 13:27:57 +0200 | <maerwald> | monads are completely irrelevant to that |
2022-06-15 13:28:19 +0200 | <Franciman> | monads are the name you give to the form |
2022-06-15 13:28:21 +0200 | <Franciman> | right? |
2022-06-15 13:28:24 +0200 | <Franciman> | so it's the form that matters |
2022-06-15 13:28:29 +0200 | <maerwald> | no |
2022-06-15 13:28:41 +0200 | <Franciman> | i don't understand then xd |
2022-06-15 13:28:44 +0200 | lyle | (~lyle@104.246.145.85) |
2022-06-15 13:29:12 +0200 | <kuribas> | Franciman: Monad is what you get when you take "bind" (>>=) and "pure", but abstract away IO. |
2022-06-15 13:29:15 +0200 | <maerwald> | purity is about evaluation properties... "IO Monad" allows us to model execution. But execution is irrelevant to evaluation. |
2022-06-15 13:29:39 +0200 | <Franciman> | ok |
2022-06-15 13:29:40 +0200 | <kuribas> | Franciman: so (pure :: a -> IO a) => (pure :: Monad m => a -> m a) |
2022-06-15 13:29:45 +0200 | <Franciman> | i think i understand |
2022-06-15 13:29:46 +0200 | <maerwald> | if execution was relevant to evaluation, you wouldn't have a pure language to begin with |
2022-06-15 13:29:59 +0200 | <Franciman> | the trick is that main is not evaluated |
2022-06-15 13:30:01 +0200 | <Franciman> | but executed |
2022-06-15 13:30:06 +0200 | <kuribas> | Franciman: which happens to be a very useful abstraction. |
2022-06-15 13:30:29 +0200 | <maerwald> | Haskell was pure before monads. They are irrelevant for purity. |
2022-06-15 13:30:41 +0200 | <Franciman> | ok ok i understand |
2022-06-15 13:30:45 +0200 | <kuribas> | Franciman: funny thing, many languages have monad syntax in the form of list comprehensions. |
2022-06-15 13:30:52 +0200 | <Franciman> | thanks kuribas |
2022-06-15 13:30:54 +0200 | <Franciman> | uh |
2022-06-15 13:30:56 +0200 | <Franciman> | nifty |
2022-06-15 13:30:59 +0200 | <Franciman> | never found any?! |
2022-06-15 13:31:09 +0200 | <kuribas> | it's just not generalized. |
2022-06-15 13:31:22 +0200 | <Haskelytic> | maerwald: I don't quite understand the distinction you are making there. To make a guess, evaluation (for haskell) is about lambda calculus term rewriting versus execution which maps the evaluation strategy onto a von neumann machine? |
2022-06-15 13:31:28 +0200 | <hpc> | even funnier thing, many languages have monad syntax in the form of async! |
2022-06-15 13:31:38 +0200 | <hpc> | and null |
2022-06-15 13:31:55 +0200 | <hpc> | Monad is everywhere |
2022-06-15 13:32:29 +0200 | <Haskelytic> | hpc: so are the natural numbers :) |
2022-06-15 13:32:50 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2022-06-15 13:33:47 +0200 | <Haskelytic> | https://hackage.haskell.org/package/base-4.16.1.0/docs/Prelude.html#t:Int |
2022-06-15 13:33:54 +0200 | <maerwald> | Haskelytic: "execution maps the evaluation strategy onto a van neumann machine" ... I think that's rather what GHC does at compile time, because we don't have functional hardware. |
2022-06-15 13:34:36 +0200 | <Haskelytic> | on a more serious matter, why is Int guaranteed to be 29 bits signed 2s comp? That's such a weird width when machines go up in powers of 2 (e.g., 8/16/32 ...) |
2022-06-15 13:34:55 +0200 | <kuribas> | Haskelytic: note that haskell functions aren't pure since they can be non-total (crash with an error, or loop forever). |
2022-06-15 13:35:09 +0200 | <maerwald> | kuribas: purity doesn't exclude bottom |
2022-06-15 13:35:42 +0200 | <maerwald> | a pure function doesn't have to be total |
2022-06-15 13:36:04 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 248 seconds) |
2022-06-15 13:36:13 +0200 | <boxscape> | Haskelytic: https://stackoverflow.com/questions/7786662/bit-size-of-ghcs-int-type |
2022-06-15 13:36:18 +0200 | <kuribas> | The problem is that in the absense of type information it becomes hard to determine the input domain. |
2022-06-15 13:36:19 +0200 | <boxscape> | note that it's 30 bits |
2022-06-15 13:36:44 +0200 | <Haskelytic> | boxscape: oops yeah forgot the sign bit |
2022-06-15 13:36:47 +0200 | chele | (~chele@user/chele) (Ping timeout: 260 seconds) |
2022-06-15 13:36:53 +0200 | <Haskelytic> | boxscape: thanks for that link |
2022-06-15 13:37:11 +0200 | <boxscape> | np |
2022-06-15 13:37:31 +0200 | greenbourne277 | (~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0) (Quit: WeeChat 1.6) |
2022-06-15 13:37:46 +0200 | chele | (~chele@user/chele) |
2022-06-15 13:39:47 +0200 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2022-06-15 13:40:47 +0200 | <maerwald> | That's also why purity as a concept isn't even *that* important to the language user. It's more of an interesting property for compiler developers. The user is more interested in managing effects, imo. |
2022-06-15 13:40:50 +0200 | <Haskelytic> | kuribas: giving up on types, you could always have runtime support for python/ruby-esque duck typing :) |
2022-06-15 13:41:55 +0200 | <kuribas> | yes, but it is very impredictable due to the absense of contraints. |
2022-06-15 13:42:11 +0200 | <arahael> | I dunno, purity helps reason things somewhat about a particular function, but even then, we assume that insane things aren't being done like unsafePerformIO, and most of the time, that assumption is safe. |
2022-06-15 13:42:23 +0200 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2022-06-15 13:42:25 +0200 | rembo10 | (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-06-15 13:42:27 +0200 | <kuribas> | which is simply solved in dynamic languages by running stuff in the repl, or in tests, and checking that it works. |
2022-06-15 13:42:29 +0200 | <hpc> | kuribas: impredicateable? :P |
2022-06-15 13:42:42 +0200 | <kuribas> | unpredictable? |
2022-06-15 13:43:02 +0200 | rembo10 | (~rembo10@main.remulis.com) |
2022-06-15 13:43:08 +0200 | <hpc> | yeah, you made me think of impredicative types :D |
2022-06-15 13:43:08 +0200 | <maerwald> | arahael: I find purity gives me zero help when looking at big IO functions. Because evaluation is a tiny part of my concern. I'm concerned about what happens when I actually *execute* the function: does it bottom out? Throw exceptions? Delete all my files? |
2022-06-15 13:43:16 +0200 | <maerwald> | Pure functions can do all that. |
2022-06-15 13:43:24 +0200 | axel-bee | (~axel-bee@alexbenishek.com) |
2022-06-15 13:43:33 +0200 | <Haskelytic> | what does it even mean to program with *effects*? |
2022-06-15 13:43:45 +0200 | <Haskelytic> | I'm reading the paper on Applicatives by Mcbride |
2022-06-15 13:43:55 +0200 | <arahael> | maerwald: There is that, but, a big function can do a lot, so the scope of what it can do is huge. That in itself makes things tricky. |
2022-06-15 13:44:35 +0200 | <maerwald> | Yes and purity or referential transparency don't help me with any of that. That's program design, effect handling, totality and whatnot. |
2022-06-15 13:44:42 +0200 | zaquest | (~notzaques@5.130.79.72) |
2022-06-15 13:44:48 +0200 | <arahael> | maerwald: It's a difference between theoretical purity, and being able to reasona bout what a function does. |
2022-06-15 13:45:15 +0200 | <arahael> | maerwald: Not sure how to explain it, but like, lets say you have a simple mathematical function - you give it a value, and you get a value out. Very simple. |
2022-06-15 13:45:31 +0200 | <kuribas> | IMO specifing the input domain of a function is the greatest advantage of static types. Because they give the context over which the function is "expected" to behave well. |
2022-06-15 13:45:42 +0200 | <Haskelytic> | just making sure I understood purity: it's basically the same thing as equational reasoning/referential transparency ya? |
2022-06-15 13:45:46 +0200 | <arahael> | maerwald: Alternatively, you could have an entire complex machine that is technicall simple, and proven correct using Coq or whatever, but it's STILL difficult to reason about... |
2022-06-15 13:46:02 +0200 | <maerwald> | Yes, I can do that in C as well. You can write referentially transparent functions in any language. You can even annotate it with __pure__ in C and tell the compiler to aggressively optimize it |
2022-06-15 13:46:20 +0200 | <arahael> | maerwald: So perhaps you're right in that being able to say "this is pure" isn't a sufficient property. It has to be pure and have a well defined, and suitably constrainted, input domain. |
2022-06-15 13:46:27 +0200 | <maerwald> | the point of a language being pure is that the compiler can make this assumption for ALL of your code |
2022-06-15 13:46:31 +0200 | <maerwald> | that's what is interesting |
2022-06-15 13:46:37 +0200 | <arahael> | maerwald: I think we're on the same page now. |
2022-06-15 13:47:09 +0200 | <arahael> | maerwald: I would argue, however, that haskell _encourages_ purity, but you're right in that it doesn't require it, and doesn't require that they be total and perfect either. |
2022-06-15 13:47:52 +0200 | xff0x | (~xff0x@2405:6580:b080:900:22c7:1522:c1f2:cdfc) |
2022-06-15 13:48:25 +0200 | n3t1 | n3t |
2022-06-15 13:48:32 +0200 | <maerwald> | the reason you have to NOINLINE your top-level IORef you created with unsafePerformIO is because GHC assumes purity and will mess up your code |
2022-06-15 13:49:35 +0200 | AlexNoo | (~AlexNoo@94.233.241.100) |
2022-06-15 13:49:42 +0200 | <dminuoso> | Gah, why is there no Data.Set.union with failure on conflict. :( |
2022-06-15 13:49:49 +0200 | Alex_test | (~al_test@94.233.241.100) |
2022-06-15 13:50:02 +0200 | <dminuoso> | Something akin to alterF perhaps |
2022-06-15 13:50:04 +0200 | AlexZenon | (~alzenon@94.233.241.100) |
2022-06-15 13:51:10 +0200 | <maerwald> | what I'm wondering is if you can reasonably implement laziness by default in a non-pure language |
2022-06-15 13:51:56 +0200 | <maerwald> | I feel like that would be a disaster |
2022-06-15 13:52:06 +0200 | <dminuoso> | Mmm, I recall there was such a programming language |
2022-06-15 13:53:36 +0200 | <kuribas> | clojure has some lazyness |
2022-06-15 13:53:59 +0200 | <kuribas> | which makes debugging pretty painful. |
2022-06-15 13:54:10 +0200 | <maerwald> | yes, clojure is a disaster ;) |
2022-06-15 13:54:16 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
2022-06-15 13:54:31 +0200 | <kuribas> | it has some good ideas |
2022-06-15 13:54:39 +0200 | <kuribas> | like named arguments over positional arguments. |
2022-06-15 13:54:40 +0200 | <dminuoso> | maerwald: what about prolog? |
2022-06-15 13:55:33 +0200 | <maerwald> | I write all my GTK applications in prolog... https://github.com/keriharris/plgi |
2022-06-15 13:55:54 +0200 | <dibblego> | CAL did it, unsuccessfully |
2022-06-15 13:56:13 +0200 | <Franciman> | maerwald: is it nifty? |
2022-06-15 13:56:32 +0200 | <maerwald> | Franciman: that was a joke, lol |
2022-06-15 13:56:40 +0200 | <Franciman> | lol |
2022-06-15 13:57:08 +0200 | <maerwald> | but thanks for assuming I'm insane xD |
2022-06-15 13:57:15 +0200 | <dminuoso> | Writing GTK in prolog is what I have been dreaming of. |
2022-06-15 13:57:17 +0200 | leeb | (~leeb@KD106155004167.au-net.ne.jp) |
2022-06-15 13:57:53 +0200 | <maerwald> | dminuoso: are you still in therapy about that dream? ;) |
2022-06-15 13:58:10 +0200 | <dminuoso> | Heh |
2022-06-15 13:58:26 +0200 | <dminuoso> | maerwald: do you have that github link from the katafication project by the way? |
2022-06-15 13:59:17 +0200 | <maerwald> | dminuoso: https://gitlab.com/HaskellKatas/katas--proof-of-concept |
2022-06-15 13:59:58 +0200 | <maerwald> | it's an 800LOC shell script |
2022-06-15 14:00:44 +0200 | <maerwald> | you probably want to run that in a docker container |
2022-06-15 14:01:47 +0200 | <dminuoso> | I probably dont. |
2022-06-15 14:02:28 +0200 | <maerwald> | xD |
2022-06-15 14:02:33 +0200 | <dminuoso> | Sin saber español no puedo auditar esto |
2022-06-15 14:02:58 +0200 | <dminuoso> | Im not even sure what that shell script is or provides. |
2022-06-15 14:04:27 +0200 | <maerwald> | "sudo apt install" and other things |
2022-06-15 14:04:55 +0200 | <maerwald> | but I think it prompts the user beforehand |
2022-06-15 14:05:08 +0200 | <dminuoso> | Im sure it will prompt me in spanish before asking to delete my efi vars. |
2022-06-15 14:05:53 +0200 | <maerwald> | well, this was a prototype (I hope). It's probably possible to achieve all this directly on a website |
2022-06-15 14:06:04 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
2022-06-15 14:06:30 +0200 | <dminuoso> | Gaah!. Data.Set.alterF :: (Ord a, Functor f) => (Bool -> f Bool) ...... |
2022-06-15 14:06:34 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
2022-06-15 14:07:30 +0200 | <dminuoso> | So I cant have weakened equality, and then alterF to sort out a conflict between two things equal up to some isomorphism... |
2022-06-15 14:07:41 +0200 | <dminuoso> | That is sad. :( |
2022-06-15 14:08:13 +0200 | <dminuoso> | Guess `Map Thing ()` is it then |
2022-06-15 14:10:02 +0200 | leeb | (~leeb@KD106155004167.au-net.ne.jp) (Ping timeout: 260 seconds) |
2022-06-15 14:10:59 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 255 seconds) |
2022-06-15 14:11:25 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-06-15 14:23:20 +0200 | coot | (~coot@213.134.190.95) |
2022-06-15 14:26:22 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 14:31:37 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
2022-06-15 14:40:30 +0200 | briandaed | (~briandaed@109.95.143.14.r.toneticgroup.pl) |
2022-06-15 14:48:12 +0200 | Alleria | (~textual@user/alleria) |
2022-06-15 14:48:20 +0200 | isovector | (~isovector@46-253-188-8.dynamic.monzoon.net) |
2022-06-15 14:49:28 +0200 | isovector | (~isovector@46-253-188-8.dynamic.monzoon.net) (Client Quit) |
2022-06-15 14:54:41 +0200 | Haskelytic | (~Haskelyti@118.179.211.17) (Quit: Client closed) |
2022-06-15 14:55:53 +0200 | <geekosaur> | @activity |
2022-06-15 14:55:53 +0200 | <lambdabot> | 1*total 1*private |
2022-06-15 14:56:21 +0200 | Clint | squints. |
2022-06-15 14:57:17 +0200 | <geekosaur> | testing, since I got a 0 response in private |
2022-06-15 14:57:31 +0200 | geekosaur | is finally poking at updating his lambdabot documentation |
2022-06-15 14:57:52 +0200 | <geekosaur> | I'll submit it upstream when I'm done so we'll finally have some real docs |
2022-06-15 14:58:44 +0200 | Ram-Z_ | (Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Ping timeout: 248 seconds) |
2022-06-15 15:01:48 +0200 | shriekingnoise | (~shrieking@201.212.175.181) |
2022-06-15 15:02:50 +0200 | machinedgod | (~machinedg@66.244.246.252) (Ping timeout: 240 seconds) |
2022-06-15 15:04:52 +0200 | machinedgod | (~machinedg@66.244.246.252) |
2022-06-15 15:11:23 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 256 seconds) |
2022-06-15 15:14:25 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 15:16:47 +0200 | qhong` | (~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 244 seconds) |
2022-06-15 15:17:07 +0200 | qhong | (~qhong@rescomp-21-400677.stanford.edu) |
2022-06-15 15:20:15 +0200 | Aleksejs | (~Aleksejs@107.170.21.106) |
2022-06-15 15:20:23 +0200 | zer0bitz | (~zer0bitz@2001:2003:f748:2000:3d4c:9b16:2a18:880) |
2022-06-15 15:20:57 +0200 | Aleksejs | (~Aleksejs@107.170.21.106) (Remote host closed the connection) |
2022-06-15 15:25:25 +0200 | Aleksejs | (~Aleksejs@107.170.21.106) |
2022-06-15 15:28:56 +0200 | acidjnk | (~acidjnk@p200300d0c7068b9140c628021d98d447.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-06-15 15:36:06 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-06-15 15:36:40 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit) |
2022-06-15 15:39:14 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-06-15 15:41:17 +0200 | troydm1 | (~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
2022-06-15 15:41:35 +0200 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) |
2022-06-15 15:41:37 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Ping timeout: 258 seconds) |
2022-06-15 15:41:42 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-06-15 15:48:21 +0200 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
2022-06-15 15:49:35 +0200 | BusConscious | (~martin@ip5f5acff9.dynamic.kabel-deutschland.de) |
2022-06-15 15:50:33 +0200 | byorgey_ | byorgey |
2022-06-15 15:53:05 +0200 | chimp_ | (~Psybur@c-76-123-45-25.hsd1.va.comcast.net) (Read error: No route to host) |
2022-06-15 15:54:51 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-06-15 16:01:12 +0200 | z0k | (~z0k@206.84.143.2) |
2022-06-15 16:03:02 +0200 | tabemann | (~tabemann@2600:1700:7990:24e0:313b:ace9:50c8:d6b2) (Ping timeout: 255 seconds) |
2022-06-15 16:07:50 +0200 | frost | (~frost@user/frost) (Ping timeout: 252 seconds) |
2022-06-15 16:08:22 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
2022-06-15 16:09:20 +0200 | CiaoSen | (~Jura@p200300c9571294002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
2022-06-15 16:09:20 +0200 | Vajb | (~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06) (Read error: Connection reset by peer) |
2022-06-15 16:09:24 +0200 | z0k | (~z0k@206.84.143.2) (Read error: Connection reset by peer) |
2022-06-15 16:10:19 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-06-15 16:12:41 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 252 seconds) |
2022-06-15 16:15:44 +0200 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) |
2022-06-15 16:22:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 16:23:02 +0200 | ashln | (~ashln@98.38.236.123) |
2022-06-15 16:23:19 +0200 | nschoe | (~quassel@178.251.84.79) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2022-06-15 16:26:24 +0200 | Teacup | (~teacup@user/teacup) (Read error: Connection reset by peer) |
2022-06-15 16:36:38 +0200 | Kaipii | (~Kaiepi@156.34.47.253) |
2022-06-15 16:39:47 +0200 | Kaipei | (~Kaiepi@156.34.47.253) (Ping timeout: 256 seconds) |
2022-06-15 16:41:11 +0200 | Kaipii | (~Kaiepi@156.34.47.253) (Remote host closed the connection) |
2022-06-15 16:41:47 +0200 | Kaipii | (~Kaiepi@156.34.47.253) |
2022-06-15 16:42:11 +0200 | slack1256 | (~slack1256@186.11.84.227) |
2022-06-15 16:43:32 +0200 | neoatnebula | (~neoatnebu@2409:4071:4d97:a972:18dc:ffd7:cedf:6ac4) |
2022-06-15 16:49:04 +0200 | vicfred | (~vicfred@user/vicfred) |
2022-06-15 16:51:09 +0200 | Chai-T-Rex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2022-06-15 16:51:30 +0200 | Chai-T-Rex | (~ChaiTRex@user/chaitrex) |
2022-06-15 16:53:20 +0200 | <slack1256> | What mental model explains when to use -qn1 on the RTS? When I heard about it, it always seemed fine to parallelize the scavenging proccess the GC does. |
2022-06-15 16:53:48 +0200 | <slack1256> | See for example this bug report: https://gitlab.haskell.org/ghc/ghc/-/issues/14981 . |
2022-06-15 16:54:30 +0200 | Sgeo | (~Sgeo@user/sgeo) |
2022-06-15 16:54:50 +0200 | mima | (~mmh@dhcp-138-246-3-188.dynamic.eduroam.mwn.de) (Ping timeout: 240 seconds) |
2022-06-15 16:54:51 +0200 | Chai-T-Rex | (~ChaiTRex@user/chaitrex) (Client Quit) |
2022-06-15 16:55:29 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-06-15 17:04:05 +0200 | berberman | (~berberman@user/berberman) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-06-15 17:04:24 +0200 | berberman | (~berberman@user/berberman) |
2022-06-15 17:05:35 +0200 | machinedgod | (~machinedg@66.244.246.252) (Ping timeout: 255 seconds) |
2022-06-15 17:06:32 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 17:07:25 +0200 | machinedgod | (~machinedg@66.244.246.252) |
2022-06-15 17:09:25 +0200 | AndrewYu | Andrew |
2022-06-15 17:17:00 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-06-15 17:19:30 +0200 | <AndreasK> | slack1256: Imagine if you have just one object which is a terribly long linked list. Then to scavange one thread just has to walk the list. In that case more threads would only add more sync overhead. |
2022-06-15 17:20:41 +0200 | <AndreasK> | slack1256: So I would say if your data is very "deep" but "narrow" then a low gc thread count is worth trying. But past a certain point the sync overhead in general grows quite large. So it's often reasonable to limit the gc to a handful of threads. |
2022-06-15 17:22:04 +0200 | Teacup | (~teacup@user/teacup) |
2022-06-15 17:24:14 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 17:26:46 +0200 | bliminse | (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) (Quit: leaving) |
2022-06-15 17:28:42 +0200 | bliminse | (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) |
2022-06-15 17:29:36 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2022-06-15 17:30:23 +0200 | <slack1256> | AndreasK: Can you expand on the sync overhead? I thought that all HEC stop whenever there is collection (minor or major). The GC jobs take over the HECs and do their job. Where is the missing synchronization? |
2022-06-15 17:31:17 +0200 | <AndreasK> | slack1256: Afaik the GC threads try to steal work from each other if they run out of things to scavange, which can cause contention. |
2022-06-15 17:33:50 +0200 | <slack1256> | AndreasK: Yeah, they do work stealing. Do they need to take a lock primitive when ever they do so? or is the contention related to cache behaviour? |
2022-06-15 17:34:21 +0200 | tubogram4 | (~tubogram@user/tubogram) (Quit: See ya later!) |
2022-06-15 17:34:40 +0200 | <mrianbloom> | Is it possible to express that for a particular GADT, every possible constructor has an instance of a particular typeclass? |
2022-06-15 17:35:14 +0200 | Teacup | (~teacup@user/teacup) (Remote host closed the connection) |
2022-06-15 17:37:44 +0200 | <AndreasK> | slack1256: I only know about the effect but sadly I can't remember how it arises in this case. I think the work stealing uses a non-locking queue? |
2022-06-15 17:37:54 +0200 | <AndreasK> | slack1256: There is a note here if you want to get deeper into it: https://gitlab.haskell.org/ghc/ghc/-/commit/f395c2cb2e6bb0b9f9f3d6deb923c72fe7433d37#6477e10756faf… |
2022-06-15 17:38:04 +0200 | <c_wraith> | mrianbloom: I'm not 100% sure what you mean, but I'm guessing you're asking if it's possible to leave out a constraint because every type possible has an instance? |
2022-06-15 17:38:06 +0200 | tubogram44 | (~tubogram@user/tubogram) |
2022-06-15 17:38:23 +0200 | acidjnk | (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) |
2022-06-15 17:39:21 +0200 | <c_wraith> | mrianbloom: if that's the question - no. constraints must still be specified. |
2022-06-15 17:39:37 +0200 | <slack1256> | AndreasK: That is an awesome reference! |
2022-06-15 17:39:54 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) |
2022-06-15 17:40:20 +0200 | <c_wraith> | mrianbloom: I could explain further, but it'd be nice to know I'm actually answering the right question first. |
2022-06-15 17:40:26 +0200 | leeb | (~leeb@KD106155004167.au-net.ne.jp) |
2022-06-15 17:40:26 +0200 | <mrianbloom> | Yes, well I'm trying to pattern match on an instance of a GADT that is wrapped in an existential. |
2022-06-15 17:40:51 +0200 | <mrianbloom> | But I want to do so in a polymorphic way. |
2022-06-15 17:41:19 +0200 | <mrianbloom> | Let me explain that another way. |
2022-06-15 17:41:49 +0200 | <AndreasK> | slack1256: Not often people are happy that the answer is "read the source code" ;-) Glad you see it that way |
2022-06-15 17:42:57 +0200 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2022-06-15 17:43:15 +0200 | <mrianbloom> | I have an expression type that is a GADT that expresses the inputs and outputs of various operations. When I evaluate those expressions, I use a second GADT that stores all of the possible outcomes of different parts of the expression tree. |
2022-06-15 17:44:08 +0200 | <mrianbloom> | I'm trying to add simple non recursive lambdas to my expression tree, but to do that I need to store my second result-GADT in a container and hide the type. |
2022-06-15 17:45:09 +0200 | <mrianbloom> | The problem I'm having is that when I go from a lambda to a variable, I have to assert the type of the unwrapped GADT when it is taken out of the container. |
2022-06-15 17:46:17 +0200 | <mrianbloom> | I don't know how to express that essentially if I'm able to construct a variable expression of a particular type, then an unwrap instance must exist. |
2022-06-15 17:46:19 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) (Ping timeout: 246 seconds) |
2022-06-15 17:46:54 +0200 | <c_wraith> | I'm not sure why you have to throw away the typing information as an intermediate step. If you could redesign to not do that, it would simplify a lot |
2022-06-15 17:47:34 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) |
2022-06-15 17:47:46 +0200 | <mrianbloom> | I think that in order to put my result GADT in something like a Data.Map, I need to put it inside of a wrapper that hides the type. |
2022-06-15 17:48:26 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
2022-06-15 17:48:36 +0200 | <c_wraith> | ah, you mean for storing the list of bindings? |
2022-06-15 17:48:49 +0200 | <c_wraith> | Well, it's true that Data.Map doesn't do very well at that. |
2022-06-15 17:48:55 +0200 | <c_wraith> | But it's not your only option |
2022-06-15 17:49:25 +0200 | <mrianbloom> | Yes, So for example when I apply a lambda, I store the value being applied to a variable in a Data.Map, then when I arrive at an instance of the variable I need to look it up. |
2022-06-15 17:49:47 +0200 | <mrianbloom> | What would be better? |
2022-06-15 17:50:18 +0200 | <geekosaur> | @hackage dependent-map ? |
2022-06-15 17:50:18 +0200 | <lambdabot> | https://hackage.haskell.org/package/dependent-map ? |
2022-06-15 17:50:32 +0200 | <mrianbloom> | I'll take a look, thank you. |
2022-06-15 17:51:34 +0200 | Teacup | (~teacup@user/teacup) |
2022-06-15 17:52:10 +0200 | haskl[error] | (~haskl@user/haskl) (Ping timeout: 240 seconds) |
2022-06-15 17:52:13 +0200 | haskl | (~haskl@user/haskl) |
2022-06-15 17:52:41 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-06-15 17:53:47 +0200 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-06-15 17:53:59 +0200 | Cupcakus | (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) |
2022-06-15 17:54:33 +0200 | Teacup | (~teacup@user/teacup) (Remote host closed the connection) |
2022-06-15 17:55:44 +0200 | <slack1256> | AndreasK: Well, you gave an specific pointer into the code, that is different :-) . |
2022-06-15 17:55:55 +0200 | <slack1256> | Plus Simon code is a pleasure to read. |
2022-06-15 17:56:10 +0200 | MajorBiscuit | (~MajorBisc@wlan-145-94-164-215.wlan.tudelft.nl) (Ping timeout: 240 seconds) |
2022-06-15 18:00:10 +0200 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-06-15 18:01:59 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 18:03:28 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Remote host closed the connection) |
2022-06-15 18:03:43 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 18:06:40 +0200 | Teacup | (~teacup@user/teacup) |
2022-06-15 18:09:50 +0200 | jlamothe | (~jlamothe@198.251.60.209) (Quit: Lost terminal) |
2022-06-15 18:14:30 +0200 | Kaipii | (~Kaiepi@156.34.47.253) (Read error: Connection reset by peer) |
2022-06-15 18:14:55 +0200 | Kaipii | (~Kaiepi@156.34.47.253) |
2022-06-15 18:16:15 +0200 | segfaultfizzbuzz | (~segfaultf@135-180-3-34.static.sonic.net) |
2022-06-15 18:16:42 +0200 | causal | (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e) |
2022-06-15 18:17:16 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-06-15 18:17:23 +0200 | <segfaultfizzbuzz> | do implementations in different languages represent mostly an ordered collection of things? |
2022-06-15 18:18:56 +0200 | <segfaultfizzbuzz> | that is to say, different implementations of, for example a function, may carry stronger and stronger guarantees (e.g. totality) |
2022-06-15 18:19:34 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) (Ping timeout: 246 seconds) |
2022-06-15 18:20:17 +0200 | raym | (~raym@user/raym) (Ping timeout: 260 seconds) |
2022-06-15 18:22:53 +0200 | <shapr> | dsal: right now the only metric in my library is "run property tests until coverage stops increasing" and leancheck takes less than 100 tests to get best-yet coverage, where quickcheck takes about a thousand |
2022-06-15 18:25:57 +0200 | raym | (~raym@user/raym) |
2022-06-15 18:26:34 +0200 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-06-15 18:27:07 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
2022-06-15 18:27:55 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 18:28:50 +0200 | titibandit | (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) (Remote host closed the connection) |
2022-06-15 18:28:56 +0200 | econo | (uid147250@user/econo) |
2022-06-15 18:31:04 +0200 | <geekosaur> | segfaultfizzbuzz, I think we are missing context for your question |
2022-06-15 18:31:25 +0200 | raym | (~raym@user/raym) (Ping timeout: 256 seconds) |
2022-06-15 18:32:20 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2022-06-15 18:32:23 +0200 | raym | (~raym@user/raym) |
2022-06-15 18:32:32 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
2022-06-15 18:32:32 +0200 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 250 seconds) |
2022-06-15 18:32:54 +0200 | slac43983 | (~slack1256@191.126.227.66) |
2022-06-15 18:34:05 +0200 | <dsal> | shapr: Oh neat. I've been hearing good things about leancheck lately, so I might have to check it out. |
2022-06-15 18:34:13 +0200 | <dsal> | (you've mentioned it three times, otherwise I don't think I'd heard of it) |
2022-06-15 18:35:04 +0200 | slack1256 | (~slack1256@186.11.84.227) (Ping timeout: 248 seconds) |
2022-06-15 18:36:35 +0200 | slac43983 | slack1256 |
2022-06-15 18:38:16 +0200 | acidjnk | (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-06-15 18:39:03 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) |
2022-06-15 18:39:07 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2022-06-15 18:39:20 +0200 | <geekosaur> | @ask int-e so I finished updating my bot commands documentation. do you want me to submit it as a patch? and if so, would you prefer the admin commands be separated? |
2022-06-15 18:39:20 +0200 | <lambdabot> | Consider it noted. |
2022-06-15 18:41:10 +0200 | Hanicef | (~gustaf@81-229-9-108-no92.tbcn.telia.com) |
2022-06-15 18:41:15 +0200 | Hanicef | (~gustaf@81-229-9-108-no92.tbcn.telia.com) () |
2022-06-15 18:43:27 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection) |
2022-06-15 18:43:30 +0200 | _xor | (~xor@72.49.198.103) |
2022-06-15 18:44:26 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) (Remote host closed the connection) |
2022-06-15 18:44:27 +0200 | raym | (~raym@user/raym) (Ping timeout: 256 seconds) |
2022-06-15 18:44:47 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) |
2022-06-15 18:45:05 +0200 | raym | (~raym@user/raym) |
2022-06-15 18:48:56 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection) |
2022-06-15 18:50:00 +0200 | coot | (~coot@213.134.190.95) |
2022-06-15 18:52:16 +0200 | __monty__ | (~toonn@user/toonn) |
2022-06-15 18:52:20 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 248 seconds) |
2022-06-15 18:56:52 +0200 | <shapr> | Is there a good way to do multi-line strings in Haskell? |
2022-06-15 18:57:13 +0200 | <geekosaur> | define "good" |
2022-06-15 18:57:17 +0200 | <shapr> | ha, ok |
2022-06-15 18:57:23 +0200 | <shapr> | what's the best way to do multi-line strings in Haskell? |
2022-06-15 18:57:33 +0200 | <geekosaur> | string gaps are built in. there's some multiline string quasiquoters on hackage |
2022-06-15 18:57:58 +0200 | <segfaultfizzbuzz> | context: i'm trying to get a vague idea of what it means to implement something in a language |
2022-06-15 18:58:00 +0200 | <shapr> | is a string gap the \foo\ ? |
2022-06-15 18:58:12 +0200 | <geekosaur> | yeh |
2022-06-15 18:58:20 +0200 | <segfaultfizzbuzz> | and the best thing i can think of is that languages vary in terms of the strength of guarantees they provide to the implementation |
2022-06-15 18:58:33 +0200 | <Franciman> | if you don't care about newlines, you can also do the evil |
2022-06-15 18:58:37 +0200 | <Franciman> | "aaaa" ++ |
2022-06-15 18:58:39 +0200 | <Franciman> | "bbbb" ++ |
2022-06-15 18:58:42 +0200 | <Franciman> | "ccc" |
2022-06-15 18:58:45 +0200 | <segfaultfizzbuzz> | for example, perhaps a haskell implementation means memory safety whereas a C implementation does not |
2022-06-15 18:59:04 +0200 | <segfaultfizzbuzz> | and that there is a list of guarantees which we can apply to the implementation |
2022-06-15 18:59:35 +0200 | <segfaultfizzbuzz> | totality, linear resource management, thread safety, lock-free-ness, memory safety,... i don't know what this full list would look like |
2022-06-15 18:59:40 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
2022-06-15 19:01:06 +0200 | <segfaultfizzbuzz> | and so i am thinking that i can understand the space of programming languages as providing more and more of these guarantees on the code |
2022-06-15 19:01:22 +0200 | ulvarrefr | (~user@185.24.53.152) (Remote host closed the connection) |
2022-06-15 19:02:08 +0200 | <segfaultfizzbuzz> | with the upshot being that there really are objectively "better" and "worse" implementations which have stronger and weaker guarantees provided by the implementation |
2022-06-15 19:02:26 +0200 | <geekosaur> | typically you're trading something off |
2022-06-15 19:02:35 +0200 | <geekosaur> | rather than objectively better/worse |
2022-06-15 19:03:14 +0200 | <segfaultfizzbuzz> | the exception here perhaps being performance |
2022-06-15 19:03:51 +0200 | <geekosaur> | C was intended for writing operating systems. you need to be able to write to arbitrary addresses for e.g. memory mapped device I/O |
2022-06-15 19:03:54 +0200 | <segfaultfizzbuzz> | but perhaps performance comes from additional assumptions which could be separated from the implmentation |
2022-06-15 19:04:56 +0200 | leeb | (~leeb@KD106155004167.au-net.ne.jp) (Ping timeout: 248 seconds) |
2022-06-15 19:04:59 +0200 | <geekosaur> | the language itself rarely has much to do with performance |
2022-06-15 19:05:15 +0200 | <segfaultfizzbuzz> | well i was using that as an example but ok |
2022-06-15 19:08:41 +0200 | <geekosaur> | what happens when we take all of your examples away and you're still barking up the wrong alley? |
2022-06-15 19:09:09 +0200 | <segfaultfizzbuzz> | ok well i still don't understand what it means to implement something |
2022-06-15 19:10:22 +0200 | <segfaultfizzbuzz> | and i was putting forward the idea that the difference between one implementation (in a particular language) and another is defined by the guarantees that it imposes on the code... otherwise i don't know what an implementation is |
2022-06-15 19:11:46 +0200 | <geekosaur> | it's a choice |
2022-06-15 19:12:49 +0200 | <geekosaur> | that choice may not be made for reasons of strict "better" or "worse", but may be more relative "better for xxx" where "xxx" may not be relevant to all subsequent users (as with C; it became popular not because it was good, but because it was *cheap*) |
2022-06-15 19:13:14 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 19:13:40 +0200 | <geekosaur> | application writing isn't playing to C's strengths |
2022-06-15 19:14:01 +0200 | <geekosaur> | kernel writing is |
2022-06-15 19:14:36 +0200 | slac96933 | (~slack1256@191.125.99.67) |
2022-06-15 19:14:52 +0200 | segfaultfizzbuzz | (~segfaultf@135-180-3-34.static.sonic.net) (Ping timeout: 246 seconds) |
2022-06-15 19:14:59 +0200 | <geekosaur> | welp |
2022-06-15 19:15:07 +0200 | alp | (~alp@user/alp) (Ping timeout: 260 seconds) |
2022-06-15 19:15:12 +0200 | <geekosaur> | wonder how much of that they saw, and how much made an impact |
2022-06-15 19:15:59 +0200 | <geekosaur> | think they may have a bad case of rational assumption |
2022-06-15 19:16:52 +0200 | slack1256 | (~slack1256@191.126.227.66) (Ping timeout: 260 seconds) |
2022-06-15 19:20:02 +0200 | zeenk | (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!) |
2022-06-15 19:21:24 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2022-06-15 19:22:07 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) (Ping timeout: 260 seconds) |
2022-06-15 19:22:09 +0200 | <mrianbloom> | Working on the dependent mapping. Is there a specific convention that deriveArgDict expects? |
2022-06-15 19:22:16 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 19:22:23 +0200 | <mrianbloom> | Got an odd TH error. |
2022-06-15 19:23:00 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) |
2022-06-15 19:24:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 19:24:16 +0200 | <tomsmeding> | mrianbloom: what error are you getting |
2022-06-15 19:24:37 +0200 | cosimone | (~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection) |
2022-06-15 19:24:40 +0200 | <tomsmeding> | (also what do you need ArgDict for) |
2022-06-15 19:24:56 +0200 | <mrianbloom> | "The exact Name ‘a_Xpyh’ is not in scope" |
2022-06-15 19:25:13 +0200 | <tomsmeding> | oh that's uninformative |
2022-06-15 19:25:24 +0200 | <mrianbloom> | I need to create a key type for a dependent map basically. |
2022-06-15 19:25:48 +0200 | <tomsmeding> | that just needs GEq and GCompare right |
2022-06-15 19:26:20 +0200 | <mrianbloom> | Yes |
2022-06-15 19:27:14 +0200 | <tomsmeding> | I've worked a bit with dependent-map in the past and I've never seen ArgDict |
2022-06-15 19:27:20 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 248 seconds) |
2022-06-15 19:27:26 +0200 | <mrianbloom> | I see. |
2022-06-15 19:27:35 +0200 | <mrianbloom> | Ok maybe my approach is wrong. |
2022-06-15 19:28:13 +0200 | <mrianbloom> | I basically just need a mapping from an Int to a specific GADT. |
2022-06-15 19:28:54 +0200 | <tomsmeding> | `DMap f g` is morally `[exists a. (f a, g a)]`, but with logarithmic-time lookup instead of linear-time lookup |
2022-06-15 19:29:22 +0200 | <tomsmeding> | the idea is that the key type and the value type both have a type parameter, and these match |
2022-06-15 19:29:43 +0200 | <tomsmeding> | Int doesn't have a type parameter, so in order to key a DMap with an Int, you have to wrap it in a newtype with a phantom type parameter or something |
2022-06-15 19:29:51 +0200 | gmg | (~user@user/gehmehgeh) |
2022-06-15 19:30:04 +0200 | <tomsmeding> | in fact I've written code that has almost precisely that: https://github.com/tomsmeding/accelerate/blob/no-explode/src/Data/Array/Accelerate/Trafo/AD/Common… |
2022-06-15 19:30:06 +0200 | <mrianbloom> | Ok, but if my g type is multilayered than I need to construct a multi layered f type. |
2022-06-15 19:30:18 +0200 | <tomsmeding> | `s t` is a singleton for the type `t` |
2022-06-15 19:30:33 +0200 | <tomsmeding> | this DLabel is used as a key in a DMap lots of times |
2022-06-15 19:30:41 +0200 | <mrianbloom> | I see, ok let me study this code. |
2022-06-15 19:30:42 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-173.elisa-laajakaista.fi) |
2022-06-15 19:30:48 +0200 | <tomsmeding> | there is a lot of code though, sorry :p |
2022-06-15 19:31:20 +0200 | <tomsmeding> | oh and lab ~ Int |
2022-06-15 19:31:31 +0200 | <tomsmeding> | so it's just a pair of an Int and a singleton for `t` |
2022-06-15 19:31:40 +0200 | <tomsmeding> | and the corresponding value is some `g t` |
2022-06-15 19:31:46 +0200 | <mrianbloom> | I see. |
2022-06-15 19:32:08 +0200 | <tomsmeding> | the GEq/GCompare instances are here https://github.com/tomsmeding/accelerate/blob/no-explode/src/Data/Array/Accelerate/Trafo/AD/Common… |
2022-06-15 19:34:53 +0200 | <tomsmeding> | mrianbloom: what was the thing about a multilayered g? |
2022-06-15 19:35:19 +0200 | <tomsmeding> | naively it sounds like that should take a newtype wrapper that puts the type parameter in the right place, but not sure if I'm understanding you correctly |
2022-06-15 19:36:33 +0200 | <tomsmeding> | like, if you want `A t |-> B (C (D t))`, then make `newtype X t = X (B (C (D t)))` and write `A t |-> X t` |
2022-06-15 19:37:23 +0200 | <mrianbloom> | Ah |
2022-06-15 19:37:48 +0200 | <mrianbloom> | What is the |-> operator? |
2022-06-15 19:38:03 +0200 | <tomsmeding> | DMap |
2022-06-15 19:38:22 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Remote host closed the connection) |
2022-06-15 19:38:30 +0200 | <tomsmeding> | informal notation to indicate "map with key [left-hand side] and value [right-hand side]" |
2022-06-15 19:38:30 +0200 | zebrag | (~chris@user/zebrag) |
2022-06-15 19:38:51 +0200 | <tomsmeding> | alternatively, `DMap A (\t -> B (C (D t)))` if Haskell had type-level lambda's |
2022-06-15 19:39:12 +0200 | <mrianbloom> | Got it, my nested GADTs have more than one type variable, is that possible? |
2022-06-15 19:39:30 +0200 | <tomsmeding> | is there more than one type variable that needs to be shared with the key? |
2022-06-15 19:39:52 +0200 | <tomsmeding> | DMap just matches the last type parameter of the key with the last type parameter of the value; it doesn't care what other parameters come before those |
2022-06-15 19:40:03 +0200 | <tomsmeding> | A in that example can be `Y a b c d e` if you want |
2022-06-15 19:40:09 +0200 | <tomsmeding> | (-> Y a b c d e t) |
2022-06-15 19:40:28 +0200 | <tomsmeding> | `Either e` is a functor |
2022-06-15 19:41:11 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 19:42:54 +0200 | <mrianbloom> | Just to give some context, so basically these are wrappers around arrays that I'm storing. The outer wrapper determines if the array is a single item or batch (so has an extra dimension), next layer is determines the type of data the array represents, and then depending on the second layer there could be a third layer that determines the layout of an image (so RGBA vs Mono) |
2022-06-15 19:43:27 +0200 | <tomsmeding> | what's the key type, and what's the value type? |
2022-06-15 19:43:32 +0200 | <tomsmeding> | (ideally) |
2022-06-15 19:45:12 +0200 | <mrianbloom> | So in my attempt to store various result arrays in the variable-environment of an expression evaluation, I just wanted to index the variables with integers. |
2022-06-15 19:45:43 +0200 | <tomsmeding> | except the array objects have type parameters that depend on the integer/ |
2022-06-15 19:45:47 +0200 | <tomsmeding> | *? |
2022-06-15 19:46:01 +0200 | <mrianbloom> | I believe those integer keys need a GADT wrapper that specifies the type. |
2022-06-15 19:46:21 +0200 | <mrianbloom> | In order to store these results in the DMap. |
2022-06-15 19:46:22 +0200 | <tomsmeding> | not necessarily GADT, depending on how you represent it, but yes |
2022-06-15 19:46:46 +0200 | <tomsmeding> | well, if you have a type parameter of the map value (the array object) that depends on the key |
2022-06-15 19:46:55 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2022-06-15 19:47:03 +0200 | <tomsmeding> | (if the type of the value doesn't depend on the key, then obviously the answer is to just use Map) |
2022-06-15 19:47:18 +0200 | <mrianbloom> | No the type depends on the key. |
2022-06-15 19:48:19 +0200 | <tomsmeding> | it _might_ be enough to say `newtype Key t = Key Int`, depending on how you work with those keys |
2022-06-15 19:48:51 +0200 | <tomsmeding> | the information about which type the value has needs to come from _somewhere_; with DMap, it comes from the type of the key |
2022-06-15 19:49:14 +0200 | <tomsmeding> | hence if you're able to put that type information in the key, DMap works; if you aren't, then DMap doesn't work |
2022-06-15 19:49:22 +0200 | <mrianbloom> | Basically when I'm traversing the expression tree and I encounter a lambda, I store that result in a map. When I encounter a variable instance I need to grab the result. |
2022-06-15 19:49:35 +0200 | <mrianbloom> | Let me drop some code into replit. |
2022-06-15 19:50:43 +0200 | segfaultfizzbuzz | (~segfaultf@135-180-3-34.static.sonic.net) |
2022-06-15 19:51:51 +0200 | <mrianbloom> | This doesn't run because it's pulled from all over my codebase, but it gives you the flavor. https://replit.com/@IanBloom/ActualBriskMicrokernel#Main.hs |
2022-06-15 19:52:30 +0200 | <mrianbloom> | I haven't been able to construct storeVar or loadVar |
2022-06-15 19:53:05 +0200 | <tomsmeding> | how should I intuitively read the 'r' type variable? |
2022-06-15 19:53:39 +0200 | <mrianbloom> | that would be the state of the expression, basically has it been allocated or not. |
2022-06-15 19:53:54 +0200 | <tomsmeding> | so irrelevant for the issue at hand? |
2022-06-15 19:54:00 +0200 | <mrianbloom> | pretty much |
2022-06-15 19:54:05 +0200 | <tomsmeding> | ok |
2022-06-15 19:54:15 +0200 | <mrianbloom> | But in general this is pretty complicated. |
2022-06-15 19:54:28 +0200 | <tomsmeding> | first thing that catches my eye, might not be the problem but just saying in case: the type of Let looks highly fishy to me |
2022-06-15 19:54:33 +0200 | segfaultfizzbuzz | (~segfaultf@135-180-3-34.static.sonic.net) (Client Quit) |
2022-06-15 19:54:52 +0200 | <tomsmeding> | PhenoExpr has a type parameter that indicates the type of the expression, but the _environment_ of the expression is not reflected on the type level |
2022-06-15 19:55:22 +0200 | <tomsmeding> | hence given a Var node, you have no guarantee that 1. that variable is even in scope, and 2. it was declared with the type that it occurs with here |
2022-06-15 19:55:41 +0200 | <mrianbloom> | I see, the type of PhenoExpr just indicates the result type of the expression. |
2022-06-15 19:55:44 +0200 | <tomsmeding> | in particular (2.) feels relevant, but I might be wrong, haven't read revalExprOps yet |
2022-06-15 19:55:47 +0200 | <tomsmeding> | yeah |
2022-06-15 19:56:40 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
2022-06-15 19:57:00 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 19:57:22 +0200 | <mrianbloom> | So to get say the input type for and Op2 you need to know the type of the POp2 that it is constructed with. |
2022-06-15 19:57:40 +0200 | <tomsmeding> | where, line 44? |
2022-06-15 19:57:55 +0200 | <mrianbloom> | Yes. |
2022-06-15 19:58:25 +0200 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2022-06-15 19:58:46 +0200 | <mrianbloom> | By the way this actually works without Var and Let. |
2022-06-15 19:59:26 +0200 | <tomsmeding> | how far is (\phd -> do { env <- get; return (M.lookup pid env) }) from being correct for loadVar? |
2022-06-15 19:59:34 +0200 | <tomsmeding> | um, with a fromJust potentially |
2022-06-15 19:59:35 +0200 | <mrianbloom> | It's when I tried to add that feature that I entered the fifth circle. |
2022-06-15 19:59:58 +0200 | <tomsmeding> | oops s/phd/pid/ |
2022-06-15 20:00:01 +0200 | <mrianbloom> | That's exactly right |
2022-06-15 20:00:32 +0200 | bliminse | (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) (Quit: leaving) |
2022-06-15 20:00:44 +0200 | <tomsmeding> | mrianbloom: even if storeVar does what it should do, you should still restore the old environment after the recurse on line 50 |
2022-06-15 20:00:49 +0200 | JimL | (~quassel@89-162-2-132.fiber.signal.no) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2022-06-15 20:00:49 +0200 | <tomsmeding> | or switch from State to Reader |
2022-06-15 20:01:02 +0200 | <tomsmeding> | a variable should not be in scope anymore after the Let is done |
2022-06-15 20:01:11 +0200 | JimL | (~quassel@89-162-2-132.fiber.signal.no) |
2022-06-15 20:01:59 +0200 | <tomsmeding> | yeah and storeVar seems to be the analogous thing with M.insert |
2022-06-15 20:02:04 +0200 | <mrianbloom> | That's a good point. The PhenoIds are actually constructed in a Monad that prevents duplicates so I didn't bother with that. |
2022-06-15 20:02:17 +0200 | <tomsmeding> | heh, I guess that makes this work |
2022-06-15 20:02:25 +0200 | <tomsmeding> | still, no reason not to use Reader I think |
2022-06-15 20:02:47 +0200 | <mrianbloom> | Yeah, this is for work by the way, otherwise I'd link the whole codebase. |
2022-06-15 20:02:55 +0200 | bliminse | (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) |
2022-06-15 20:03:12 +0200 | <tomsmeding> | 1. simpler conceptually, 2. more robust against changes in how you generate IDs, 3. the DMap doesn't grow indefinitely so you might get a small speedup |
2022-06-15 20:03:15 +0200 | <tomsmeding> | sure |
2022-06-15 20:03:39 +0200 | <mrianbloom> | We are hiring (cough) haskell consultants and coders btw. |
2022-06-15 20:03:58 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
2022-06-15 20:04:01 +0200 | <tomsmeding> | did I answer your question already, by the way? I'm slightly lost on what the question was again, sorry :p |
2022-06-15 20:04:12 +0200 | <tomsmeding> | mrianbloom: I'm early in year 2 of a 5-year PhD |
2022-06-15 20:04:18 +0200 | <tomsmeding> | I'll be here for a bit :p |
2022-06-15 20:05:56 +0200 | <mrianbloom> | Well, let me know about that. It could be as low commitment as just a code review etc. |
2022-06-15 20:06:56 +0200 | <tomsmeding> | mrianbloom: what's the company? |
2022-06-15 20:08:41 +0200 | benin | (~benin@183.82.27.33) |
2022-06-15 20:11:09 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 20:18:04 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection) |
2022-06-15 20:18:42 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
2022-06-15 20:21:09 +0200 | cosimone | (~user@93-44-186-171.ip98.fastwebnet.it) |
2022-06-15 20:22:02 +0200 | alp | (~alp@user/alp) |
2022-06-15 20:22:10 +0200 | <shapr> | mrianbloom: I'm an unemployed Haskeller |
2022-06-15 20:22:30 +0200 | Cupcakus | (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 240 seconds) |
2022-06-15 20:23:01 +0200 | elkcl | (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Remote host closed the connection) |
2022-06-15 20:23:03 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Ping timeout: 256 seconds) |
2022-06-15 20:23:28 +0200 | <mrianbloom> | Slide right into my DMs. |
2022-06-15 20:23:31 +0200 | elkcl | (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
2022-06-15 20:23:38 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) |
2022-06-15 20:24:28 +0200 | gdd | (~gdd@129.199.146.230) (Ping timeout: 272 seconds) |
2022-06-15 20:27:18 +0200 | Guest18 | (~Guest18@188.27.129.27) |
2022-06-15 20:29:05 +0200 | <gentauro_> | mrianbloom: let me guess. Crypto, NTF, … the usual suspects? |
2022-06-15 20:29:21 +0200 | <Guest18> | Hi, I have library.h and library.a. I'd like to use them through FFI in a library, not executable. Is it possible to specify this somehow in Cabal? I was able to do this in a test executable. Thanks. |
2022-06-15 20:29:26 +0200 | gentauro_ | when I write NTF I mean NFT |
2022-06-15 20:29:37 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 20:30:51 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 20:33:04 +0200 | mima | (~mmh@aftr-62-216-207-119.dynamic.mnet-online.de) |
2022-06-15 20:33:12 +0200 | nefercheprure | TMA |
2022-06-15 20:33:18 +0200 | yrlnry | (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
2022-06-15 20:33:28 +0200 | <mrianbloom> | No blockchains. |
2022-06-15 20:33:39 +0200 | <mrianbloom> | Just say no. |
2022-06-15 20:33:59 +0200 | nfvnt^ | (~nfvnt@50.223.50.178) (Remote host closed the connection) |
2022-06-15 20:34:30 +0200 | <dsal> | git is the only blockchain for me |
2022-06-15 20:35:16 +0200 | Pickchea | (~private@user/pickchea) |
2022-06-15 20:35:22 +0200 | hydrangea | (~hydrangea@c-73-128-193-154.hsd1.md.comcast.net) |
2022-06-15 20:35:31 +0200 | <maerwald[m]> | dsal: I wonder if there's a git implementation via smart contracts |
2022-06-15 20:36:13 +0200 | slac96933 | (~slack1256@191.125.99.67) (Read error: Connection reset by peer) |
2022-06-15 20:36:34 +0200 | <dsal> | I'm dissatisfied with the environmental impact of my commits. |
2022-06-15 20:37:16 +0200 | slack1256 | (~slack1256@186.11.84.227) |
2022-06-15 20:37:40 +0200 | <tomsmeding> | dsal: then you just need to write correct code in one go |
2022-06-15 20:38:02 +0200 | <tomsmeding> | Guest18: what error or problem are you getting? |
2022-06-15 20:38:21 +0200 | <geekosaur[m]> | Guest18: I think Cabal expects static archives to be named `libsomething.a` (the `lib` part is required) |
2022-06-15 20:39:52 +0200 | littlebo1eep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 20:40:53 +0200 | neoatnebula | (~neoatnebu@2409:4071:4d97:a972:18dc:ffd7:cedf:6ac4) (Quit: Client closed) |
2022-06-15 20:42:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 20:43:23 +0200 | <Guest18> | I'm going by this tutorial https://sakshamsharma.com/2018/02/haskell-golang-ffi/ and at the end it says that this may not be possible |
2022-06-15 20:44:02 +0200 | hydrangea | (~hydrangea@c-73-128-193-154.hsd1.md.comcast.net) (Quit: Leaving) |
2022-06-15 20:44:09 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 20:44:23 +0200 | <Guest18> | I wrote some bindings for https://github.com/go-enry/go-enry, and I'd like to integrate them properly into my project, haven't tried it yet, it only works in a test executable. |
2022-06-15 20:44:24 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-06-15 20:45:04 +0200 | littlebo1eep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 20:45:09 +0200 | <Guest18> | But the project has a classic structure, everything defined in the library, only Main.hs in the executable stanza. |
2022-06-15 20:46:37 +0200 | mixfix41 | (~sdenynine@user/mixfix41) |
2022-06-15 20:46:39 +0200 | <geekosaur> | right, static archives have a lot of limitations. go shared if at all possible |
2022-06-15 20:48:11 +0200 | <geekosaur> | I think you could actually do it by manually copyingt the archive, editing the package registry, and doing `ghc-pkg recache`, but it'd be fragile and would of course break again the next time it got rebuilt |
2022-06-15 20:49:41 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 256 seconds) |
2022-06-15 20:49:48 +0200 | kimjetwav | (~user@2607:fea8:2340:da00:1c36:e65:50a7:b564) (Remote host closed the connection) |
2022-06-15 20:49:49 +0200 | <geekosaur> | actually you should be able to look at any library which has a "cbits", hm |
2022-06-15 20:51:34 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 20:52:38 +0200 | <geekosaur> | oh, you're providing the .a from outside. yeh, I think it needs to be in a library directory and not relative, because nothing else will be able to find it unless you copy and hack up the package db entry as I mentioned |
2022-06-15 20:54:04 +0200 | <Guest18> | Hmm, there seems to be a "make linux-shared" command in the Makefile. I'll try going in that direction. I've only tried "make static". |
2022-06-15 20:54:27 +0200 | <Guest18> | Seems like it generates libenry.h and libenry.so |
2022-06-15 20:54:40 +0200 | <Guest18> | Hm, I hope this works.. |
2022-06-15 20:56:17 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 20:56:29 +0200 | kenran | (~kenran@200116b82b7c6f000dc991b93662c611.dip.versatel-1u1.de) |
2022-06-15 20:56:54 +0200 | kenran | (~kenran@200116b82b7c6f000dc991b93662c611.dip.versatel-1u1.de) (Client Quit) |
2022-06-15 21:03:43 +0200 | fserucas | (~fserucas@119.65.114.89.rev.vodafone.pt) |
2022-06-15 21:04:10 +0200 | Cupcakus | (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) |
2022-06-15 21:05:08 +0200 | <tomsmeding> | Guest18: geekosaur: it seems that if you embed an absolute path to the location of the library in the .cabal file, it can work -- but that path should probably still hold the .a when the _executable_ is compiled |
2022-06-15 21:05:12 +0200 | <tomsmeding> | so kind of ugly |
2022-06-15 21:07:02 +0200 | <geekosaur[m]> | Yes but only when compiled |
2022-06-15 21:07:07 +0200 | <geekosaur[m]> | Better than nothing |
2022-06-15 21:08:41 +0200 | acidjnk | (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) |
2022-06-15 21:09:32 +0200 | <tomsmeding> | in case it's useful this is how that it looks https://github.com/tomsmeding/temp-static-lib-in-hs-lib |
2022-06-15 21:10:14 +0200 | Haskelytic | (~Haskelyti@118.179.211.17) |
2022-06-15 21:10:42 +0200 | <shapr> | I like talking to mrianbloom, fun person on a video call |
2022-06-15 21:11:17 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds) |
2022-06-15 21:15:30 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 258 seconds) |
2022-06-15 21:16:16 +0200 | <mrianbloom> | Thanks |
2022-06-15 21:16:54 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 21:17:47 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 240 seconds) |
2022-06-15 21:21:04 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds) |
2022-06-15 21:21:18 +0200 | fserucas | (~fserucas@119.65.114.89.rev.vodafone.pt) (Quit: Leaving) |
2022-06-15 21:21:22 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-06-15 21:21:28 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 248 seconds) |
2022-06-15 21:22:33 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 21:23:54 +0200 | Guest18 | (~Guest18@188.27.129.27) (Ping timeout: 252 seconds) |
2022-06-15 21:25:19 +0200 | <mrianbloom> | tomsmeding: So to answer you question, loadVar would be called when a Var is traversed and the Var constructor knows the type of the value that needs to be pulled from the environment. So it's just a matter of turning the var id, which is just a wrapped Int and turning it into the right kind of key to lookup the right kind of GADT in the map. |
2022-06-15 21:25:46 +0200 | kimjetwav | (~user@2607:fea8:2340:da00:592f:dda3:fea6:1b4c) |
2022-06-15 21:26:30 +0200 | <tomsmeding> | mrianbloom: oh *facepalm* now I remember what the issue with this is: PhenoId needs GEq and you can't implement GEq for PhenoId without unsafeCoerce |
2022-06-15 21:26:55 +0200 | <tomsmeding> | to do it in a type-safe way you need some witness (probably a GADT) of the type parameter in a PhenoId |
2022-06-15 21:27:10 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 240 seconds) |
2022-06-15 21:28:01 +0200 | <mrianbloom> | Right so there is a relationship between the type of the Var and the result type that the evaluation is producing, that relationship is encoded in a type family. |
2022-06-15 21:28:15 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 21:29:08 +0200 | <tomsmeding> | mrianbloom: you only need to be able to reconstruct the `t` in a `PhenoId t`; so basically, you need to be able to produce an equality between t and some concrete type given an `exists t. PhenoId t` |
2022-06-15 21:29:20 +0200 | juri_ | (~juri@178.63.35.222) (Ping timeout: 250 seconds) |
2022-06-15 21:29:52 +0200 | machinedgod | (~machinedg@66.244.246.252) (Ping timeout: 260 seconds) |
2022-06-15 21:29:54 +0200 | <tomsmeding> | the reason is that while you could just look up the key in the DMap and take whatever value comes out, for type safety you must check that the t parameter of the key you're passing into lookup matches the t parameter of the thing in the DMap |
2022-06-15 21:29:59 +0200 | <mrianbloom> | Yes so initially I tried wrapping the items in the map in a Some wrapper. |
2022-06-15 21:30:08 +0200 | <tomsmeding> | that part is what GEq/GCompare does over Eq/Ord |
2022-06-15 21:30:28 +0200 | <mrianbloom> | Right. |
2022-06-15 21:30:42 +0200 | <tomsmeding> | mrianbloom: right, that way you avoid having to produce that type equality, but in turn you lose knowledge about what type of value you get back |
2022-06-15 21:31:18 +0200 | <tomsmeding> | if you want the magical behaviour of "if it's the same Int, it's the same type as well", then that basically means implementing GEq using Eq.(==) and `unsafeCoerce Refl` |
2022-06-15 21:32:07 +0200 | <tomsmeding> | but that's highly type-unsafe, because you can break that by doing `\(PhenoId n) -> PhenoId (n + 1)` on some Var node in the tree |
2022-06-15 21:32:50 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 240 seconds) |
2022-06-15 21:34:00 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 21:34:18 +0200 | <mrianbloom> | Well this is the thing. It is not type safe, but since the I actually use a Monad to build my expressions, I can do a runtime check of the type when I take it out of the map. |
2022-06-15 21:35:13 +0200 | <tomsmeding> | mrianbloom: oh the value (the PhenotypeOf) does have some type witness embedded in it? |
2022-06-15 21:35:44 +0200 | <mrianbloom> | Yes it's three nested GADTs. |
2022-06-15 21:36:43 +0200 | <tomsmeding> | is that type information available at the point where you generate a PhenoId? |
2022-06-15 21:36:49 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 21:36:56 +0200 | <tomsmeding> | if so, you should embed a type witness in a PhenoId |
2022-06-15 21:37:07 +0200 | <tomsmeding> | (type witness being a GADT that determines the type on a pattern match) |
2022-06-15 21:37:26 +0200 | <mrianbloom> | No the Id is generated when the expression is built. |
2022-06-15 21:37:34 +0200 | <tomsmeding> | (e.g. data PhType a where TInt :: PhType Int ; TDouble :: PhType Double ; ...) |
2022-06-15 21:37:48 +0200 | <tomsmeding> | how do you know that the expression is type-correct? |
2022-06-15 21:37:57 +0200 | <tomsmeding> | or do you just not know that? |
2022-06-15 21:38:05 +0200 | <mrianbloom> | The expression is also a GADT. |
2022-06-15 21:38:27 +0200 | <tomsmeding> | but, like, if I stuff `PhenoId 42` in a Var node, that type checks everywhere |
2022-06-15 21:38:52 +0200 | _xor | (~xor@72.49.198.103) (Quit: brb) |
2022-06-15 21:39:58 +0200 | <tomsmeding> | if you have certainty that if the expression contains `PhenoId 42 :: PhenoId a` that the VarEnv will then contain something at id 42 with the same type `a`, then you'd be looking to reify that certainty into a GADT that you put into PhenoId |
2022-06-15 21:40:07 +0200 | <mrianbloom> | Ah... no. In order to construct a Var Int you would need a PhenoId Int. |
2022-06-15 21:40:30 +0200 | <tomsmeding> | if there is no way you can know this for _certain_, statically, then there is no way to construct the evidence, and you are doomed (:p) to untypedness, so you'd need to go the Some way |
2022-06-15 21:40:47 +0200 | <tomsmeding> | or use `unsafeCoerce Refl` and risk type-unsafety in case the IDs get mixed up |
2022-06-15 21:41:26 +0200 | <mrianbloom> | Well here's the thing. The type family ETy describes the relationship between the type of the expression and the type of the evaluation. |
2022-06-15 21:42:06 +0200 | <mrianbloom> | type family ETy (r :: *) (t :: *) = (x :: *) |
2022-06-15 21:42:51 +0200 | <mrianbloom> | So in this case my r parameter is some singleton type and t is the expression type. |
2022-06-15 21:43:01 +0200 | <mrianbloom> | x is the type that I'm producing. |
2022-06-15 21:43:27 +0200 | <tomsmeding> | and the corresponding variable reference would have type `PhenoId x`? Or `PhenoId t`? |
2022-06-15 21:43:45 +0200 | <mrianbloom> | The reference has PhenoId t |
2022-06-15 21:43:59 +0200 | <mrianbloom> | But given r and t I can devise x |
2022-06-15 21:44:21 +0200 | <mrianbloom> | And r is passed explicitely into revalExprOps |
2022-06-15 21:44:34 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 21:44:37 +0200 | <tomsmeding> | then in any case you'll need to do `newtype Value f r t = Value (PhenotypeOf r (ETy f t))`, and set `type VarEnv f r = DMap PhenoId (Value f r)` |
2022-06-15 21:45:02 +0200 | <tomsmeding> | because the type parameter of the PhenoId corresponds not with the last type parameter of PhenotypeOf (which is `ETy f t`), but with `t` |
2022-06-15 21:45:12 +0200 | <mrianbloom> | Aha |
2022-06-15 21:45:30 +0200 | <mrianbloom> | Ok let me see if I can make that compile. |
2022-06-15 21:46:34 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-06-15 21:46:44 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 21:50:30 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 21:57:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-06-15 21:59:14 +0200 | jinsun__ | (~jinsun@user/jinsun) |
2022-06-15 21:59:23 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 21:59:58 +0200 | slac14060 | (~slack1256@191.125.99.67) |
2022-06-15 22:02:11 +0200 | slack1256 | (~slack1256@186.11.84.227) (Ping timeout: 246 seconds) |
2022-06-15 22:02:39 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590::2df) |
2022-06-15 22:03:29 +0200 | jinsun | (~jinsun@user/jinsun) (Ping timeout: 255 seconds) |
2022-06-15 22:04:59 +0200 | lyle | (~lyle@104.246.145.85) (Quit: WeeChat 3.5) |
2022-06-15 22:06:01 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-06-15 22:07:24 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-06-15 22:07:54 +0200 | <mrianbloom> | Dear god, it almost does. |
2022-06-15 22:08:35 +0200 | <mrianbloom> | It just needs a GEq and GCompare instance for PhenoId |
2022-06-15 22:08:54 +0200 | <tomsmeding> | which you can't provide without runtime type evidence in the PhenoId :) |
2022-06-15 22:09:20 +0200 | <mrianbloom> | Is that really true? |
2022-06-15 22:09:42 +0200 | <tomsmeding> | geq :: GEq f => f a -> f b -> Maybe (a :~: b) |
2022-06-15 22:09:46 +0200 | <tomsmeding> | where f ~ PhenoId |
2022-06-15 22:10:07 +0200 | <tomsmeding> | and: data a :~: b where Refl :: a :~: a |
2022-06-15 22:10:33 +0200 | <tomsmeding> | if you want to return "they are equal", you must satisfy the type checker that those type parameters a and b are equal |
2022-06-15 22:11:01 +0200 | <tomsmeding> | you can do that by returning `Just (unsafeCoerce Refl)`, but then you risk explosions when someone messes up the IDs |
2022-06-15 22:11:28 +0200 | <mrianbloom> | Ok could I make a typeclass that creates the type evidence since I know it when I store the var and when I look it up. |
2022-06-15 22:12:22 +0200 | <tomsmeding> | putting it in a type class won't work because when you get a `PhenoId a` you can't require any constraints of that `a` -- the `a` is completely existenail |
2022-06-15 22:12:52 +0200 | <tomsmeding> | _however_, if you can write that type class, then you should be able to run the code in the type class at the time when you _construct_ the PhenoId, and put the resulting evidence right there in the Phenoid |
2022-06-15 22:12:53 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-06-15 22:13:00 +0200 | <mrianbloom> | 'a' is tied to the Var constructor |
2022-06-15 22:13:09 +0200 | <mrianbloom> | and tied to the Let constructor |
2022-06-15 22:13:26 +0200 | <tomsmeding> | neither of which are necessarily tied to the variables in the type signature of the evaluator |
2022-06-15 22:13:34 +0200 | <tomsmeding> | so you have no place to put the constraint |
2022-06-15 22:13:50 +0200 | <tomsmeding> | unless you want to put the constraint on the Var constructor itself, which is totally possible and will solve the problem |
2022-06-15 22:14:01 +0200 | <tomsmeding> | except, at that point, why not just put it in the PhenoId directly :p |
2022-06-15 22:14:05 +0200 | stackdroid18 | (~stackdroi@user/stackdroid) |
2022-06-15 22:14:49 +0200 | <mrianbloom> | Well the problem is that you don't know PhenotypeOf r (ETy f a) until you run the evaluation. |
2022-06-15 22:15:05 +0200 | <mrianbloom> | But you do know it when you store the var. |
2022-06-15 22:15:21 +0200 | <tomsmeding> | if you know it when you store the var, then put that evidence in the var! |
2022-06-15 22:16:08 +0200 | <mrianbloom> | So one idea is to create another newtype Key f r t |
2022-06-15 22:16:16 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection) |
2022-06-15 22:16:19 +0200 | <mrianbloom> | Which holds the phenoId |
2022-06-15 22:16:23 +0200 | <tomsmeding> | mrianbloom: this compiles and runs https://paste.tomsmeding.com/7bzcLxHJ |
2022-06-15 22:16:33 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-06-15 22:16:40 +0200 | <tomsmeding> | mrianbloom: plus the type evidence |
2022-06-15 22:17:13 +0200 | <mrianbloom> | Wow, ok. |
2022-06-15 22:17:25 +0200 | <tomsmeding> | (oh the Eq/Ord instances on PhType and PhenoId are unused) |
2022-06-15 22:18:40 +0200 | <tomsmeding> | (build-depends: base, dependent-map, some) |
2022-06-15 22:18:51 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590::2df) (Quit: Client closed) |
2022-06-15 22:21:18 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-06-15 22:22:02 +0200 | <tomsmeding> | this can be made even more well-typed by encoding the environment (i.e. which variables are in scope) in the _type_ of a PhenoExpr; then a PhenoExpr can have no out-of-scope variables by definition, and you can statically check that a given VarEnv will contain all free variables in an expression |
2022-06-15 22:22:58 +0200 | <tomsmeding> | but that comes at the cost of some flexibility, and also at the cost of some performance (unless you're willing to pull some nasty, but containable in a separate module, tricks in the definition of VarEnv) |
2022-06-15 22:23:18 +0200 | <mrianbloom> | I don't think performance is important here. |
2022-06-15 22:23:59 +0200 | <mrianbloom> | These are usually relatively small expressions that describe operations on very large arrays. |
2022-06-15 22:24:15 +0200 | <tomsmeding> | sounds suspiciously like Accelerate :p |
2022-06-15 22:24:29 +0200 | <tomsmeding> | and in fact Accelerate has this fully well-typed representation that I describe internally |
2022-06-15 22:24:59 +0200 | <mrianbloom> | Yeah, I've been holding back the fact that these are Futhark arrays. |
2022-06-15 22:25:11 +0200 | <mrianbloom> | Don't be mad. |
2022-06-15 22:25:16 +0200 | <tomsmeding> | I'm not :) |
2022-06-15 22:25:40 +0200 | <tomsmeding> | I'll be the first to admit that futhark not being an embedded language makes it easier to work with in some respects |
2022-06-15 22:25:46 +0200 | <tomsmeding> | and also frankly its backends are more mature |
2022-06-15 22:26:02 +0200 | <tomsmeding> | (though work is underway to improve the accelerate situation here) |
2022-06-15 22:26:08 +0200 | <mrianbloom> | I rewrote the futhark haskell wrapper by the way. Though so far as I can tell only two people are using it. |
2022-06-15 22:26:54 +0200 | <tomsmeding> | you and a coworker? :) |
2022-06-15 22:27:08 +0200 | <mrianbloom> | No, a guy in grad school. |
2022-06-15 22:27:19 +0200 | <mrianbloom> | He wrote the original wrapper. |
2022-06-15 22:28:05 +0200 | <tomsmeding> | nice :) |
2022-06-15 22:29:11 +0200 | <mrianbloom> | Here is the repo we are currently using https://gitlab.com/ianmbloom/futhask/-/tree/noskolem |
2022-06-15 22:29:24 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 22:29:48 +0200 | <mrianbloom> | We were trying to get it to work with linear types but so far no success. |
2022-06-15 22:30:00 +0200 | <tomsmeding> | ooh fancy |
2022-06-15 22:30:40 +0200 | <mrianbloom> | Basically there is a pretty high risk of space leaks on the GPU when using Futhark and Haskell together. |
2022-06-15 22:31:10 +0200 | <mrianbloom> | So it would be nice to right an API that makes those impossible on the Haskell side, but we haven't figured it out yet. |
2022-06-15 22:31:11 +0200 | <tomsmeding> | oh right, the idea was to be able to garbage-collect unused arrays early? |
2022-06-15 22:32:13 +0200 | jgeerds | (~jgeerds@55d45f48.access.ecotel.net) |
2022-06-15 22:33:08 +0200 | <mrianbloom> | Actually our idea is just to dereference an array every time it's used as the parameter of a kernel, so that if you want to use it twice you need to explicitly duplicate it. Then this would be enforced with linear types and you don't have to worry. |
2022-06-15 22:33:13 +0200 | <tomsmeding> | I've done a small amount of stuff with linear types and that worked fine, but trying to wrap an API like this sounds more complicated |
2022-06-15 22:33:35 +0200 | <tomsmeding> | ah, and then you can reference-count? |
2022-06-15 22:34:31 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
2022-06-15 22:34:52 +0200 | <mrianbloom> | Right, so if you dereference an array and it's counter goes below 0 then you can tell the futhark library to deallocate it. |
2022-06-15 22:34:54 +0200 | Guest18 | (~Guest18@188.27.129.27) |
2022-06-15 22:35:09 +0200 | <mrianbloom> | That all happens behind the scenes in the wrapper. |
2022-06-15 22:35:17 +0200 | <tomsmeding> | yeah that's nice |
2022-06-15 22:35:32 +0200 | pavonia | (~user@user/siracusa) |
2022-06-15 22:35:54 +0200 | <mrianbloom> | The API user just knows that they get a type error if they use an array twice without duplicating it. |
2022-06-15 22:36:53 +0200 | <mrianbloom> | Unfortunately this is more difficult than it sounds. |
2022-06-15 22:37:27 +0200 | <mrianbloom> | If linear types become part of the standard prelude, it might be more practical IMHO. |
2022-06-15 22:37:43 +0200 | <tomsmeding> | were you using linear-base? |
2022-06-15 22:38:11 +0200 | <tomsmeding> | without that it's almost impossible to work with the linear types in ghc I think |
2022-06-15 22:40:25 +0200 | machinedgod | (~machinedg@66.244.246.252) |
2022-06-15 22:40:49 +0200 | yauhsien | (~yauhsien@61-231-38-113.dynamic-ip.hinet.net) |
2022-06-15 22:41:07 +0200 | <tomsmeding> | I'm off to bed though, hope this was helpful :) |
2022-06-15 22:41:19 +0200 | <mrianbloom> | Very. Thanks a lot. |
2022-06-15 22:43:16 +0200 | Pickchea | (~private@user/pickchea) |
2022-06-15 22:47:50 +0200 | yauhsien | (~yauhsien@61-231-38-113.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-06-15 22:48:16 +0200 | pleo | (~pleo@user/pleo) (Ping timeout: 258 seconds) |
2022-06-15 22:48:19 +0200 | nate4 | (~nate@98.45.169.16) |
2022-06-15 22:48:52 +0200 | yauhsien | (~yauhsien@61-231-59-135.dynamic-ip.hinet.net) |
2022-06-15 22:49:49 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 22:49:53 +0200 | pleo | (~pleo@user/pleo) |
2022-06-15 22:57:16 +0200 | juri_ | (~juri@178.63.35.222) |
2022-06-15 22:58:01 +0200 | Guest18 | (~Guest18@188.27.129.27) (Quit: Client closed) |
2022-06-15 22:58:10 +0200 | AlexZenon | (~alzenon@94.233.241.100) (Ping timeout: 246 seconds) |
2022-06-15 22:58:10 +0200 | Alex_test | (~al_test@94.233.241.100) (Ping timeout: 246 seconds) |
2022-06-15 22:58:42 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2022-06-15 23:00:01 +0200 | AlexNoo | (~AlexNoo@94.233.241.100) (Ping timeout: 256 seconds) |
2022-06-15 23:02:07 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Remote host closed the connection) |
2022-06-15 23:02:29 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-06-15 23:04:05 +0200 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) |
2022-06-15 23:05:28 +0200 | Haskelytic | (~Haskelyti@118.179.211.17) (Quit: Client closed) |
2022-06-15 23:07:23 +0200 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-06-15 23:14:56 +0200 | <shapr> | Quick question! Does anyone here use property testing in most or all of their Haskell projects? |
2022-06-15 23:15:49 +0200 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Read error: Connection reset by peer) |
2022-06-15 23:20:25 +0200 | dsp | (~dsp@cpc152107-haye27-2-0-cust227.17-4.cable.virginm.net) (Ping timeout: 256 seconds) |
2022-06-15 23:20:26 +0200 | slac14060 | (~slack1256@191.125.99.67) (Read error: Connection reset by peer) |
2022-06-15 23:20:39 +0200 | slack1256 | (~slack1256@186.11.82.227) |
2022-06-15 23:22:32 +0200 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
2022-06-15 23:22:45 +0200 | <maerwald> | when it makes sense |
2022-06-15 23:24:44 +0200 | Kaipii | (~Kaiepi@156.34.47.253) (Read error: Connection reset by peer) |
2022-06-15 23:30:46 +0200 | <shapr> | maerwald: so, how many of your projects have property tests via quickcheck, hedgehog, leancheck, etc? |
2022-06-15 23:33:43 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2022-06-15 23:33:53 +0200 | <maerwald> | maybe half |
2022-06-15 23:36:41 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2022-06-15 23:39:55 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2022-06-15 23:42:59 +0200 | <maerwald> | Most things I write either don't really have concrete properties or writing a useful Arbitrary instance is just too hard. So I find quickcheck only useful for small functions. |
2022-06-15 23:48:27 +0200 | michalz | (~michalz@185.246.204.109) (Remote host closed the connection) |
2022-06-15 23:49:02 +0200 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2022-06-15 23:49:52 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
2022-06-15 23:54:31 +0200 | Cupcakus | (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 246 seconds) |
2022-06-15 23:57:08 +0200 | BusConscious | (~martin@ip5f5acff9.dynamic.kabel-deutschland.de) (Remote host closed the connection) |