Home liberachat/#haskell: Logs Calendar

Logs on 2023-01-30 (liberachat/#haskell)

00:00:33 <monochrom> I think I haven't heard of other people here using summoner at all in the past.
00:01:18 β†’ Nolrai joins (~Nolrai@c-73-240-99-98.hsd1.or.comcast.net)
00:01:33 <Nolrai> Man it is quiet here.
00:01:53 β†’ sawilagar joins (~sawilagar@user/sawilagar)
00:02:35 <monochrom> So what do they use? cabal has a "cabal init", stack has a similar command, and I also heard that some people keep around their favourite starter directory structures.
00:06:31 <geekosaur> dunno about where you are, but it's Sunday night here and as usual for Sunday it has indeed been quiet
00:08:11 Γ— thyriaen quits (~thyriaen@2a01:aea0:dd4:4fa4:6245:cbff:fe9f:48b1) (Quit: Leaving)
00:08:27 <geekosaur> and I just copy a cabal file, LICENSE, etc. from some other project to get started πŸ™‚
00:13:04 <jackdk> I copy a previous project or `cabal init`
00:13:47 <yushyin> i bet some use nix flake templates
00:16:44 β†’ bhall joins (~brunohall@138.199.22.99)
00:17:16 <EvanR> can you guys keep it down in here, it's Sunday
00:17:36 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
00:18:36 <Nolrai> :P
00:18:45 <Nolrai> Anyway, thanks!
00:22:23 <jackdk> No it's not.
00:22:53 <geekosaur> noticed that, just ticked over 20ish minutes ago UTC
00:25:26 Γ— acidjnk quits (~acidjnk@p200300d6e715c427397aaa65a333c5a9.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
00:27:01 β†’ freeside joins (~mengwong@103.252.202.170)
00:30:59 β†’ mikoto-chan joins (~mikoto-ch@2001:999:58c:394a:63de:7cd7:5e1f:8502)
00:31:46 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
00:32:08 Γ— sawilagar quits (~sawilagar@user/sawilagar) (Quit: Leaving)
00:35:10 β†’ wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:35:11 Γ— wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:35:11 β†’ wroathe joins (~wroathe@user/wroathe)
00:37:37 <sclv> Nolrai: I just use "cabal init" and go from there
00:37:37 Γ— danza quits (~francesco@rm-19-52-159.service.infuturo.it) (Read error: Connection reset by peer)
00:37:58 <sclv> i find any other scaffolding beyond that is way too specific to one or another specific type of project
00:38:01 β†’ danza joins (~francesco@rm-19-52-159.service.infuturo.it)
00:40:21 Γ— mikoto-chan quits (~mikoto-ch@2001:999:58c:394a:63de:7cd7:5e1f:8502) (Ping timeout: 252 seconds)
00:43:04 Γ— Inst quits (~Inst@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 260 seconds)
00:46:05 Γ— laalyn quits (~laalyn@c-73-241-126-7.hsd1.ca.comcast.net) (Quit: Client closed)
00:46:23 Γ— jwiegley quits (~jwiegley@2600:1700:cf00:db0:ad33:58f8:1ff9:4d13) (Quit: ZNC - http://znc.in)
00:46:23 Γ— johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
00:47:14 β†’ mikoto-chan joins (~mikoto-ch@2001:999:68c:b163:558d:f376:4e18:be8e)
01:00:12 β†’ freeside joins (~mengwong@103.252.202.170)
01:01:33 Γ— Nolrai quits (~Nolrai@c-73-240-99-98.hsd1.or.comcast.net) (Quit: Client closed)
01:04:33 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
01:04:34 Γ— Ranhir quits (~Ranhir@157.97.53.139) (Read error: Connection reset by peer)
01:07:33 Γ— justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 252 seconds)
01:09:11 Γ— mikoto-chan quits (~mikoto-ch@2001:999:68c:b163:558d:f376:4e18:be8e) (Quit: WeeChat 3.6)
01:09:47 Γ— ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
01:11:40 β†’ Ranhir joins (~Ranhir@157.97.53.139)
01:11:44 <jean-paul[m]> https://github.com/JonathanLorimer/templates/blob/main/template/haskell/flake.nix is nice for doing stuff like getting a compatible haskell-language-server installed and setting up formatting commit hooks
01:12:18 Γ— albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:14:21 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Remote host closed the connection)
01:14:25 <jean-paul[m]> you still have to run cabal init yourself
01:15:08 β†’ freeside joins (~mengwong@103.252.202.170)
01:18:26 β†’ albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:19:52 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
01:21:13 Γ— Guest75 quits (~Guest75@178.141.149.12) (Ping timeout: 260 seconds)
01:25:52 Γ— xff0x quits (~xff0x@2405:6580:b080:900:ccbb:e6cd:6139:338f) (Ping timeout: 248 seconds)
01:29:47 Γ— m1dnight quits (~christoph@78-22-0-121.access.telenet.be) (Ping timeout: 265 seconds)
01:35:52 Γ— cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
01:40:26 <sm> hmm.. what tricks exist for re-exporting qualified imports, eg in a batteries-included module for beginners ?
01:40:56 <sm> I've got the required imports down to
01:40:56 <sm> import qualified "text" Data.Text as T
01:40:56 <sm> import qualified "text" Data.Text.IO as T
01:40:56 <sm> import Hledger.Cli.Script
01:41:11 <sm> which is not quite beginner friendly
01:48:41 β†’ potash joins (~foghorn@user/foghorn)
01:51:52 β†’ m1dnight joins (~christoph@78-22-0-121.access.telenet.be)
02:00:06 Γ— potash quits (~foghorn@user/foghorn) (Read error: Connection reset by peer)
02:00:07 Γ— beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Read error: Connection reset by peer)
02:01:22 β†’ freeside joins (~mengwong@122.11.248.245)
02:04:48 Γ— wroathe quits (~wroathe@user/wroathe) (Ping timeout: 248 seconds)
02:09:04 Γ— jargon quits (~jargon@184.101.188.5) (Remote host closed the connection)
02:11:59 β†’ xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:14:51 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
02:15:10 Γ— Jeanne-Kamikaze quits (~Jeanne-Ka@142.147.89.202) (Ping timeout: 252 seconds)
02:17:19 <sm> I notice there's ImportQualifiedPost, which makes it:
02:17:19 <sm> import "text" Data.Text qualified as T
02:17:19 <sm> import "text" Data.Text.IO qualified as T
02:17:19 <sm> (less alignment-hostile)
02:18:12 oldfashionedcow is now known as A_Cow[broke]
02:18:34 sm wants PackageImportsPost too
02:19:10 <sm> import Data.Text as T qualified from "text"
02:19:34 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Ping timeout: 252 seconds)
02:20:06 A_Cow[broke] is now known as oldfashionedcow
02:20:30 Γ— azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
02:20:59 β†’ [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:21:03 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
02:21:06 β†’ azimut joins (~azimut@gateway/tor-sasl/azimut)
02:22:08 β†’ ec joins (~ec@gateway/tor-sasl/ec)
02:24:31 Γ— [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 248 seconds)
02:26:47 Γ— emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
02:30:45 Γ— bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds)
02:33:54 Γ— opticblast quits (~Thunderbi@172.58.84.5) (Ping timeout: 260 seconds)
02:38:12 β†’ ddb joins (~ddb@tilde.club)
02:38:16 β†’ opticblast joins (~Thunderbi@172.58.85.230)
02:39:26 Γ— mei quits (~mei@user/mei) (Ping timeout: 268 seconds)
02:40:15 Γ— m1dnight quits (~christoph@78-22-0-121.access.telenet.be) (Ping timeout: 252 seconds)
02:40:34 β†’ razetime joins (~Thunderbi@117.193.5.58)
02:42:07 β†’ cheater joins (~Username@user/cheater)
02:42:15 β†’ m1dnight joins (~christoph@78-22-0-121.access.telenet.be)
02:46:37 ← pragma- parts (~chaos@user/pragmatic-chaos) (Bye!)
02:47:05 Γ— jero98772 quits (~jero98772@2800:484:1d80:d8ce:4f4f:dc32:b9c4:cb5b) (Remote host closed the connection)
02:49:28 β†’ Sgeo_ joins (~Sgeo@user/sgeo)
02:50:28 Γ— Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
02:52:48 Γ— machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 248 seconds)
03:09:00 Γ— danza quits (~francesco@rm-19-52-159.service.infuturo.it) (Read error: Connection reset by peer)
03:10:01 Γ— AkechiShiro quits (~licht@user/akechishiro) (Ping timeout: 252 seconds)
03:11:05 β†’ AkechiShiro joins (~licht@user/akechishiro)
03:12:52 Γ— carbolymer quits (~carbolyme@dropacid.net) (Ping timeout: 252 seconds)
03:13:01 β†’ carbolymer joins (~carbolyme@dropacid.net)
03:14:47 Γ— td_ quits (~td@i5387093F.versanet.de) (Ping timeout: 252 seconds)
03:16:49 β†’ td_ joins (~td@i53870926.versanet.de)
03:18:33 β†’ lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
03:18:42 Γ— Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
03:24:28 β†’ danza joins (~francesco@151.43.48.52)
03:27:55 Γ— freeside quits (~mengwong@122.11.248.245) (Ping timeout: 252 seconds)
03:28:17 β†’ bilegeek joins (~bilegeek@2600:1008:b049:eb4:91c5:5c6c:4cde:3554)
03:35:33 β†’ Lycurgus joins (~juan@user/Lycurgus)
03:35:37 β†’ freeside joins (~mengwong@122.11.248.245)
03:41:07 β†’ finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:41:07 Γ— FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:41:07 finn_elija is now known as FinnElija
03:53:35 Γ— freeside quits (~mengwong@122.11.248.245) (Ping timeout: 248 seconds)
04:05:38 Γ— hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds)
04:13:07 Γ— danza quits (~francesco@151.43.48.52) (Read error: Connection reset by peer)
04:13:31 β†’ danza joins (~francesco@151.43.48.52)
04:14:03 β†’ justsomeguy joins (~justsomeg@user/justsomeguy)
04:14:42 β†’ hugo joins (znc@verdigris.lysator.liu.se)
04:22:34 Γ— h2017 quits (~h2017@bras-base-clbaon0201w-grc-20-184-144-57-44.dsl.bell.ca) (Quit: Leaving)
04:24:48 <smol-hors> hmm, I'm trying to build a ghc to cross compile from linux to windows.. I tried `ghcup compile ghc -j 4 -b 9.0.2 -v 9.2.5 -x i686-w64-mingw32`, but I don't think that's right because I get `fatal error: windows.h: No such file or directory`
04:26:26 <Lycurgus> why do you need a cross compile? why not compile separately?
04:27:03 <Lycurgus> hs isn't binary portable
04:27:41 <Lycurgus> even if it is the math java
04:28:03 <smol-hors> as in compile on windows? I tried but I had problems linking the C++ and C parts of my program to the Haskell parts of my program
04:28:28 <Lycurgus> cross compile isn't the solution
04:29:05 <smol-hors> had Warning: corrupt .drectve at end of def file
04:29:23 <smol-hors> ok
04:29:50 <Lycurgus> yeah if you mess in hs at the ffi level bad stuff happens with ease if you're not sure of what ur doin
04:31:05 <Lycurgus> others can say, but i'm not sure how good the ghc windows support is
04:31:22 <smol-hors> it runs on mingw anyway :p
04:31:33 <smol-hors> which is apparently where the above warning comes from
04:31:36 <Lycurgus> oh yeah and there's that
04:31:40 <Lycurgus> unix in dos
04:32:05 <smol-hors> so what's the proper way to write a program in C++ and Haskell on Windows?
04:32:20 <Lycurgus> only used mingw once, a contract to do a branded version of mozilla on three platforms
04:32:48 <Lycurgus> use regular ghc for windows
04:33:04 <smol-hors> oh, is there a native ghc for windows?
04:33:07 <Lycurgus> and regular windows for c
04:33:12 <smol-hors> I just used ghcup because I thought it was recommended
04:33:13 <Lycurgus> you don't need mingw
04:33:21 <smol-hors> oh, good
04:33:47 <Lycurgus> ghcup is just a convenience tool
04:33:58 <smol-hors> all right. thanks :)
04:34:05 Γ— FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
04:34:15 <Lycurgus> np
04:34:36 β†’ FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
04:35:30 Lycurgus checks ghc on dos
04:35:37 Γ— nattiestnate quits (~nate@202.138.250.37) (Quit: WeeChat 3.8)
04:36:31 oldfashionedcow is now known as newfashionedcow
04:36:43 <Lycurgus> yeah there's two, depending on how you wanna handle bignums
04:36:49 <smol-hors> https://www.haskell.org/ghc/download_ghc_9_4_4.html#windows64
04:37:05 <smol-hors> am I in the right place? I can only see mingw
04:37:09 newfashionedcow is now known as oldfashionedrat
04:37:39 oldfashionedrat is now known as A_Cow
04:37:42 <Lycurgus> the gmp would be preferable but then you gotta get gmp on windows so maybe the haskell implementation is better
04:38:24 Γ— razetime quits (~Thunderbi@117.193.5.58) (Ping timeout: 248 seconds)
04:38:31 <Lycurgus> ah yeah i see now
04:38:38 <Lycurgus> was afraid of that
04:38:52 <Lycurgus> see ppl don't like windows
04:39:13 <Lycurgus> and so the ghc ppl have pinned the dos impl on mingw
04:39:16 <Lycurgus> bummer
04:39:24 <smol-hors> rip
04:39:55 <Lycurgus> instead of doing a proper dos port
04:40:13 <Lycurgus> it's win32 too so ur c needs to use win32
04:40:55 <Lycurgus> that's what you typically find in advanced computing cultures, not just hs
04:42:17 <Lycurgus> if possible i'd see if i could run the haskell on unix and communicate with whatever has to be on dos
04:43:34 <smol-hors> that is why I thought of cross-compilation using mingw. I got it working with C and C++ but the -x i686-w64-mingw32 for ghcup wanted a windows.h :S
04:44:29 <Lycurgus> yeah you'll have to hang out here or another hs channel for somebody with hs on dos experience, if such individuals exist
04:44:50 <Lycurgus> prolly somebody will suggest F#
04:44:55 <smol-hors> ok
04:46:56 Γ— jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 248 seconds)
04:47:02 <Lycurgus> windows.h will be in win32 headers
04:47:27 <Lycurgus> installing visual studio should get it but havent' done dos dev in a while
04:47:59 <Lycurgus> unless that means somebody elses (mingw, ghc) windows.h
04:48:59 <smol-hors> hmm
04:49:02 β†’ jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
04:49:18 <Lycurgus> there days dos has a unix env but I don't know anything about it
04:49:56 <Lycurgus> hs on windows sounds like a footgun operation
04:51:24 <Lycurgus> s/there/these/
04:56:24 Γ— Vajb quits (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer)
04:56:47 β†’ Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
04:59:09 Γ— phma quits (~phma@2001:5b0:210b:94b8:7a1f:f3bb:5a0c:334d) (Read error: Connection reset by peer)
05:00:02 β†’ phma joins (~phma@host-67-44-208-154.hnremote.net)
05:01:26 Γ— A_Cow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
05:02:56 Γ— [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
05:02:58 Γ— FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
05:03:27 β†’ FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
05:05:32 <Lycurgus> also you might search the logs for 'windows'
05:06:03 Γ— Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
05:07:33 Γ— Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
05:07:36 β†’ khumba joins (~khumba@user/khumba)
05:08:06 β†’ Vajb joins (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686)
05:11:23 Γ— justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
05:12:00 β†’ Lycurgus joins (~juan@user/Lycurgus)
05:12:42 <Lycurgus> also looks like there's a build from source for windows, that might be a proper port
05:13:02 <smol-hors> o
05:13:46 Γ— Lycurgus quits (~juan@user/Lycurgus) (Client Quit)
05:16:03 Γ— Neuromancer quits (~Neuromanc@user/neuromancer) (Ping timeout: 260 seconds)
05:21:48 <smol-hors> on ghcup there is ghcup compile ghc
05:24:04 <smol-hors> not sure why they'd only package it with mingw if that is the case
05:24:21 <smol-hors> but worth a try
05:26:27 <smol-hors> hmm, I can probably just use the -x blah command line from windows...
05:26:32 Γ— jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds)
05:26:52 <smol-hors> oh, but that defeats the purpose, nvm
05:27:32 <smol-hors> hmm
05:31:04 <smol-hors> if this doesn't work I can just cross-compile the C/C++ parts on linux to make them mingw-y and then the Haskell parts on Windows to make them mingw-y :S
05:32:01 <smol-hors> Fetching https://downloads.haskell.org/ghc/mingw/0.3/x86_64/mingw-w64-x86_64-mpfr-4.0.2-2-any.pkg.tar.xz => ghc-tarballs/mingw-w64/x86_64/mingw-w64-x86_64-mpfr-4.0.2-2-any.pkg.tar.xz
05:32:02 <smol-hors> ye
05:38:12 Γ— lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
05:46:44 <smol-hors> ok, that works. I just need ghc.exe as my ghc and x86_64-w64-mingw-g{cc, ++} as my C/C++ compilers :p
05:48:07 Γ— use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
05:48:26 β†’ use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
05:48:37 Γ— use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Read error: Connection reset by peer)
05:48:59 Γ— cyphase quits (~cyphase@user/cyphase) (Ping timeout: 248 seconds)
05:50:44 β†’ cyphase joins (~cyphase@user/cyphase)
05:58:37 Γ— mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer)
06:01:35 β†’ mcglk joins (~mcglk@131.191.49.120)
06:01:46 β†’ johnw joins (~johnw@2600:1700:cf00:db0:f0d6:3852:1ef5:be75)
06:01:49 Γ— bilegeek quits (~bilegeek@2600:1008:b049:eb4:91c5:5c6c:4cde:3554) (Quit: Leaving)
06:02:00 β†’ Guest75 joins (~Guest75@178.141.149.12)
06:02:21 Γ— mechap quits (~mechap@user/mechap) (Ping timeout: 252 seconds)
06:04:27 β†’ mechap joins (~mechap@user/mechap)
06:06:20 β†’ varoo joins (~varoo@122.161.91.19)
06:06:56 Γ— opticblast quits (~Thunderbi@172.58.85.230) (Ping timeout: 248 seconds)
06:06:56 Γ— jbalint quits (~jbalint@2600:6c44:117f:e98a:816a:9488:fb1:7b7) (Ping timeout: 248 seconds)
06:11:04 β†’ takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:14:00 β†’ freeside joins (~mengwong@122.11.248.245)
06:17:34 β†’ jbalint joins (~jbalint@2600:6c44:117f:e98a:816a:9488:fb1:7b7)
06:26:00 Γ— khumba quits (~khumba@user/khumba) ()
06:32:15 β†’ wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
06:32:15 Γ— wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
06:32:15 β†’ wroathe joins (~wroathe@user/wroathe)
06:36:45 Γ— wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
06:37:11 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:37:11 β†’ waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
06:40:04 β†’ razetime joins (~Thunderbi@117.193.5.58)
06:40:13 Γ— mcglk quits (~mcglk@131.191.49.120) (Quit: (seeya))
06:47:19 Γ— waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
06:48:48 ← jakalx parts (~jakalx@base.jakalx.net) ()
06:49:20 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
06:54:18 β†’ trev joins (~trev@user/trev)
07:00:30 β†’ jakalx joins (~jakalx@base.jakalx.net)
07:03:11 β†’ michalz joins (~michalz@185.246.207.197)
07:03:47 Γ— teddyc quits (theodorc@cassarossa.samfundet.no) (Ping timeout: 246 seconds)
07:08:44 Γ— danza quits (~francesco@151.43.48.52) (Read error: Connection reset by peer)
07:15:22 Γ— Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:17:08 β†’ teddyc joins (theodorc@cassarossa.samfundet.no)
07:18:52 β†’ mcglk joins (~mcglk@131.191.49.120)
07:19:38 Γ— freeside quits (~mengwong@122.11.248.245) (Ping timeout: 252 seconds)
07:21:10 β†’ lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
07:24:25 β†’ danza joins (~francesco@151.35.92.17)
07:26:44 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:30:18 Γ— phma quits (~phma@host-67-44-208-154.hnremote.net) (Read error: Connection reset by peer)
07:31:12 β†’ phma joins (phma@2001:5b0:212a:9278:328d:f1cd:3dee:19c5)
07:36:26 β†’ kenran joins (~user@user/kenran)
07:42:29 β†’ mmhat joins (~mmh@p200300f1c707beafee086bfffe095315.dip0.t-ipconnect.de)
07:43:01 Γ— mmhat quits (~mmh@p200300f1c707beafee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
07:46:15 β†’ mei joins (~mei@user/mei)
08:02:09 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:04:31 β†’ zeenk joins (~zeenk@2a02:2f04:a014:8700::7fe)
08:04:36 β†’ kenran` joins (~user@user/kenran)
08:05:49 β†’ lortabac joins (~lortabac@2a01:e0a:541:b8f0:8095:1260:6fef:5d26)
08:06:24 Γ— kenran quits (~user@user/kenran) (Ping timeout: 248 seconds)
08:12:34 β†’ kuribas joins (~user@ptr-17d51emy7j9a6t4odfa.18120a2.ip6.access.telenet.be)
08:16:52 β†’ coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:17:04 Γ— elkcl quits (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Ping timeout: 248 seconds)
08:22:49 <kuribas> Would it be possible to create a lightweight langage with dependent types but without the complexity of current DT language?
08:23:49 <merijn> That depends on where you perceive the complexity of those languages to be?
08:24:14 <kuribas> well, for example full dependence of values and types.
08:24:24 <kuribas> requiring partial evaluation.
08:24:39 <kuribas> instead of just allowing functions at type level.
08:25:06 <merijn> kuribas: How would you know if something type checks with functions at the type level, but no partial evaluation?
08:25:07 <tomsmeding> that's not "dependent types" :p
08:25:15 <kuribas> merijn: full evaluation?
08:25:30 <merijn> kuribas: You don't always have the data for full evaluation
08:25:45 <merijn> kuribas: What if part of the type data is coming from runtime data?
08:25:46 β†’ elkcl joins (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru)
08:25:47 <kuribas> how is dependent haskell going to do that?
08:26:18 <merijn> kuribas: The same way as Agda and Coq, presumably
08:26:22 <tomsmeding> doesn't ghc _already_ do symbolic evaluation at the type level with type families
08:26:24 <merijn> (or Idris)
08:26:28 <merijn> tomsmeding: yes
08:26:29 <kuribas> merijn: indeed, not "real" dependent types then.
08:26:39 <merijn> kuribas: ??
08:26:56 <merijn> How do agda and coq not have "real" dependent types??
08:27:03 <tomsmeding> kuribas: I haven't read this, but might be relevant, and sounds good given the author list http://strictlypositive.org/Easy.pdf
08:27:20 <kuribas> merijn: I mean they have. But my hypothetical language not.
08:28:51 <tomsmeding> also relevant: https://github.com/VictorTaelin/Formality
08:29:09 <kuribas> hmm, but then adding unknown sized vectors gives a partial expression...
08:29:25 <kuribas> like "Vector (n + m) Int"
08:31:33 <kuribas> I guess partial evaluation is necessary then.
08:31:58 <tomsmeding> (point of these two links is to show that implementing a full dependently-typed language is not super hard, apparently)
08:32:14 <tomsmeding> (though they probably miss a couple of the niceties that other languages have)
08:32:18 <kuribas> tomsmeding: ghc does, but I believe dependent haskell will allow you to run actual haskell functions at type level, no?
08:32:25 <tomsmeding> kuribas: how is that different
08:32:45 <tomsmeding> once you have partial evaluation, the "only" thing that's necessary is expanding the language on which you do so
08:33:00 <kuribas> tomsmeding: well, the semantics of value and type functions are different in haskell.
08:33:07 <tomsmeding> difficulty is that the current partial evaluation model is I think not suited for _efficiently_ doing so
08:33:22 <tomsmeding> what's the difference?
08:33:24 <kuribas> the haskell one?
08:33:32 <tomsmeding> yeah
08:33:40 <kuribas> tomsmeding: well, type functions are bidirectional, like in prolog.
08:33:48 β†’ freeside joins (~mengwong@103.252.202.170)
08:33:50 <tomsmeding> that's just additional interpretations of existing code
08:33:55 <tomsmeding> existing semantics doesn't change, right?
08:34:17 <tomsmeding> it's not like those extra rules are _inconsistent_ with the existing semantics
08:34:40 <kuribas> tomsmeding: I think idris typechecking is more efficient than haskell typelevel programming. There is normalization by evaluation which is supposedly very efficient.
08:34:54 <tomsmeding> right, and ghc doesn't do that AFAIK
08:35:19 <kuribas> tomsmeding: I guess not, just very tricky to implement...
08:35:27 <tomsmeding> to a first approximation, I believe it evaluates a bit whenever it needs the information in order to continue typechecking
08:35:36 <tomsmeding> like demand-driven evaluation, not "go for it now"
08:36:48 <tomsmeding> previously with a weird flattening algorithm that did something special with type families, now (after richard eisenberg's recent simplifications) a less weird algorithm but one that still does something weird with type families
08:37:10 <kuribas> type families are just very hard to reason about in haskell.
08:37:18 <kuribas> I think dependent types are much easier.
08:37:36 <kuribas> I don't get why so much haskell people have this conception that DT make stuff more complicated.
08:37:46 <kuribas> stuff being type level programming of course.
08:38:36 <kuribas> There is something to say about keeping things simple, but I don't like the clojure way of throwing away all static types.
08:40:10 <kuribas> people at my work have been saying haskell and type system is too complicated, but I can do it because I have "a big brain".
08:40:16 <kuribas> I am pretty sure that is not the case.
08:40:25 <kuribas> At least not bigger than my colleages.
08:41:02 ← nerdypepper parts (~nerdypepp@user/nerdypepper) (WeeChat 3.8)
08:41:12 <kuribas> So I have been thinking about where the complexity is.
08:41:25 <tomsmeding> are you sure it's not just familiarity?
08:41:30 <kuribas> yeah indeed.
08:41:37 <kuribas> And a lot of this knowledge builds up.
08:41:49 <kuribas> IMO understanding DT starts with understanding curry-howard.
08:42:01 <tomsmeding> programming experience with non-functional languages is almost useless when starting with haskell
08:42:11 <tomsmeding> only later do you find the bits that you _can_ reuse
08:42:13 <kuribas> well, these guys do clojure.
08:42:23 <tomsmeding> I guess the same goes for functional but untyped languages, to a lesser extent
08:42:36 <kuribas> But IMO clojure is closer to lisps than to static typed functional languages.
08:42:46 <kuribas> because they use little abstraction
08:43:03 <kuribas> instead use symbolic manipulation
08:43:09 <tomsmeding> there is a significant jump from mostly-functional-with-a-bit-of-mutation to purely functional
08:43:53 <energizer> isn't clojure purely functional?
08:44:24 <tomsmeding> (I thought it used commonly used set! like lisps do, but I haven't actually used clojure, kuribas must answer this one)
08:44:35 <energizer> i haven't either
08:44:49 <kuribas> tomsmeding: they try to avoid mutation
08:45:00 <tomsmeding> ah so it's better than most lisps
08:45:02 <tomsmeding> "better"
08:45:14 <kuribas> scheme as well.
08:45:28 <kuribas> but common lisp is mostly imperative.
08:46:08 <kuribas> IMO mutable in the large is worse than mutable in the small (mutating a function local variable).
08:46:27 <tomsmeding> local mutation is not a problem, see ST
08:46:50 <kuribas> Python in particular makes immutable hard, because it has frozen dataclasses, but no way to update a single variable.
08:47:03 <tomsmeding> in fact I'd like a language that let me do local mutation without the ceremony that ST requires
08:47:06 β†’ avicenzi joins (~avicenzi@2a00:ca8:a1f:b004::c32)
08:47:25 <energizer> aren't most languages like that?
08:47:27 <kuribas> tomsmeding: you mean provable pure, right?
08:47:40 <tomsmeding> in my wish language, yes
08:48:04 <tomsmeding> that would probably need language support in the form of some additional syntax
08:48:05 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
08:48:07 <energizer> are you allowed to mutate the arguments in wishlang?
08:48:37 <tomsmeding> perhaps if we also have some form of linear types
08:48:41 <tomsmeding> probably uniqueness types
08:49:14 <kuribas> tomsmeding: I'd like polymorphic effects, like in flix https://flix.dev/
08:49:24 <tomsmeding> well, what do you mean with "mutate the arguments"
08:49:46 <tomsmeding> that only presents problems when you mutate internals, and mutating internals is a thing that I'd need to watch out for anyway
08:49:56 <tomsmeding> at least if you have lazy semantics, less so with strict semantics
08:50:08 <kuribas> tomsmeding: hmm, I think flix allows local mutation.
08:50:17 <energizer> this sounds like rust
08:50:46 <kuribas> energizer: rust doesn't have purity annotations, does it?
08:50:47 <tomsmeding> but then with like 10% of the boilerplate lol
08:50:51 <tomsmeding> and that
08:50:58 <energizer> if it's not `mut`, you're not mutating it
08:51:00 <tomsmeding> I like haskell for its concise syntax
08:51:15 <Hecate> oh hi tomsmeding o/
08:51:21 <tomsmeding> hello!
08:51:33 <Hecate> kuribas: what I like in flix is the datalog :D
08:52:57 β†’ machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:53:15 <dminuoso> 09:43:53 energizer | isn't clojure purely functional?
08:53:20 <dminuoso> What is that "purely functional" anyway?
08:53:40 <tomsmeding> kuribas: I should look at Flix, sounds cool
08:53:43 <dminuoso> I think in general there's different conflating ideas, some of them not well principled.
08:53:59 β†’ freeside joins (~mengwong@103.252.202.170)
08:54:04 <dminuoso> And more to the point, I think `purely` and `functional` are orthoginal ideas.
08:54:39 <kuribas> I think it typically means that functions don't perform side-effects.
08:54:53 <kuribas> so clojure isn't "pure".
08:55:33 <dminuoso> I think a more valuable notion lies in Haskell - i.e. distinguishing between evaluation and execution.
08:55:45 <dminuoso> And that isnt directly linked to whatever "function" is or means
08:56:17 β†’ acidjnk joins (~acidjnk@p200300d6e715c47228ee5485b7272aa0.dip0.t-ipconnect.de)
08:56:19 <kuribas> it does in the sense that a function always returns the same answer for the same inputs.
08:56:20 <dminuoso> Because clealy we have the same notion of C routines that are effectful `putStrLn :: String -> IO ()` for instance
08:56:34 Γ— shriekingnoise_ quits (~shrieking@186.137.175.87) (Ping timeout: 260 seconds)
08:57:20 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Remote host closed the connection)
08:58:12 <dminuoso> kuribas: I think people focusing on that idea really mean to talk about referential transparencyu
08:58:17 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
08:58:50 <dminuoso> Anyway
08:59:01 <dminuoso> "purely functional" conflates "pure functions" with "functional" and I think its a bit silly
08:59:13 β†’ gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
08:59:25 <energizer> there are a whole bunch of things that pure means
08:59:28 β†’ bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
08:59:44 <energizer> or, can
09:00:37 <dminuoso> I think `pure` usually refers to functions being pure "deterministic output and lack of side effects", or expressions being pure (no non-pure functions being used in a given expression). Are there other notions?
09:00:39 <maerwald> kuribas: what does "answer" mean?
09:00:44 <energizer> "no side effects" seems like a stricter thing than "referentially transparent"
09:02:16 <energizer> example, one take on "computational effects" breaks it down into various components https://bpa.st/QB4NG
09:03:31 β†’ nschoe joins (~q@141.101.51.197)
09:03:45 Γ— varoo quits (~varoo@122.161.91.19) (Read error: Connection reset by peer)
09:04:05 β†’ varoo joins (~varoo@122.161.91.19)
09:05:04 <Hecate> I have no idea why we still use the terminology of "no side-effect" instead of "effect tracking"
09:05:17 <Hecate> which seems closer to (my) reality (at least :p)
09:05:37 <dminuoso> "effect tracking" is a bit of an exaggeration though
09:06:06 <dminuoso> But sure, effect tracking - but that is done by separating evaluation from execution
09:06:25 <dminuoso> Though it is ironic that in the underlying model execution happens *in* evaluation (that is we actually have an impure underlying language)
09:06:48 <dminuoso> In the absence of unsafePerformIO, it is just an implementation detail however
09:07:14 <Hecate> dminuoso: Certainly when you only have 'IO a' as a return type it's a bit obfuscated, but we can also have 'insertPackage :: (DB :> es) => Package -> Eff es ()'
09:07:58 <Hecate> and tbh I have yet to see F#/C# get the same thing :D Instead they pass the implementation/handlers as function parameters
09:08:12 <dminuoso> Hecate: Given that, enough extensions enabled, our type system is turing complete, then Haskell is anything that is expressiblie in a turing complete language.
09:08:24 <dminuoso> Im not entirely sure whether being able to *model* it as a library is necessarily a property of the language
09:10:10 <Hecate> dminuoso: no no don't derail the conversation, we were in the distinction between "no side-effect" and "tracking side-effects" :p
09:10:22 β†’ CiaoSen joins (~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:10:54 <dminuoso> Okay but then "we dont really track side-effects in the language", but rather "you could do it..."
09:11:22 <Hecate> dminuoso: on my side it's the rigidity of the wording of "no side-effects" that bugs me
09:12:08 <Franciman> would you prefer Β«no observable side-effectsΒ»?
09:12:11 <Hecate> unless we really start from the basis that "side-effect" means "unchecked yet observable IO"
09:12:45 <Hecate> yeah I guess should synchronise our watches here
09:13:14 Γ— tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
09:13:18 <Hecate> my usage (and understanding) of "side-effect" is that it is 1. observable and 2. in what we would customarily call "IO"
09:13:39 <Franciman> a question: observable from who? And from where?
09:13:53 <Hecate> from the user
09:14:10 <Hecate> that's why FFI to C for addition is not necessarily relevant to be put in IO
09:14:25 <Hecate> whereas FFI that can block a program's execution would be a more relevant candidate
09:14:48 <dminuoso> Hecate: Its interesting, there is certainly notions that consider "side-effects" stuff that you cannot observe from within your domain.
09:14:58 <dminuoso> (the term "side-effects" almost literally implies it even)
09:16:07 <Hecate> dminuoso: yes! whereas people outside of Haskell seem to hear "no side-effect" and automatically reply "well if I can't perform side-effects what the fuck am I supposed to do with this language? add numbers until the heat death of the universe?"
09:16:41 <Hecate> let's check Wikipedia
09:16:53 <Hecate> > In computer science, an operation, function or expression is said to have a side effect if it modifies some state variable value(s) outside its local environment, which is to say if it has any observable effect other than its primary effect of returning a value to the invoker of the operation
09:16:54 <lambdabot> <hint>:1:20: error: parse error on input β€˜,’
09:17:07 <Hecate> bugger off lambdabot
09:18:26 <Hecate> dminuoso: so I partly agree that it is "non-observable from within [a] domain" except that the domain of the user / outside world is the superset of all domains that can have effects escaping these domains unchecked :p
09:18:45 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:18:46 <Hecate> here domain = local environment
09:19:08 <dminuoso> What is local environment?
09:19:40 <Hecate> dminuoso: isn't that the domain that you were talking about?
09:19:47 <Hecate> or do you have another definition in mind?
09:19:48 <dminuoso> Oh that domain
09:19:48 <[exa]> Hecate: adding numbers produces a heat side effect btw :D
09:19:57 <Hecate> [exa]: :3
09:20:18 <dminuoso> And adding numbers also allocates registers, using a value pollutes cache, alters timings
09:20:30 <dminuoso> Using CPU time degrades system performance
09:20:39 <dminuoso> So there's even non-hypothetical effects
09:21:04 <Hecate> hence the concept of user-observability
09:21:10 <Hecate> use 2 registers -> meh
09:21:20 <Hecate> block the execution -> okay now that's a bit more visible
09:21:20 <dminuoso> Maybe a good definition of `side-effects` would be that of syscalls.
09:22:06 <dminuoso> Hecate: there's certainly code that is only correct under the assumption of certain timing properties - namely cryptographic code.
09:22:28 <Hecate> dminuoso: and that's observable as shit yeah
09:22:30 <dminuoso> So in that sense, even an extra register allocation from the register file can alter timings of code
09:23:06 <Hecate> hmm
09:23:11 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
09:23:13 <Hecate> dminuoso: have you read the article btw?
09:23:15 β†’ use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
09:23:19 <Hecate> https://en.wikipedia.org/wiki/Side_effect_(computer_science)
09:23:27 <Hecate> temporality is talked about
09:23:42 <[exa]> the discussion about purity seems completely skewed by the sole definition of purity being a negative (!βˆƒ) clause in an open world
09:24:14 β†’ akegalj joins (~akegalj@93-138-129-164.adsl.net.t-com.hr)
09:24:15 <dminuoso> Hecate: Sure, I think one important part that is missing here is that purity has a tolerance level.
09:24:29 <dminuoso> That is, purity is not just about altering state outside the local environment, but whether you care about that at all.
09:24:40 <dminuoso> whether that is relevant for the correctness/meaning of your program
09:25:06 <[exa]> ( ^ yep, you can't have purity without closing the world. )
09:25:34 Γ— jespada_ quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:25:55 <dminuoso> which begs the question what "local environment" even means
09:26:23 <dminuoso> Because if your program semantics depend upon it, isnt that part of its "environment" as well?
09:26:38 <Hecate> it means pretty much what you need to mean to ensure that your model of purity & unchecked side-effects enabled you to write programs that are correct according to how you need them to be :P
09:28:01 <[exa]> Hecate: that's the usual practice in programming everywhere (sometimes not wrt. purity but wrt. data consistency and other properties.)
09:28:38 <Hecate> dminuoso: a vague, vague defintion of "local environment" is "the thing that holds your state" and then I'll refer you to idempotence :P
09:28:52 <[exa]> you need to draw the line, and many people accept the usual line drawn (usually C-ish or math-ish) as the universal truth
09:29:00 <dminuoso> Hecate: but clearly, if it "modifies other state" and you care about that state, then that "other state is part of your state as well"
09:29:08 <Hecate> dminuoso: yep
09:29:41 <Hecate> that being said I'm more in favour of bounded contexts
09:30:17 <Hecate> and so you explicitly acknowledge boundaries between entities based on what they do, and not necessarily on what they depend on, in the sense of business operations
09:30:22 <Hecate> (business as in domain)
09:32:54 <Hecate> (come to my talk at FOSDEM if you want to learn more about bounded contexts)
09:33:00 <Hecate> (#ad)
09:33:09 Γ— kuribas quits (~user@ptr-17d51emy7j9a6t4odfa.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1))
09:41:53 Γ— azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
09:43:06 β†’ jespada joins (~jespada@148.252.133.207)
09:45:07 Γ— danza quits (~francesco@151.35.92.17) (Read error: Connection reset by peer)
09:45:11 β†’ chele joins (~chele@user/chele)
09:51:31 Γ— malte quits (~malte@mal.tc) (Remote host closed the connection)
09:52:34 β†’ malte joins (~malte@mal.tc)
09:55:20 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
09:57:47 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
10:00:25 β†’ freeside joins (~mengwong@103.252.202.170)
10:02:30 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Ping timeout: 255 seconds)
10:02:56 β†’ danza joins (~francesco@151.53.27.222)
10:04:43 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
10:08:00 Γ— haritz quits (~hrtz@user/haritz) (Ping timeout: 248 seconds)
10:09:02 Γ— ft quits (~ft@p4fc2a257.dip0.t-ipconnect.de) (Quit: leaving)
10:10:46 Γ— lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
10:11:49 Γ— xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds)
10:20:16 Γ— maerwald quits (~maerwald@mail.hasufell.de) (Changing host)
10:20:16 β†’ maerwald joins (~maerwald@user/maerwald)
10:20:28 <akegalj> How come haskell has so much less security issues reported than other languages https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=Haskell ? Is it just that it is not used much in security contexts so nobody found problems ?
10:21:10 <akegalj> (I mean, nobody was looking for the problems)
10:22:38 <merijn> akegalj: I think 2 main things: 1) not a lot of user facing services, and 2) memory safety
10:22:39 <[_________]> it's because Haskell is safe language.
10:23:16 <merijn> akegalj: Google's Project Zero found that something, like 60% of CVEs relates to memory safety issues. So being memory safe by default rules out close to two-thirds of issues ;)
10:23:44 <maerwald> akegalj: it's not used in security contexts
10:24:26 <maerwald> and generally has less popular libraries/systems that are regularly screened
10:24:46 <[exa]> the other 40% of the issues is traditionally input validation, which is also super easy to do right in haskell
10:25:10 Γ— talismanick quits (~talismani@2601:200:c181:4c40::1be2) (Ping timeout: 252 seconds)
10:25:28 <[exa]> re security context, maybe hledger should count in there
10:26:05 <merijn> I think the two main security issues with Haskell would be either 1) DOS attacks due to libraries not being battle-tested enough for that and 2) wildly unsafe crypto due to insufficient reviewing and laziness making constant time crypto computations hard
10:26:25 <maerwald> oh, but we have types... it must be safe
10:26:45 <merijn> [exa]: hledger is run on a local system, to exploit any bugs in hleder the user's system has to already be compromised
10:26:59 <merijn> At which point you don't need bugs in hledger anymore
10:27:10 <[exa]> ah true
10:27:22 Γ— jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
10:27:32 <merijn> And most famous Haskell things are like that
10:28:17 <merijn> I guess bazqux and maybe shellcheck's website are the only big "public facing" Haskell services I know
10:28:20 <maerwald> we have TUF implemented in Haskell... well, half-assed, that is
10:28:28 <maerwald> not sure it has been reviewed
10:28:34 <maerwald> hackage/cabal rely on it
10:28:43 <merijn> maerwald: why half-assed?
10:28:49 <maerwald> because it's tied to hackage
10:28:54 <[exa]> "hackage relies on it" might count as a pretty tough review
10:29:01 <maerwald> [exa]: no
10:29:10 <merijn> [exa]: how so?
10:29:24 β†’ __monty__ joins (~toonn@user/toonn)
10:29:38 <maerwald> merijn: https://github.com/haskell/hackage-security/issues/249
10:29:46 <[exa]> it's on internet and no one sploited it yet?
10:29:56 <maerwald> [exa]: how do you know?
10:30:10 [exa] starts feeling unsafe
10:31:08 <merijn> maerwald: I mean, I don't think that makes the implementation half-assed. Not as useful as it could be, but "implemented half-assed" sounds like the actual code implementing it is of negligent quality
10:31:30 <maerwald> yes, that is definitely half-assed
10:31:41 <maerwald> TUF is a framework that you're supposed to implement as a library
10:31:47 <maerwald> no idea what this is
10:32:30 <maerwald> and I'm questioning whether you can have a clean implementation if it's NOT implemented as a library
10:33:36 Γ— jespada quits (~jespada@148.252.133.207) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:33:40 <maerwald> you can't even audit it properly that way
10:38:28 Γ— jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
10:39:31 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:40:14 β†’ freeside joins (~mengwong@103.252.202.170)
10:40:24 β†’ jpds joins (~jpds@gateway/tor-sasl/jpds)
10:41:25 β†’ raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:43:07 <Profpatsch> akegalj: The biggest issue you can expect from Haskell libraries is A) DDoS via space leaks and B) not a lot of eyes on some of the code, even sometimes very deep in the library stack
10:43:39 <Profpatsch> This is mitigated somewhat by the fact that attackers usually don’t optimize for Haskell (unless it’s a targeted attack but then you have other problems)
10:44:11 <Profpatsch> I’d expect Haskell crypto to hold up somewhat, due to the fact that nobody targets it
10:44:12 <razetime> I'm trying to load a file into ghci from this project: https://github.com/diku-dk/futhark (src/Language/Futhark/Query.hs), but it complains that the imported modules are not in the search files. How do I tell it which modules to load?
10:44:27 <merijn> Profpatsch: That's a DoS, not DDoS :p
10:44:30 <Profpatsch> yes
10:44:37 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
10:44:42 <Profpatsch> A single machine probably is enough to crash 80% of the Haskell webservices out there :P
10:44:45 <tomsmeding> razetime: have you tried `cabal repl`?
10:44:56 <razetime> i will try that
10:45:14 <tomsmeding> razetime: `cabal repl` is the thing that starts ghci with all of the relevant modules in its search path
10:45:28 <merijn> Profpatsch: Well, matter, that DDoS relies on distribution to run a target out of bandwidth. Exploiting a space leak to blow up memory consumption is just "denial of service" :p
10:45:30 <tomsmeding> razetime: use `:m *Language.Futhark.Query` afterwards to switch focus into that module
10:45:32 <razetime> i see, thanks. Will ask if I have any more doubts
10:45:54 <tomsmeding> razetime: see also https://downloads.haskell.org/ghc/latest/docs/users_guide/ghci.html#ghci-module-cmd
10:45:55 <Profpatsch> akegalj: don’t let that dissuade you though, Haskell is still one of the best languages for writing web services out there
10:46:10 <Profpatsch> And issues are gonna be solved in time and with enough industry adoption
10:46:29 <Profpatsch> It has a lot less bugs than anything nodejs I’d expect
10:46:47 Γ— razetime quits (~Thunderbi@117.193.5.58) (Read error: Connection reset by peer)
10:47:01 β†’ razetime joins (~Thunderbi@117.193.5.58)
10:47:27 <razetime> sorry tomsmeding, cabal repl ate all my ram and crashed my computer :')
10:47:36 <razetime> so it got disconnected
10:47:38 <tomsmeding> πŸ˜‚
10:47:43 <tomsmeding> wat
10:48:01 <razetime> futhark build is pretty heavy on the resources, since it's a language compiler
10:48:04 <Profpatsch> akegalj: For a recent security issue that has been found and fixed, look at the Aeson Map/KeyMap migration.
10:48:11 <tomsmeding> razetime: ah right, might want to try `cabal build -j1` before
10:48:33 <tomsmeding> the -j1 makes it use one parallel compiler unit only, which of course also reduces memory consumption
10:48:52 <razetime> i already did a cabal build. it seems to be doing something different for cabal repl
10:49:01 <razetime> does cabal repl -j1 work?
10:49:24 <razetime> yeah it's in the help
10:49:35 <Profpatsch> razetime: you migth want to set up https://profpatsch.de/notes/preventing-oom :)
10:49:58 <maerwald> Profpatsch: fixed after years and pushing the maintainers to actually do it
10:50:02 <tomsmeding> nah if you already built, then that -j1 is doing the wrong thing I think
10:50:04 <maerwald> convincing them it's an actual problem
10:50:14 <maerwald> it's embarrassing
10:50:25 <Profpatsch> maerwald: well are they paid to do it? :)
10:50:33 <maerwald> Idc
10:50:41 <Profpatsch> e.g. random 1.2 only happened cause the people working on it were doing so fulltime
10:50:57 <razetime> Profpatsch: neat, i'll install it
10:51:00 <Profpatsch> It took some … mailing list drama to convince the maintainers to unblock
10:51:06 <Profpatsch> but then it went through just fine
10:51:10 <maerwald> Profpatsch: not sure I like the new random
10:51:21 β†’ jmdaemon joins (~jmdaemon@user/jmdaemon)
10:51:25 <Profpatsch> maerwald: maybe the interface is not the best, but you gotta work with what you got
10:51:26 <maerwald> and I don't think resources were blocking the aeson fix
10:51:30 <maerwald> more like attitude
10:53:21 <maerwald> I have a lot of understanding for the "I'm an unpaid maintainer" lot... I'm one myself
10:53:38 <maerwald> but when it's about security, I have low tolerance
10:54:18 <maerwald> if you lack understanding, get out of the way... if you need resources to fix a security issue, speak up and inform the community
10:54:28 <Profpatsch> agreed
10:54:54 <Profpatsch> (I don’t mainain any critical infra in my spare time tho)
10:57:10 <Profpatsch> Different topic;
10:57:25 <Profpatsch> I have a [Foo] where each foo has a [Bar]
10:57:38 <Profpatsch> And I want to do some batched I/O for all of the Bars
10:57:56 β†’ haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
10:57:56 Γ— haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
10:57:56 β†’ haritz joins (~hrtz@user/haritz)
10:58:08 <Profpatsch> And the result should be a [Baz] where Baz is a Foo with the Bar replaced by the result of the batched IO
10:58:24 <Profpatsch> But how do I do that while keeping track of which Bar belonged to which Foo
10:58:53 <akegalj> Profpatsch: by no means I think haskell is bad, its my main tool for most problems. I was just wondering when I saw cve list why haskell isn't listed there.
10:58:56 <Profpatsch> I guess I could just go via list indexes but that fees a bit meh
10:59:19 <tomsmeding> Profpatsch: what structure can your "batched IO" procedure take
10:59:35 β†’ kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
11:00:03 <Profpatsch> tomsmeding: Well it just takes a list of Bars
11:00:11 <Profpatsch> and returns a list of results
11:00:15 <tomsmeding> Profpatsch: are Foo and Baz related by types somehow? Like Foo ~ Cheese Bar, Baz ~ Cheese ProcessedBar
11:00:29 β†’ xff0x joins (~xff0x@ai081074.d.east.v6connect.net)
11:00:45 <Profpatsch> tomsmeding: I … could make it that way*
11:00:54 <Profpatsch> But I don’t want to overcomplicate this hrm
11:01:09 β†’ jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
11:01:21 <tomsmeding> if so, then perhaps Cheese could be Traversable, and then your batched IO thing could take a Traversable instead of a list
11:01:23 <Profpatsch> You know what, I think I’m gonna do an overapproximation, this code has to go away soon anyway
11:01:33 <tomsmeding> you can make a list of traversables a traversable
11:01:59 <tomsmeding> then modulo wrapping, the processing becomes `traverse process` :)
11:02:21 <tomsmeding> uh, no, just `process`, sorry
11:02:21 <Profpatsch> tomsmeding: My I/O has to serialize into a list anyway, since I’m contacting a database
11:02:25 <tomsmeding> but that kind of thing
11:02:28 <tomsmeding> ah
11:02:30 <Profpatsch> so that just moves the problem into `process` :)
11:03:50 <tomsmeding> I mean one could make an `f :: Traversable f => f a -> ([a], [b] -> f b)`
11:04:08 <tomsmeding> no indices involved in f
11:04:17 Γ— haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb2 - https://znc.in)
11:08:30 β†’ haritz joins (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk)
11:08:31 Γ— haritz quits (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
11:08:31 β†’ haritz joins (~hrtz@user/haritz)
11:08:32 Γ— haritz quits (~hrtz@user/haritz) (Remote host closed the connection)
11:10:11 <jackdk> Profpatsch: use a traversal to focus on all the `Bar`s across all the `Foo`s, use `partsOf` on it to turn it into a "lens" over lists?
11:11:22 β†’ haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
11:11:22 Γ— haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
11:11:22 β†’ haritz joins (~hrtz@user/haritz)
11:11:23 Γ— haritz quits (~hrtz@user/haritz) (Remote host closed the connection)
11:11:27 tomsmeding suspects that my 'f' is basically partsOf
11:11:32 tomsmeding doesn't know lenses
11:11:54 <Profpatsch> jackdk: does it recover the structure even after >>=ing the resulting list through some IO?
11:12:09 <jackdk> I'm noodling with a scratch buffer, standby
11:12:34 <Profpatsch> We don’t use lens here, but this is intruiging nonetheless
11:12:53 <Profpatsch> > Note: You should really try to maintain the invariant of the number of children in the list.
11:12:55 <lambdabot> <hint>:1:55: error: parse error on input β€˜of’
11:13:01 <Profpatsch> Ah, that would hint towards it
11:13:16 <tomsmeding> Profpatsch: https://paste.tomsmeding.com/2DKZ49Cx
11:13:37 <tomsmeding> oh ignore the tsilFromList, I don't use that
11:14:43 <tomsmeding> using execState first and evalState afterwards certainly feels lensy
11:16:44 <Profpatsch> Looks like partsOf really does the trick if your IO action retains the list length
11:17:09 β†’ haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
11:17:10 Γ— haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
11:17:10 β†’ haritz joins (~hrtz@user/haritz)
11:18:21 Γ— haritz quits (~hrtz@user/haritz) (Remote host closed the connection)
11:18:47 Γ— CiaoSen quits (~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
11:19:30 <Profpatsch> It seems to use https://twanvl.nl/blog/haskell/non-regular1 internally
11:19:37 <Profpatsch> (The β€œBazaar” thing)
11:20:15 <jackdk> Profpatsch: Have to use unsafePartsOf because we are changing types: https://www.irccloud.com/pastebin/HgYfkiew/ReplaceTheBars.hs
11:20:49 Γ— econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:21:55 <Profpatsch> jackdk: p cool
11:22:01 <Axman6> % :t partsOf template
11:22:01 <yahb2> <interactive>:1:1: error: Variable not in scope: partsOf :: t0 -> t ; ; <interactive>:1:9: error: Variable not in scope: template
11:22:18 <Axman6> % import Control.Lens
11:22:18 <yahb2> <no location info>: error: ; Could not find module β€˜Control.Lens’ ; It is not a module in the current program, or in any known package.
11:22:20 <tomsmeding> sorry no lens :p
11:22:24 <tomsmeding> only boot packages currently
11:22:27 <Axman6> D:
11:22:37 <tomsmeding> :t partsOf template
11:22:39 <lambdabot> (Functor f, Data t, Typeable a) => LensLike f t t [a] [a]
11:22:45 <tomsmeding> lambdabot got yo' back
11:23:56 <Axman6> partsOf template is the magic incantation to find all the a's anywhere within a given t and let you mess with the
11:24:00 <Axman6> m
11:24:05 <Axman6> <3 tomsmeding
11:26:08 Γ— Guest75 quits (~Guest75@178.141.149.12) (Ping timeout: 260 seconds)
11:27:39 β†’ teo joins (~teo@user/teo)
11:27:49 <Profpatsch> lens would be awesome if it weren’t so impossible to use in any team
11:27:56 <Profpatsch> It’s a bit like call/cc
11:28:14 <Profpatsch> okay in small doses, but def not in a codebase that should be maintainable
11:28:29 β†’ freeside joins (~mengwong@103.252.202.170)
11:28:42 <jackdk> I don't understand the BazaarT stuff but I would seriously consider working out what unsafePartsOf is doing and reinventing that; if `Foo` is `Traversable` then your "optic" to find all the `a`s is `traverse . traverse`, you have `(&)` from `Data.Function` in `base`, and `(%%~) = id`
11:29:25 <Profpatsch> jackdk: I think it boils down to what tomsmeding posted
11:29:29 <Profpatsch> Just a lot more generalized
11:30:52 Γ— pavonia quits (~user@user/siracusa) (Quit: Bye!)
11:30:57 <jackdk> Profpatsch: I think you're right; his `foo` function looks a lot like a deepified uniplate-esque thing
11:31:21 <Profpatsch> the simplified type of Bazaar is (a -> f b) -> f t
11:35:24 <jackdk> $WORK's solution to the lens thing is to a) not go too far beyond get/set and even fooOf functions unless you have a good reason, and b) get everyone to read Optics by Example
11:35:58 β†’ beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
11:36:19 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
11:40:59 <tomsmeding> Axman6: don't forget to
11:41:00 <tomsmeding> @botsnack
11:41:00 <lambdabot> :)
11:41:17 <k> @botsnack
11:41:18 <lambdabot> :)
11:47:02 <tomsmeding> Profpatsch: I was overcomplicating things https://paste.tomsmeding.com/bfWxC3Dd
11:49:55 β†’ haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
11:49:56 Γ— haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
11:49:56 β†’ haritz joins (~hrtz@user/haritz)
11:50:16 β†’ gaff joins (~gaff@49.207.230.13)
11:52:08 <Profpatsch> tomsmeding: Ah pretty cool, to unflatten the result you just pass the suffix of the list through the traversal
11:52:11 <Profpatsch> Makes sense yeah!
11:52:18 <Profpatsch> Super intuitive as well
11:53:36 <tomsmeding> I've written code like this on specific data types before but only now realised that it can be generalised to any Traversable :)
11:54:18 <Profpatsch> yeah super cool
11:54:41 <gaff> i am using vim with haskell language server. on completions from imports, i see a pop up that shows the type and a link to the haddock html documentation, but i am not able to navigate to the documentation link in vim. is there any way this can be done?
11:55:57 <tomsmeding> gaff: try typing 'gx' with the cursor on the url
11:56:07 <tomsmeding> (source: https://stackoverflow.com/questions/9458294/open-url-under-cursor-in-vim-with-browser )
11:56:15 <Profpatsch> tomsmeding: jackdk now I also understand why you need unsafePartsOf, because partsOf will re-insert the original value if the result is not long enough
11:56:22 <Profpatsch> so the types of the output and input have to be the same
11:56:41 <tomsmeding> yeah I spotted that in the partsOf docs :)
11:56:50 <gaff> https://mmhaskell.com/blog/2022/9/29/using-haskell-in-vim-the-basics has a screenshot of the typical autocomplete screen i see
11:57:44 <tomsmeding> Profpatsch: so that 'unsafe' is precisely the 'error' in my code :)
11:57:48 <Profpatsch> exactly
11:57:59 <gaff> tomsmeding: the problem is that it is a pop up coming from coc-vim, and there is no way to navigate that pop up to reach the url
11:58:08 <tomsmeding> ah
11:58:20 <tomsmeding> (my nvim lsp client does have navigable popups)
11:58:48 <gaff> tomsmeding: you use neo vim?
11:59:04 <tomsmeding> sounds like something to bring up on the coc issue tracker as a feature request
11:59:07 <tomsmeding> yeah
11:59:12 <gaff> ok
11:59:19 <gaff> i am using vim
12:00:17 <gaff> well, i thought the haskell language server people who set this up may be knowing about it, because this pop up is something they created
12:00:24 <tomsmeding> no
12:00:30 <tomsmeding> the text in it is something they created
12:00:41 <tomsmeding> the popup itself is how coc decides to display those messages
12:00:53 <gaff> ok
12:01:29 Γ— Buliarous quits (~gypsydang@46.232.210.139) (Ping timeout: 260 seconds)
12:03:01 β†’ Buliarous joins (~gypsydang@46.232.210.139)
12:05:34 Γ— gaff quits (~gaff@49.207.230.13) (Ping timeout: 260 seconds)
12:08:50 β†’ gaff joins (~gaff@49.207.232.105)
12:09:36 Γ— elkcl quits (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Remote host closed the connection)
12:09:37 β†’ freeside joins (~mengwong@103.252.202.170)
12:10:01 <gaff> tomsmeding: sorry i got disconnected. question: in nvim, you are able to navigate to the link for the documentation and open it?
12:10:46 β†’ oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
12:13:27 β†’ jumper149 joins (~jumper149@base.felixspringer.xyz)
12:14:05 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
12:15:24 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:31:46 Γ— gaff quits (~gaff@49.207.232.105) (Quit: Bye ...)
12:37:45 <tomsmeding> @tell gaff Yes but that's because my nvim lsp client allows changing focus to the popup and treating it as a read-only buffer
12:37:45 <lambdabot> Consider it noted.
12:38:56 Γ— razetime quits (~Thunderbi@117.193.5.58) (Remote host closed the connection)
12:43:07 β†’ freeside joins (~mengwong@103.252.202.170)
12:44:08 Γ— califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
12:46:45 β†’ califax joins (~califax@user/califx)
12:47:27 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
12:50:04 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:53:12 Γ— akegalj quits (~akegalj@93-138-129-164.adsl.net.t-com.hr) (Quit: leaving)
13:03:56 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Read error: Connection reset by peer)
13:07:37 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
13:09:02 β†’ CiaoSen joins (~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
13:09:21 Γ— jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
13:09:50 β†’ jpds joins (~jpds@gateway/tor-sasl/jpds)
13:14:06 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:14:08 Γ— troydm quits (~troydm@user/troydm) (Ping timeout: 248 seconds)
13:14:57 Γ— lortabac quits (~lortabac@2a01:e0a:541:b8f0:8095:1260:6fef:5d26) (Ping timeout: 252 seconds)
13:15:43 Γ— coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
13:16:07 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
13:17:12 β†’ tremon joins (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl)
13:30:25 β†’ Guest86 joins (~Guest86@2001:16a2:4222:d000:2df4:2526:36aa:1e0d)
13:31:21 Γ— Guest86 quits (~Guest86@2001:16a2:4222:d000:2df4:2526:36aa:1e0d) (Client Quit)
13:37:05 Γ— bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:40:59 Γ— jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
13:43:04 β†’ jero98772 joins (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb)
13:45:20 β†’ coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
13:59:28 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
14:03:49 β†’ akegalj joins (~akegalj@222-217.dsl.iskon.hr)
14:06:44 β†’ thegeekinside joins (~thegeekin@189.180.66.244)
14:11:09 β†’ thongpv joins (~thongpv87@14.179.159.25)
14:11:45 Γ— thongpv quits (~thongpv87@14.179.159.25) (Remote host closed the connection)
14:12:28 β†’ thongpv joins (~thongpv87@14.179.159.25)
14:13:12 Γ— thongpv quits (~thongpv87@14.179.159.25) (Remote host closed the connection)
14:14:14 β†’ thongpv joins (~thongpv87@14.179.159.25)
14:14:33 β†’ kurbus joins (~kurbus@user/kurbus)
14:15:03 Γ— thongpv quits (~thongpv87@14.179.159.25) (Remote host closed the connection)
14:15:28 β†’ thongpv joins (~thongpv87@14.179.159.25)
14:16:26 Γ— thongpv quits (~thongpv87@14.179.159.25) (Remote host closed the connection)
14:18:24 β†’ lortabac joins (~lortabac@2a01:e0a:541:b8f0:6f34:bf9c:ac6f:4344)
14:21:08 Γ— kurbus quits (~kurbus@user/kurbus) (Ping timeout: 260 seconds)
14:25:37 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
14:26:45 β†’ kurbus joins (~kurbus@user/kurbus)
14:27:35 β†’ waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
14:32:13 β†’ thongpv joins (~thongpv87@2402:9d80:3f4:1510:9f76:2d33:c304:1848)
14:32:14 <yin> tomsmeding: is there a keybinding to focus navigation on the popup? i think i do it by keeping `K` pressed but am not sure if that's intended behaviour
14:35:57 Γ— cheesecake quits (~cheesecak@2600:6c4a:7c7f:ec9b:9cb2:b42f:48ab:b49b) (Quit: Client closed)
14:39:12 β†’ Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
14:48:47 Γ— Angelz quits (Angelz@user/angelz) (Ping timeout: 264 seconds)
14:51:33 β†’ Hammdist joins (~Hammdist@67.169.114.135)
14:51:38 Γ— jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:52:19 β†’ jpds joins (~jpds@gateway/tor-sasl/jpds)
14:52:48 <Hammdist> I'm trying to write a program that interfaces with GHC library. To get a Var name, I figure I have to case on Id in the https://hackage.haskell.org/package/ghc-9.4.4/docs/src/GHC.Types.Var.html#Var type. However I get Not in scope: data constructor β€˜Id’. any ideas?
14:53:23 <Hammdist> I have tried import GHC.Types.Var but it didn't fix anything
14:54:50 β†’ Sgeo joins (~Sgeo@user/sgeo)
14:55:20 <lortabac> Hammdist: IIRC the constructors are not exported but you can use 'varName'
14:55:34 <lortabac> https://hackage.haskell.org/package/ghc-9.4.4/docs/GHC-Types-Var.html#v:varName
14:57:15 <Hammdist> ah thanks -- will give that a go
14:59:02 Γ— thongpv quits (~thongpv87@2402:9d80:3f4:1510:9f76:2d33:c304:1848) (Ping timeout: 255 seconds)
14:59:55 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds)
15:01:20 Γ— CiaoSen quits (~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
15:01:58 Γ— kurbus quits (~kurbus@user/kurbus) (Ping timeout: 260 seconds)
15:02:06 β†’ rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
15:02:09 Γ— rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection)
15:02:53 β†’ rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
15:04:37 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
15:06:20 <segfaultfizzbuzz> is there a list of the "characteristics of code" somewhere? for example, code may have: memory safety, totality, bounds checking/correctness, -- i would like to continue or "complete" this list
15:10:44 β†’ [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:11:42 β†’ merijn joins (~merijn@86.86.29.250)
15:13:10 <Hammdist> memory safety isn't a property of code, it's a property of the programming language
15:13:21 β†’ kurbus joins (~kurbus@user/kurbus)
15:13:28 <Hammdist> correctness is a property of the code
15:13:41 <segfaultfizzbuzz> or should we say it is a property of the binary which gets generated...?
15:14:28 <Hammdist> it would be hard to define memory safety for a binary. a correct binary could do a lot of dodgy things that are perfectly safe in its context
15:14:32 <segfaultfizzbuzz> presumably unless the programming language is "stiff" there will always be a way to say "this function can do unsafe things"
15:15:00 β†’ CiaoSen joins (~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
15:15:24 <segfaultfizzbuzz> so the real criteria here would be something like "program written in lang X without using unsafe"
15:16:11 <segfaultfizzbuzz> i think languages are/can be designed to enforce characteristics of code, so there will probably always be an overlap here
15:16:19 Γ— merijn quits (~merijn@86.86.29.250) (Ping timeout: 252 seconds)
15:16:45 β†’ shriekingnoise joins (~shrieking@186.137.175.87)
15:16:48 β†’ Angelz joins (Angelz@Angelz.oddprotocol.org)
15:16:55 <segfaultfizzbuzz> probably what happens is someone writes code in some language, people run into lots of bugs, and finally someone gets pissed off and promotes that bug type into some kind of formal invariant which can be enforced at the language level
15:17:53 <segfaultfizzbuzz> for example languages don't have "choice of unit (e.g. meters kilometers etc) declaration/safety" today, but it would be reasonable to require such a thing
15:24:08 Γ— kurbus quits (~kurbus@user/kurbus) (Ping timeout: 260 seconds)
15:30:11 <kuribas> Hammdist: "correctness" doesn't exist.
15:30:15 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
15:30:33 <kuribas> It's a meaningless word that people like throwing around.
15:30:39 <segfaultfizzbuzz> kuribas: right, but we can list desirable characteristics
15:31:03 <segfaultfizzbuzz> and perhaps we can say that if we choose good and sufficiently orthogonal characteristics then then program is likely to be better as it meets more of the characteristics
15:31:43 <kuribas> segfaultfizzbuzz: a much more meaningful term is "consistency". I'd like my program to be consistent.
15:32:06 <segfaultfizzbuzz> well these things, whatever they are called, are externally enforced i think?
15:32:24 <kuribas> you mean by tooling?
15:32:39 <kuribas> Tooling can verify these properties.
15:32:47 <segfaultfizzbuzz> language, tooling, abstract constructs, rules, and maybe heuristics of programming which are not enforced today
15:33:25 <kuribas> A program can be consistent in a dynamic language, but it is going to be hard to verify the claim.
15:33:41 <segfaultfizzbuzz> can you define consistency?
15:34:06 <segfaultfizzbuzz> the term doesn't look right to me because consistency is something which, in my mind, ought to be detectable (such as by the program itself)
15:34:29 <segfaultfizzbuzz> but i am interested in all characteristics, including characteristics which the program itself can't know to enforce
15:34:56 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
15:35:22 <akegalj> I would like to test function `foo :: IO ()` which reads some input from stdin and outputs somthing to stdout. How to do this simply ? Is there some wrapper `run :: [Text] -> IO Text` that will echo some Text to foo and return stdout back. I see shelly package can be used to model such behaviour, but I wonder is there something simpler maybe in base to use to achieve this?
15:35:47 <earthy> segfaultfizzbuzz: you may want to look at F#, which does have units of measure, or Frinklang which is built around the concept of physically correct units. Furthermore, you may want to look into dependently typed programming languages such as Idris
15:35:52 <geekosaur> the program can't ensure self-consistency because it can't know the problem it's solving and therefore what counts as consistent within the bounds of that problem. this is one reason external tests exist
15:36:30 <kuribas> segfaultfizzbuzz: it means different parts of the program have the same notions of data or behaviour.
15:36:50 <geekosaur> this is also why typeclasses in Haskell don';t have built-in consistency checks; you need a stronger language such as Idris to express them
15:37:04 <segfaultfizzbuzz> earthy: these are relevant but don't directly address the question,... dependent typing i think is a method/capability for enforcing code invariants at compile time but does not itself describe what should be enforced
15:37:33 <earthy> and there's Eiffel as well, with its contracts.
15:37:35 <segfaultfizzbuzz> geekosaur: re: can't ensure self-consistency, right
15:37:47 <geekosaur> segfaultfizzbuzz, it can express invariants in the type system that a language like Haskell or especially Python can't
15:37:58 <segfaultfizzbuzz> yes i understand that
15:38:12 Γ— coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
15:38:20 <segfaultfizzbuzz> but my question is what are (typically fairly universal) desirable invariants
15:38:30 <earthy> segfaultfizzbuzz: then I think you must be clearer as to what you try to state; I do not think I understand
15:38:32 <kuribas> segfaultfizzbuzz: I think he means encoding laws in the typeclass.
15:38:44 <segfaultfizzbuzz> i can repeat my question:
15:38:51 <geekosaur> again, many of them aren't universal, they;re defined by the problem the program is intended to solve
15:39:19 <earthy> not even garbage collection is universally beneficial
15:39:44 <segfaultfizzbuzz> well if you were driving a car which had its system software proven to be memory safe, you would be happier and more relaxed than if it was not, right?
15:40:00 <earthy> (for e.g. certain classes of hard real time systems you may want purely statically allocated memory)
15:40:10 <segfaultfizzbuzz> right
15:40:11 <[exa]> segfaultfizzbuzz: what a relief they now make the cars in javascript! :]
15:40:13 <jean-paul[m]> That's not universal, though. That's control software for a car. That's very, very specific.
15:40:27 <segfaultfizzbuzz> [exa]: seriously lol but that's just the ui frontend junk i am pretty sure
15:40:31 <earthy> hell, one of my cars runs windows :D
15:41:03 <segfaultfizzbuzz> jean-paul[m]: ok so are you saying that the desired characteristics of code are always highly context dependent?
15:41:06 <earthy> and yeah, just in the 'media/telephone' junk :)
15:41:06 <[exa]> segfaultfizzbuzz: I'd say frontend includes the steering wheel.
15:41:39 <jean-paul[m]> segfaultfizzbuzz: I don't think you can separate "desire" from a context, right.
15:41:43 <segfaultfizzbuzz> maybe my car example is too strong of a context
15:41:53 <earthy> I think it may be worthwhile to think about what kinds of guarantees you'd like from your code and get most of them with little work
15:42:10 <earthy> static typing is one way of getting guarantees
15:42:17 <earthy> garbage collection another
15:42:45 <segfaultfizzbuzz> right but *purpose* of garbage collection is to provide memory safety (or, memory safety while limiting programmer effort/likelihood of doing it wrong)
15:42:57 β†’ freeside joins (~mengwong@103.252.202.170)
15:43:12 β†’ kurbus joins (~kurbus@user/kurbus)
15:43:39 <segfaultfizzbuzz> and so my interest is the *purpose*, the *desirable characteristic* (eg memory safety) rather than the *method to accomplish the characteristic* (garbage collection, dynamic types etc)
15:44:04 <segfaultfizzbuzz> and the question would be what is a reasonably good list of these desirable charcteristics
15:45:14 Γ— geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
15:45:14 β†’ allbery_b joins (~geekosaur@xmonad/geekosaur)
15:45:18 allbery_b is now known as geekosaur
15:46:07 <stefan-_> purity of (a part of) the program is a nice property
15:46:24 <kuribas> segfaultfizzbuzz: I find referential transparency one of the most important properties.
15:46:42 <kuribas> Because it means you can understand a part of the program without the need to understand the whole.
15:47:03 <kuribas> which is something that clojure is missing, despite trying hard to be functional.
15:47:07 <segfaultfizzbuzz> ha
15:47:46 <kuribas> Not being referential transparent means you need to understand a lot to make a small change. Also you need to understand the consequences of that change.
15:47:59 <segfaultfizzbuzz> another example i only partially understand might be "algebraicity"--for example, using floating point can destroy associativity
15:48:50 <earthy> segfaultfizzbuzz: you're getting way into what cross-functional requirements do I want to achieve - territory
15:49:14 <segfaultfizzbuzz> earthy: i would say don't think about actually writing code, think about this stuff like a wish list
15:49:31 <jean-paul[m]> Referential transparency and algebraicity support the same thing - breaking a problem down so you can solve it in tiny pieces. So, "composability".
15:49:56 <segfaultfizzbuzz> sure
15:49:59 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
15:54:24 Γ— kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
15:55:16 <stefan-_> another useful property is immutability of data structures
15:55:35 <segfaultfizzbuzz> sure, (which might be part of referential transparency...)
15:56:10 <earthy> then again, mutability is very powerful for performance...
15:56:48 <kuribas> earthy: err, I contest that, unless you are in a tight inner loop.
15:57:01 <earthy> that's the problem really, these things are almost always 'it depends'
15:57:35 <earthy> kuribas: oh, I prefer my data to be immutable in general, and there's performance gains to be had that way as well
15:58:03 <segfaultfizzbuzz> performance characteristics are valid characteristics of a program but i am trying to keep them independent as a consideration
15:58:19 Γ— raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
15:58:44 <segfaultfizzbuzz> earthy: probably what you mean to say is that "i am willing to sacrifice correctness for speed" which is probably true more often than we would like to admit
15:58:49 <kuribas> earthy: after a long list of considerations, it may have an impact. But often it's the first thing people mention when talking about FP.
15:59:52 β†’ raehik joins (~raehik@82.21.176.157)
15:59:53 Γ— califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
16:00:07 Γ— jinsun_ quits (~jinsun@user/jinsun) (Quit: You have been kicked for being idle)
16:00:38 <segfaultfizzbuzz> one thing i'm not sure about is whether "linearity" is a desirable characteristic in many situations,... i kind of think it is
16:00:41 β†’ jinsun_ joins (~jinsun@user/jinsun)
16:00:49 <segfaultfizzbuzz> because linearity helps guarantee the absence of resource leaks
16:02:03 β†’ califax joins (~califax@user/califx)
16:02:10 β†’ merijn joins (~merijn@86.86.29.250)
16:02:21 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
16:02:35 <earthy> but the purpose is 'no resource leaks' then, isn't it?
16:03:12 <segfaultfizzbuzz> earthy: sure,
16:03:29 <segfaultfizzbuzz> i am mentioning the method of achieving the characteristic in passing
16:03:51 <earthy> which Erlang provides with process trees and let-it-crash
16:04:33 <segfaultfizzbuzz> earthy: does it though? i'm assuming crashing comes from some kind of process memory size limit, but you could probably open a zillion files or ports in that limit
16:04:44 β†’ nerdypepper joins (~nerdypepp@user/nerdypepper)
16:05:13 <earthy> which then get cleaned up by the process reaper
16:05:15 ← jinsun_ parts (~jinsun@user/jinsun) ()
16:05:31 <segfaultfizzbuzz> ok i am not terribly familiar with erlang
16:06:38 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Ping timeout: 246 seconds)
16:10:07 Γ— kenran` quits (~user@user/kenran) (Remote host closed the connection)
16:14:29 β†’ freeside joins (~mengwong@103.252.202.170)
16:14:38 <segfaultfizzbuzz> how does the process reaper know it can kill stuff?
16:14:59 Γ— oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
16:15:00 Γ— lortabac quits (~lortabac@2a01:e0a:541:b8f0:6f34:bf9c:ac6f:4344) (Quit: WeeChat 2.8)
16:16:30 β†’ oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
16:17:15 β†’ jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
16:18:05 Γ— dsrt^ quits (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
16:18:40 <earthy> it doesn't. it just kills stuff. :D
16:18:46 <segfaultfizzbuzz> hahaha
16:19:10 <waleee> looks like the scheduler does some checks with various signal messages, https://www.erlang.org/doc/reference_manual/processes.html#receiving-signals
16:19:31 <earthy> but honestly the entire concept of supervision trees and programming the resource behaviour separately from the worker processes is neat and not directly linearized
16:22:35 <segfaultfizzbuzz> needing to be able to exit the process under supervision at any time makes me nervous
16:27:23 Γ— FragByte quits (~christian@user/fragbyte) (Quit: Quit)
16:27:33 β†’ FragByte joins (~christian@user/fragbyte)
16:34:54 <Hammdist> how do I convert a ByteString to a String?
16:35:12 Γ— werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
16:36:37 Γ— merijn quits (~merijn@86.86.29.250) (Ping timeout: 252 seconds)
16:38:27 Γ— raehik quits (~raehik@82.21.176.157) (Ping timeout: 252 seconds)
16:38:50 <geekosaur> Data.ByteString.Char8.unpack?
16:39:14 <geekosaur> (going that direction is safe; the other direction truncates)
16:39:29 β†’ coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
16:39:44 Γ— beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Quit: beteigeuze)
16:40:12 β†’ beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
16:42:10 Γ— beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Client Quit)
16:42:33 β†’ troydm joins (~troydm@user/troydm)
16:42:37 β†’ beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
16:43:12 <Hammdist> in this definition of a case expression: | Case (Expr b) b Type [Alt b] <-- what is the second b for?
16:44:20 β†’ kurbus joins (~kurbus@user/kurbus)
16:44:46 <[exa]> Hammdist: where is that from? AST parameters typically mean either extra info (such as location) or binders type (such as variable IDs)
16:45:06 <Hammdist> it's from https://hackage.haskell.org/package/ghc-9.4.4/docs/src/GHC.Core.html#Expr
16:45:56 <Hammdist> I don't see any AST information on the other cases
16:46:18 <[exa]> you can see e.g. that Lam has the `b` (that's the variable that's being bound)
16:46:40 <Hammdist> sure but all the bindings in a case are in the alternatives
16:46:51 <geekosaur> not true of case in core
16:47:05 <geekosaur> core also binds the result of evaluating the expression
16:47:17 <[exa]> it says up there: The binder gets bound to the value of the scrutinee, and the Expr must be that of all the case alternatives
16:47:28 <[exa]> `b` is that binder.
16:47:50 <[exa]> I'm not sure if this has a direct representation in "normal" haskell
16:48:01 <geekosaur> it doesn't
16:48:44 <Hammdist> so I must translate it as implying a let binding then
16:49:01 <Hammdist> let x = expr in case x of ...
16:49:11 <Hammdist> as x may appear in ...?
16:49:41 <geekosaur> let !x = expr in …
16:49:47 <geekosaur> case is strict, let is lazy
16:50:28 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:50:55 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 260 seconds)
16:51:03 Γ— kurbus quits (~kurbus@user/kurbus) (Ping timeout: 260 seconds)
16:51:56 glguy_ is now known as glguy
16:55:29 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
16:59:43 Γ— beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 252 seconds)
16:59:56 β†’ econo joins (uid147250@user/econo)
17:07:31 β†’ beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
17:10:25 Γ— [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds)
17:13:49 Γ— chele quits (~chele@user/chele) (Remote host closed the connection)
17:18:04 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
17:22:09 Γ— teo quits (~teo@user/teo) (Ping timeout: 256 seconds)
17:23:19 β†’ werneta joins (~werneta@137.79.207.195)
17:23:43 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds)
17:26:45 Γ— ddellacosta quits (~ddellacos@143.244.47.83) (Ping timeout: 260 seconds)
17:27:30 β†’ kurbus joins (~kurbus@user/kurbus)
17:30:11 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:31:03 Γ— CiaoSen quits (~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
17:31:24 Γ— kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:53:02 Γ— nschoe quits (~q@141.101.51.197) (Quit: Switching off)
17:53:05 β†’ tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:54:23 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
17:55:35 Γ— use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
17:55:55 β†’ use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
17:57:57 Γ— zeenk quits (~zeenk@2a02:2f04:a014:8700::7fe) (Quit: Konversation terminated!)
17:58:45 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 252 seconds)
18:05:59 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
18:08:09 β†’ talismanick joins (~talismani@2601:200:c181:4c40::1be2)
18:08:22 Γ— talismanick quits (~talismani@2601:200:c181:4c40::1be2) (Client Quit)
18:18:40 Γ— gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
18:21:58 β†’ gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
18:36:03 Γ— coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
18:36:39 β†’ coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
18:39:00 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
18:39:33 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
18:40:35 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
18:42:42 β†’ azimut joins (~azimut@gateway/tor-sasl/azimut)
18:43:36 Γ— trev quits (~trev@user/trev) (Remote host closed the connection)
18:49:34 β†’ opticblast joins (~Thunderbi@172.58.84.5)
18:51:58 β†’ slack1256 joins (~slack1256@181.42.52.81)
18:53:38 β†’ turlando joins (~turlando@user/turlando)
18:57:02 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 246 seconds)
19:00:21 Γ— opticblast quits (~Thunderbi@172.58.84.5) (Ping timeout: 252 seconds)
19:00:43 Γ— freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
19:01:37 β†’ bilegeek joins (~bilegeek@2600:1008:b0a9:5822:3cbe:e760:543a:34cb)
19:07:44 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:11:12 Γ— haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb2 - https://znc.in)
19:13:10 Γ— coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
19:14:01 β†’ haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
19:14:01 Γ— haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
19:14:01 β†’ haritz joins (~hrtz@user/haritz)
19:16:37 β†’ ddellacosta joins (~ddellacos@static-198-44-136-174.cust.tzulo.com)
19:17:20 Γ— mechap quits (~mechap@user/mechap) (Ping timeout: 248 seconds)
19:19:19 β†’ mechap joins (~mechap@user/mechap)
19:20:32 Γ— beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 248 seconds)
19:22:34 β†’ beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
19:25:50 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Remote host closed the connection)
19:27:07 Γ— beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 252 seconds)
19:28:12 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
19:28:35 β†’ bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
19:32:59 Γ— ddellacosta quits (~ddellacos@static-198-44-136-174.cust.tzulo.com) (Ping timeout: 252 seconds)
19:33:59 β†’ freeside joins (~mengwong@103.252.202.170)
19:35:28 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
19:41:20 β†’ kenran joins (~user@user/kenran)
19:42:29 Γ— bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
19:43:56 Γ— oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
19:44:26 β†’ oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
19:45:24 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:46:33 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
19:48:26 <tomsmeding> yin: indeed if you press K twice you end up in the popup; whether that's intended behaviour no clue, but it works :)
19:49:55 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
19:50:40 β†’ cheater_ joins (~Username@user/cheater)
19:50:57 β†’ ft joins (~ft@p4fc2a257.dip0.t-ipconnect.de)
19:51:50 β†’ PepsiLepreux joins (~pepsi@iron.vengarl.com)
19:52:32 Γ— cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
19:52:35 cheater_ is now known as cheater
19:56:39 <yin> where can i learn about the differences between Haskell2010 and GHC2021 ?
19:56:52 β†’ MasseR46 joins (~MasseR@2001:bc8:47a0:1521::1)
19:57:35 <yin> tomsmeding: yeah, it kind of feels buggy but i do it on purpose often
19:57:52 β†’ haasn` joins (~nand@haasn.dev)
19:59:17 <yushyin> yin: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/control.html#controlling-extensions
20:01:27 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
20:03:06 β†’ mc47 joins (~mc47@xmonad/TheMC47)
20:03:26 kurbus is now known as test123
20:03:30 test123 is now known as kurbus
20:04:28 <yin> ty
20:04:37 <mauke> what is DoAndIfThenElse?
20:06:01 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
20:07:00 ← jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
20:09:21 <mniip> mauke, whether a ";" is allowed before an "else" in an if-then-else
20:09:36 Γ— Lears quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
20:09:49 <mniip> so that inside a do-block, the if and the else could have the same indentation level (thus inserting a semicolon inbetween)
20:09:57 β†’ [Leary] joins (~Leary]@user/Leary/x-0910699)
20:12:13 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
20:12:13 Γ— oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
20:12:36 β†’ oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
20:13:17 <segfaultfizzbuzz> why does the SQL "type system" diverge from the haskell "type system" (or that of other good languages, maybe rust)?
20:13:58 <segfaultfizzbuzz> for instance i don't think (?) SQL has algebraic data types, and SQL allows you to make types nullable
20:14:43 <geekosaur> because SQL started out as IBM's SEQUEL II, and was designed for the type systems of COBOL and PL/I
20:14:54 <geekosaur> in particular this is why numeric types work the way they do
20:15:11 <segfaultfizzbuzz> wow that's a real answer
20:15:42 <segfaultfizzbuzz> lol so an ORM is really a cobol compatibility layer? lol
20:16:16 <segfaultfizzbuzz> so why not drop concrete on sql and greenfield stuff?
20:16:20 <darkling> IIRC, the NULL also has a purpose in relational algebra (of which SQL is a poor and mangled implementation).
20:17:09 <dsal> SEQUEL II - The Sequel Sequel.
20:17:16 <segfaultfizzbuzz> sequel ii - the second one
20:17:40 <kurbus> sequel ii is also called just 3
20:18:01 <dsal> We use persistent which is kind of neat, but also kind of annoying.
20:18:05 <darkling> ORMs aren't about the COBOL -- they're about trying to map the general structures to each other. You'd have the same problems trying to map anything similarly based on relational algebra into anything using objects.
20:18:15 <monochrom> In fact since SQL predates Haskell and Rust, I would say that Haskell and Rust diverged from SQL's type system. >:)
20:18:35 <darkling> OO ideas probably map much more cleanly onto CODASYL-like things...
20:19:04 <geekosaur> some of us still wish C. J. Date's QUEL had won out over SEQUEL
20:19:22 <geekosaur> (see original Ingres)
20:19:34 Γ— __monty__ quits (~toonn@user/toonn) (Quit: leaving)
20:19:35 <monochrom> But clearly generally younger languages have better chances to improve and refine ideas than old languages.
20:19:40 <segfaultfizzbuzz> i mean, who cares right?
20:19:54 <segfaultfizzbuzz> start from the best ideas rather than holding up old creaky ones
20:20:07 <EvanR> You can't teach an old language new tricks. Unless it's C++, which is I guess forever young?
20:20:07 <dsal> esqueleto at least gives us the ability to reuse fragments of queries.
20:20:10 <darkling> I really need to get some practice time in with Datalog...
20:20:15 <geekosaur> not only does it have more rational types, it's a clean implementation of relational calculus instead of an iffy implementation of relational algebra
20:23:03 <monochrom> Hell, even the idea of polymorphism was very loose and broad and muddled in the 1960s until Strachey proposed that there is a difference between ad hoc and parametric, and even then he gave only a wordy (read: can be bent misinterpreted) definition, we had to wait until Reynolds to figure out a mathematical definition.
20:23:10 <segfaultfizzbuzz> the most essential concept here i guess is persistence right?
20:24:13 <monochrom> To be fair, if Strachey didn't die early, probably he could figure out the same mathematical definition eventually.
20:25:21 Γ— mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8)
20:26:43 Γ— use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
20:27:02 β†’ use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
20:31:00 β†’ lortabac joins (~lortabac@2a01:e0a:541:b8f0:885e:183b:67ff:4e55)
20:31:00 <dminuoso> akegalj: I think maerwald's mention of lack of screeing is probably a more important one. While the general memory safety certainly rules out 2/3 of bugs, the general lack of research and publications specifically on other errors is slightly worrying. One particular example is cryptonite, a pure-haskell written family of cryptographic functions, which to my knowledge has not been audited or
20:31:02 <dminuoso> analyzed for side-channels.
20:32:09 <dminuoso> I haven't seen research into whether or why Haskell would be more secure.
20:33:03 <dminuoso> It may even be, that an attitude in which you blindly assume lack of bugs due to memory safety and type safety could introduce additional vectors.
20:33:31 <dminuoso> A prime example might be `postgresql-simple`, which uses some non-audited adhoc self-written query parameter interpolation rather than relying on the builtin libpq features.
20:33:54 <dminuoso> Who knows, maybe that library is ripe for SQL injections, in which case a lot of packages have some dangerous attack vectors.
20:34:58 <geekosaur> iirc there has been research demonstrating that declarative FP languages are vulnerable to side channel attacks in general
20:35:00 β†’ jmdaemon joins (~jmdaemon@user/jmdaemon)
20:35:42 <geekosaur> and it's hard to prevent them because you can't e.g. do nonsense work to ensure a failing case takes the same time as a success case
20:36:43 <monochrom> Hrm, why is it not code optimization that foils nonsense work, and therefore all performant compilers are vulnerable?
20:36:51 <segfaultfizzbuzz> geekosaur: i believe it
20:37:09 <dminuoso> monochrom: In facft it is.
20:37:17 <segfaultfizzbuzz> security is mostly social acceptability and theatre lol
20:37:24 <geekosaur> monochrom, in C there are ways to defeat optimization in those cases, or just disable optimization
20:37:31 <dminuoso> monochrom: Which is why well designed cryptographic libraries in part disable or control optimizations that interfere with certain assumptions in cryptographic algorithms.
20:37:38 <geekosaur> and yes, this does come up in other languages
20:37:45 <dminuoso> Some libraries use inline assembly in critical sections to properly control the code
20:38:28 Γ— kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
20:39:43 <dminuoso> for instance intel processors have AES specific instructions that are supposed to have constant-time/constant-power behavior. interestingly, there's some recent data that suggest that intel and arm processors might have a lot more timing dependence on values than users are led to believe
20:39:45 <dminuoso> https://www.openwall.com/lists/oss-security/2023/01/25/3
20:39:56 <monochrom> Along another orthogonal axis, automatic GC introduces a lot of side information. But then this one is not particular to FP either, basically everyone except possibly C and Fortran has it.
20:39:57 <dminuoso> but GCC would never willingly generate them because they have poor performance
20:40:20 Γ— avicenzi quits (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 246 seconds)
20:41:40 β†’ Lycurgus joins (~juan@user/Lycurgus)
20:41:49 <geekosaur> monochrom, indeed quite a lot of security critical software is written in C or a subset of C++ because of that
20:42:04 <dminuoso> There's a bunch of languages that let you express cryptographic algorithms for which you can extract some kind of program that will use "provably" correct assembly that has the lack of certain side-effect vectors
20:43:57 Γ— califax quits (~califax@user/califx) (Remote host closed the connection)
20:44:22 <segfaultfizzbuzz> heh
20:44:28 Γ— cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 265 seconds)
20:44:40 β†’ cods joins (~fred@82-65-232-44.subs.proxad.net)
20:44:48 <dminuoso> (under the assumption that the hardware will honor its promites...)
20:44:51 β†’ califax joins (~califax@user/califx)
20:45:07 <dminuoso> which intel doesnt have a great track record for. :p
20:46:35 β†’ pavonia joins (~user@user/siracusa)
20:47:47 Γ— danza quits (~francesco@151.53.27.222) (Ping timeout: 255 seconds)
20:50:36 Γ— Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
20:50:57 <dminuoso> I think HACL* is one of the prominent examples of this
20:51:17 <dminuoso> Which made its way into Firefox even
20:51:45 <segfaultfizzbuzz> wao ... yeah timing safety is important but very expensive to ensure,...
20:53:53 <segfaultfizzbuzz> someone mentioned declarative--where can i find a good discussion of declarative programming
20:54:20 <monochrom> I have a cunning plan! We should demand random-time instead... >:)
20:55:01 <segfaultfizzbuzz> monochrom: injecting timing noise is probably a cheap and effective way to get around timing side channel problems
20:55:04 <monochrom> Very old textbooks that have titles along the line of "principles of programming languages".
20:55:21 <monochrom> i.e., those who still believe in "paradigms".
20:55:29 <segfaultfizzbuzz> haha as opposed to?
20:55:35 <segfaultfizzbuzz> chatgpt? lol
20:55:56 Γ— oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
20:56:18 <segfaultfizzbuzz> i've been thinking lately though that this whole practice of trying to construct invariants is statistically invalid in most circumstances... like if you construct rules for business logic, they will eventually break, even if they are very good and last for a good while
20:56:23 Γ— kenran quits (~user@user/kenran) (Remote host closed the connection)
20:57:09 β†’ cheater_ joins (~Username@user/cheater)
20:57:44 Γ— lortabac quits (~lortabac@2a01:e0a:541:b8f0:885e:183b:67ff:4e55) (Quit: WeeChat 2.8)
20:58:04 <monochrom> As opposed to for example what Shriram Krishnamurthi from Brown University proposes about "paradigms mean nothing" and you dissect a language's features and semantics instead.
20:58:25 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Remote host closed the connection)
20:58:29 Γ— cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
20:58:36 cheater_ is now known as cheater
20:58:55 <monochrom> which I just illustrated earlier. Instead of discussing side channels in "FP", I discuss side channels under super-smart code optimizations, under GC, etc.
20:59:28 <mauke> random noise just means you need to collect more samples
20:59:46 <segfaultfizzbuzz> pyret (from shriram) looks pretty πŸ”₯
20:59:54 <monochrom> https://cs.brown.edu/courses/csci1730/2012/ is his course I learned from about analysing languages (as opposed to paradigm-classifying).
21:00:11 <mauke> IIRC one of the old SSL attacks did timing shenanigans over the internet and it still worked
21:01:23 <segfaultfizzbuzz> monochrom: cool
21:01:54 β†’ cheater_ joins (~Username@user/cheater)
21:02:13 Γ— takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:04:10 <mniip> turn any unknown random distribution into a gaussian with this one weird trick
21:05:43 Γ— cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
21:05:50 cheater_ is now known as cheater
21:06:03 β†’ merijn joins (~merijn@86.86.29.250)
21:06:20 Γ— albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
21:06:31 <segfaultfizzbuzz> so what should i think about the apparent statistical invalidity of code invariants
21:07:11 <segfaultfizzbuzz> like, i make a type or a relationship between variables because i believe something is true or does not occur, and then statistically the real world will eventually violate that
21:07:24 <segfaultfizzbuzz> except in very special and rare cases
21:09:11 <darkling> Sure, but if your model as originally designed is intended to honour that invariant, then the invariant is a useful validation of the implementation of that model.
21:09:32 <darkling> If the model becomes invalid, then you need a new invariant and a new implementation that the new invariant can check.
21:10:17 <darkling> This doesn't mean that you should throw away any invariants or tests just because they might be found to be wrong later (or even that you know they're wrong now).
21:10:50 <darkling> That's an inevitable problem of the modelling process, and any model of the real world that you build will be incorrect -- but some will be useful.
21:10:51 <segfaultfizzbuzz> i'm thinking that the whole of programming is predicated on the idea that i can construct invariants which are true
21:11:05 <segfaultfizzbuzz> but more than likely i can only construct false invariants in almost all circumstances
21:12:08 <segfaultfizzbuzz> furthermore the stronger the association between the invariants (the stronger my type system, perhaps), the higher the likelihood that these things break irl
21:12:26 β†’ albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
21:12:47 <segfaultfizzbuzz> because then both invariants need to be true, etc
21:13:30 <darkling> You'll never model perfectly.
21:13:40 <darkling> All you can do is model *well enough for now*.
21:14:19 <darkling> "Close enough for government work."
21:14:26 <geekosaur> luckily, that's good enough or we'd still be swinging from the trees
21:14:38 <darkling> (Or, tightening the requirement significantly, "close enough for practical purposes")
21:15:21 Γ— varoo quits (~varoo@122.161.91.19) (Read error: Connection reset by peer)
21:15:31 <segfaultfizzbuzz> i think part of what i am thinking here is that if you aren't doing something like writing cryptographic code, a language model will kick your ass at programming
21:17:26 <geekosaur> a "language model" can't do much. a domain model that knows the language might do better β€” but will have more failure modes, including that you can never be certain that it's using the same model you are (cf. https://www.dropbox.com/s/345iszfohklw0sl/dnn.txt?dl=0)
21:17:51 <geekosaur> (note also per that essay that the same applies to people!)
21:18:28 <geekosaur> and introspecting models to ensure they're actually doing the right thing is a major open research problem
21:19:08 <darkling> In $day_job, one of my hats is "ontologist". Overlapping and inconsistent models of the world are my bread and butter. :)
21:20:11 <darkling> Well, they will be again when we get to that phase of the project...
21:20:27 <segfaultfizzbuzz> i mean you can annotate stuff like this all day: https://www.categoricaldata.net/images/shot4.png but then you will encounter (i can't read this diagram so don't take this example literally) a specialist who specializes in one field at one college but in a different field at another college, or somesuch
21:21:31 <darkling> Yes, and this is where you need to model multiple people's conceptualisations of the field and map between them.
21:23:27 β†’ varoo joins (~varoo@122.161.91.19)
21:24:02 Γ— EvanR quits (~EvanR@user/evanr) (Remote host closed the connection)
21:24:21 β†’ EvanR joins (~EvanR@user/evanr)
21:24:23 Γ— varoo quits (~varoo@122.161.91.19) (Client Quit)
21:25:20 <darkling> (Or at least agree on a workable compromise)
21:28:40 Γ— ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
21:29:13 β†’ ec joins (~ec@gateway/tor-sasl/ec)
21:31:04 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:31:49 Γ— mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:33:29 Γ— michalz quits (~michalz@185.246.207.197) (Remote host closed the connection)
21:35:09 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 252 seconds)
21:35:31 β†’ king_gs joins (~Thunderbi@2806:103e:29:34e5:ecc6:ec8d:1c5b:35a6)
21:38:24 Γ— Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 268 seconds)
21:39:02 β†’ Maxdamantus joins (~Maxdamant@user/maxdamantus)
21:39:29 Γ— merijn quits (~merijn@86.86.29.250) (Ping timeout: 252 seconds)
21:46:46 β†’ Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
21:46:49 Γ— Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
21:47:21 β†’ emmanuelux joins (~emmanuelu@user/emmanuelux)
21:48:04 Lord_of_Life_ is now known as Lord_of_Life
21:48:30 β†’ qorgi joins (~qorgi@141.161.13.57)
21:55:35 Γ— foul_owl quits (~kerry@193.29.61.202) (Ping timeout: 246 seconds)
21:55:44 β†’ tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:57:47 β†’ Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
21:58:55 β†’ eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c)
22:02:05 β†’ foul_owl joins (~kerry@71.212.143.88)
22:03:50 Γ— eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5982:f970:3d14:b25c) (Ping timeout: 260 seconds)
22:04:14 β†’ codaraxis joins (~codaraxis@user/codaraxis)
22:06:28 Γ— bhall quits (~brunohall@138.199.22.99) (Ping timeout: 252 seconds)
22:06:37 Γ— jumper149 quits (~jumper149@base.felixspringer.xyz) (Ping timeout: 252 seconds)
22:08:32 Γ— foul_owl quits (~kerry@71.212.143.88) (Ping timeout: 248 seconds)
22:11:53 <qorgi> hw
22:13:37 <geekosaur> ?
22:14:24 <jackdk> Hello World?
22:18:02 Γ— akegalj quits (~akegalj@222-217.dsl.iskon.hr) (Quit: leaving)
22:18:15 β†’ foul_owl joins (~kerry@157.97.134.62)
22:20:15 Γ— king_gs quits (~Thunderbi@2806:103e:29:34e5:ecc6:ec8d:1c5b:35a6) (Ping timeout: 248 seconds)
22:20:59 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
22:22:33 <qorgi> y
22:22:44 <jackdk> !
22:23:14 <qorgi> :p
22:25:19 Γ— segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 252 seconds)
22:28:14 Γ— tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:29:50 Γ— troydm quits (~troydm@user/troydm) (Ping timeout: 246 seconds)
22:30:48 <juri_> i don't suppose anyone here has done any 3d scanning in haskell?
22:32:05 β†’ opticblast joins (~Thunderbi@172.58.84.5)
22:36:14 β†’ proportions joins (~proportio@91.150.188.137)
22:36:19 Γ— emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
22:38:16 β†’ merijn joins (~merijn@86.86.29.250)
22:40:22 Γ— gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
22:42:55 Γ— merijn quits (~merijn@86.86.29.250) (Ping timeout: 252 seconds)
22:43:07 β†’ gmg joins (~user@user/gehmehgeh)
22:43:52 Γ— qorgi quits (~qorgi@141.161.13.57) (Remote host closed the connection)
22:44:11 β†’ qorgi joins (~qorgi@185.156.46.108)
22:45:11 Γ— qorgi quits (~qorgi@185.156.46.108) (Remote host closed the connection)
22:45:29 β†’ qorgi joins (~qorgi@185.156.46.108)
22:49:48 Γ— qorgi quits (~qorgi@185.156.46.108) (Ping timeout: 260 seconds)
22:52:58 Γ— jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
22:53:39 β†’ segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
22:54:33 β†’ zeenk joins (~zeenk@2a02:2f04:a014:8700::7fe)
22:55:26 β†’ merijn joins (~merijn@86.86.29.250)
22:58:56 β†’ zaquest joins (~notzaques@5.130.79.72)
22:59:47 Γ— merijn quits (~merijn@86.86.29.250) (Ping timeout: 252 seconds)
23:06:23 β†’ qorgi joins (~qorgi@141.161.133.94)
23:06:28 Γ— qorgi quits (~qorgi@141.161.133.94) (Remote host closed the connection)
23:09:20 β†’ qorgi joins (~qorgi@185.156.46.108)
23:09:28 Γ— gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
23:12:43 β†’ jumper149 joins (~jumper149@base.felixspringer.xyz)
23:15:15 β†’ king_gs joins (~Thunderbi@187.201.2.248)
23:16:38 Γ— qorgi quits (~qorgi@185.156.46.108) (Ping timeout: 260 seconds)
23:16:48 Γ— bilegeek quits (~bilegeek@2600:1008:b0a9:5822:3cbe:e760:543a:34cb) (Quit: Leaving)
23:19:34 β†’ jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
23:21:06 <c_wraith> somebody was doing robotics work. Which is... sort of the opposite, I suppose.
23:21:46 <juri_> the opposite is the modeler and slicer i maintain, in haskell. ;)
23:22:14 <juri_> just hoping i don't have to add '3d scanner' to that list. its enough already.
23:22:15 <c_wraith> that's a different opposite. robotics is causing things to be at points in space
23:22:32 <c_wraith> Which is sort of an opposite of detecting them
23:22:57 <juri_> ok, fair.
23:23:18 β†’ jargon joins (~jargon@184.101.182.107)
23:23:27 <c_wraith> But still not useful to you
23:25:46 <monochrom> Use https://www.smbc-comics.com/comic/four to reduce detection to actuation. >:D
23:25:46 Γ— king_gs quits (~Thunderbi@187.201.2.248) (Read error: Connection reset by peer)
23:29:56 Γ— tremon quits (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
23:30:31 <hpc> the alt text is how i do all my programming :P
23:30:37 β†’ thongpv joins (~thongpv87@14.179.159.25)
23:35:56 β†’ merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
23:38:33 <segfaultfizzbuzz> okay so what if programming languages were designed with the assumption that the programmer is an adversary
23:38:53 <segfaultfizzbuzz> like if you hire a hundred people to work on your code base, a few of them might be bad apples, ya know
23:39:09 β†’ Feuermagier joins (~Feuermagi@user/feuermagier)
23:39:37 <c_wraith> You'd probably get a language based around capabilities with strict static typing.
23:39:45 <segfaultfizzbuzz> sounds right
23:40:12 <segfaultfizzbuzz> and then probably half of the programmers won't be bad apples but will overestimate how correct they are
23:40:23 <segfaultfizzbuzz> and then the remaining half will also overestimate how correct they are
23:40:29 Γ— merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
23:40:59 <segfaultfizzbuzz> haskell has capabilities...?
23:42:24 Γ— jero98772 quits (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb) (Ping timeout: 248 seconds)
23:42:38 <c_wraith> eh. you could get there with some combination of careful libraries and an extension like Safe Haskell, but it'd be a lot of work.
23:43:12 <c_wraith> also, Safe Haskell isn't quite the right tool for the job, so it would need to be something *like* it with a clearer purpose
23:43:19 <monochrom> Is there any other goal such as some minimum level of productivity that your hypothetical programming language needs to achieve, and you forgot to mention it?
23:43:46 <monochrom> Because without any other goals, the best way to deal with adversaries is to allow nothing.
23:44:05 <segfaultfizzbuzz> uh but then you get nothing done
23:44:21 <monochrom> Sure. So what's your other goals?
23:44:32 <monochrom> And how much?
23:45:03 <segfaultfizzbuzz> i don't know, i am personally interested in the "most ideal, least productive" languages these days
23:45:20 <segfaultfizzbuzz> for the purpose of getting some kind of understanding of "what is best"
23:45:28 <segfaultfizzbuzz> even if i never actually use them
23:45:44 <monochrom> I don't know what "ideal" means. (Do you?) But trivially clearly least productive = allow nothing done
23:46:07 <segfaultfizzbuzz> yeah i'm not fond of "the safest car is no car"
23:46:31 <monochrom> If you want an actually interesting discussion, you need to state actually interesting goals.
23:46:37 β†’ off^ joins (~tj99@c-24-30-76-89.hsd1.ga.comcast.net)
23:46:57 <monochrom> Because otherwise I'll just trivialize all of your stated scenerios because they are trivial in the first place.
23:48:54 ← proportions parts (~proportio@91.150.188.137) ()
23:54:26 <monochrom> And the other angle is that I learned from multiple practicing teachers and practicing economists that if you treat people as adversaries then they will game your system, but if you respect them then they will respect you.
23:55:01 <segfaultfizzbuzz> sure there is the psychology angle on it, but the reality is that there are always some bad apples whatever the case
23:55:11 <geekosaur> …often just to get things done
23:55:16 <monochrom> I would rather s/bad apples/honest mistakes/
23:55:54 Γ— jumper149 quits (~jumper149@base.felixspringer.xyz) (Quit: WeeChat 3.7.1)
23:56:12 <monochrom> So my idea of a good programming language is it respects programmers but acknowledges that there are honest mistakes to guard against or maybe just discourage.
23:56:40 <monochrom> But then that also closes this discussion because all practical programming languages already try to do that.
23:57:15 <monochrom> So, anything new?

All times are in UTC on 2023-01-30.