Home liberachat/#haskell: Logs Calendar

Logs on 2022-02-12 (liberachat/#haskell)

00:00:03 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
00:00:07 <dminuoso> And you can observe the fact that this went into unix by looking at stty
00:00:08 <geekosaur> telnet kept doing that for years
00:00:11 <sclv> i don't recall that part of the codebase, but i suspect that its just an artifact of portability. i.e. CRLF might be a pita, but its pretty universally accepted. it could just be an accident, that works well enough nobody bothered to change it too.
00:00:20 <dminuoso> By default it expects crlf line endings to represent a newline
00:00:30 <dminuoso> You have to manually give it a flag to interpret LF as CRLF
00:00:33 × zeenk quits (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
00:00:58 marquis_andras joins (~marquis_a@124.170.163.166)
00:01:10 <dminuoso> If you dont do that, you just get the line feed and you have stair cases
00:01:41 <geekosaur> aka the old "stty raw" problem
00:02:02 <hololeap> if the unrevised .cabal files in the tarballs were CRLF, it wouldn't be so annoying, but most people package them as "unix" line endings
00:02:03 <dminuoso> Even ASCII adopted to change the name of \n to newline, originally it was named line feed, because at that time quite a few systems adopted this new convention to interpret LF as both CRLF
00:02:08 alx741 joins (~alx741@157.100.197.240)
00:02:34 <hololeap> so I'll get a "different line endings" error from patch after a revision bump
00:02:36 <dminuoso> (So this was done to reduce confusiun)
00:03:32 <janus> hololeap: this is why i asked about windows textareas. because revisions are made using a textarea
00:03:41 × jgeerds_ quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 250 seconds)
00:03:58 <sclv> hololeap: are _all_ the endings in the revised cabal files crlf, or only some?
00:04:04 <sclv> and also all revised cabal files, or only some?
00:04:14 <hololeap> all of them
00:04:31 <hololeap> however, _most_ but not _all_ of the original cabal files are "unix"
00:05:04 <hololeap> I think that just reflects whatever system the maintainer packaged it on
00:05:27 <hololeap> and/or wrote it on
00:06:21 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
00:06:29 <sclv> If you look at the code, there's nothing that enforces CRLF. it just checks the revised file is an allowed revision (i.e. an allowed change of allowed fields) and then takes whatever it is given: https://github.com/haskell/hackage-server/blob/c40bc16ff221505c6a9cd1099460cf72af56228f/Distribution/Server/Features/EditCabalFiles.hs#L90
00:06:30 <hololeap> > These revisions can be thought of as "updating" the cabal file of a package with new or more current information. However, they do not actually update the file. Tarballs retrieved from Hackage are always as the authors uploaded them. Revision information is tracked explicitly in the Hackage index
00:07:20 <sclv> so i imagine it just follows the text conventions of the users' system rather than being as uniform as you imagine
00:07:53 <hololeap> hm, why would both cabal and wget consistently convert it to CLRF on my linux system then?
00:08:06 <sclv> ah here we go: https://stackoverflow.com/questions/14217101/what-character-represents-a-new-line-in-a-text-area
00:08:08 <geekosaur> it seemed pretty reliably crlf to me. I still think it's just using html line endings
00:08:27 <sclv> By HTML specifications, browsers are required to canonicalize line breaks in user input to CR LF (\r\n),
00:09:11 <sclv> so yeah if someone revises using the web form rather than the api, then we just get the canonicalized line breaks and don't bother to do anything to them
00:10:09 <janus> oh interesting, so that would probably mean most revisions have mixed line breaks since there are so many linux users in the haskell space
00:10:18 <sclv> i.e. geekosaur is correct and gets the "protocol weirdness" challenge coin
00:10:29 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
00:10:52 <sclv> well i don't think they have mixed breaks, because the browser form will canonicalize everything. so its more the first cabal will have one convention, and all revisions have the other
00:11:21 <janus> oh, i interpreted "user input" as only being the actual newlines the user made in the form
00:11:43 <janus> i.e. not changing the existing
00:12:23 <geekosaur> Ieven remember why they did it. cases like someone entering text into netscape (remember that?) and then someone else viewed it on windows
00:13:12 <geekosaur> which was netscape ignoring the spec; for historical reasons all the text-y protocols (html, smtp, ftp, etc.) used crlf
00:13:33 <geekosaur> (the historical reason being that tcp/ip was first developed on tenex, not unix)
00:13:46 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
00:13:46 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
00:13:46 wroathe joins (~wroathe@user/wroathe)
00:16:30 chenqisu1 joins (~chenqisu1@183.217.200.249)
00:17:38 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
00:20:56 × k8yun quits (~k8yun@user/k8yun) (Ping timeout: 256 seconds)
00:21:01 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
00:24:38 alx741 joins (~alx741@157.100.197.240)
00:25:01 DNH joins (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d)
00:27:05 <hololeap> huh, maybe it's not as consistant as I thought... strange: https://dpaste.com/C5HMREFMV
00:27:49 <hololeap> those were all downloaded with wget from urls like https://hackage.haskell.org/package/aeson-1.5.6.0/revision/5.cabal
00:28:24 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
00:29:25 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
00:29:41 <janus> hololeap: from a glance, the revisions look like they all have CRLF. so it is consistent with sclv's claim. (though people aren't necessarily only using the web frontend!)
00:30:25 <hololeap> do you get CLRF from that aeson revision I just posted? I don't
00:30:37 <hololeap> CRLF
00:31:18 <janus> did you make it with the web form?
00:31:58 <hololeap> I didn't make it
00:32:06 <janus> oh you didn't you make the revision, you were referring to your paste :P
00:32:20 <hololeap> yeah I'm just a revision consumer :)
00:34:12 <janus> hololeap: aeson-1.5.6.0-r1 doesn't contain any carriage return
00:35:20 <janus> oh but you meant r5
00:35:49 <janus> same goes for that one
00:36:35 <janus> i just use 'xxd 5.cabal | cut -d" " -f2-' though that feels pretty hacky
00:38:44 <monochrom> Do you like tr -d '\r' ?
00:39:22 <hololeap> dos2unix works great
00:39:23 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 252 seconds)
00:39:26 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
00:39:46 × DNH quits (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:40:45 <janus> monochrom: not sure who's getting asked but i just wanted to get the hex dump without the offsets
00:41:13 <monochrom> Oh, nevermind.
00:41:26 shriekingnoise joins (~shrieking@201.231.16.156)
00:41:53 <janus> fwiw, i just confirmed that chrome does follow the standard , e.g. it sends \r\n even though the html contains only \r. at least with multipart encoding
00:43:16 <hololeap> janus: so it has to do with which browser is used to fill out the revision form?
00:43:17 zebrag joins (~chris@user/zebrag)
00:43:39 <hololeap> I'm just curious at this point :p
00:44:14 × Techcable quits (~Techcable@168.235.93.147) (Ping timeout: 250 seconds)
00:44:30 <janus> nooo, because presumably they all follow the standard. so all browser posted cabal files will have consistent CRLF usage, that's why you see so many. but you can also do revisions with the API as sclv mentions. and if you do it like that, it's just gonna stay as the user's text editor wrote them
00:45:53 <janus> if i understand sclv correctly, it all depends on the client since the server isn't caring about it
00:46:05 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
00:46:15 alx741 joins (~alx741@157.100.197.240)
00:46:35 <hololeap> ok, it all makes sense now
00:46:44 <janus> yup
00:47:09 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
00:49:28 mvk joins (~mvk@2607:fea8:5cdc:bf00::f276)
00:53:07 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
00:53:25 <Sqaure> Im using optics library (that seems to have nearly the same api as Lens). There are (Affine)Traversal's for Map keys (at <key>) and List indices (ix <index>). I wonder, is there such for List that uses a predicate instead of of an index?
00:54:41 × turlando_ quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Ping timeout: 256 seconds)
00:55:18 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
00:55:18 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
00:55:18 turlando joins (~turlando@user/turlando)
00:57:28 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
00:59:13 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
01:00:59 <hololeap> like an optics version of find?
01:01:08 × mmhat quits (~mmh@55d4c207.access.ecotel.net) (Quit: WeeChat 3.4)
01:01:56 × califax quits (~califax@user/califx) (Remote host closed the connection)
01:02:24 × Ariakenom_ quits (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Quit: Leaving)
01:02:30 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
01:03:15 califax joins (~califax@user/califx)
01:04:12 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
01:04:28 <Sqaure> hololeap, yes
01:04:37 <hololeap> I wonder if this is it (I'm not very optics-savvy): https://hackage.haskell.org/package/optics-core-0.4/docs/Optics-AffineFold.html#v:filtered
01:05:41 <Sqaure> hololeap, yeah i went that rout, but it seems Fold's arent good as setters?
01:07:36 <Sqaure> to be able to do : over (<traversal>) mutatateFkn object
01:08:06 <dminuoso> Sqaure: Fold are not good as setters because that's precisely their weakness.
01:08:14 <dminuoso> A fold can only fold, not retain structure
01:08:32 <dminuoso> What you're asking for is not lawful, a kind of Wither
01:09:28 alx741 joins (~alx741@157.100.197.240)
01:10:56 <EvanR> the general fold for a type can do anything xD
01:10:58 <Sqaure> Oh, to bad. It felt like a predicate would be pretty similar to an index.
01:12:12 <hololeap> \s p -> over s (filter p) :: Setter' s [a] -> (a -> Bool) -> s -> s
01:12:16 <hololeap> what about that?
01:12:40 <hololeap> just modify the list itself instead of trying to get inside of it
01:13:28 <Sqaure> Hmm, that could be something
01:15:54 × emf quits (~emf@2620:10d:c090:400::5:322c) (Quit: emf)
01:18:33 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
01:24:41 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
01:30:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
01:31:12 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
01:31:23 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
01:37:01 alx741 joins (~alx741@157.100.197.240)
01:37:12 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
01:40:08 Techcable joins (~Techcable@168.235.93.147)
01:40:52 justsomeguy joins (~justsomeg@user/justsomeguy)
01:42:28 wroathe joins (~wroathe@user/wroathe)
01:43:33 <jackdk> Sqaure: the version of `filtered` in lens can be used as a traversal but relies on you to not invalidate the predicate when you set back through it
01:44:45 <hololeap> :o
01:44:45 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
01:52:09 <EvanR> see if this sounds wrong or not: storable vector uses a foreign ptr to bytes so haskell usage of storable vector has to go through the FFI, but is easily accessible by foreign code, same as ByteString. Meanwhile unboxed array and unboxed vector use array primitives and are more easily accessible to haskell code, but obviously inaccessible to foreign code since gc moves them around
01:52:17 <hololeap> at :: e -> Lens' (e -> a) (Maybe a)
01:52:34 <hololeap> jackdk: I was thinking they might be able to put something together with this ^
01:53:00 × HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Ping timeout: 276 seconds)
01:53:18 <hololeap> hm, maybe not... I'm not actually sure how that works :p
01:54:42 HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato)
01:55:17 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
01:56:37 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 240 seconds)
01:58:46 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds)
01:59:51 senoraraton joins (~senorarat@192-195-83-130.static.monkeybrains.net)
02:00:20 <hololeap> ix :: e -> Lens' (e -> Maybe a) (Maybe a)
02:00:22 hololeap shrugs
02:00:35 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
02:01:07 alx741 joins (~alx741@157.100.197.240)
02:03:46 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
02:04:38 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
02:06:34 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Ping timeout: 250 seconds)
02:06:50 × xsperry quits (~xs@user/xsperry) (Remote host closed the connection)
02:06:54 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
02:08:55 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 256 seconds)
02:10:48 califax- joins (~califax@user/califx)
02:10:54 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
02:12:39 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
02:13:19 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
02:14:15 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
02:14:27 × califax quits (~califax@user/califx) (Ping timeout: 276 seconds)
02:14:27 califax- is now known as califax
02:14:28 × burnsidesLlama quits (~burnsides@dhcp168-030.wadham.ox.ac.uk) (Remote host closed the connection)
02:20:14 alx741 joins (~alx741@157.100.197.240)
02:21:52 <hololeap> at that point it might just make sense to turn your [a] into a (Map Bool [a]) and then use `at` on it
02:22:36 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
02:24:59 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
02:25:45 <EvanR> Map Bool [a] = Bool -> [a] = ([a], [a]) xD
02:26:20 <EvanR> (ok, technically no)
02:27:33 gentauro joins (~gentauro@user/gentauro)
02:28:06 <hololeap> :t partition -- right, forgot about that
02:28:07 <lambdabot> (a -> Bool) -> [a] -> ([a], [a])
02:29:29 <EvanR> the map could be missing one or both
02:30:56 <hololeap> :t \k -> maybe [] id . Map.lookup k
02:30:57 <lambdabot> error:
02:30:57 <lambdabot> Not in scope: ‘Map.lookup’
02:30:57 <lambdabot> Perhaps you meant one of these:
02:33:39 jao joins (~jao@static-68-235-44-40.cust.tzulo.com)
02:33:50 <EvanR> :t Data.Map.lookup
02:33:51 <lambdabot> Ord k => k -> M.Map k a -> Maybe a
02:34:04 <EvanR> oh, M dot
02:40:54 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
02:41:23 alx741 joins (~alx741@157.100.197.240)
02:44:39 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
02:48:57 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
02:57:26 × xff0x quits (~xff0x@2001:1a81:5217:8700:5c4c:6e43:a062:eba7) (Ping timeout: 252 seconds)
02:58:17 xff0x joins (~xff0x@2001:1a81:524f:ad00:7c68:ef8b:b4b7:1f26)
02:58:51 k8yun joins (~k8yun@user/k8yun)
02:59:52 × modnar quits (~modnar@shell.sonic.net) (Remote host closed the connection)
03:02:47 alx741 joins (~alx741@157.100.197.240)
03:03:47 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:05:13 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
03:11:24 yauhsien_ joins (~yauhsien@61-231-32-103.dynamic-ip.hinet.net)
03:11:35 × slim quits (uid300876@id-300876.lymington.irccloud.com) (Quit: Connection closed for inactivity)
03:15:47 × yauhsien_ quits (~yauhsien@61-231-32-103.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
03:21:54 alx741 joins (~alx741@157.100.197.240)
03:23:38 × xff0x quits (~xff0x@2001:1a81:524f:ad00:7c68:ef8b:b4b7:1f26) (Ping timeout: 260 seconds)
03:23:43 × jao quits (~jao@static-68-235-44-40.cust.tzulo.com) (Ping timeout: 256 seconds)
03:24:30 xff0x joins (~xff0x@2001:1a81:524f:ad00:4eb7:4d9:8878:178f)
03:25:28 jao joins (~jao@static-68-235-44-72.cust.tzulo.com)
03:26:35 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
03:33:57 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
03:34:05 × td_ quits (~td@94.134.91.17) (Ping timeout: 250 seconds)
03:34:37 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
03:35:02 × kilolympus quits (~kilolympu@31.205.200.235) (Read error: Connection reset by peer)
03:35:08 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
03:35:44 td_ joins (~td@94.134.91.27)
03:35:49 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Client Quit)
03:38:11 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:38:11 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:38:11 finn_elija is now known as FinnElija
03:40:43 × waleee quits (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
03:42:25 × mstksg quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 256 seconds)
03:44:04 mstksg joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
03:44:39 alx741 joins (~alx741@157.100.197.240)
03:44:49 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:46:03 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:49:22 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
03:53:57 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
03:54:38 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
03:57:06 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
03:57:18 lavaman joins (~lavaman@98.38.249.169)
03:58:36 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Client Quit)
03:58:50 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
04:01:22 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
04:01:41 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
04:01:50 <ProfSimm> In Haskell when I perform side-effects, is there some abstraction to guarantee a "Transaction" on the effects, make them atomic. And if so, how would that work with things like sending something over a TCP socket.
04:01:52 <ProfSimm> Can't unsend.
04:02:21 <c_wraith> you're correct. there's no such thing as making arbitrary effects atomic
04:03:28 <Maxdamantus> So `State RealWorld#` is a lie!?
04:04:10 <ProfSimm> c_wraith: well not like I was hoping for magic (well, a little), my question is more about is there a way to reason about those in a sane way without atomicity
04:06:25 <ski> how do you make exception effects atomic or transactional ? nondeterminism effects ?
04:07:22 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
04:07:42 <ProfSimm> ski: "finally"?
04:07:58 <ProfSimm> ski: undo sagas, as a more general concept
04:08:02 <Maxdamantus> In general, it's not possible to include something externnal to your transaction within your transaction.
04:08:37 <ski> "finally" doesn't undo an exception being thrown
04:08:51 <Maxdamantus> Theoretically you could creatu a framuwork where the TCP sending is part of a transaction, but receiving a response from an entity that exists outside can't be part of it.
04:11:06 <ProfSimm> ski: my problem isn't the existence of the exception typically, but rather the partial operations and unfreed resources it leaves behind, hence finally. Or did you mean in some other way. Transaction means it can fail, it just failed atomically. Transaction doesn't mean it has to succeed
04:11:44 alx741 joins (~alx741@157.100.197.240)
04:11:57 <ski> > do z <- [1 ..]; y <- [1 .. z]; x <- [1 .. y]; guard (x^2 + y^2 == z^2); return (x,y,z) -- how do you perform nondeterminism effects like these transactionally, atomically ? what does that even mean, to begin with ?
04:12:00 <lambdabot> [(3,4,5),(6,8,10),(5,12,13),(9,12,15),(8,15,17),(12,16,20),(15,20,25),(7,24,...
04:12:44 <ski> if you're interacting with the outside world, it does seem hard to make that atomic or transactional, at least without cooperation from the other side
04:12:47 <ProfSimm> ski: well I'm just pondering how to deal with non-happy path in a way that doesn't explode into a fractal of special cases.
04:13:54 <ski> "my problem isn't the existence of the exception typically" -- well, transactions are about isolating effects, so that either all are performed, or none, do you agree ?
04:13:55 <ProfSimm> ski: yes, well hence the "undo saga" note. Sometimes you can code compensatory action that's not literally undo, but you can consider the action semantically undone for your purpose. Such as bill a credit card, then refund it. There's still a fee, but the action is sufficiently "undone"
04:14:40 <ski> to "fail" exceptions raising, you'd need some way to undo raising the exceptions
04:15:17 <ProfSimm> I don't see exceptions as a side-effect, despite they may not fit into a math model of purity
04:15:24 <ski> (raising an exception here is not considered "failure". rather raising exceptions would be the effects that a failure of the transaction would have to undo)
04:15:27 <ProfSimm> I see them as syntax sugar on a branch
04:15:42 <ski> yea, i've not been talking about any side-effects here
04:15:57 <ProfSimm> Well I don't know why we want to undo an exception being risen.
04:15:58 <ski> (i've been talking about effects)
04:16:11 <ProfSimm> OK I don't see exceptions as an "effect" then
04:16:16 <ski> well, you started talking about having transactions of effects
04:16:41 <ProfSimm> ski: well I'll be damned.
04:16:49 <ProfSimm> ski: I mean side-effects
04:16:49 <ski> there are many kinds of effects. I/O, state, exception, (angelic) nondeterminism, environment, summarizing/logging/output, continuation, &c.
04:17:01 <ProfSimm> Well I mean external effects basically
04:17:05 <ski> there are no side-effects in Haskell, so you must be talking about some other language, then
04:17:11 <ProfSimm> Man.
04:17:14 <ProfSimm> You know what I mean
04:17:44 <ski> ok, external, i guess that means I/O, then
04:17:54 <ProfSimm> In a nutshell, files, sockets, pipes. Yes. I/O
04:18:01 <ProfSimm> Interaction with the "world"
04:18:02 <ski> (sorry, i do not know what you mean)
04:18:04 <ski> yes
04:18:10 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
04:19:29 <ski> (i don't know why people often keep saying "you know what i mean". my experience has been that almost always, when people say that, i do not know what they mean. maybe it's a kind of appeal, "you know what i mean, right ?", only not expressed as a question)
04:19:56 <hololeap> they assume you're being pedantic on purpose
04:20:37 <ski> well, if i am (i'm not sure), then i do not know how not to be that
04:21:16 <ProfSimm> hololeap: I don't assume that. But I beg for compassion ;-)
04:21:23 <ProfSimm> When using terms incorrectly
04:21:38 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:21:38 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:21:38 wroathe joins (~wroathe@user/wroathe)
04:22:22 <ProfSimm> ski: but you did know what I mean (interaction with other systems outside the language internal state) ;-)
04:22:59 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
04:23:50 <ski> well, i offered that as one possible thing which you might be aiming at. i didn't know that that was what you were asking about
04:24:09 <ProfSimm> ski: cool :)
04:24:29 <ski> (you started asking about side-effects. since there are no side-effects in Haskell, i got thinking about effects. next question was *which* effects you wanted to talk about. the most common ones ? only some particular specific ones ?)
04:24:36 <ProfSimm> ski: so is there a strategy here, or we deal with things on a one-by-one basis (effects)
04:25:02 <ski> i'm not aware of any general framework for isolating effects transactionally
04:25:26 <ski> if we're talking about internal state, then there's `STM' (Software-Transactional Memory), for that
04:26:03 <ski> (which composes well with multiple executing threads)
04:26:48 <ski> if you're doing I/O, say communicating between some servers on different machines, doing some kind of distributed computation, then you might be able to do transaction management, if you control all those nodes
04:26:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
04:27:38 <ski> (i think there might be sortof-general patterns for that sort of thing, in the Erlang community)
04:28:57 <ski> (btw, the reason i said i'm not sure before is that i think i mostly don't understand myself. this includes not knowing all my motivations)
04:29:20 <hololeap> I assume something like postgres knows how to do this
04:29:31 <ProfSimm> Sure, SQL servers are the easy part
04:30:15 <hololeap> as far as making it a monad of some sort, unfortunately abstractions like "monad" either fit or they don't, and generally they don't
04:30:35 <ProfSimm> ski: I was thinking more about how to organize my code in Haskell around that idiom of there being code that does something, and code that undoes it, and let the right "bits of code" run depending on which code failed or not etc.
04:32:02 <ProfSimm> ski: let's say I'm programming an online store. I bill a card, then i check product for availability - error, no availability (I know, shoulda checked beforehand), so I raise an exception, this automatically enums all actions I did so far, and runs their 'undo code' automatically, which refunds the payment in this case
04:33:02 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
04:33:08 <ski> yea, monads "merely" express "(dynamic) sequencing" ("sequencing" in a more abstract, conceptual way, not necessarily in a low-level operational sense. one possible meaning of "sequencing" is "short-circuiting". another is "loop nesting". another is "callback nesting". &c.)
04:35:12 × jao quits (~jao@static-68-235-44-72.cust.tzulo.com) (Ping timeout: 250 seconds)
04:35:57 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving)
04:36:50 <hololeap> ProfSimm: you could build this yourself pretty easily I would think
04:37:38 deadmarshal joins (~deadmarsh@95.38.112.73)
04:38:25 <hololeap> :t \l1 l2 -> zip l1 (drop 1 l2)
04:38:26 <lambdabot> [a] -> [b] -> [(a, b)]
04:39:08 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
04:39:52 ProfSimm nods at hololeap
04:39:57 alx741 joins (~alx741@157.100.197.240)
04:40:03 <ski> hm, i remember i once did a play/replay system (to be used with a CGI page with forms). from the point of the program using the library, doing a form, getting the answer back, just looked like executing an action. but under the covers, it'd record enough of the state of the system, and then generate a page with a form on it, so that, if/when the form was submitted, the program would restart, and hit the
04:40:09 <ski> "replay" phase, fast-forwarding past all the previously done parts (only simulating performing `IO' actions, by reading a logged result), until it got to the point where it stopped last time, and then it hit the "play" phase, starting to execute normally
04:40:32 <hololeap> :t \l -> zip l (drop 1 l) -- if l is a stream of events from IO, this will give you a stream (modeled as a list) of (lastEvent, currentEvent)
04:40:33 <lambdabot> [b] -> [(b, b)]
04:42:00 <ski> this is not quite the sort of thing you were thinking of. but i think one could possibly try to do something similar, with "undo" actions stored, rather than "replay"
04:45:30 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:00:55 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
05:03:37 alx741 joins (~alx741@157.100.197.240)
05:07:11 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:11:10 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
05:23:38 alx741 joins (~alx741@157.100.197.240)
05:27:49 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:35:51 <Andrew> If you are using GHC 6.10.x, just cabal install lambdabot. 6.12.x support is forthcoming; see /Building for details on that. (It is possible that Hackage lambdabot will just work with 6.12.x.) / I think I'm on 8.10.4 now, seems a bit outdated
05:38:16 × phma_ quits (phma@2001:5b0:210d:70f8:60e0:e2f9:8ba1:2fd7) (Read error: Connection reset by peer)
05:38:27 <Andrew> Seems that cabal isn't complaining installing lambdabot yet
05:38:40 phma_ joins (~phma@host-67-44-208-185.hnremote.net)
05:39:04 × gawen_ quits (~gawen@user/gawen) (Quit: cya)
05:40:03 phma_ is now known as phma
05:40:22 gawen joins (~gawen@user/gawen)
05:44:41 × ldlework quits (~hexeme@user/hexeme) (Remote host closed the connection)
05:44:48 alx741 joins (~alx741@157.100.197.240)
05:46:01 hexeme joins (~hexeme@user/hexeme)
05:49:51 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:50:36 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:53:56 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:54:47 × mvk quits (~mvk@2607:fea8:5cdc:bf00::f276) (Ping timeout: 256 seconds)
06:02:44 × raym quits (~raym@user/raym) (Quit: kernel update, rebooting...)
06:03:22 × foul_owl quits (~kerry@174-21-76-71.tukw.qwest.net) (Quit: WeeChat 2.3)
06:06:53 alx741 joins (~alx741@157.100.197.240)
06:10:21 foul_owl joins (~kerry@174-21-76-71.tukw.qwest.net)
06:12:11 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:15:18 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
06:19:49 raym joins (~raym@user/raym)
06:22:25 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
06:22:25 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
06:22:25 wroathe joins (~wroathe@user/wroathe)
06:25:30 × k8yun quits (~k8yun@user/k8yun) (Quit: Leaving)
06:27:34 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
06:33:31 alx741 joins (~alx741@157.100.197.240)
06:39:17 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
06:39:28 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
06:53:49 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
06:54:57 zaquest joins (~notzaques@5.130.79.72)
06:55:51 × little_mac quits (~little_ma@2601:410:4300:3ce0:9142:26a8:3892:1b3a) (Remote host closed the connection)
06:56:57 alx741 joins (~alx741@157.100.197.240)
07:00:40 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
07:06:25 hexeme is now known as ldlework
07:08:15 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
07:09:55 fef joins (~thedawn@user/thedawn)
07:10:33 jonathanx_ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
07:11:37 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 250 seconds)
07:18:34 alx741 joins (~alx741@157.100.197.240)
07:23:12 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
07:32:10 × deadmarshal quits (~deadmarsh@95.38.112.73) (Ping timeout: 256 seconds)
07:40:42 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
07:40:49 deadmarshal joins (~deadmarsh@95.38.230.187)
07:41:05 alx741 joins (~alx741@157.100.197.240)
07:41:57 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
07:42:57 × phma quits (~phma@host-67-44-208-185.hnremote.net) (Read error: Connection reset by peer)
07:43:50 alp joins (~alp@user/alp)
07:44:04 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
07:44:11 phma joins (~phma@host-67-44-208-247.hnremote.net)
07:45:20 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
07:55:18 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
07:59:04 lavaman joins (~lavaman@98.38.249.169)
08:00:15 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
08:01:21 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
08:02:02 alx741 joins (~alx741@157.100.197.240)
08:03:54 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
08:05:45 Graham31415 joins (~Graham314@213.237.92.153)
08:06:38 whound joins (~dust@2409:4071:4d8d:7b21:2586:8c37:2856:667a)
08:08:11 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
08:16:06 × zincy quits (~tom@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
08:16:23 zincy joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
08:20:38 yauhsien_ joins (~yauhsien@61-231-32-103.dynamic-ip.hinet.net)
08:21:13 × vglfr quits (~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds)
08:21:20 max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
08:21:59 vglfr joins (~vglfr@coupling.penchant.volia.net)
08:22:47 gehmehgeh joins (~user@user/gehmehgeh)
08:25:45 × yauhsien_ quits (~yauhsien@61-231-32-103.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
08:26:36 alx741 joins (~alx741@157.100.197.240)
08:27:53 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
08:30:16 zeenk joins (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
08:30:39 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
08:30:39 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
08:32:48 × senoraraton quits (~senorarat@192-195-83-130.static.monkeybrains.net) (Remote host closed the connection)
08:34:20 × sqrt2 quits (~ben@80-108-18-7.cable.dynamic.surfer.at) (Quit: ZNC - http://znc.in)
08:36:57 `2jt joins (~jtomas@130.red-88-22-46.staticip.rima-tde.net)
08:39:28 vysn joins (~vysn@user/vysn)
08:41:12 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7)
08:45:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 240 seconds)
08:48:45 × alp quits (~alp@user/alp) (Ping timeout: 256 seconds)
08:49:08 alx741 joins (~alx741@157.100.197.240)
08:49:40 little_mac joins (~little_ma@2601:410:4300:3ce0:b88b:16c0:25d0:773a)
08:52:23 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
09:00:42 cosimone joins (~user@93-44-184-23.ip98.fastwebnet.it)
09:00:42 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
09:04:51 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
09:13:46 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:15:22 ardell joins (~ardell@user/ardell)
09:17:30 Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
09:18:43 alx741 joins (~alx741@157.100.197.240)
09:18:59 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
09:23:01 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
09:23:25 tfeb joins (~tfb@88.98.95.237)
09:24:21 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
09:25:54 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:28:32 × tfeb quits (~tfb@88.98.95.237) (Quit: died)
09:32:40 mc47 joins (~mc47@xmonad/TheMC47)
09:32:45 × zeenk quits (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
09:33:57 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
09:35:01 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
09:38:50 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Remote host closed the connection)
09:39:01 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
09:39:01 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
09:39:01 wroathe joins (~wroathe@user/wroathe)
09:39:16 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
09:41:29 × little_mac quits (~little_ma@2601:410:4300:3ce0:b88b:16c0:25d0:773a) (Quit: Leaving)
09:41:36 alx741 joins (~alx741@157.100.197.240)
09:42:04 alp joins (~alp@user/alp)
09:43:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
09:44:48 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
09:47:53 xsperry joins (~xs@user/xsperry)
09:49:23 whound is now known as dust__
09:49:26 dust__ is now known as dust_
10:01:57 alx741 joins (~alx741@157.100.197.240)
10:05:09 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
10:07:46 × Graham31415 quits (~Graham314@213.237.92.153) (Quit: Client closed)
10:14:48 × fef quits (~thedawn@user/thedawn) (Ping timeout: 276 seconds)
10:15:20 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
10:21:40 × chenqisu1 quits (~chenqisu1@183.217.200.249) (Quit: Leaving)
10:23:34 alx741 joins (~alx741@157.100.197.240)
10:23:38 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
10:24:26 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
10:27:27 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
10:28:03 alx741 joins (~alx741@157.100.197.240)
10:34:43 mastarija joins (~mastarija@2a05:4f46:e04:6000:2c:c10d:58d8:d23b)
10:37:45 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
10:40:23 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
10:46:43 × lottaquestions_ quits (~nick@2607:fa49:5041:a200:78c8:bb9f:f5b1:85aa) (Quit: Konversation terminated!)
10:49:00 × noiobeforebed quits (~noiobefor@2001:470:69fc:105::1:3c2d) (Quit: Reconnecting)
10:49:27 × dust_ quits (~dust@2409:4071:4d8d:7b21:2586:8c37:2856:667a) (Quit: Konversation terminated!)
10:49:56 × cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds)
10:51:20 × alp quits (~alp@user/alp) (Ping timeout: 250 seconds)
10:57:29 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
10:57:56 coot joins (~coot@213.134.190.95)
10:58:36 alx741 joins (~alx741@157.100.197.240)
11:02:43 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
11:02:43 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
11:02:54 zeenk joins (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
11:04:04 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
11:04:13 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
11:07:02 × coot quits (~coot@213.134.190.95) (Quit: coot)
11:09:30 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7)
11:09:38 × cosimone quits (~user@93-44-184-23.ip98.fastwebnet.it) (Remote host closed the connection)
11:09:53 Graham31415 joins (~Graham314@213.237.92.153)
11:10:29 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
11:10:46 × shailangsa quits (~shailangs@host217-39-45-199.range217-39.btcentralplus.com) ()
11:13:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 245 seconds)
11:16:18 × mastarija quits (~mastarija@2a05:4f46:e04:6000:2c:c10d:58d8:d23b) (Quit: Leaving)
11:17:23 Cale joins (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com)
11:18:26 <Andrew> Anyone has an idea on installing and using lambdabot properly? I cabel'ed it, and I'm confused what to do
11:18:36 <Andrew> It seems to take me to a REPL where I don't have an idea what to put into
11:18:50 <absentia> @help
11:18:50 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
11:18:55 <absentia> @pl (\x -> x)
11:18:55 <lambdabot> id
11:19:49 <Andrew> Well, I mean I'm trying to host lambdabot, and my inability to understand how to run it after cabeling is the problem
11:21:08 alx741 joins (~alx741@157.100.197.240)
11:21:10 <absentia> blech
11:21:19 <absentia> no stack for lambdabot?
11:21:21 <absentia> :(
11:22:03 <absentia> isn't there a cabal run
11:22:11 <absentia> good luck sorting out your dependencies
11:22:13 <sshine> I've heard cabal is really easy. :P
11:22:23 <absentia> sshine: it's easy until it isn't
11:22:33 <absentia> Andrew: what happens if you `cabal run`
11:23:09 <sshine> apparently there are no installation instructions for lambdabot. that seems like a useful addition.
11:23:20 <absentia> https://wiki.haskell.org/Lambdabot#Installing
11:23:32 <Andrew> #installing, but no #running or anything like that
11:23:33 <sshine> ah, okay. I was looking at github.
11:23:35 <absentia> there are marginal instructions
11:23:37 <Andrew> I don't see configuration options
11:23:46 <Andrew> Error:
11:23:48 <Andrew> [ERROR] Plugin.djinn: Djinn command failed: djinn: readCreateProcess: runInteractiveProcess: exec: does not exist (No such file or directory)
11:23:59 Andrew looks for a ebuild of "djinn"
11:24:11 <absentia> choo choo
11:24:17 <absentia> all stations stop to next build error
11:24:19 <Andrew> Doesn't pull that as a dep, weird
11:24:35 <Andrew> k, emerging that now
11:24:44 absentia gives the nod of approval
11:24:49 <absentia> i too used to funroll my loops
11:25:16 <sshine> absentia, those installation instructions make assumptions about GHC that are two major versions behind what I've got...
11:25:17 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
11:25:17 × OscarZ quits (~oscarz@95.175.104.142) (Quit: Leaving)
11:25:27 <Andrew> still having djinn problems, fun
11:25:28 <absentia> sshine: hence my questioning of a stack build
11:25:42 <Andrew> wait, wth I didn't add ~/.cabal/bin to my PATH
11:25:45 <sshine> cabal: Unknown target '.'. There is no component '.'. The project has no package directory '.'.
11:25:45 <absentia> they still offer lts package trees for older versions of GHC
11:25:52 <sshine> I don't think this software was meant to be run by many people.
11:25:56 <absentia> probably not
11:26:02 <absentia> which is fine
11:26:05 <absentia> it works here
11:27:23 <sshine> Andrew, there's an attempt at documentation of running it here: https://github.com/lambdabot/lambdabot/blob/master/doc/startup.md -- but it doesn't really start from the point of successfully having installed it.
11:27:48 <Andrew> thanks, ill check it our
11:27:50 <Andrew> *out
11:29:50 <sshine> I think I gave up on installing lambdabot one time.
11:30:37 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
11:30:40 × haskl quits (~haskl@user/haskl) (Read error: Connection reset by peer)
11:32:48 <Andrew> Maybe I'll Just do Nothing with it
11:33:03 haskl joins (~haskl@user/haskl)
11:37:51 × acidsys quits (~LSD@2a03:4000:55:d20::3) (Excess Flood)
11:39:25 acidsys joins (~LSD@2a03:4000:55:d20::3)
11:41:01 × tcard quits (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Remote host closed the connection)
11:41:17 tcard joins (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp)
11:42:18 alx741 joins (~alx741@157.100.197.240)
11:42:23 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
11:43:45 Ariakenom joins (~Ariakenom@2001:9b1:efe:9d00:91:c891:6ad5:7a10)
11:45:03 michalz joins (~michalz@185.246.204.65)
11:45:52 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
11:46:12 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
11:47:12 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
11:48:10 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
11:53:39 Ariakenom_ joins (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
11:53:48 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
11:55:39 fef joins (~thedawn@user/thedawn)
11:57:26 × Ariakenom quits (~Ariakenom@2001:9b1:efe:9d00:91:c891:6ad5:7a10) (Ping timeout: 245 seconds)
11:58:15 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
12:00:51 lavaman joins (~lavaman@98.38.249.169)
12:03:55 alx741 joins (~alx741@157.100.197.240)
12:04:34 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
12:05:37 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
12:07:30 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
12:09:58 × Axman6 quits (~Axman6@user/axman6) (*.net *.split)
12:09:58 × tubogram4 quits (~tubogram@user/tubogram) (*.net *.split)
12:10:04 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
12:11:48 DNH joins (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d)
12:13:55 mmhat joins (~mmh@55d4ce4d.access.ecotel.net)
12:14:22 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
12:23:31 × max22- quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 256 seconds)
12:23:56 alx741 joins (~alx741@181.199.42.143)
12:28:39 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
12:35:16 × alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer)
12:35:55 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
12:36:30 × ardell quits (~ardell@user/ardell) (Quit: Konversation terminated!)
12:38:17 machinedgod joins (~machinedg@24.105.81.50)
12:40:48 notzmv joins (~zmv@user/notzmv)
12:44:15 alp joins (~alp@user/alp)
12:47:01 × DNH quits (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:50:00 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
12:51:00 zer0bitz joins (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9)
12:52:23 alx741 joins (~alx741@157.100.197.240)
12:55:48 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
12:58:27 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
12:58:43 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
12:58:44 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
12:59:22 fef joins (~thedawn@user/thedawn)
12:59:38 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
12:59:49 hololeap joins (~hololeap@user/hololeap)
13:00:12 × fef quits (~thedawn@user/thedawn) (Client Quit)
13:02:10 xkuru joins (~xkuru@user/xkuru)
13:04:42 zer0bitz_ joins (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9)
13:07:50 × zer0bitz quits (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9) (Ping timeout: 250 seconds)
13:08:45 thevishy joins (~Nishant@2405:201:f005:c007:68d4:2777:c323:aa1b)
13:12:26 alx741 joins (~alx741@157.100.197.240)
13:13:26 × thevishy quits (~Nishant@2405:201:f005:c007:68d4:2777:c323:aa1b) (Client Quit)
13:14:29 zer0bitz_ is now known as zer0bitz
13:15:59 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
13:17:01 × deadmarshal quits (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds)
13:19:50 × zeenk quits (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
13:19:58 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
13:20:09 coot joins (~coot@213.134.190.95)
13:20:59 jao joins (~jao@68.235.43.85)
13:26:39 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
13:31:11 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
13:31:12 × ubert quits (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) (Quit: ubert)
13:31:17 tubogram4 joins (~tubogram@user/tubogram)
13:31:17 Axman6 joins (~Axman6@user/axman6)
13:31:17 calcium.libera.chat sets mode +o Axman6
13:31:39 ubert joins (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de)
13:32:57 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
13:34:53 × coot quits (~coot@213.134.190.95) (Quit: coot)
13:35:09 × jao quits (~jao@68.235.43.85) (Ping timeout: 256 seconds)
13:35:10 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
13:35:37 Koen joins (~Koen@252.248.88.92.rev.sfr.net)
13:35:41 <Koen> hi
13:36:21 <Hecate> hi
13:36:23 <Koen> I have a question about groupBy
13:36:40 <Koen> the documentation says it compares adjacent elements: https://hackage.haskell.org/package/groupBy-0.1.0.0/docs/Data-List-GroupBy.html
13:36:45 alx741 joins (~alx741@157.100.197.240)
13:36:52 <Hecate> indeed it does
13:36:56 <Koen> I tried their example groupBy (<=) [1,2,2,3,1,2,0,4,5,2]
13:37:09 <Koen> and I get a different result than the documentation
13:37:20 <Hecate> which version of the package are you importing?
13:37:39 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Read error: Connection reset by peer)
13:37:41 deadmarshal joins (~deadmarsh@95.38.230.187)
13:38:03 <Koen> I have ghci 9.0.2; not sure about the version of the import
13:38:15 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
13:38:22 <Hecate> Koen: what you're linking to is a package on Hackage, the community repository
13:38:34 <Koen> okay
13:38:35 <Hecate> so, you have to get that package as a dependency
13:38:58 <Koen> ooooooh
13:39:10 <Hecate> > This module provides an alternative definition for groupBy which does not require a transitive equivalence predicate.
13:39:10 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
13:39:11 <lambdabot> <hint>:1:6: error: parse error on input ‘module’
13:39:17 <Koen> yes
13:39:18 <Hecate> looks like you've been using the original groupBy
13:39:25 <Hecate> instead of the package you're looking at
13:39:29 <Koen> fair enough
13:40:42 coot joins (~coot@213.134.190.95)
13:44:29 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
13:44:39 <Arsen> what could cause a package (https://github.com/kowainik/tomland/) not to appear in stackage nightly anymore
13:45:01 <geekosaur> usually it stopped building and they can't contact the maintainer to get it fixed
13:46:27 <Arsen> oh it may be a revdep
13:46:31 <Arsen> megaparsec is also gone
13:47:14 <Arsen> wait, nvm, it's there
13:47:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
13:49:53 × Ariakenom_ quits (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
13:50:05 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
13:50:08 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
13:50:59 zer0bitz_ joins (~zer0bitz@2001:2003:f74d:b800:78e9:2c9a:5431:d092)
13:53:37 × absentia quits (~absentia@user/absentia) (Quit: WeeChat 3.4)
13:54:37 × Megant quits (megant@user/megant) (Ping timeout: 240 seconds)
13:55:02 × zer0bitz quits (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9) (Ping timeout: 260 seconds)
13:55:41 absentia joins (~absentia@user/absentia)
13:56:07 × deadmarshal quits (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds)
13:56:39 Megant joins (megant@user/megant)
13:57:01 Ariakenom_ joins (~Ariakenom@2001:9b1:efe:9d00:8937:70ea:8741:6137)
13:57:28 alx741 joins (~alx741@157.100.197.240)
13:58:09 × wolfshappen quits (~waff@irc.furworks.de) (Ping timeout: 256 seconds)
13:58:45 wolfshappen joins (~waff@irc.furworks.de)
14:01:40 shailangsa joins (~shailangs@host109-159-108-227.range109-159.btcentralplus.com)
14:01:40 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
14:01:53 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Remote host closed the connection)
14:01:55 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
14:01:58 slowButPresent joins (~slowButPr@user/slowbutpresent)
14:02:18 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
14:02:36 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
14:02:48 shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
14:03:14 hololeap joins (~hololeap@user/hololeap)
14:04:34 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
14:05:06 ober joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
14:05:27 fef joins (~thedawn@user/thedawn)
14:05:33 × ober quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Client Quit)
14:05:54 × alp quits (~alp@user/alp) (Ping timeout: 250 seconds)
14:06:08 × ubert quits (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) (Quit: ubert)
14:06:31 ubert joins (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de)
14:07:09 Ariakenom__ joins (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
14:08:42 mikoto-chan joins (~mikoto-ch@213.177.151.239)
14:09:39 × ubert quits (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) (Remote host closed the connection)
14:09:58 ubert joins (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de)
14:11:22 × Ariakenom_ quits (~Ariakenom@2001:9b1:efe:9d00:8937:70ea:8741:6137) (Ping timeout: 260 seconds)
14:14:13 × ubert quits (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
14:18:02 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7)
14:18:28 ubert joins (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de)
14:20:00 alx741 joins (~alx741@157.100.197.240)
14:22:13 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 240 seconds)
14:22:45 waleee joins (~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
14:23:40 × xff0x quits (~xff0x@2001:1a81:524f:ad00:4eb7:4d9:8878:178f) (Ping timeout: 250 seconds)
14:23:41 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
14:24:45 xff0x joins (~xff0x@2001:1a81:524f:ad00:f091:6df4:fb78:756f)
14:26:20 <janus> Arsen: aeson-2 just got merged into nightly so anything that isn't aeson-2 compatible is gone
14:26:35 × Kaipi quits (~Kaiepi@156.34.47.253) (Remote host closed the connection)
14:26:57 <janus> there is usually a comment in build-constraints.yaml that shows why the package was disabled
14:27:06 Kaipi joins (~Kaiepi@156.34.47.253)
14:31:26 × vysn quits (~vysn@user/vysn) (Ping timeout: 260 seconds)
14:31:56 wroathe joins (~wroathe@user/wroathe)
14:32:55 deadmarshal joins (~deadmarsh@95.38.230.187)
14:35:48 × Graham31415 quits (~Graham314@213.237.92.153) (Ping timeout: 256 seconds)
14:40:15 alx741 joins (~alx741@157.100.197.240)
14:40:53 × cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds)
14:41:33 max22- joins (~maxime@2a01cb08833598002f7f8e76f08da118.ipv6.abo.wanadoo.fr)
14:42:21 __monty__ joins (~toonn@user/toonn)
14:43:33 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
14:47:56 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
14:51:37 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:53:33 × `2jt quits (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Remote host closed the connection)
14:53:57 `2jt joins (~jtomas@130.red-88-22-46.staticip.rima-tde.net)
15:00:16 alx741 joins (~alx741@157.100.197.240)
15:00:18 leungbk joins (~brian@cpe-142-129-149-172.socal.res.rr.com)
15:00:24 × deadmarshal quits (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds)
15:03:50 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
15:11:10 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
15:12:51 motherfsck joins (~motherfsc@user/motherfsck)
15:17:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:19:06 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
15:20:18 alx741 joins (~alx741@157.100.197.240)
15:22:11 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
15:22:30 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
15:23:02 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
15:23:57 × skewerr quits (spoonm@inaba.spoonm.org) (Read error: Connection reset by peer)
15:24:10 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:24:10 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:24:10 wroathe joins (~wroathe@user/wroathe)
15:27:20 mikoto-chan joins (~mikoto-ch@213.177.151.239)
15:28:39 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
15:29:24 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 276 seconds)
15:30:14 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 260 seconds)
15:41:00 alx741 joins (~alx741@157.100.197.240)
15:42:40 cosimone joins (~user@93-44-184-23.ip98.fastwebnet.it)
15:42:55 stiell joins (~stiell@gateway/tor-sasl/stiell)
15:43:27 motherfsck joins (~motherfsc@user/motherfsck)
15:45:02 kilolympus joins (~kilolympu@31.205.200.235)
15:46:48 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
15:47:17 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
15:51:31 ix joins (~ix@213.205.241.13)
15:56:30 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
15:58:33 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:05:34 alx741 joins (~alx741@181.199.42.143)
16:05:46 × xff0x quits (~xff0x@2001:1a81:524f:ad00:f091:6df4:fb78:756f) (Ping timeout: 245 seconds)
16:06:13 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
16:07:21 off^ joins (~off@50.235.176.163)
16:07:57 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:09:23 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 250 seconds)
16:11:27 × alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer)
16:11:34 × coot quits (~coot@213.134.190.95) (Quit: coot)
16:12:03 alx741 joins (~alx741@157.100.197.240)
16:14:28 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
16:16:28 xff0x joins (~xff0x@2001:1a81:524f:ad00:23cf:423a:2190:173f)
16:20:18 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
16:20:36 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7)
16:21:11 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
16:21:44 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:24:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 240 seconds)
16:27:40 × leungbk quits (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds)
16:29:30 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:30:15 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
16:31:04 alx741 joins (~alx741@157.100.197.240)
16:32:25 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:33:50 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
16:35:48 × Koen quits (~Koen@252.248.88.92.rev.sfr.net) (Quit: WeeChat 3.4)
16:37:35 Guest|46 joins (~Guest|46@116.182.218.87.dynamic.jazztel.es)
16:37:42 × Guest|46 quits (~Guest|46@116.182.218.87.dynamic.jazztel.es) (Client Quit)
16:39:53 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
16:41:48 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:46:56 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
16:47:17 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!)
16:48:15 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
16:50:33 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7)
16:50:34 alp joins (~alp@user/alp)
16:51:33 alx741 joins (~alx741@157.100.197.240)
16:52:01 coot joins (~coot@213.134.190.95)
16:53:34 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!)
16:54:00 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
16:55:14 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
16:58:04 maxime_ joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
17:00:31 × max22- quits (~maxime@2a01cb08833598002f7f8e76f08da118.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
17:00:33 dyeplexer joins (~dyeplexer@user/dyeplexer)
17:12:14 alx741 joins (~alx741@157.100.197.240)
17:16:58 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
17:21:59 modnar joins (~modnar@shell.sonic.net)
17:23:52 × mmhat quits (~mmh@55d4ce4d.access.ecotel.net) (Quit: WeeChat 3.4)
17:24:30 deadmarshal joins (~deadmarsh@95.38.230.187)
17:24:37 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
17:24:37 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
17:24:37 wroathe joins (~wroathe@user/wroathe)
17:26:08 DNH joins (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d)
17:28:52 × deadmarshal quits (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds)
17:29:33 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
17:31:26 mmhat joins (~mmh@55d4ce4d.access.ecotel.net)
17:33:24 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
17:35:00 alx741 joins (~alx741@157.100.197.240)
17:35:29 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
17:38:11 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
17:41:55 × kilolympus quits (~kilolympu@31.205.200.235) (Ping timeout: 256 seconds)
17:46:16 cheater joins (~Username@user/cheater)
17:50:16 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!)
17:51:58 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
17:54:19 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
17:55:02 alx741 joins (~alx741@157.100.197.240)
17:55:34 econo joins (uid147250@user/econo)
17:56:33 burnsidesLlama joins (~burnsides@dhcp168-017.wadham.ox.ac.uk)
17:58:29 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
17:59:05 maxime__ joins (~maxime@2a01cb0883359800facf81d49c6f1298.ipv6.abo.wanadoo.fr)
18:01:49 × maxime_ quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 256 seconds)
18:02:18 olle joins (~olle@i5E866D81.versanet.de)
18:02:42 little_mac joins (~little_ma@2601:410:4300:3ce0:f502:3f20:a1e5:5bdc)
18:02:56 <olle> Provided you have a functional core that's kind of small and an imperative shell that's a bit too big, what are the available strategies to move code into the functional core?
18:02:58 lavaman joins (~lavaman@98.38.249.169)
18:03:08 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
18:03:08 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
18:03:08 wroathe joins (~wroathe@user/wroathe)
18:03:21 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
18:05:30 <dminuoso> That question is a bit too general
18:05:37 <dminuoso> But in princinple there's nothing wrong about imperative code
18:06:06 <dminuoso> GHC largely consists of very imperative code for example
18:07:38 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
18:08:17 <olle> dminuoso: Problem with imperative code is it's hard to unit test and often requires a lot of mocking.
18:08:20 <olle> Or scaffolding.
18:08:47 <olle> Found one quote: "To get the most out of functional core we will tend to load everything beforehand and save everything afterwards, limiting the round-trips to the DB while risking loading data that is not used"
18:08:51 <olle> http://martinsson-johan.blogspot.com/2021/01/hexagonal-architecture-vs-functional.html
18:09:23 <dminuoso> olle: Functional code will not, necessarily, make things easier to test.
18:09:52 <dminuoso> It's mostly a question of general code design.
18:09:54 <olle> dminuoso: I think it will. :)
18:10:10 <dminuoso> Based on what data?
18:10:25 <olle> To be clear, I work professionally in PHP, so there's often a lot of mixing between side-effects and business logic.
18:10:40 <dminuoso> First, the word "functional" is really not well defined, so its not even clear to me what you mean by "functional" as opposed to imperative
18:10:42 <olle> dminuoso: Based on my experience in our legacy PHP code base.
18:10:43 <dminuoso> They are orthogonal dimensions
18:11:13 <olle> Yes, "funcaional" as loosely pure or referential transparent. Or even "possible to test without mocks".
18:11:36 <dminuoso> Well, if you define functional as "possible to test without mocks", then clearly functional is possible to test without mocks.
18:11:42 <olle> :)
18:11:50 <dminuoso> But that's really just a tautology
18:12:19 <dminuoso> olle: I still think they are orthogonal dimensions.
18:12:56 <olle> dminuoso: My point of view is really pragmatic.
18:13:07 <olle> In my experience, pure functions are easier to test.
18:13:12 <dminuoso> There's a good reason why there's several dozen different styles of testing, and that's not because certain programming approaches limit your testing abilities.
18:13:20 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
18:13:28 <dminuoso> It's simply because different problem domains or software solutions require different appraoches
18:14:02 <dminuoso> Insisting you be able to have some percentage of unit testing coverage is just blindly asserting this is a useful thing to do
18:14:15 <olle> Sure
18:14:34 <olle> Or yes, I make the assumption that 50% test coverage is better than 0 :)
18:14:45 <dminuoso> Unit testing is something that pertains to code design, and is somewhat unrelated to matters like functional or purity
18:14:55 <dminuoso> If you can ship code as modular fragments, then unit testing becomes viable
18:15:04 alx741 joins (~alx741@181.199.42.143)
18:15:11 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
18:15:21 <janus> let's say you have a bunch of data, and a bunch of mutations. after the 6th mutation, there is an invariant that now is valid for the rest of the program. data structures usually come with invariants, so this is an opporunity to invent a name for this data structure
18:15:27 <dminuoso> The requirement to mock has less to do with functional, but usually by intricate dependencies on stateful behavior you cant control
18:15:53 <janus> but that doesn't seem specific to functional programming, that is just about inventing abstractions
18:16:26 <dminuoso> I feel pure functional code enables reasoning on the programmer level, and it certainly can in *some* situations enable things like quickcheck.
18:16:38 <olle> janus: Sure, each domain entity comes with validation and rules.
18:17:09 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
18:17:38 <janus> functional programming just means that the intermediate states are created by functions that return the new state instead of mutating it in-place, right?
18:17:45 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
18:17:45 × alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer)
18:17:58 <dminuoso> functional programming, again, has little to do with testing.
18:17:59 <janus> so one could argue that something can be both functional and imperative, like GHC that was mentioned previously
18:18:06 <olle> janus: Mutation is one side-effect, but there are others, like IO to file or db
18:18:33 <dminuoso> Lets assume one definition of functional programming, namely that our software programming principle revolves around HOFs for the most part
18:18:53 <dminuoso> HOFs dont make testing any less or more testable than say a class-based approach from Java.
18:19:05 <dminuoso> In Java you instantiate things, and test these objects. In Haskell you test functinos.
18:19:11 <olle> dminuoso: That's not a useful def for me, sorry. In "functional core, imperative shell", it's assume to seprate purity from IO-dense code.
18:19:16 <dminuoso> They are not any different if you blur the details
18:19:30 <dminuoso> olle: See, now that again has little to do with functional either.
18:19:39 <dminuoso> It's really about modular software design.
18:19:52 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
18:19:56 <olle> dminuoso: "Modular" can mean a lot of things.
18:20:08 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
18:20:28 <Franciman> is there any blog post or reference speaking about laziness advantages?
18:20:31 <Franciman> over strict evaluation
18:21:02 <olle> Franciman: OCaml vs Haskell ;D
18:21:17 <dminuoso> olle: Well, so unit testing is usually a matter of testing individual functions.
18:21:20 <Franciman> where can i find it, olle ?
18:21:32 <dminuoso> So if you write them modularly, you can usually test them without mocking anything.
18:21:33 <Franciman> https://markkarpov.com/post/haskell-vs-ocaml.html ?
18:21:33 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
18:21:39 <olle> Franciman: Google? I'm mostly joking, but I assume someone wrote about it...
18:21:39 <dminuoso> And you dont have to test everything either
18:21:47 <dminuoso> Say mocking a database is usually a silly thing to do
18:22:09 <dminuoso> But if you insist on dragging 10,000 lines of transitive code around on a database dependency, then that's simply non-modular code.
18:22:25 <dminuoso> It's some big ball of spaghetti where you didnt manage to split the business logic from the database interaction
18:22:54 <monochrom> "Why Functional Programming Matters" by John Hughes is actually "why laziness matters". There is a paper version and a video version.
18:23:00 <dminuoso> So to enable unit testing, you can instead have a bunch of particular business logic functions you test in unit tests
18:23:02 <Franciman> oh nice, thanks monochrom
18:23:41 <dminuoso> olle: Part of the problem may be that you're too focused on having complete coverage. But for unit tests its better to accept that you cant have that.
18:23:51 <olle> dminuoso: That's given, but my question was about strategies to achieve such a divide.
18:23:51 <dminuoso> So imagine what the core business logic is you want to test/assert.
18:24:02 <dminuoso> That has nothing to do with purity
18:24:15 × phma quits (~phma@host-67-44-208-247.hnremote.net) (Read error: Connection reset by peer)
18:24:54 <dminuoso> If I have some `processAndDumpFile :: String -> IO ()`, I can simply run that in a test, and check the resulting file - turning it into `process :: String -> Dat` is certainly a bit more convenient for testing, but it's not fundamentally different
18:25:01 deadmarshal joins (~deadmarsh@95.38.230.187)
18:25:11 phma joins (~phma@host-67-44-208-185.hnremote.net)
18:25:18 <dminuoso> it doesn't really have a meaningful difference to the way you test
18:25:27 <olle> dminuoso: Full picture: A test suite based on mostly integrity tests is slooow.
18:25:46 jgeerds_ joins (~jgeerds@55d4a547.access.ecotel.net)
18:26:18 <dminuoso> olle: integration tests are not the same thing, they're orthogonal to unit tests. in integration tests you're usually more concerns whether interfaces interact with each other correctly, where in unit tests you can test individual parts for their internal correctness.
18:26:23 <dminuoso> why not have both?
18:26:50 <olle> dminuoso: Of course you'll have both. But unit tests can be part in the dev feedback loop. Integrity tests can't (easily).
18:27:33 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
18:28:15 <dminuoso> Integration tests can be too, my point is just trading one for another is not a wise thing.
18:28:53 × Natch quits (~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se) (Remote host closed the connection)
18:29:12 <olle> dminuoso: It really can't be, tho. Integrity tests in our product takes ~10 min to run, and it will increase.
18:29:15 <dminuoso> You dont do unit tests because "integration tests are less useful", you do unit tests to assert correctness of individual components. You do integration tests to assert correctness of interfaces and coupling between components. The latter helps finding a different class of bugs
18:29:50 <dminuoso> So its not a "should I do 1) or 2)". It's rather a question of "how many unit tests, integration tests and system tests do we want"
18:30:00 <dminuoso> And for what reason do you want any of these
18:30:22 <olle> dminuoso: To restate my original question, it's like "which strategies can we use to increase the ratio of fast unit tests?"
18:30:43 vysn joins (~vysn@user/vysn)
18:31:14 <dminuoso> olle: Keep a modular software design in mind *while* you write a component, with the explicit intent of unit testing it.
18:31:32 <dminuoso> If you just do a lot of adhoc writing, yes testing becomes ahrd.
18:32:59 <dminuoso> Our SDN compiler for example is constructed of a driver, multiple stages each consisting of phases. Its the drivers responsibility to execute stages, do a bit of housekeeping, and then feed artifacts into the next stage
18:33:04 <dminuoso> each stage has zero knowledge of the next
18:34:03 <dminuoso> that enables us to test stages in isolation as a kind of integration testing between the phases. then the phases have clear data boundaries, we have `N1 -> Comp N2`, `N2 -> Comp N3`, `N3 -> Comp N4`
18:34:08 <olle> dminuoso: Duh, a compiler is a pipeline arch, easy to make pure :)
18:34:24 alx741 joins (~alx741@157.100.197.240)
18:34:25 <dminuoso> Sure so?
18:34:39 <olle> Other domains are not so lucky :d
18:34:46 <dminuoso> Take inspiration from that in code design.
18:34:48 <olle> But in fact, a web request could be a pipeline too
18:34:55 <dminuoso> Yes, that's the point Im trying to make!
18:35:10 <dminuoso> You could think of a web request of having these stages:
18:35:46 <dminuoso> Decode/route request > request data from database > process data > write data back to database > turn result into response > render response
18:36:00 kilolympus joins (~kilolympu@31.205.200.235)
18:36:06 <dminuoso> It might not work as a law, but depending on your problem domain, you might be able to fit 90% of that into that form
18:36:18 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
18:36:40 <olle> dminuoso: Yes, the problem is when side-effects depends on each other. "Check if file exists, if no, write one, if writing failed, return error"
18:37:10 <olle> dminuoso: One strategy to move all side-effects in one place is to use events.
18:37:19 <olle> Or a queue.
18:37:40 <olle> I think Free monad and/or tagless-final are other such in Haskell community...?
18:39:41 <olle> You want the functional core to "eat" the imperative shell during refactor, kind of :) Like an amoeba :D
18:42:17 Natch joins (~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se)
18:48:22 MatthiasG2 joins (~matthias@i6DFA0382.versanet.de)
18:51:36 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
18:52:37 alx741 joins (~alx741@181.199.42.143)
18:55:07 × alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer)
18:56:27 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
18:56:56 × coot quits (~coot@213.134.190.95) (Quit: coot)
18:58:36 <olle> I wonder if free monad can be replaced with a builder pattern in an OOP lang, like new IO.if(fn => DB.getUser).then(fn => save new username);
18:59:17 × jgeerds_ quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 256 seconds)
19:01:05 o-90 joins (~o-90@gateway/tor-sasl/o-90)
19:01:49 × maxime__ quits (~maxime@2a01cb0883359800facf81d49c6f1298.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds)
19:02:35 <EvanR> let me introduce you to jquery
19:03:30 × zer0bitz_ quits (~zer0bitz@2001:2003:f74d:b800:78e9:2c9a:5431:d092) (Ping timeout: 260 seconds)
19:06:16 <olle> :D
19:06:31 Sgeo joins (~Sgeo@user/sgeo)
19:07:17 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
19:08:33 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
19:08:48 <EvanR> the previous discussion on atomic transactional I/O and "sending" into the internet: if you limit yourself to datagrams or raw IP, you can hypothetically arrange for a set of grams to be "all dispatched" or "cancel all that". But since the internet is technically unreliable, I'm not sure how nice that would be
19:09:16 <EvanR> ignoring local unreliability with the OS
19:09:33 zer0bitz joins (~zer0bitz@2001:2003:f74d:b800:78e9:2c9a:5431:d092)
19:09:42 <geekosaur> or not so technically, if you have my router :þ
19:09:44 <olle> EvanR: Hm, is that related to our discussion? Or something else?
19:09:56 <olle> No no, nevermind
19:10:03 <EvanR> cloud haskell's "guarantee" that "if tcp is reliable, so is cloud haskell" or such
19:11:57 alx741 joins (~alx741@157.100.197.240)
19:14:18 <EvanR> olle, functional vs imperative is kind of missing a point, in haskell context you can have "pure code" (?) that looks imperative and so is just as easy to test
19:15:14 <EvanR> IO is harder to test, because of IO, and to some extent because of I/O
19:16:03 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
19:16:36 × `2jt quits (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Remote host closed the connection)
19:17:00 `2jt joins (~jtomas@130.red-88-22-46.staticip.rima-tde.net)
19:17:12 <EvanR> IO became the main sewerage line of stuff they couldn't figure out how to do functionally so you can't even define it xD
19:17:39 coot joins (~coot@213.134.190.95)
19:17:56 <EvanR> if nice haskell are mineral crystals IO is chernobylite
19:19:22 × deadmarshal quits (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds)
19:24:55 × `2jt quits (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 272 seconds)
19:25:21 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Ping timeout: 276 seconds)
19:28:11 <sm> chernobylite eh.. I guess that's a no-good, very bad type of mineral
19:31:33 Sadeq joins (~Sadeq@151.235.4.11)
19:32:00 × Sadeq quits (~Sadeq@151.235.4.11) (Client Quit)
19:32:13 akegalj joins (~akegalj@93-139-129-4.adsl.net.t-com.hr)
19:32:23 × coot quits (~coot@213.134.190.95) (Quit: coot)
19:32:59 c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
19:33:33 maxime__ joins (~maxime@2a01cb08833598009e7cfeb2ba15b673.ipv6.abo.wanadoo.fr)
19:34:43 alx741 joins (~alx741@181.199.42.143)
19:35:22 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
19:36:11 <olle> EvanR: "Imperative shell" is better named "effectful shell" or such
19:36:58 <olle> I think that's the idea behind the pattern, at least.
19:37:13 jao joins (~jao@static-68-235-44-10.cust.tzulo.com)
19:37:57 <olle> Not if the code contains for-loops :)
19:39:03 <olle> It's complete shit that constructors in OOP always use the "new" keyword instead of FP convention of capital first letter. :d
19:39:14 <olle> How are you supposed to do a DSL with that?
19:39:15 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:39:25 <olle> new Add(new Int, new Int)
19:39:46 <olle> I wonder if any OOP lang got rid of that...
19:41:07 koolazer joins (~koo@user/koolazer)
19:42:02 × jao quits (~jao@static-68-235-44-10.cust.tzulo.com) (Ping timeout: 256 seconds)
19:42:22 × alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer)
19:43:10 coot joins (~coot@213.134.190.95)
19:43:10 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
19:43:13 jao joins (~jao@68.235.43.172)
19:44:51 ProfSimm joins (~ProfSimm@87.227.196.109)
19:45:20 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
19:53:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
19:55:05 <monochrom> OO constructors and ADT constructors are different. Even opposite.
19:55:44 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
19:56:40 <olle> Opposite? Pah!
19:57:53 × coot quits (~coot@213.134.190.95) (Quit: coot)
19:59:03 alx741 joins (~alx741@157.100.197.240)
20:00:43 <EvanR> data dual to codata
20:00:45 cynomys joins (~cynomys@user/cynomys)
20:02:18 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
20:02:18 <olle> They are used for similar use-cases.
20:02:31 <olle> Mostly because FP don't have objects, and OOP don't have ADT
20:02:47 <geekosaur> similar in some senses, different in others
20:03:55 <monochrom> Two solutions to the same problem are always used in similar (even same) use cases. That doesn't mean they are the same solution.
20:04:17 <monochrom> When I have the problem of boredom, I have two candidate solutions: AOE4, category theory.
20:04:32 <monochrom> So suddenly AOE4 and category theory are similar. "similar".
20:05:01 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
20:05:03 <monochrom> Right? They are used for similar uses cases. When I want some fun.
20:05:03 <maerwald> they're both a waste of time?
20:05:08 <maerwald> ah
20:05:08 <monochrom> haha
20:05:16 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 256 seconds)
20:05:26 <monochrom> I don't object to "waste of time" really haha.
20:06:47 <olle> I don't really care
20:06:49 <olle> Do you?
20:06:54 <monochrom> I do.
20:06:56 <olle> :)
20:07:17 <monochrom> People keep thinking that Haskell classes and Java interfaces are "similar". It's the same deal.
20:07:30 <monochrom> They are opposite approaches to the same problem.
20:07:50 <monochrom> They both solve the problem beautifully. That still doesn't mean they are similar.
20:08:01 juhp joins (~juhp@128.106.188.82)
20:08:07 <monochrom> This is important in understand either notions properly.
20:08:27 <monochrom> But then again you can object to proper understanding in the first place.
20:10:27 × vglfr quits (~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
20:11:18 vglfr joins (~vglfr@coupling.penchant.volia.net)
20:12:12 machinedgod joins (~machinedg@24.105.81.50)
20:15:13 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
20:17:07 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
20:19:03 `2jt joins (~jtomas@130.red-88-22-46.staticip.rima-tde.net)
20:19:20 coot joins (~coot@213.134.190.95)
20:19:21 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:20:34 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
20:20:41 alx741 joins (~alx741@157.100.197.240)
20:24:18 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
20:24:28 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
20:24:44 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Client Quit)
20:25:02 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
20:25:27 <romesrf> o/
20:25:43 Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si)
20:34:03 × coot quits (~coot@213.134.190.95) (Quit: coot)
20:35:16 <olle> Aaaah, passing around a state container might be a strategy
20:35:25 <olle> Or, a container containing state shifting events to IO
20:39:49 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
20:39:55 <ehammarstrom> what's a commonly used cli arg parser package?
20:40:07 <geekosaur> optparse-applicative
20:42:17 alx741 joins (~alx741@157.100.197.240)
20:42:41 neurocyte0917090 joins (~neurocyte@IP-094046067096.dynamic.medianet-world.de)
20:42:41 × neurocyte0917090 quits (~neurocyte@IP-094046067096.dynamic.medianet-world.de) (Changing host)
20:42:41 neurocyte0917090 joins (~neurocyte@user/neurocyte)
20:45:46 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
20:47:33 <sm> or cmdargs
20:47:46 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Read error: Connection reset by peer)
20:48:32 neurocyte0917090 joins (~neurocyte@IP-094046067096.dynamic.medianet-world.de)
20:48:32 × neurocyte0917090 quits (~neurocyte@IP-094046067096.dynamic.medianet-world.de) (Changing host)
20:48:32 neurocyte0917090 joins (~neurocyte@user/neurocyte)
20:49:21 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
20:51:02 × `2jt quits (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 272 seconds)
20:51:29 × jao quits (~jao@68.235.43.172) (Ping timeout: 256 seconds)
20:54:34 <dminuoso> merijn: Are you around?
20:57:29 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
20:57:30 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
20:57:30 wroathe joins (~wroathe@user/wroathe)
20:57:55 coot joins (~coot@213.134.190.95)
20:58:07 ravella joins (~ravella@user/ryanavella)
21:01:12 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Read error: Connection reset by peer)
21:01:53 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
21:02:19 alx741 joins (~alx741@181.199.42.143)
21:02:49 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
21:03:39 × akegalj quits (~akegalj@93-139-129-4.adsl.net.t-com.hr) (Quit: leaving)
21:03:41 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 245 seconds)
21:06:06 <maerwald> there's also commander-cli
21:07:03 × alx741 quits (~alx741@181.199.42.143) (Read error: Connection reset by peer)
21:10:15 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
21:12:20 × c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
21:13:06 <sm> interesting. Also docopt
21:13:59 neurocyte0917090 joins (~neurocyte@IP-094046067096.dynamic.medianet-world.de)
21:13:59 × neurocyte0917090 quits (~neurocyte@IP-094046067096.dynamic.medianet-world.de) (Changing host)
21:13:59 neurocyte0917090 joins (~neurocyte@user/neurocyte)
21:14:04 <maerwald> yeah, I actually find optparse-applicative the least intuitive, but always ends up with it, because it appears to be the most powerful one
21:20:59 acidjnk joins (~acidjnk@p200300d0c705755700771b768146bc05.dip0.t-ipconnect.de)
21:22:26 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds)
21:23:29 × sagax quits (~sagax_nb@user/sagax) (Quit: Konversation terminated!)
21:28:37 jao joins (~jao@static-68-235-44-70.cust.tzulo.com)
21:30:05 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
21:30:52 gehmehgeh joins (~user@user/gehmehgeh)
21:32:16 jgeerds_ joins (~jgeerds@55d4a547.access.ecotel.net)
21:34:26 <sm> I thought cmdargs was equivalent, but you could be right
21:34:39 <sm> one thing it can do is accept abbreviations of flags
21:34:46 <sm> which I'm fond of
21:35:25 <sm> and I definitely agree about non-intuitive o-a
21:36:30 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
21:37:41 <energizer> when people talk about "effects", are they talking about control-flow manipulation like imperative languages' throw/yield/await statements, or about mutation, or about IO? or are those all somehow part of the same concept?
21:38:17 <geekosaur> or not even those: Reader is an effect
21:38:32 <energizer> ok well then i have no idea what effect means :)
21:38:57 <energizer> i'm asking from the naive perspective (not being clever)
21:41:16 <energizer> what should i read?
21:41:39 <dminuoso> energizer: The word "effect" is something I think most Haskellers versed in the subject chose in a abstract way, it's very handwaving.
21:41:49 <dminuoso> And it doesn't make sense to someone who hasn't reached a certain level of enlightenment
21:42:18 <sm> it's a fine word, exact meaning depends on context as usual
21:42:26 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
21:42:26 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
21:42:27 wroathe joins (~wroathe@user/wroathe)
21:42:27 <energizer> i gave some examples, are those all effects?
21:42:48 <EvanR> anything that's not purely functional
21:43:10 <geekosaur> hm? I think few peopke would exclude State as an effect
21:43:29 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
21:43:30 <EvanR> at risk of raising more questions, purely functional programming is just using pure functions xD
21:43:45 <dminuoso> energizer: So one view I adopt is to think of `(>>=) :: Monad m => m a -> (a -> m b) -> m b` as annotating `effect` results with further `effects`. And the reason I chose "effect" is because I get to "add" to it.
21:44:14 <dminuoso> By "add" I mean the function of type `a -> m b` is under my control - I give it some type of "flavor", "extra context".. some kind of "effect"
21:44:24 <dminuoso> That's opposed to say:
21:45:13 <dminuoso> `extend :: Comonad w => (w a -> b) -> w a -> w b`, where `w` losely represents context/neighborhood Im given. I can sort of "inspect" the context/neighborhood that is being given to me
21:45:14 <EvanR> a pure function is one which has no side effects more more relevant here is context independent. Unlike State
21:45:17 <dminuoso> they are very suggestive terms
21:45:29 <dminuoso> It doesn't mean anything concrete in particular
21:45:42 <geekosaur> EvanR, State is pure functional. it just *looks* like it isn't
21:45:48 <geekosaur> @unmtl State s a
21:45:48 <lambdabot> s -> (a, s)
21:46:06 <[exa]> "looks like impure" <- I can vote for this definition of effect
21:46:26 <dminuoso> [exa]: What's the Identity effect? Reader effect?
21:46:34 <dminuoso> neither looks impure at all
21:46:46 <[exa]> identity is "no effect" so I'm okay there
21:46:53 lavaman joins (~lavaman@98.38.249.169)
21:46:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
21:47:09 <[exa]> but reader magically grabs global values out of nowhere! :D
21:47:10 <EvanR> "looks like" can be extended to everything, a computer is really an identifiable subset of a universal physical state
21:47:22 <EvanR> but it looks like a discrete machine
21:47:33 <dminuoso> [exa]: And what about Const?
21:48:32 <EvanR> the difference between s -> (a,s) and State s a is basically the key difference
21:49:19 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 272 seconds)
21:49:19 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
21:50:28 <[exa]> dminuoso: same except the other way, it's collecting some monoid aside instead of doing computations
21:50:59 <olle> energizer: malloc can be considered an effect too :)
21:51:08 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
21:51:36 <dminuoso> Monad Complex
21:51:44 <dminuoso> Huh wow, did not know this instance existed.
21:51:56 <dminuoso> a :+ b >>= f = realPart (f a) :+ imagPart (f b)
21:52:24 <energizer> this is helping, thanks
21:52:36 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
21:52:55 <dminuoso> [exa]: So what effect is being encoded here? :P
21:54:00 <[exa]> I'm trying to see if it looks like an effect
21:54:28 <[exa]> (currently by looking at it in disbelief :D )
21:55:29 <dminuoso> Perhaps the important thing is that "effect" is not some ultimate truth, it's just a mental model - and like all models it has its limits.
21:55:43 <dminuoso> Trying to force an effect-interpretation here is not really helpful at all
21:55:55 <olle> energizer: Effect is anything that's not part of the relation between input and output
21:56:03 <olle> of a function
21:56:10 <dminuoso> The only absolute truth we have is the laws of Monad, anything else is just fuzzy human interpretation
21:56:24 <[exa]> dminuoso: that's basically I like the feels-like definition
21:56:28 <Profpatsch> Duplicate instance declarations:
21:56:30 <Profpatsch> instance FormatQuote a => PyF.PyFToString a
21:56:32 <monochrom> I leave the definitions of "effect" and "algorithm" social rather than mathematical.
21:56:32 <Profpatsch> instance [overlappable] [safe] Show t => PyF.PyFToString t
21:56:35 <Profpatsch> I want to define the first instance
21:56:44 <Profpatsch> Is there a way to make GHC accept it?
21:56:47 <olle> Note that being pure is not the same thing as referential transparency
21:57:07 <dminuoso> Profpatsch: The sane way is to use a newtype wrapper
21:57:12 <olle> A fib function can cache its result on file, silent on failure
21:57:22 [exa] imagines ComplexT
21:57:39 <olle> It'd be referential transparent - always same output on same input - but not pure - file IO.
21:57:39 <Profpatsch> dminuoso: I have a feeling deriving via would come in handy here
21:57:54 <dminuoso> Profpatsch: I dont think that will help you.
21:58:05 <Profpatsch> dminuoso: basically I want to say “whenever your type implements this typeclass I can also give you an implementation for this other typeclass
21:58:28 <monochrom> [exa]: Did you know that "data Pair a = P a a" is very much like Bool->a? :)
21:58:57 <[exa]> monochrom: yes that's even isomorphic in that encoding (was it scott encoding?)
21:59:00 <monochrom> All the way down to how their return's and >>='s correspond.
21:59:38 <monochrom> No I think that's just "Pair is a representable functor, represented by Bool".
21:59:46 <dminuoso> Profpatsch: The problem is, according to GHC, `instance Show t => PyF.PyFToString t` already matches *all* instances.
21:59:53 <dminuoso> Irrespective of whether a Show instance exists, even
21:59:54 <monochrom> So now "data Complex a = a :+ a" is just Pair in infix syntax.
21:59:59 <[exa]> I'm probably getting too carried away by the algebra semantic of complex numbers, yes.
22:00:19 <dminuoso> Profpatsch: That is, for instance selection that will *always* match.
22:00:22 analognoise joins (~analognoi@185.229.59.36)
22:00:45 <dminuoso> You could use {-# OVERLAPPING #-} in your instance, but you might want to weight the consequences of that.
22:00:49 <[exa]> anyway thanks guys this is a nice find. :]
22:01:24 × analognoise quits (~analognoi@185.229.59.36) (Max SendQ exceeded)
22:01:43 <Profpatsch> dminuoso: yeah, that’s what I was expecting
22:01:53 analognoise joins (~analognoi@185.229.59.36)
22:02:24 <dminuoso> Ah but hold on, I think that wont work
22:02:30 <dminuoso> Because your instance is not any more specific.
22:02:42 <dminuoso> So you're out of luck. Either use a separate typeclass or a newtype wrapper
22:03:03 <dminuoso> (overlapping wouldnt do anything extra, since the other instance already is overlappable)
22:03:32 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:04:21 × eldritch_ quits (~eldritch@user/eldritch/x-9272577) (Quit: bye)
22:04:21 × glider quits (~glider@user/glider) (Quit: ZNC - https://znc.in)
22:04:22 × anderson quits (~ande@user/anderson) (Quit: bye)
22:05:43 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
22:06:10 alx741 joins (~alx741@157.100.197.240)
22:07:21 pavonia joins (~user@user/siracusa)
22:07:37 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
22:10:23 Erutuon joins (~Erutuon@user/erutuon)
22:10:44 eldritch_ joins (~eldritch@user/eldritch/x-9272577)
22:11:31 <energizer> do "algebraic effects" and "effect system" refer to the same thing?
22:12:23 glider joins (~glider@user/glider)
22:12:24 <olle> energizer: No
22:12:35 <olle> Assuming "effect system" is the same as "typed effects"
22:12:53 <olle> OCaml will have algebraic effects but not typed effects, iirc (in the next release)
22:13:57 <energizer> what is the difference?
22:15:36 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
22:15:51 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
22:16:15 × unyu quits (~pyon@user/pyon) (Quit: WeeChat 3.4)
22:16:26 <olle> energizer: typed effects mean that all side-effects of a function will be part of the function's signature, in some way
22:16:32 <olle> That's kind of already the case in Haskell
22:16:40 anderson joins (~ande@user/anderson)
22:16:58 <olle> energizer: https://www.janestreet.com/tech-talks/effective-programming/
22:17:06 <olle> There's a talk on algebraic effects.
22:17:15 <olle> Wait no
22:17:55 <olle> energizer: This one: https://github.com/ocamllabs/ocaml-effects-tutorial
22:18:55 <olle> Not sure how that's different from `yield` in PHP and JS, honestly.
22:19:19 <energizer> "They generalise common abstractions such as exceptions, generators, asynchronous I/O, or concurrency, as well as other seemingly esoteric programming abstractions such as transactional memory and probabilistic computations."
22:20:09 <energizer> sure. python's `yield from` and `await` are really the same thing and i can see exceptions being related too
22:20:20 unyu joins (~pyon@user/pyon)
22:20:45 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:20:58 lavaman joins (~lavaman@98.38.249.169)
22:21:06 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:21:18 <olle> energizer: For a working lang with typed effects, see Koka 2 from Microsoft research
22:21:21 lavaman joins (~lavaman@98.38.249.169)
22:21:28 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:21:34 <olle> And maybe F* (fstar lang)
22:21:42 lavaman joins (~lavaman@98.38.249.169)
22:21:47 <energizer> the stuff we were talking about earlier, was that 'typed effects'?
22:21:49 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:22:04 lavaman joins (~lavaman@98.38.249.169)
22:22:11 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:22:25 lavaman joins (~lavaman@98.38.249.169)
22:22:32 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:22:36 <olle> energizer: functional core?
22:22:47 lavaman joins (~lavaman@98.38.249.169)
22:22:49 <energizer> no i was asking what 'effects' means
22:22:54 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:23:00 <olle> Ah, no, that's not the same
22:23:08 lavaman joins (~lavaman@98.38.249.169)
22:23:15 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:23:18 <olle> A function can be pure or effectful without affecting its function signature (in a language without typed effects)
22:23:30 lavaman joins (~lavaman@98.38.249.169)
22:23:37 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:23:50 lavaman joins (~lavaman@98.38.249.169)
22:23:58 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:24:13 lavaman joins (~lavaman@98.38.249.169)
22:24:19 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:24:34 lavaman joins (~lavaman@98.38.249.169)
22:24:41 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:24:55 lavaman joins (~lavaman@98.38.249.169)
22:25:02 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:25:17 lavaman joins (~lavaman@98.38.249.169)
22:25:24 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:25:38 lavaman joins (~lavaman@98.38.249.169)
22:25:45 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:26:00 lavaman joins (~lavaman@98.38.249.169)
22:26:07 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:26:12 <olle> I think in Haskell, side-effects will always change the signature, including the IO monad and others
22:26:21 lavaman joins (~lavaman@98.38.249.169)
22:26:22 <olle> Since the lang is pure :)
22:26:28 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:26:37 <olle> Even randomisation?
22:26:43 lavaman joins (~lavaman@98.38.249.169)
22:26:50 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:27:04 lavaman joins (~lavaman@98.38.249.169)
22:27:11 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:27:13 <energizer> effects, typed effects, algebraic effects, effect handlers, none of these mean the same thing
22:27:26 lavaman joins (~lavaman@98.38.249.169)
22:27:33 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:27:35 <geekosaur> olle, has little to do with purity and everything to do with strong typing
22:27:47 lavaman joins (~lavaman@98.38.249.169)
22:27:55 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:28:02 <energizer> , right?
22:28:09 lavaman joins (~lavaman@98.38.249.169)
22:28:10 <olle> geekosaur: Hm, no? Strong/weak types is not related to effects, I think.
22:28:16 zebrag joins (~chris@user/zebrag)
22:28:16 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:28:24 <geekosaur> hold on
22:28:26 ChanServ sets mode +o geekosaur
22:28:31 lavaman joins (~lavaman@98.38.249.169)
22:28:38 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:28:52 lavaman joins (~lavaman@98.38.249.169)
22:28:59 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:29:00 geekosaur sets mode +b *!*@98.38.249.169$##fix-your-connection
22:29:26 <geekosaur> pity I can't make my client do that automagically
22:29:28 geekosaur sets mode -o geekosaur
22:29:50 <geekosaur> olle, not directly, but if a language is strongly typed then effects will show in the type
22:29:59 <geekosaur> if it is weakly typed then they won't
22:30:24 <geekosaur> *how* they show depends on implementation
22:30:37 <olle> geekosaur: Not sure everyone would agree on that def :)
22:30:55 <olle> OCaml folks would call OCaml strongly typed, e.g.
22:32:12 <geekosaur> but it is also not directly purity. it is a combination: you must advertise impurity in the type in Haskell. you don't in OCaml
22:32:25 alx741 joins (~alx741@157.100.197.240)
22:32:40 <geekosaur> but you can advertise purity even in C
22:32:52 <geekosaur> soit's not just purity
22:33:45 <olle> wat
22:33:52 <olle> what does that mean, purity in C?
22:36:11 <geekosaur> no side effects. gcc/clang use it for optimization
22:36:18 <olle> geekosaur: Link?
22:36:35 <geekosaur> but it's up to you to use it and I think the ocmpiler just trusts you
22:37:14 <olle> Yeah, that's not "strong" typing in any sense xD
22:37:30 <geekosaur> here's an example https://stackoverflow.com/questions/29117836/attribute-const-vs-attribute-pure-in-gnu-c
22:37:34 <olle> But C was always weak + static
22:38:05 <olle> Yeah, just a compiler attribute
22:39:23 <geekosaur> right, but it does point up that purity by itself doesn't prove anything
22:39:35 <geekosaur> you need both for at least haskell-style effects
22:40:08 <geekosaur> and C is not strongly typed, so yes, it's an attribute instead of a type
22:40:36 <olle> Considering how esoteric typed effects are, I'd be suprised to see it in a weakly typed lang :)
22:41:40 <geekosaur> whereas in ocaml you cna't easily tell the difference between an "effect" and normal code except by inspecting the function in question
22:41:59 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
22:42:18 × michalz quits (~michalz@185.246.204.65) (Remote host closed the connection)
22:42:42 <olle> Sure
22:42:54 <olle> Same goes for all langs except Haskell :)
22:44:08 ChanServ sets mode +o litharge
22:44:09 litharge sets mode -bo *!*@98.38.249.169$##fix-your-connection litharge
22:44:20 lavaman joins (~lavaman@98.38.249.169)
22:44:27 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:44:41 lavaman joins (~lavaman@98.38.249.169)
22:44:49 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:45:04 lavaman joins (~lavaman@98.38.249.169)
22:45:11 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:45:19 ChanServ sets mode +o monochrom
22:45:24 lavaman joins (~lavaman@98.38.249.169)
22:45:30 monochrom sets mode +b *!*@98.38.249.169$##fix-your-connection
22:45:32 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:45:38 <sprout> how pure is a state monad?
22:45:52 <geekosaur> it's just s -> (a,s)
22:46:00 monochrom sets mode -o monochrom
22:46:12 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
22:46:23 <sprout> sure, but now I've got assignment in a pure language
22:46:31 <geekosaur> no impurity to it at all, it just hides that it's passing the "state" in and getting it back afterward
22:46:59 <sprout> and c hides it's pure underneath?
22:47:24 <olle> C just flashes all its dirty effects
22:47:36 <olle> Like a hobo on crystal meth
22:47:52 <sprout> a true programming perverts language!
22:48:13 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
22:48:35 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
22:50:41 justsomeguy joins (~justsomeg@user/justsomeguy)
22:51:01 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Remote host closed the connection)
22:55:23 <hpc> in fact, C likes spreading its dirty effects even to clean parts of the code
22:55:30 alp joins (~alp@user/alp)
22:55:45 <hpc> if you write a potentially integer-overflowing addition in one function, gcc might decide to completely ignore an unrelated if-then-else in another function
22:56:03 <hpc> hope you have good logging, and also hope that your logging hasn't been gcc'd away as well
22:56:16 <romesrf> haahah olle
22:56:51 <geekosaur> "gcc'd away"
22:57:46 <olle> geekosaur: The nerdy sequal to "Gone with the wind" :D
22:57:58 <hpc> gone with the win32
22:58:04 <olle> ^^ +1
23:00:11 alx741 joins (~alx741@157.100.197.240)
23:01:20 <olle> Aaand it's late (CET)
23:05:45 ChanServ sets mode +o litharge
23:05:46 litharge sets mode -bo *!*@98.38.249.169$##fix-your-connection litharge
23:05:56 lavaman joins (~lavaman@98.38.249.169)
23:06:03 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
23:06:08 <monochrom> oh darn, so 20 minutes is not enough either
23:06:08 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:06:14 ChanServ sets mode +o monochrom
23:06:18 lavaman joins (~lavaman@98.38.249.169)
23:06:22 monochrom sets mode +b *!*@98.38.249.169$##fix-your-connection
23:06:25 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
23:06:46 <geekosaur> they'realso overriding the forward ban, so little point in including it I guess
23:08:26 monochrom sets mode -o monochrom
23:11:43 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7dab:1fa0:9cf6:a5de)
23:11:46 <EvanR> some sort of cosmic ircops conflict
23:17:59 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
23:18:56 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
23:19:33 × coot quits (~coot@213.134.190.95) (Quit: coot)
23:21:17 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
23:24:05 × maxime__ quits (~maxime@2a01cb08833598009e7cfeb2ba15b673.ipv6.abo.wanadoo.fr) (Quit: Leaving)
23:24:44 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
23:24:46 alx741 joins (~alx741@157.100.197.240)
23:26:42 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
23:28:49 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
23:28:49 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:29:37 × cosimone quits (~user@93-44-184-23.ip98.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
23:32:06 × off^ quits (~off@50.235.176.163) (Ping timeout: 256 seconds)
23:33:36 × analognoise quits (~analognoi@185.229.59.36) (Quit: Leaving)
23:39:34 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:45:55 alx741 joins (~alx741@157.100.197.240)
23:45:57 × Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Quit: Leaving)
23:50:46 off^ joins (~off@50.235.176.163)
23:51:22 × olle quits (~olle@i5E866D81.versanet.de) (Ping timeout: 256 seconds)
23:52:51 <pavonia> geekosaur: What do you mean by overriding the ban?
23:53:19 wombat871 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
23:53:49 <geekosaur> a forward ban pushes them into a different channel. clients generally remember that and on reconnect go to the new channel. and did so the last few times lavaman's client started doing this
23:53:57 <geekosaur> but now they're coming back here anyway
23:54:26 <geekosaur> I don't think they're being malicious, but they're ignoring the name of the channel they end up in…
23:55:01 <geekosaur> (it's a "reserved" channel for this use, people whose clients start disconnecting and reconnecting in rapid succession)
23:56:01 <pavonia> Okay, I didn't know there are clients that auto-replace joined channels by forwards
23:56:26 <geekosaur> baswically they remember the channels they're in. this doesn't work across restarts usually, but do across reconnects
23:56:26 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)

All times are in UTC on 2022-02-12.