2022/06/15

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 +0200n3t1(n3t@s45.mydevil.net) (Changing host)
2022-06-15 00:02:32 +0200n3t1(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 +0200Tuplanolla(~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 +0200travisb(~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 +0200MajorBiscuit(~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 +0200o-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 +0200julian(~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 +0200dispater(~dispater@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in)
2022-06-15 00:11:56 +0200orcus(~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 +0200eull(~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 +0200dispater(~dispater@user/brprice)
2022-06-15 00:14:12 +0200orcus(~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 +0200pleo(~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 +0200tromp(~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 +0200xff0x(~xff0x@b133147.ppp.asahi-net.or.jp) (Quit: xff0x)
2022-06-15 00:24:07 +0200xff0x(~xff0x@2405:6580:b080:900:4ed7:6424:f0c6:c994)
2022-06-15 00:24:59 +0200slack1256(~slack1256@186.11.82.227)
2022-06-15 00:25:09 +0200pleo(~pleo@user/pleo)
2022-06-15 00:25:41 +0200MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds)
2022-06-15 00:26:08 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-06-15 00:26:50 +0200slac80159(~slack1256@191.125.99.70) (Ping timeout: 240 seconds)
2022-06-15 00:27:12 +0200Vajb(~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 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2022-06-15 00:29:33 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-06-15 00:29:34 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
2022-06-15 00:30:27 +0200monaaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
2022-06-15 00:30:53 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-06-15 00:31:30 +0200pretty_d1(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 240 seconds)
2022-06-15 00:31:58 +0200monaaraj(~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 +0200monaaraj(~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 +0200Hashstoned
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 +0200gurkenglas(~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 +0200eggplantade(~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 +0200gmg(~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 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e)
2022-06-15 00:57:38 +0200kaskal(~kaskal@89.144.222.105)
2022-06-15 00:58:27 +0200kaskal-(~kaskal@2001:4bb8:2ae:ef0c:346b:df71:225c:5c14) (Ping timeout: 240 seconds)
2022-06-15 00:58:32 +0200CoolerX(~user@user/coolerx) (Ping timeout: 248 seconds)
2022-06-15 00:58:40 +0200ncfbam
2022-06-15 00:58:53 +0200bamncf
2022-06-15 00:59:55 +0200CoolerX(~user@user/coolerx)
2022-06-15 01:00:01 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!)
2022-06-15 01:01:14 +0200inversed(~inversed@176.248.27.211)
2022-06-15 01:05:49 +0200co-ONANI-(~co-ONANI-@36.90.88.185)
2022-06-15 01:07:12 +0200Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2022-06-15 01:07:27 +0200co-ONANI-(~co-ONANI-@36.90.88.185) (Remote host closed the connection)
2022-06-15 01:12:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 01:14:00 +0200Cupcakus(~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 248 seconds)
2022-06-15 01:19:16 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 01:21:12 +0200lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 250 seconds)
2022-06-15 01:22:25 +0200lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-06-15 01:23:04 +0200Alex_test(~al_test@94.233.241.100) (Ping timeout: 248 seconds)
2022-06-15 01:23:32 +0200AlexZenon(~alzenon@94.233.241.100) (Ping timeout: 260 seconds)
2022-06-15 01:25:12 +0200AlexNoo(~AlexNoo@94.233.241.100) (Ping timeout: 248 seconds)
2022-06-15 01:25:17 +0200alp(~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 +0200jinsun__(~jinsun@user/jinsun) ()
2022-06-15 01:37:52 +0200jinsun(~jinsun@user/jinsun)
2022-06-15 01:40:58 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 258 seconds)
2022-06-15 01:44:43 +0200nate4(~nate@98.45.169.16)
2022-06-15 01:47:21 +0200nicbk(~nicbk@user/nicbk)
2022-06-15 01:50:42 +0200travisb(~travisb@2600:1700:7990:24e0:8ef9:6ccb:409e:cd42)
2022-06-15 01:51:22 +0200zerkal03(zerkal03@023-084-033-189.res.spectrum.com)
2022-06-15 01:52:04 +0200Guest27(~Guest27@2601:281:d47f:1590::8848)
2022-06-15 01:52:55 +0200nate4(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-06-15 01:53:32 +0200alp(~alp@user/alp)
2022-06-15 01:55:04 +0200stackdroid18(14094@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-06-15 01:59:00 +0200Guest27(~Guest27@2601:281:d47f:1590::8848) (Ping timeout: 252 seconds)
2022-06-15 01:59:12 +0200pleo(~pleo@user/pleo) (Quit: quit)
2022-06-15 02:02:53 +0200lambda451[m](~lambda451@2001:470:69fc:105::2:1097)
2022-06-15 02:03:12 +0200Kaipei(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-06-15 02:03:47 +0200Kaipei(~Kaiepi@156.34.47.253)
2022-06-15 02:03:52 +0200mvk(~mvk@2607:fea8:5ce3:8500::4588)
2022-06-15 02:05:07 +0200mvk(~mvk@2607:fea8:5ce3:8500::4588) (Client Quit)
2022-06-15 02:06:00 +0200mvk(~mvk@2607:fea8:5ce3:8500::4588)
2022-06-15 02:06:16 +0200travisb(~travisb@2600:1700:7990:24e0:8ef9:6ccb:409e:cd42) (Ping timeout: 250 seconds)
2022-06-15 02:11:49 +0200tabemann(~tabemann@2600:1700:7990:24e0:68f1:5d07:157d:1415)
2022-06-15 02:14:42 +0200slac73952(~slack1256@191.125.227.90)
2022-06-15 02:17:12 +0200slack1256(~slack1256@186.11.82.227) (Ping timeout: 260 seconds)
2022-06-15 02:25:18 +0200julianGuest1698
2022-06-15 02:25:18 +0200Guest1698(~julian@20.83.116.49) (Killed (sodium.libera.chat (Nickname regained by services)))
2022-06-15 02:25:48 +0200Guest1698(~Guest1698@20.83.116.49)
2022-06-15 02:30:25 +0200CoolerX(~user@user/coolerx) (Ping timeout: 258 seconds)
2022-06-15 02:30:37 +0200stefan-_(~cri@42dots.de) (Ping timeout: 260 seconds)
2022-06-15 02:30:56 +0200g04239(~kody@user/g04239)
2022-06-15 02:31:31 +0200CoolerX(~user@user/coolerx)
2022-06-15 02:34:18 +0200stefan-_(~cri@42dots.de)
2022-06-15 02:36:08 +0200CoolerX(~user@user/coolerx) (Ping timeout: 248 seconds)
2022-06-15 02:36:43 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-06-15 02:37:05 +0200CoolerX(~user@user/coolerx)
2022-06-15 02:38:29 +0200g04239(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 02:45:12 +0200CoolerX(~user@user/coolerx)
2022-06-15 02:45:19 +0200[_](~itchyjunk@user/itchyjunk/x-7353470)
2022-06-15 02:45:47 +0200xff0x(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 02:50:43 +0200CoolerX(~user@user/coolerx)
2022-06-15 02:52:08 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 248 seconds)
2022-06-15 02:52:52 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-06-15 02:55:13 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 02:56:18 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:00:57 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 03:01:52 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:03:47 +0200zerkal03(zerkal03@023-084-033-189.res.spectrum.com) (Ping timeout: 256 seconds)
2022-06-15 03:05:23 +0200king_gs(~Thunderbi@187.201.173.69)
2022-06-15 03:05:41 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-06-15 03:06:25 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 03:07:28 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:10:42 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-06-15 03:11:33 +0200frost(~frost@user/frost)
2022-06-15 03:12:02 +0200CoolerX(~user@user/coolerx) (Ping timeout: 260 seconds)
2022-06-15 03:13:06 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:16:49 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-06-15 03:17:37 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 03:18:49 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:21:14 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-06-15 03:21:16 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection)
2022-06-15 03:23:37 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 03:24:13 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:25:42 +0200[_][itchyjunk]
2022-06-15 03:28:43 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 03:29:50 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:33:45 +0200king_gs(~Thunderbi@187.201.173.69) (Quit: king_gs)
2022-06-15 03:34:04 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 03:35:17 +0200CoolerX(~user@user/coolerx)
2022-06-15 03:35:51 +0200machined1od(~machinedg@66.244.246.252) (Ping timeout: 276 seconds)
2022-06-15 03:44:35 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 03:45:37 +0200CoolerX(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 03:51:13 +0200CoolerX(~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 +0200causal(~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 +0200nate4(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 03:56:46 +0200CoolerX(~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 +0200zerkal03(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 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-15 04:01:01 +0200CoolerX(~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 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:06:52 +0200CoolerX(~user@user/coolerx) (Ping timeout: 260 seconds)
2022-06-15 04:07:55 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:11:50 +0200td_(~td@muedsl-82-207-238-155.citykom.de) (Ping timeout: 240 seconds)
2022-06-15 04:12:13 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 04:13:25 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:13:48 +0200td_(~td@muedsl-82-207-238-033.citykom.de)
2022-06-15 04:15:11 +0200jao(~jao@166.65.77.188.dynamic.jazztel.es) (Ping timeout: 256 seconds)
2022-06-15 04:18:01 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 04:19:01 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:21:38 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e)
2022-06-15 04:23:21 +0200nate4(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 248 seconds)
2022-06-15 04:26:14 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Ping timeout: 250 seconds)
2022-06-15 04:27:14 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:28:27 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e)
2022-06-15 04:31:50 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 04:32:51 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:33:42 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
2022-06-15 04:37:04 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 04:38:21 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:38:46 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-06-15 04:38:46 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-06-15 04:38:46 +0200finn_elijaFinnElija
2022-06-15 04:42:30 +0200CoolerX(~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 +0200terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
2022-06-15 04:43:57 +0200CoolerX(~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 +0200biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2022-06-15 04:44:24 +0200terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-06-15 04:44:32 +0200biberu(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 240 seconds)
2022-06-15 04:49:30 +0200CoolerX(~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 +0200caubert(~caubert@user/caubert) (Ping timeout: 248 seconds)
2022-06-15 04:53:46 +0200caubert(~caubert@user/caubert)
2022-06-15 04:54:07 +0200CoolerX(~user@user/coolerx) (Ping timeout: 260 seconds)
2022-06-15 04:55:07 +0200CoolerX(~user@user/coolerx)
2022-06-15 04:55:31 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-06-15 04:58:34 +0200tabemann(~tabemann@2600:1700:7990:24e0:68f1:5d07:157d:1415) (Remote host closed the connection)
2022-06-15 04:58:47 +0200tabemann(~tabemann@2600:1700:7990:24e0:4c02:2a0:99f2:8567)
2022-06-15 04:59:13 +0200tabemann(~tabemann@2600:1700:7990:24e0:4c02:2a0:99f2:8567) (Client Quit)
2022-06-15 04:59:28 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 05:00:31 +0200hnOsmium0001(uid453710@user/hnOsmium0001) (Quit: Connection closed for inactivity)
2022-06-15 05:00:42 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:05:04 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 05:06:14 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:09:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 05:09:53 +0200yrlnry(~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection)
2022-06-15 05:10:43 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 05:11:48 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:14:49 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 05:15:49 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-15 05:16:17 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 05:17:28 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:22:07 +0200CoolerX(~user@user/coolerx) (Ping timeout: 260 seconds)
2022-06-15 05:22:59 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:23:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 05:23:44 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-06-15 05:24:13 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-06-15 05:25:00 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 05:27:28 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 05:27:38 +0200alp(~alp@user/alp) (Ping timeout: 255 seconds)
2022-06-15 05:28:31 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:29:40 +0200tabemann(~tabemann@2600:1700:7990:24e0:313b:ace9:50c8:d6b2)
2022-06-15 05:32:08 +0200whosthis(~whosthis@97-122-203-212.hlrn.qwest.net)
2022-06-15 05:33:23 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 05:34:07 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:38:40 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 05:39:43 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:40:30 +0200yrlnry(~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net)
2022-06-15 05:44:09 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 05:44:58 +0200yrlnry(~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Ping timeout: 246 seconds)
2022-06-15 05:45:14 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:46:09 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-06-15 05:46:47 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-06-15 05:50:07 +0200CoolerX(~user@user/coolerx) (Ping timeout: 260 seconds)
2022-06-15 05:50:48 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:51:52 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-06-15 05:53:14 +0200img(~img@user/img)
2022-06-15 05:53:20 +0200mvk(~mvk@2607:fea8:5ce3:8500::4588) (Ping timeout: 250 seconds)
2022-06-15 05:55:29 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 05:56:21 +0200CoolerX(~user@user/coolerx)
2022-06-15 05:58:09 +0200nate4(~nate@98.45.169.16)
2022-06-15 06:00:30 +0200foul_owl(~kerry@23.82.194.92) (Ping timeout: 240 seconds)
2022-06-15 06:00:43 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 06:01:42 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:03:32 +0200nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-06-15 06:07:23 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 06:08:45 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:11:46 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-06-15 06:13:48 +0200k8yun(~k8yun@user/k8yun)
2022-06-15 06:16:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-06-15 06:16:28 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 06:16:37 +0200foul_owl(~kerry@23.82.194.107)
2022-06-15 06:17:40 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-06-15 06:18:08 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:18:16 +0200Vajb(~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06)
2022-06-15 06:22:25 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 06:24:01 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:24:41 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-06-15 06:28:55 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 06:29:34 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:32:23 +0200nate4(~nate@98.45.169.16)
2022-06-15 06:33:58 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 06:35:09 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:35:38 +0200jargon(~jargon@184.101.186.108)
2022-06-15 06:37:25 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-15 06:39:34 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 06:40:50 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:45:12 +0200CoolerX(~user@user/coolerx) (Ping timeout: 248 seconds)
2022-06-15 06:46:20 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:51:04 +0200CoolerX(~user@user/coolerx) (Ping timeout: 248 seconds)
2022-06-15 06:51:20 +0200zerkal03(zerkal03@023-084-033-189.res.spectrum.com) ()
2022-06-15 06:51:57 +0200CoolerX(~user@user/coolerx)
2022-06-15 06:56:41 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 06:57:35 +0200CoolerX(~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 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 07:03:09 +0200CoolerX(~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 +0200kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net)
2022-06-15 07:11:25 +0200CoolerX(~user@user/coolerx) (Ping timeout: 246 seconds)
2022-06-15 07:12:16 +0200CoolerX(~user@user/coolerx)
2022-06-15 07:16:32 +0200coot(~coot@213.134.190.95)
2022-06-15 07:17:05 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 07:18:07 +0200bilegeek(~bilegeek@2600:1008:b062:d718:bff4:2307:526c:195f)
2022-06-15 07:21:50 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-06-15 07:23:19 +0200k8yun(~k8yun@user/k8yun) (Quit: Leaving)
2022-06-15 07:26:48 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
2022-06-15 07:28:59 +0200CoolerX(~user@user/coolerx)
2022-06-15 07:30:07 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-06-15 07:30:45 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Remote host closed the connection)
2022-06-15 07:42:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 07:43:41 +0200stoned(~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 +0200kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
2022-06-15 07:49:40 +0200michalz(~michalz@185.246.204.109)
2022-06-15 07:49:57 +0200CoolerX(~user@user/coolerx) (Ping timeout: 256 seconds)
2022-06-15 07:59:13 +0200littlebobeep(~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 +0200slac73952(~slack1256@191.125.227.90) (Remote host closed the connection)
2022-06-15 08:07:51 +0200jargon(~jargon@184.101.186.108) (Remote host closed the connection)
2022-06-15 08:12:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 08:13:14 +0200kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net)
2022-06-15 08:13:46 +0200littlebobeep(~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 +0200MajorBiscuit(~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 +0200kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Ping timeout: 256 seconds)
2022-06-15 08:30:50 +0200Pickchea(~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 +0200Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-06-15 08:33:57 +0200acidjnk(~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 +0200shriekingnoise(~shrieking@201.212.175.181) (Quit: Quit)
2022-06-15 08:37:44 +0200MajorBiscuit(~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 +0200tromp(~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 +0200Hash(~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 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-15 08:43:47 +0200 <Square> sweet.
2022-06-15 08:54:48 +0200mixfix41(~sdenynine@user/mixfix41) (Ping timeout: 248 seconds)
2022-06-15 08:57:25 +0200dsp(~dsp@cpc152107-haye27-2-0-cust227.17-4.cable.virginm.net)
2022-06-15 08:59:52 +0200nschoe(~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 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-06-15 09:04:00 +0200monaaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-15 09:04:41 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-06-15 09:06:13 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds)
2022-06-15 09:06:26 +0200alp(~alp@user/alp)
2022-06-15 09:06:42 +0200haritz(~hrtz@user/haritz) (Remote host closed the connection)
2022-06-15 09:12:57 +0200littlebo1eep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 09:13:54 +0200chele(~chele@user/chele)
2022-06-15 09:14:23 +0200nate4(~nate@98.45.169.16)
2022-06-15 09:16:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 09:18:44 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 09:19:29 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-06-15 09:20:35 +0200monaaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.5)
2022-06-15 09:20:42 +0200gmg(~user@user/gehmehgeh)
2022-06-15 09:21:07 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-15 09:21:34 +0200littlebo1eep(~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 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer)
2022-06-15 09:23:46 +0200mon_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 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net)
2022-06-15 09:24:22 +0200mon_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 +0200asm(~alexander@burner.asm89.io) (Changing host)
2022-06-15 09:24:38 +0200asm(~alexander@user/asm)
2022-06-15 09:24:40 +0200 <tdammers> it's all about being inclusive, amirite
2022-06-15 09:24:49 +0200mon_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 +0200littlebobeep(~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 +0200Pickchea(~private@user/pickchea) (Ping timeout: 256 seconds)
2022-06-15 09:28:50 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 09:29:13 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2022-06-15 09:30:36 +0200 <tdammers> than*
2022-06-15 09:31:27 +0200Putonlalla1Putonlalla
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 +0200tromp(~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 +0200flupe(~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 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 260 seconds)
2022-06-15 09:39:58 +0200tzh(~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 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-15 09:43:03 +0200MajorBiscuit(~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 +0200dschrempf(~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 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
2022-06-15 09:50:58 +0200machinedgod(~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 +0200mon_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 +0200zeenk(~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 +0200Logio_Logio
2022-06-15 09:55:04 +0200[Leary](~Leary]@122-58-224-198-vdsl.sparkbb.co.nz)
2022-06-15 09:57:08 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer)
2022-06-15 09:57:10 +0200mc47(~mc47@xmonad/TheMC47)
2022-06-15 09:58:21 +0200jgeerds(~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 +0200coot(~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 +0200tromp(~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 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-15 10:03:53 +0200fweht(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 +0200dyeplexer(~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 +0200Topsi(~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 +0200bilegeek(~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 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5)
2022-06-15 10:34:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 10:37:04 +0200econo(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 +0200nate4(~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 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2022-06-15 10:46:11 +0200nate4(~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 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
2022-06-15 10:50:36 +0200gurkenglas(~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 +0200mon_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 +0200mima(~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 +0200jespada(~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Read error: Connection reset by peer)
2022-06-15 10:58:18 +0200titibandit(~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 +0200jespada(~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net)
2022-06-15 10:59:21 +0200coot(~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 +0200jespada_(~jespada@146.70.119.46)
2022-06-15 11:03:10 +0200jespada(~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Ping timeout: 240 seconds)
2022-06-15 11:04:16 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection)
2022-06-15 11:06:00 +0200merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
2022-06-15 11:06:02 +0200jespada(~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net)
2022-06-15 11:06:02 +0200chimp_(~Psybur@c-76-123-45-25.hsd1.va.comcast.net)
2022-06-15 11:06:30 +0200jespada_(~jespada@146.70.119.46) (Ping timeout: 240 seconds)
2022-06-15 11:07:50 +0200Psybur(~Psybur@c-76-123-45-25.hsd1.va.comcast.net) (Ping timeout: 255 seconds)
2022-06-15 11:18:19 +0200gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2022-06-15 11:19:50 +0200gmg(~user@user/gehmehgeh)
2022-06-15 11:26:02 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 11:29:15 +0200Colere(~colere@about/linux/staff/sauvin) (Ping timeout: 260 seconds)
2022-06-15 11:32:01 +0200merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-06-15 11:37:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 11:39:57 +0200Pickchea(~private@user/pickchea)
2022-06-15 11:40:47 +0200kuribas(~user@ptr-17d51eors28p6gwk9l6.18120a2.ip6.access.telenet.be)
2022-06-15 11:48:45 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 11:48:56 +0200notzmv(~zmv@user/notzmv)
2022-06-15 11:49:56 +0200rendar(~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 +0200Midjak(~Midjak@82.66.147.146)
2022-06-15 11:54:45 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-06-15 11:55:25 +0200Colere(~colere@about/linux/staff/sauvin)
2022-06-15 11:57:12 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 248 seconds)
2022-06-15 12:01:57 +0200frost(~frost@user/frost) (Quit: Client closed)
2022-06-15 12:04:36 +0200__monty__(~toonn@user/toonn)
2022-06-15 12:04:38 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368)
2022-06-15 12:09:02 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 250 seconds)
2022-06-15 12:09:17 +0200vglfr(~vglfr@coupling.penchant.volia.net) (Remote host closed the connection)
2022-06-15 12:09:38 +0200vglfr(~vglfr@coupling.penchant.volia.net)
2022-06-15 12:10:00 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds)
2022-06-15 12:27:12 +0200z(~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 +0200ubert(~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 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-06-15 12:33:12 +0200gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2022-06-15 12:33:32 +0200 <rendar> oh :(
2022-06-15 12:33:47 +0200haritz(~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk)
2022-06-15 12:33:48 +0200haritz(~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
2022-06-15 12:33:48 +0200haritz(~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 +0200gmg(~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 +0200adanwan(~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 +0200Batzy(~quassel@user/batzy) (Quit: No Ping reply in 180 seconds.)
2022-06-15 12:36:03 +0200Batzy(~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 +0200tomsmedingnodes
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 +0200fweht(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 +0200frost(~frost@user/frost)
2022-06-15 12:59:18 +0200CiaoSen(~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 +0200bliminse(~bliminse@host86-132-158-77.range86-132.btcentralplus.com) (Ping timeout: 246 seconds)
2022-06-15 13:05:34 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-06-15 13:05:47 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-06-15 13:06:11 +0200bliminse(~bliminse@host86-164-164-134.range86-164.btcentralplus.com)
2022-06-15 13:06:27 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-06-15 13:07:34 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net)
2022-06-15 13:07:41 +0200yahb2(~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
2022-06-15 13:07:58 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 250 seconds)
2022-06-15 13:13:17 +0200belphegor666(~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) (Changing host)
2022-06-15 13:13:17 +0200belphegor666(~satan@user/belphegor666)
2022-06-15 13:13:43 +0200yahb2(~yahb2@2a01:4f8:c0c:5c7b::2)
2022-06-15 13:15:28 +0200yahb2(~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
2022-06-15 13:15:40 +0200yahb2(~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 +0200yahb2(~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
2022-06-15 13:20:24 +0200yahb2(~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 +0200dyeplexer(~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 +0200yahb2(~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
2022-06-15 13:24:05 +0200yahb2(~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 +0200yahb2(~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
2022-06-15 13:25:19 +0200yahb2(~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 +0200albet70(~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 +0200lyle(~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 +0200albet70(~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 +0200jgeerds(~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 +0200chele(~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 +0200greenbourne277(~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0) (Quit: WeeChat 1.6)
2022-06-15 13:37:46 +0200chele(~chele@user/chele)
2022-06-15 13:39:47 +0200zaquest(~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 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-06-15 13:42:25 +0200rembo10(~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 +0200rembo10(~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 +0200axel-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 +0200zaquest(~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 +0200xff0x(~xff0x@2405:6580:b080:900:22c7:1522:c1f2:cdfc)
2022-06-15 13:48:25 +0200n3t1n3t
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 +0200AlexNoo(~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 +0200Alex_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 +0200AlexZenon(~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 +0200yrlnry(~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 +0200leeb(~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 +0200azimut(~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 +0200eggplantade(~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 +0200leeb(~leeb@KD106155004167.au-net.ne.jp) (Ping timeout: 260 seconds)
2022-06-15 14:10:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 255 seconds)
2022-06-15 14:11:25 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-15 14:23:20 +0200coot(~coot@213.134.190.95)
2022-06-15 14:26:22 +0200nate4(~nate@98.45.169.16)
2022-06-15 14:31:37 +0200nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-06-15 14:40:30 +0200briandaed(~briandaed@109.95.143.14.r.toneticgroup.pl)
2022-06-15 14:48:12 +0200Alleria(~textual@user/alleria)
2022-06-15 14:48:20 +0200isovector(~isovector@46-253-188-8.dynamic.monzoon.net)
2022-06-15 14:49:28 +0200isovector(~isovector@46-253-188-8.dynamic.monzoon.net) (Client Quit)
2022-06-15 14:54:41 +0200Haskelytic(~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 +0200Clintsquints.
2022-06-15 14:57:17 +0200 <geekosaur> testing, since I got a 0 response in private
2022-06-15 14:57:31 +0200geekosauris 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 +0200Ram-Z_(Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Ping timeout: 248 seconds)
2022-06-15 15:01:48 +0200shriekingnoise(~shrieking@201.212.175.181)
2022-06-15 15:02:50 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 240 seconds)
2022-06-15 15:04:52 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-15 15:11:23 +0200Pickchea(~private@user/pickchea) (Ping timeout: 256 seconds)
2022-06-15 15:14:25 +0200pleo(~pleo@user/pleo)
2022-06-15 15:16:47 +0200qhong`(~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 244 seconds)
2022-06-15 15:17:07 +0200qhong(~qhong@rescomp-21-400677.stanford.edu)
2022-06-15 15:20:15 +0200Aleksejs(~Aleksejs@107.170.21.106)
2022-06-15 15:20:23 +0200zer0bitz(~zer0bitz@2001:2003:f748:2000:3d4c:9b16:2a18:880)
2022-06-15 15:20:57 +0200Aleksejs(~Aleksejs@107.170.21.106) (Remote host closed the connection)
2022-06-15 15:25:25 +0200Aleksejs(~Aleksejs@107.170.21.106)
2022-06-15 15:28:56 +0200acidjnk(~acidjnk@p200300d0c7068b9140c628021d98d447.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-06-15 15:36:06 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-06-15 15:36:40 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
2022-06-15 15:39:14 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-06-15 15:41:17 +0200troydm1(~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 +0200troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-06-15 15:41:37 +0200dyeplexer(~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 +0200kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net)
2022-06-15 15:49:35 +0200BusConscious(~martin@ip5f5acff9.dynamic.kabel-deutschland.de)
2022-06-15 15:50:33 +0200byorgey_byorgey
2022-06-15 15:53:05 +0200chimp_(~Psybur@c-76-123-45-25.hsd1.va.comcast.net) (Read error: No route to host)
2022-06-15 15:54:51 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2022-06-15 16:01:12 +0200z0k(~z0k@206.84.143.2)
2022-06-15 16:03:02 +0200tabemann(~tabemann@2600:1700:7990:24e0:313b:ace9:50c8:d6b2) (Ping timeout: 255 seconds)
2022-06-15 16:07:50 +0200frost(~frost@user/frost) (Ping timeout: 252 seconds)
2022-06-15 16:08:22 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368)
2022-06-15 16:09:20 +0200CiaoSen(~Jura@p200300c9571294002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2022-06-15 16:09:20 +0200Vajb(~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06) (Read error: Connection reset by peer)
2022-06-15 16:09:24 +0200z0k(~z0k@206.84.143.2) (Read error: Connection reset by peer)
2022-06-15 16:10:19 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-06-15 16:12:41 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 252 seconds)
2022-06-15 16:15:44 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com)
2022-06-15 16:22:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 16:23:02 +0200ashln(~ashln@98.38.236.123)
2022-06-15 16:23:19 +0200nschoe(~quassel@178.251.84.79) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-06-15 16:26:24 +0200Teacup(~teacup@user/teacup) (Read error: Connection reset by peer)
2022-06-15 16:36:38 +0200Kaipii(~Kaiepi@156.34.47.253)
2022-06-15 16:39:47 +0200Kaipei(~Kaiepi@156.34.47.253) (Ping timeout: 256 seconds)
2022-06-15 16:41:11 +0200Kaipii(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-06-15 16:41:47 +0200Kaipii(~Kaiepi@156.34.47.253)
2022-06-15 16:42:11 +0200slack1256(~slack1256@186.11.84.227)
2022-06-15 16:43:32 +0200neoatnebula(~neoatnebu@2409:4071:4d97:a972:18dc:ffd7:cedf:6ac4)
2022-06-15 16:49:04 +0200vicfred(~vicfred@user/vicfred)
2022-06-15 16:51:09 +0200Chai-T-Rex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-06-15 16:51:30 +0200Chai-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 +0200Sgeo(~Sgeo@user/sgeo)
2022-06-15 16:54:50 +0200mima(~mmh@dhcp-138-246-3-188.dynamic.eduroam.mwn.de) (Ping timeout: 240 seconds)
2022-06-15 16:54:51 +0200Chai-T-Rex(~ChaiTRex@user/chaitrex) (Client Quit)
2022-06-15 16:55:29 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-06-15 17:04:05 +0200berberman(~berberman@user/berberman) (Quit: ZNC 1.8.2 - https://znc.in)
2022-06-15 17:04:24 +0200berberman(~berberman@user/berberman)
2022-06-15 17:05:35 +0200machinedgod(~machinedg@66.244.246.252) (Ping timeout: 255 seconds)
2022-06-15 17:06:32 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-15 17:07:25 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-15 17:09:25 +0200AndrewYuAndrew
2022-06-15 17:17:00 +0200raehik(~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 +0200Teacup(~teacup@user/teacup)
2022-06-15 17:24:14 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 17:26:46 +0200bliminse(~bliminse@host86-164-164-134.range86-164.btcentralplus.com) (Quit: leaving)
2022-06-15 17:28:42 +0200bliminse(~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 +0200tubogram4(~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 +0200Teacup(~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 +0200tubogram44(~tubogram@user/tubogram)
2022-06-15 17:38:23 +0200acidjnk(~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 +0200nfvnt^(~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 +0200leeb(~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 +0200merijn(~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 +0200nfvnt^(~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 +0200nfvnt^(~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 +0200eggplantade(~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 +0200Teacup(~teacup@user/teacup)
2022-06-15 17:52:10 +0200haskl[error](~haskl@user/haskl) (Ping timeout: 240 seconds)
2022-06-15 17:52:13 +0200haskl(~haskl@user/haskl)
2022-06-15 17:52:41 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-15 17:53:47 +0200merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-06-15 17:53:59 +0200Cupcakus(~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net)
2022-06-15 17:54:33 +0200Teacup(~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 +0200MajorBiscuit(~MajorBisc@wlan-145-94-164-215.wlan.tudelft.nl) (Ping timeout: 240 seconds)
2022-06-15 18:00:10 +0200merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-06-15 18:01:59 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-15 18:03:28 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Remote host closed the connection)
2022-06-15 18:03:43 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-15 18:06:40 +0200Teacup(~teacup@user/teacup)
2022-06-15 18:09:50 +0200jlamothe(~jlamothe@198.251.60.209) (Quit: Lost terminal)
2022-06-15 18:14:30 +0200Kaipii(~Kaiepi@156.34.47.253) (Read error: Connection reset by peer)
2022-06-15 18:14:55 +0200Kaipii(~Kaiepi@156.34.47.253)
2022-06-15 18:16:15 +0200segfaultfizzbuzz(~segfaultf@135-180-3-34.static.sonic.net)
2022-06-15 18:16:42 +0200causal(~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e)
2022-06-15 18:17:16 +0200coot(~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 +0200nfvnt^(~nfvnt@50.223.50.178) (Ping timeout: 246 seconds)
2022-06-15 18:20:17 +0200raym(~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 +0200raym(~raym@user/raym)
2022-06-15 18:26:34 +0200merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-06-15 18:27:07 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368)
2022-06-15 18:27:55 +0200nate4(~nate@98.45.169.16)
2022-06-15 18:28:50 +0200titibandit(~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) (Remote host closed the connection)
2022-06-15 18:28:56 +0200econo(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 +0200raym(~raym@user/raym) (Ping timeout: 256 seconds)
2022-06-15 18:32:20 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-06-15 18:32:23 +0200raym(~raym@user/raym)
2022-06-15 18:32:32 +0200nate4(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-06-15 18:32:32 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 250 seconds)
2022-06-15 18:32:54 +0200slac43983(~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 +0200slack1256(~slack1256@186.11.84.227) (Ping timeout: 248 seconds)
2022-06-15 18:36:35 +0200slac43983slack1256
2022-06-15 18:38:16 +0200acidjnk(~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-06-15 18:39:03 +0200nfvnt^(~nfvnt@50.223.50.178)
2022-06-15 18:39:07 +0200pavonia(~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 +0200Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com)
2022-06-15 18:41:15 +0200Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com) ()
2022-06-15 18:43:27 +0200yrlnry(~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 +0200nfvnt^(~nfvnt@50.223.50.178) (Remote host closed the connection)
2022-06-15 18:44:27 +0200raym(~raym@user/raym) (Ping timeout: 256 seconds)
2022-06-15 18:44:47 +0200nfvnt^(~nfvnt@50.223.50.178)
2022-06-15 18:45:05 +0200raym(~raym@user/raym)
2022-06-15 18:48:56 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection)
2022-06-15 18:50:00 +0200coot(~coot@213.134.190.95)
2022-06-15 18:52:16 +0200__monty__(~toonn@user/toonn)
2022-06-15 18:52:20 +0200pleo(~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 +0200yrlnry(~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 +0200ulvarrefr(~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 +0200leeb(~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 +0200tromp(~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 +0200slac96933(~slack1256@191.125.99.67)
2022-06-15 19:14:52 +0200segfaultfizzbuzz(~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 +0200alp(~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 +0200slack1256(~slack1256@191.126.227.66) (Ping timeout: 260 seconds)
2022-06-15 19:20:02 +0200zeenk(~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!)
2022-06-15 19:21:24 +0200chele(~chele@user/chele) (Remote host closed the connection)
2022-06-15 19:22:07 +0200nfvnt^(~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 +0200pleo(~pleo@user/pleo)
2022-06-15 19:22:23 +0200 <mrianbloom> Got an odd TH error.
2022-06-15 19:23:00 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net)
2022-06-15 19:24:04 +0200littlebobeep(~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 +0200cosimone(~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 +0200pleo(~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 +0200gmg(~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 +0200Tuplanolla(~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 +0200eggplantade(~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 +0200zebrag(~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 +0200pleo(~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 +0200waleee(~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 +0200segfaultfizzbuzz(~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 +0200segfaultfizzbuzz(~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 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2022-06-15 19:57:00 +0200tromp(~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 +0200sammelweis(~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 +0200bliminse(~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 +0200JimL(~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 +0200JimL(~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 +0200bliminse(~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 +0200eggplantade(~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 +0200benin(~benin@183.82.27.33)
2022-06-15 20:11:09 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 20:18:04 +0200yrlnry(~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection)
2022-06-15 20:18:42 +0200yrlnry(~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net)
2022-06-15 20:21:09 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it)
2022-06-15 20:22:02 +0200alp(~alp@user/alp)
2022-06-15 20:22:10 +0200 <shapr> mrianbloom: I'm an unemployed Haskeller
2022-06-15 20:22:30 +0200Cupcakus(~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 240 seconds)
2022-06-15 20:23:01 +0200elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Remote host closed the connection)
2022-06-15 20:23:03 +0200yrlnry(~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 +0200elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
2022-06-15 20:23:38 +0200nfvnt^(~nfvnt@50.223.50.178)
2022-06-15 20:24:28 +0200gdd(~gdd@129.199.146.230) (Ping timeout: 272 seconds)
2022-06-15 20:27:18 +0200Guest18(~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 +0200gentauro_when I write NTF I mean NFT
2022-06-15 20:29:37 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-15 20:30:51 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-15 20:33:04 +0200mima(~mmh@aftr-62-216-207-119.dynamic.mnet-online.de)
2022-06-15 20:33:12 +0200nefercheprureTMA
2022-06-15 20:33:18 +0200yrlnry(~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 +0200nfvnt^(~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 +0200Pickchea(~private@user/pickchea)
2022-06-15 20:35:22 +0200hydrangea(~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 +0200slac96933(~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 +0200slack1256(~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 +0200littlebo1eep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 20:40:53 +0200neoatnebula(~neoatnebu@2409:4071:4d97:a972:18dc:ffd7:cedf:6ac4) (Quit: Client closed)
2022-06-15 20:42:04 +0200littlebobeep(~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 +0200hydrangea(~hydrangea@c-73-128-193-154.hsd1.md.comcast.net) (Quit: Leaving)
2022-06-15 20:44:09 +0200littlebobeep(~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 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-06-15 20:45:04 +0200littlebo1eep(~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 +0200mixfix41(~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 +0200Pickchea(~private@user/pickchea) (Ping timeout: 256 seconds)
2022-06-15 20:49:48 +0200kimjetwav(~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 +0200tromp(~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 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-15 20:56:29 +0200kenran(~kenran@200116b82b7c6f000dc991b93662c611.dip.versatel-1u1.de)
2022-06-15 20:56:54 +0200kenran(~kenran@200116b82b7c6f000dc991b93662c611.dip.versatel-1u1.de) (Client Quit)
2022-06-15 21:03:43 +0200fserucas(~fserucas@119.65.114.89.rev.vodafone.pt)
2022-06-15 21:04:10 +0200Cupcakus(~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 +0200acidjnk(~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 +0200Haskelytic(~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 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
2022-06-15 21:15:30 +0200pleo(~pleo@user/pleo) (Ping timeout: 258 seconds)
2022-06-15 21:16:16 +0200 <mrianbloom> Thanks
2022-06-15 21:16:54 +0200pleo(~pleo@user/pleo)
2022-06-15 21:17:47 +0200jgeerds(~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 240 seconds)
2022-06-15 21:21:04 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds)
2022-06-15 21:21:18 +0200fserucas(~fserucas@119.65.114.89.rev.vodafone.pt) (Quit: Leaving)
2022-06-15 21:21:22 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-06-15 21:21:28 +0200pleo(~pleo@user/pleo) (Ping timeout: 248 seconds)
2022-06-15 21:22:33 +0200pleo(~pleo@user/pleo)
2022-06-15 21:23:54 +0200Guest18(~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 +0200kimjetwav(~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 +0200pleo(~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 +0200pleo(~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 +0200juri_(~juri@178.63.35.222) (Ping timeout: 250 seconds)
2022-06-15 21:29:52 +0200machinedgod(~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 +0200pleo(~pleo@user/pleo) (Ping timeout: 240 seconds)
2022-06-15 21:34:00 +0200pleo(~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 +0200tromp(~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 +0200littlebobeep(~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 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-06-15 21:46:44 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-06-15 21:50:30 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 21:57:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-06-15 21:59:14 +0200jinsun__(~jinsun@user/jinsun)
2022-06-15 21:59:23 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-06-15 21:59:58 +0200slac14060(~slack1256@191.125.99.67)
2022-06-15 22:02:11 +0200slack1256(~slack1256@186.11.84.227) (Ping timeout: 246 seconds)
2022-06-15 22:02:39 +0200Guest27(~Guest27@2601:281:d47f:1590::2df)
2022-06-15 22:03:29 +0200jinsun(~jinsun@user/jinsun) (Ping timeout: 255 seconds)
2022-06-15 22:04:59 +0200lyle(~lyle@104.246.145.85) (Quit: WeeChat 3.5)
2022-06-15 22:06:01 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-06-15 22:07:24 +0200azimut(~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 +0200tromp(~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 +0200stackdroid18(~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 +0200littlebobeep(~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 +0200littlebobeep(~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 +0200Guest27(~Guest27@2601:281:d47f:1590::2df) (Quit: Client closed)
2022-06-15 22:21:18 +0200jakalx(~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 +0200nate4(~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 +0200jgeerds(~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 +0200nate4(~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 +0200Guest18(~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 +0200pavonia(~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 +0200machinedgod(~machinedg@66.244.246.252)
2022-06-15 22:40:49 +0200yauhsien(~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 +0200Pickchea(~private@user/pickchea)
2022-06-15 22:47:50 +0200yauhsien(~yauhsien@61-231-38-113.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-06-15 22:48:16 +0200pleo(~pleo@user/pleo) (Ping timeout: 258 seconds)
2022-06-15 22:48:19 +0200nate4(~nate@98.45.169.16)
2022-06-15 22:48:52 +0200yauhsien(~yauhsien@61-231-59-135.dynamic-ip.hinet.net)
2022-06-15 22:49:49 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-06-15 22:49:53 +0200pleo(~pleo@user/pleo)
2022-06-15 22:57:16 +0200juri_(~juri@178.63.35.222)
2022-06-15 22:58:01 +0200Guest18(~Guest18@188.27.129.27) (Quit: Client closed)
2022-06-15 22:58:10 +0200AlexZenon(~alzenon@94.233.241.100) (Ping timeout: 246 seconds)
2022-06-15 22:58:10 +0200Alex_test(~al_test@94.233.241.100) (Ping timeout: 246 seconds)
2022-06-15 22:58:42 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-06-15 23:00:01 +0200AlexNoo(~AlexNoo@94.233.241.100) (Ping timeout: 256 seconds)
2022-06-15 23:02:07 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Remote host closed the connection)
2022-06-15 23:02:29 +0200mon_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 +0200Haskelytic(~Haskelyti@118.179.211.17) (Quit: Client closed)
2022-06-15 23:07:23 +0200mon_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 +0200kayvank(~user@52-119-115-185.PUBLIC.monkeybrains.net) (Read error: Connection reset by peer)
2022-06-15 23:20:25 +0200dsp(~dsp@cpc152107-haye27-2-0-cust227.17-4.cable.virginm.net) (Ping timeout: 256 seconds)
2022-06-15 23:20:26 +0200slac14060(~slack1256@191.125.99.67) (Read error: Connection reset by peer)
2022-06-15 23:20:39 +0200slack1256(~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 +0200Kaipii(~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 +0200albet70(~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 +0200albet70(~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 +0200michalz(~michalz@185.246.204.109) (Remote host closed the connection)
2022-06-15 23:49:02 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-06-15 23:49:52 +0200nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-06-15 23:54:31 +0200Cupcakus(~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 246 seconds)
2022-06-15 23:57:08 +0200BusConscious(~martin@ip5f5acff9.dynamic.kabel-deutschland.de) (Remote host closed the connection)