Home liberachat/#haskell: Logs Calendar

Logs on 2021-11-09 (liberachat/#haskell)

00:00:59 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
00:02:28 [Kalisto] joins (~nico@user/kalisto/x-8968079)
00:07:11 × emf quits (~emf@2620:10d:c091:480::1:6062) (Ping timeout: 245 seconds)
00:07:43 × CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
00:09:15 emf joins (~emf@2620:10d:c090:400::5:c9f2)
00:09:20 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:540:e191:ad14:68ac) (Remote host closed the connection)
00:11:10 <Inst> YESSS!
00:11:17 <Inst> Got TinyFileDialogs isntalled via Cabal!
00:15:36 × Inst quits (~Inst@2601:6c4:4080:3f80:f571:277c:e0b0:82b9) (Read error: Connection reset by peer)
00:15:54 Inst joins (~Inst@2601:6c4:4080:3f80:d8ab:2e91:63f7:db6e)
00:16:54 <energizer> i feel like pattern matching is somehow the opposite of multiple dispatch. is there something i can read about their relationship?
00:17:55 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:540:e191:ad14:68ac)
00:19:46 × burnsidesLlama quits (~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
00:19:47 <geekosaur> pattern matching is multiple dispatch on structure as opposed to type. this said, there are languages which offer pattern matching which can match on multiple types
00:20:05 <geekosaur> while still matching on structure
00:21:53 <geekosaur> so they're only "opposites" if you take a restrictive view of "multiple dispatch", granting that many languages do take such a restrictive view
00:22:22 <energizer> i usually think of multiple dispatch as open/extensible and pattern matching as closed
00:23:23 <geekosaur> this again depends on the language, I think. Haskell's pattern matching is closed
00:24:30 <hpc> there's pattern matching on Either, if you squint a bit
00:24:36 <geekosaur> and this is considered something of a feature, since it means the compiler will at least warn you if you refactor to add a new case to a structured value / ADT and you miss a spot where it needs to be added
00:25:21 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
00:25:22 × johnjay quits (~pi@192.142.100.50) (Ping timeout: 260 seconds)
00:25:32 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
00:26:38 Lord_of_Life_ is now known as Lord_of_Life
00:27:38 <geekosaur> (and if you want extensible multiple dispatch, Haskell has typeclasses. they don't do pattern matching in the Haskell sense, though, since they dispatch on types, not values)
00:28:34 <energizer> i guess i should be asking in #idris but presumably there's dependent-typeclass dispatch or something
00:31:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
00:31:55 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
00:33:42 × Dinya quits (~Dinya@77-56-51-127.dclient.hispeed.ch) (Quit: Client closed)
00:33:53 <unit73e> finally managed to make aeson do what I wanted
00:33:53 <sm> I think.. it was not supposed to be such an achievement.. :)
00:33:54 <sm> that feeling of having beat a final boss when you get a haskell package installed..
00:34:40 <unit73e> it was embarasingly simple... `decodeFileStrict f :: IO (Maybe (KM.KeyMap Sprite))`
00:34:52 <unit73e> I wanted the map because the keys aren't fixed
00:35:05 johnjay joins (~pi@192.142.100.50)
00:35:47 <unit73e> I had to read the source code of aeson to figure that out lol...
00:39:33 machinedgod joins (~machinedg@24.105.81.50)
00:40:02 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
00:47:06 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
00:47:18 Vajb joins (~Vajb@85-76-35-135-nat.elisa-mobile.fi)
00:48:08 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:48:08 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
00:48:08 wroathe joins (~wroathe@user/wroathe)
00:48:58 Guest42 joins (~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
00:52:32 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
00:53:22 × mark__ quits (~a@p200300ef973db1484086f0a6a24fc4dd.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1)
00:53:26 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
00:58:20 × mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
00:59:20 mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001)
00:59:41 × jkaye quits (~jkaye@2601:281:8300:7530:2b36:18db:1545:7097) (Ping timeout: 245 seconds)
01:00:45 × Vajb quits (~Vajb@85-76-35-135-nat.elisa-mobile.fi) (Read error: Connection reset by peer)
01:00:47 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:540:e191:ad14:68ac) (Remote host closed the connection)
01:01:16 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
01:03:43 allbery_b joins (~geekosaur@xmonad/geekosaur)
01:03:44 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
01:03:47 allbery_b is now known as geekosaur
01:06:07 dajoer joins (~david@user/gvx)
01:08:58 <yin> /f encding
01:24:37 <danso> is there no equivalent to the TypeOperators extension for data constructors?
01:25:57 <danso> meaning there's no way to define something like `data T a b = ^^ a | ?? b
01:26:13 <danso> `
01:26:24 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:540:e191:ad14:68ac)
01:26:35 <yin> that wuld be confusing
01:26:44 <yin> why would you want that?
01:27:10 <danso> i can't find anything about it, but `(:)` is a type constructor operator
01:28:11 <yin> it's infix
01:28:51 <yin> the language supports infix data constructors starting with the character ':'
01:29:26 <danso> i just realized i can do it using the () syntax ._.
01:29:27 <danso> thanks anyway
01:29:47 × Guest42 quits (~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
01:29:59 <danso> oh, it only allows ':'? why is that?
01:31:03 <yin> convention. it's the syntax rule
01:31:05 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:31:19 Guest27 joins (~Guest27@2601:281:d480:2ce0::93bd)
01:32:22 gdown joins (~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net)
01:36:00 × lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
01:40:47 <yin> think of ':' as an uppercase symbol. normal function names can't start with it
01:41:27 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:41:28 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:41:28 wroathe joins (~wroathe@user/wroathe)
01:41:36 <yin> @def (:+) x y = x + y
01:41:36 <lambdabot> .L.hs:164:12: error:
01:41:36 <lambdabot> Ambiguous occurrence ‘x’
01:41:36 <lambdabot> It could refer to
01:41:39 <geekosaur> basically, pattern matches need a way to distinguish between constructors and value bindings. they use case for that, but symbols don't have case, so prefix : is treated as an "uppercase" symbol character
01:41:50 <monochrom> Alphabetical data constructors begin with a capital letter. Symbolic data constructors begin with a colon. This helps the grammar to know that "f t = ..." and "x %%% y = ..." are defining functions f and (%%%), "F t = ..." and "x :% y = ..." are defining t, x, y using pattern matching.
01:42:01 yin sigh
01:42:04 <yin> @undef
01:42:04 <lambdabot> Undefined.
01:42:08 <yin> @def (:+) x y = x + y
01:42:09 <lambdabot> .L.hs:151:12: error:
01:42:09 <lambdabot> Ambiguous occurrence ‘x’
01:42:09 <lambdabot> It could refer to
01:42:23 <yin> ^ what is happening here? what is this error?
01:42:27 <monochrom> It could refer to x::Expr :)
01:42:33 <geekosaur> ^
01:43:00 <monochrom> And like I said "(:+) t u = ..." defines t and u, not (:+)
01:43:03 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
01:43:13 <monochrom> To define (:+), please start with "data" :)
01:44:48 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:46:07 <yin> why can't anything be not confusing?
01:46:20 <monochrom> What is confusing?
01:47:20 <yin> explaining things in haskell seem to be harder than understanding them sometimes. i'm just sleepy...
01:48:08 <dsal> Haha. That's partially because it usually requires explaining things less precisely while still being clear.
01:48:54 <monochrom> Really, it can cut both ways, depending on how you mean by "explain" and by "understand".
01:49:51 <yin> monochrom: you are proving my point :D
01:50:03 <monochrom> Sometimes I define "explain" to just mean "see, here are the axioms", "understand" to mean "but have you seen all theorems that follow from the axioms?". In that case, understanding is harder.
01:50:56 <monochrom> Some other times, I define "understand" to mean "I've learned this stuff", "explain" to mean "now I have to teach this stuff to other people". Clearly, teaching is harder.
01:52:16 <yin> too many asterisks
01:52:41 <monochrom> "My God, it's full of stars"? :)
01:54:27 <monochrom> Anyway, lambdabot has loaded up the simple-reflect package, which defines x to support this kind of explanations:
01:54:33 <monochrom> > foldr f a [x, y, z]
01:54:35 <lambdabot> f x (f y (f z a))
01:55:03 <yin> i *think* i remember ghci r lambdabt quoting 2001 with the snarky remarks enabled
01:55:05 <monochrom> So in fact it defines all of a to z.
01:55:43 <geekosaur> ghci doesnn't. some lambdabot deatures use bsd's insults mode which includes lots of snarky remarks
01:56:00 <geekosaur> *features
01:56:00 <yin> that must've been it
01:56:25 jkaye joins (~jkaye@2601:281:8300:7530:1c01:b0f:3c58:2e46)
01:56:29 <geekosaur> like if you query the quote db and it doesn't find a match
01:56:40 <monochrom> I think @src has insults
01:56:47 <monochrom> @src idd
01:56:47 <lambdabot> Source not found. I've seen penguins that can type better than that.
01:56:56 <yin> ^there you go
01:57:10 <monochrom> Ah yeah @quote too
01:57:14 <monochrom> @quote xyk
01:57:14 <lambdabot> No quotes match. You untyped fool!
01:58:01 <yin> it risks offending strict types
01:58:43 <monochrom> Oh w00t simple-reflect also has...
01:58:44 <monochrom> > foldr (⊗) z [a,b,c]
01:58:46 <lambdabot> a ⊗ (b ⊗ (c ⊗ z))
01:59:13 <monochrom> The complete list is at https://hackage.haskell.org/package/simple-reflect-0.3.3/docs/Debug-SimpleReflect-Vars.html
02:00:08 <monochrom> Nice debate: Does it abuse Show? >:)
02:00:31 <monochrom> err, s/Nice/Next/ ! Although I guess either way works.
02:00:34 <danso> i appreciate the thoughtful answers, thanks :^)
02:05:09 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
02:05:50 × gdown quits (~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
02:10:37 renzhi joins (~xp@2607:fa49:6500:b100::6e7f)
02:16:43 × alzgh quits (~alzgh@user/alzgh) (Ping timeout: 256 seconds)
02:19:02 tabemann_ is now known as tabemann
02:22:18 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
02:22:55 × vysn quits (~vysn@user/vysn) (Ping timeout: 250 seconds)
02:23:37 alzgh joins (alzgh@user/alzgh)
02:24:41 × alx741 quits (~alx741@181.196.68.101) (Quit: alx741)
02:25:02 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
02:26:32 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
02:34:51 × Guest27 quits (~Guest27@2601:281:d480:2ce0::93bd) (Ping timeout: 256 seconds)
02:38:51 × zebrag quits (~chris@user/zebrag) (Remote host closed the connection)
02:42:05 zebrag joins (~chris@user/zebrag)
02:42:33 ec_ joins (~ec@gateway/tor-sasl/ec)
02:42:54 × ec_ quits (~ec@gateway/tor-sasl/ec) (Client Quit)
02:43:20 Guest6642 is now known as feetwind
02:43:27 × feetwind quits (~mike@user/feetwind) (Quit: WeeChat 3.1)
02:43:41 feetwind joins (~mike@user/feetwind)
02:46:08 ec_ joins (~ec@gateway/tor-sasl/ec)
02:47:15 × ec_ quits (~ec@gateway/tor-sasl/ec) (Client Quit)
02:48:42 ec_ joins (~ec@gateway/tor-sasl/ec)
02:48:43 × ec_ quits (~ec@gateway/tor-sasl/ec) (Client Quit)
02:50:13 _koolazer is now known as koolazer
02:50:22 ec_ joins (~ec@gateway/tor-sasl/ec)
02:51:06 ec_ is now known as ec
02:52:37 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving)
02:57:32 × xff0x quits (~xff0x@2001:1a81:5343:8e00:3d14:89a2:444a:e78d) (Ping timeout: 240 seconds)
02:59:34 xff0x joins (~xff0x@2001:1a81:536d:7000:f003:c1eb:d2a3:5377)
03:01:27 × pop3 quits (~pop3@user/pop3) (Remote host closed the connection)
03:01:32 × jkaye quits (~jkaye@2601:281:8300:7530:1c01:b0f:3c58:2e46) (Ping timeout: 240 seconds)
03:02:05 pop3 joins (~pop3@user/pop3)
03:02:45 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
03:22:24 × alzgh quits (alzgh@user/alzgh) (Remote host closed the connection)
03:22:51 lavaman joins (~lavaman@98.38.249.169)
03:27:31 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
03:33:23 × emf quits (~emf@2620:10d:c090:400::5:c9f2) (Ping timeout: 264 seconds)
03:37:07 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:37:07 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:37:07 finn_elija is now known as FinnElija
03:45:24 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 244 seconds)
03:57:18 ddb joins (~ddb@ipv6two.tilde.club)
04:00:46 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
04:01:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:04:36 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
04:04:52 <jackdk> `fmap :: Functor f => (a -> b) -> f a -> f b` is like a "one to one" map from `a` to `b`; `mapMaybe :: Filterable f => (a -> Maybe b) -> f a -> f b` maps "one to zero or one"; is there a class that does `(a -> [b]) -> f a -> f b`?
04:05:29 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
04:06:00 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:06:15 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.3)
04:08:51 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
04:09:40 justsomeguy joins (~justsomeg@user/justsomeguy)
04:09:58 × boxscape_ quits (~boxscape_@i577BCB42.versanet.de) (Quit: Connection closed)
04:15:23 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:16:19 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
04:16:53 × renzhi quits (~xp@2607:fa49:6500:b100::6e7f) (Ping timeout: 250 seconds)
04:17:43 img joins (~img@user/img)
04:23:09 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
04:28:04 <c_wraith> jackdk: I can't imagine many instances for that. lists and multimaps, and...?
04:29:35 <dsal> :t foldMap
04:29:36 <lambdabot> (Foldable t, Monoid m) => (a -> m) -> t a -> m
04:31:18 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 260 seconds)
04:35:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
04:36:08 <awpr> an obstacle to that particular type is: how would you know how to organize the list elements into the structure of `m`? anything with more structure than a plain list would have to "make up" that extra structure
04:36:44 <awpr> one natural way to address that is: change it so that the inner list is already `m b` instead. and then what you have is `Monad`
04:37:59 <awpr> trees with values only at the leaves can have that kind of `Monad` instance: find a leaf value, apply a function, and graft the resulting tree in place of the leaf
04:39:54 <dsal> I'm kind of guessing as to how close to that we need to get.
04:40:34 <dsal> jackdk: Have you looked into recursion-schemes at all? That looks like an anamorphism.
04:44:23 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (*.net *.split)
04:44:23 × zebrag quits (~chris@user/zebrag) (*.net *.split)
04:44:23 × geekosaur quits (~geekosaur@xmonad/geekosaur) (*.net *.split)
04:44:23 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (*.net *.split)
04:44:24 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (*.net *.split)
04:44:24 × Codaraxis quits (~Codaraxis@user/codaraxis) (*.net *.split)
04:44:24 × juhp quits (~juhp@128.106.188.220) (*.net *.split)
04:44:24 × fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (*.net *.split)
04:44:24 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (*.net *.split)
04:44:24 × infinity0 quits (~infinity0@occupy.ecodis.net) (*.net *.split)
04:44:24 × edwtjo quits (~edwtjo@user/edwtjo) (*.net *.split)
04:44:24 × niko quits (~niko@libera/staff/niko) (*.net *.split)
04:44:24 × Philonous quits (~Philonous@user/philonous) (*.net *.split)
04:44:24 × duckonomy quits (~duckonomy@177.ip-144-217-84.net) (*.net *.split)
04:44:24 × Inoperable quits (~PLAYER_1@fancydata.science) (*.net *.split)
04:44:24 × chronon quits (~chronon@user/chronon) (*.net *.split)
04:44:24 × marienz quits (~marienz@libera/staff/marienz) (*.net *.split)
04:44:24 × kosmikus quits (~kosmikus@nullzig.kosmikus.org) (*.net *.split)
04:44:24 × edr quits (~edr@user/edr) (*.net *.split)
04:44:24 × dkeohane2 quits (~dkeohane@ec2-18-189-29-140.us-east-2.compute.amazonaws.com) (*.net *.split)
04:44:24 × bah quits (~bah@l1.tel) (*.net *.split)
04:44:24 × SethTisue__ quits (sid14912@ilkley.irccloud.com) (*.net *.split)
04:44:24 × angerman quits (sid209936@ilkley.irccloud.com) (*.net *.split)
04:44:24 × obviyus quits (sid415299@user/obviyus) (*.net *.split)
04:44:24 × tritlo quits (sid58727@user/tritlo) (*.net *.split)
04:44:24 × wolfshappen quits (~waff@irc.furworks.de) (*.net *.split)
04:44:25 × glguy quits (x@libera/staff/glguy) (*.net *.split)
04:45:11 mbuf joins (~Shakthi@136.185.69.244)
04:45:11 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
04:45:11 zebrag joins (~chris@user/zebrag)
04:45:11 geekosaur joins (~geekosaur@xmonad/geekosaur)
04:45:11 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
04:45:11 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
04:45:11 Codaraxis joins (~Codaraxis@user/codaraxis)
04:45:11 juhp joins (~juhp@128.106.188.220)
04:45:11 fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
04:45:11 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
04:45:11 infinity0 joins (~infinity0@occupy.ecodis.net)
04:45:11 edwtjo joins (~edwtjo@user/edwtjo)
04:45:11 niko joins (~niko@libera/staff/niko)
04:45:11 Inoperable joins (~PLAYER_1@fancydata.science)
04:45:11 Philonous joins (~Philonous@user/philonous)
04:45:11 duckonomy joins (~duckonomy@177.ip-144-217-84.net)
04:45:11 chronon joins (~chronon@user/chronon)
04:45:11 edr joins (~edr@user/edr)
04:45:11 marienz joins (~marienz@libera/staff/marienz)
04:45:11 kosmikus joins (~kosmikus@nullzig.kosmikus.org)
04:45:11 dkeohane2 joins (~dkeohane@ec2-18-189-29-140.us-east-2.compute.amazonaws.com)
04:45:11 bah joins (~bah@l1.tel)
04:45:11 SethTisue__ joins (sid14912@ilkley.irccloud.com)
04:45:11 angerman joins (sid209936@ilkley.irccloud.com)
04:45:11 obviyus joins (sid415299@user/obviyus)
04:45:11 tritlo joins (sid58727@user/tritlo)
04:45:11 wolfshappen joins (~waff@irc.furworks.de)
04:45:11 glguy joins (x@libera/staff/glguy)
04:47:07 × wolfshappen quits (~waff@irc.furworks.de) (Max SendQ exceeded)
04:47:36 wolfshappen joins (~waff@irc.furworks.de)
04:50:56 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
04:51:17 alzgh joins (~alzgh@user/alzgh)
04:52:46 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Remote host closed the connection)
04:55:01 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
04:55:48 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
04:56:09 × cjb quits (~cjbayliss@user/cjb) (Remote host closed the connection)
04:56:44 angela joins (~angela@cpe-76-91-17-53.socal.res.rr.com)
04:56:46 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:56:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
04:56:46 wroathe joins (~wroathe@user/wroathe)
05:02:03 <angela> hello
05:04:52 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
05:12:41 × drdo quits (~drdo@roach0.drdo.eu) (Quit: Ping timeout (120 seconds))
05:13:20 × Flonk quits (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) (Quit: Ping timeout (120 seconds))
05:13:46 Flonk joins (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com)
05:15:26 deadmarshal joins (~deadmarsh@95.38.112.170)
05:19:13 × angela quits (~angela@cpe-76-91-17-53.socal.res.rr.com) (Quit: Client closed)
05:21:01 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
05:36:29 × edr quits (~edr@user/edr) (Ping timeout: 244 seconds)
05:37:08 edr joins (~edr@enlo.co)
05:37:08 × edr quits (~edr@enlo.co) (Changing host)
05:37:08 edr joins (~edr@user/edr)
05:41:31 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
05:44:13 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
05:44:58 cheater joins (~Username@user/cheater)
05:45:01 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
05:45:48 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
05:46:56 × haskl quits (~haskl@user/haskl) (Quit: Uh oh... ZNC disconnected.)
05:47:11 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 245 seconds)
05:47:12 haskl joins (~haskl@user/haskl)
05:48:53 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 244 seconds)
05:48:55 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
05:51:55 × haskl quits (~haskl@user/haskl) (Client Quit)
05:52:09 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
05:55:08 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:56:15 <Inst> [exa]
05:56:23 <Inst> problem solved courtesy Functional Programming Discord
05:56:35 <Inst> tinyfiledialogs in Hackage does the job I was looking for
05:56:48 <Inst> and it calls Windows native dialogs, even though TFD is obsolete
06:01:00 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:01:29 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
06:02:18 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
06:03:32 × russruss quits (~russruss@my.russellmcc.com) (Remote host closed the connection)
06:05:06 russruss joins (~russruss@my.russellmcc.com)
06:06:07 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
06:06:47 × alzgh quits (~alzgh@user/alzgh) (Ping timeout: 256 seconds)
06:08:22 <dsal> I'm proud of my Windows ignorance.
06:09:59 × falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 250 seconds)
06:10:32 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
06:12:00 phma joins (phma@2001:5b0:210d:9d18:7608:a226:de13:2590)
06:12:24 × zebrag quits (~chris@user/zebrag) (Remote host closed the connection)
06:15:33 × max22- quits (~maxime@2a01cb08833598002528ec70f3e7e36f.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
06:17:27 × tomku quits (~tomku@user/tomku) (Ping timeout: 268 seconds)
06:20:06 <kronicmage> Speaking of recursion schemes, is dynamic programming at all ergonomic using them? I've been experimenting for a while and have yet to find a good way
06:23:32 × xff0x quits (~xff0x@2001:1a81:536d:7000:f003:c1eb:d2a3:5377) (Ping timeout: 240 seconds)
06:23:48 falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com)
06:26:05 xff0x joins (~xff0x@2001:1a81:536d:7000:f003:c1eb:d2a3:5377)
06:28:02 × bliminse quits (~bliminse@host86-185-253-43.range86-185.btcentralplus.com) (Quit: Lost terminal)
06:30:44 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
06:31:13 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 250 seconds)
06:32:20 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:33:45 deadmarshal joins (~deadmarsh@95.38.112.170)
06:35:06 bliminse joins (~bliminse@host86-185-253-43.range86-185.btcentralplus.com)
06:36:55 × echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
06:38:17 × brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving)
06:46:30 rkrishnan joins (~user@122.167.19.65)
06:47:38 haskl joins (~haskl@user/haskl)
06:50:11 <Inst> dsal: guess what?
06:50:18 <Inst> Chrome OS is likely going to end up murdering Windows sooner or later
06:50:20 <Inst> market share went up
06:50:28 <Inst> in other news, does anyone know how to get Stack to install a package globally?
06:50:38 <Inst> I know this is typically not a good idea due to dependency hell
06:52:01 <dsal> Inst: stack install can do that, I think, but I've not done it because why would you?
06:52:17 <Inst> dsal: because I'm dumb, or rather I'm teaching someone else how to be dumb
06:52:41 <Inst> and just flashing a single, small package in is likely not going to create issues
06:52:52 <Inst> it's simpler than teaching them cabal before they know what recursion is
06:52:56 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
06:54:20 <dsal> `stack new` is a good first step
06:58:17 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
06:58:53 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 256 seconds)
07:01:26 ubert joins (~Thunderbi@p200300ecdf4fca8de6b318fffe838f33.dip0.t-ipconnect.de)
07:05:30 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
07:05:56 <Inst> creates new project
07:06:19 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
07:06:52 jinsun__ is now known as jinsun
07:18:18 × Neuromancer quits (~Neuromanc@user/neuromancer) (Remote host closed the connection)
07:19:45 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
07:21:40 deadmarshal joins (~deadmarsh@95.38.112.170)
07:21:56 lortabac joins (~lortabac@2a01:e0a:541:b8f0:e288:155f:c333:ecf4)
07:24:15 lavaman joins (~lavaman@98.38.249.169)
07:28:51 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
07:29:26 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
07:31:57 jakalx joins (~jakalx@base.jakalx.net)
07:34:24 <Inst> more realistically
07:34:33 <Inst> how do i get stack to point to a different GHC folder?
07:35:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
07:35:24 bitdex_ joins (~bitdex@gateway/tor-sasl/bitdex)
07:39:18 × She quits (~she@user/thedaemoness) (Ping timeout: 260 seconds)
07:39:59 She joins (~she@user/thedaemoness)
07:47:30 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
07:47:46 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Read error: Connection reset by peer)
07:48:22 the_finn joins (uid526334@id-526334.hampstead.irccloud.com)
07:53:17 × falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 256 seconds)
07:59:05 mikoto-chan joins (~mikoto-ch@esm-84-240-99-143.netplaza.fi)
08:00:00 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
08:02:02 × benin quits (~benin@183.82.26.68) (Ping timeout: 240 seconds)
08:07:16 retroid_ joins (~retro@2e41e9c8.skybroadband.com)
08:09:41 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
08:10:17 × retro_ quits (~retro@2e41e9c8.skybroadband.com) (Ping timeout: 268 seconds)
08:10:32 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
08:10:48 cfricke joins (~cfricke@user/cfricke)
08:10:54 × juri_ quits (~juri@178.63.35.222) (Ping timeout: 268 seconds)
08:11:25 juri_ joins (~juri@178.63.35.222)
08:12:12 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
08:13:25 kuribas joins (~user@ptr-25vy0i9fqz6dux8z18z.18120a2.ip6.access.telenet.be)
08:14:02 benin joins (~benin@106.198.84.11)
08:14:05 <kuribas> There is no way to make a formal specification, and proof that the implementation is conform it, without fancy types or dependent types, right?
08:14:07 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
08:14:10 <kuribas> like Servant for example.
08:19:05 CiaoSen joins (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
08:21:32 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
08:21:54 <energizer> is there a word for taking a complicated type describing a collection of values with various properties and dumbing down the type into "list of float"?
08:22:21 <lortabac> kuribas: maybe an alternative would be to keep the types of the implementation simple and prove correctness extrinsically with something like Liquid Haskell
08:22:21 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:22:26 <energizer> (or some other dumb type)
08:22:37 <lortabac> energizer: unrefine?
08:22:53 <dminuoso> kuribas: The closest thing I know of is coq + program extraction.
08:22:56 <kuribas> energizer: evaluate? calculate?
08:23:26 <kuribas> lortabac: define correctness.
08:23:41 <dminuoso> Also dont forget tests.
08:23:43 <lortabac> kuribas: you have already given the definition :P
08:24:03 <lortabac> "a proof that the implementation is conform to the specification"
08:24:06 <dminuoso> Especially with quichcheck or even just unit tests, these can simple serve as formal specifying properties that you can test by simply running the test suite.
08:24:11 <kuribas> lortabac: I wouldn't call that "correctness". The word is so much overloaded.
08:24:25 <dminuoso> Say where you specify associativity of an operator to hold, you can simply describe that with quickcheck.
08:24:48 <lortabac> kuribas: ok I didn't want to type that long sentence
08:25:04 <kuribas> lortabac: I prefer "conform" or "consistent".
08:26:04 <kuribas> would you say that haskell (without other tools), isn't really suited for this purpose?
08:26:46 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
08:26:57 <lortabac> what I wanted to say is: whatever you can prove intrinsically with fancy types, (I think) you can prove it extrinsically and move the complexity from the implementation to the proof
08:27:21 <lortabac> I don't know whether this is always possible
08:28:36 <lortabac> think of the various lists-with-proofs, like sized-vectors, fin etc., they all require separate implementations
08:29:02 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
08:29:17 <kuribas> lortabac: you mean like an external specification, and some test suite?
08:29:25 <lortabac> whereas if you use plain lists you might be able to move the same proofs to Liquid Haskell
08:30:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:31:13 <kuribas> lortabac: liquid haskell seems to me even more fancy than type level extensions.
08:31:44 <kuribas> There is no garantee it will support all ghc features at any time, is there?
08:31:47 <lortabac> yes, but the complexity is not in the implementation, you can delete all the proofs and the code will still work
08:31:49 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
08:32:33 <lortabac> whereas if you use for ex. Vec, you are stuck with it
08:33:02 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
08:33:03 lavaman joins (~lavaman@98.38.249.169)
08:33:06 <kuribas> I see your point. I think I'd prefer tests or property tests in that case, as dminuoso suggested.
08:33:20 <kuribas> There are no really "proof", but can be close to proofs.
08:33:24 chele joins (~chele@user/chele)
08:33:39 <lortabac> fair point, tests are probably the best thing we have at the moment
08:33:57 <kuribas> I guess I underestimate the usefulness of tests which can keep the code simple.
08:35:11 vysn joins (~vysn@user/vysn)
08:36:06 <kuribas> And garantee consistency at the same time.
08:37:36 acidjnk_new3 joins (~acidjnk@p200300d0c7149f82889e7e27a4cfa8d6.dip0.t-ipconnect.de)
08:38:16 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
08:38:58 <lortabac> regarding Liquid Haskell, IIRC it doesn't really care about the various GHC features since it works on Core (memories from Zurihac ~2018, so I might be wrong)
08:39:14 <kuribas> Does core retain types?
08:39:53 <lortabac> yes, Core is typed
08:41:12 michalz joins (~michalz@185.246.204.61)
08:42:01 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
08:43:40 × benin quits (~benin@106.198.84.11) (Read error: Connection reset by peer)
08:44:32 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
08:45:29 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
08:45:42 benin joins (~benin@183.82.26.68)
08:52:00 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:52:16 chomwitt joins (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374)
08:54:31 mc47 joins (~mc47@xmonad/TheMC47)
08:54:51 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:540:e191:ad14:68ac) (Remote host closed the connection)
08:58:02 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 240 seconds)
09:00:32 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
09:00:50 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
09:06:21 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
09:09:14 jumper149 joins (~jumper149@80.240.31.34)
09:12:31 drdo joins (~drdo@roach0.drdo.eu)
09:16:35 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
09:17:43 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:43 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:46 allbery_b is now known as geekosaur
09:18:05 __monty__ joins (~toonn@user/toonn)
09:19:21 gehmehgeh joins (~user@user/gehmehgeh)
09:19:46 × gehmehgeh quits (~user@user/gehmehgeh) (Client Quit)
09:25:32 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 240 seconds)
09:28:45 nuh^ joins (~nuh@h50.174.139.63.static.ip.windstream.net)
09:29:14 deadmarshal joins (~deadmarsh@95.38.112.170)
09:31:24 <DigitalKiwi> cc. Hecate; #haskell-offtopic; hecate never made me a good artists CRM so i don't know all of the infos anymore :(
09:31:32 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 240 seconds)
09:34:05 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
09:35:22 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
09:35:46 stiell joins (~stiell@gateway/tor-sasl/stiell)
09:39:11 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
09:39:11 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
09:40:12 × pop3 quits (~pop3@user/pop3) (Remote host closed the connection)
09:41:23 pop3 joins (~pop3@user/pop3)
09:51:00 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
09:52:36 gehmehgeh joins (~user@user/gehmehgeh)
09:53:25 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds)
09:55:37 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:91d4:d998:64f1:2e2f)
09:58:51 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
09:59:02 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 240 seconds)
09:59:22 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
10:00:23 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:91d4:d998:64f1:2e2f) (Ping timeout: 264 seconds)
10:00:47 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
10:01:15 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
10:01:57 alzgh joins (~alzgh@user/alzgh)
10:03:31 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:08:32 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
10:12:21 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
10:13:34 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
10:14:03 <cads> hey is there any writing done on how to make haskell "read like prose", how to simplify poorly written haskell, or how to structure haskell so that it is readable for people with a fundamentally low ability to read and process math symbols?
10:15:09 <cads> in the OOP world we have uncle bob and the clean coding practice, and there are even specific clean architectures that are supposed to make code readable and extensible
10:15:30 <cads> is there an uncle bob of haskell?
10:15:32 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
10:15:42 <dminuoso> cads: I dont believe in "clean coding practice"
10:15:53 <dminuoso> It presumes that there's some universal communicatable silver bullet in how to write code.
10:16:45 <dminuoso> Writing code that communicates well is one of the key skills you develop with years of expertise
10:17:02 × CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
10:17:29 wonko joins (~wjc@user/wonko)
10:17:36 × wonko quits (~wjc@user/wonko) (Remote host closed the connection)
10:18:19 <cads> dminuoso, that is just an excuses to not answer my question, lol
10:18:34 <dminuoso> It's similar to how authors become good. They practice writing and they read what others do.
10:19:42 <cads> yeah, but I can point you to a book called How to Write a Mystery which will give you a decade's head start on being a mystery writer, simply by informing you the different ways of writing mysteries, which you may not be aware of
10:20:06 <dminuoso> Mmm, well Im not aware of any such books about Haskell
10:20:17 <dminuoso> And given the relatively low popularity, I dont think such a specialized book that you're asking for exists.
10:20:45 <cads> likewise, I would not expect a coder to spontaneously manifest a great library of OOP patterns without first reading gang of four
10:20:49 <dminuoso> Refactoring poorly written code into readable code is probably highly individual based on how you perceive code and your target audience
10:21:10 <dminuoso> cads: OOP patterns is something *significaly* different from communicatable code.
10:21:38 × x6C697370 quits (~michael@2600:1700:7c02:3180::44) (Ping timeout: 268 seconds)
10:21:38 <dminuoso> GoF patterns are not grand achievements and the ideal, they are rather dirty workarounds to solve simple problems in poor languages.
10:21:55 <dminuoso> They have become somewhat of a religious item
10:21:58 <dminuoso> For reasons that are beyond me
10:22:11 <cads> yeah, actually reading the book I am struck by how hack to solutions seem, and how applicatives can do most of this stuff nowadays
10:22:21 <cads> how hacky the solution seems*
10:22:29 <tromp> does anyone know if ghcup plays nice with ihp ?
10:23:27 <tromp> does ihp try to install its own ghc?
10:24:45 <lortabac> dminuoso: they are hacky but they are a lingua franca
10:24:51 <dminuoso> cads: Consider something like "Factory pattern". What they dub a "pattern" with a lot of moving internal parts, I simply call a function. Apply it to some argument, get something back.
10:24:53 <dminuoso> Done.
10:25:24 <lortabac> instead of everybody reinventing their own dirty hacks, we all use the same ones and can understand each other's code better
10:25:47 wonko joins (~wjc@user/wonko)
10:25:54 <lortabac> not saying is a good state of things, I'm just trying to explain why they are popular
10:27:10 <cads> dminuoso, what is a factory good for?
10:28:28 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
10:28:47 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
10:31:47 <energizer> https://hackage.haskell.org/packages/top what does the "Downloads" column mean? it can't be "total downloads ever" can it?
10:33:51 <cads> lortabac, I get the frustration with the cult mentality around the original GoF pattern. It's 25 years old, and there is no clear successor. So folks recommending GoF are recommending what may well be a kind of dead end in software engineering.
10:37:34 <dminuoso> cads: Much of it is also patterns revolving around very constrained languages
10:40:07 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
10:43:40 <cads> dminuoso, I think there are some good modern patterns, for example, View/Viewmodel <-> Interactor <-> Respository. I think this model is only about a decade old. But it is relevant - for example, it has become the foundation for android apps.
10:44:06 <dminuoso> Sure, I dont mind general architectural design styles
10:44:06 <cads> and I believe lenses can accomplish basically the same thing, but I haven't seen anyone say so
10:44:46 <dminuoso> energizer: Mmm, judging from the numbers it seems *roughly* to be the past 30 days
10:44:52 <dminuoso> Or perhaps a 30 days average
10:44:55 × mikoto-chan quits (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
10:45:11 <dminuoso> No it is the past 30 days exactly
10:45:14 <dminuoso> Misread
10:46:38 <cads> For reference, here is uncle bob's post announcing the clean architecture https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
10:47:02 <Franciman> uncle bob is fun
10:47:15 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
10:47:33 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
10:48:03 <cads> I don't think it's trying to be a "universal silver bullet for communicatable code" either... it just managed solve scaling problems that, if I were to solve them the naive way, would result in a totally awful an difficult to understand code
10:49:28 <cads> I suppose that to gain the same kind of confidence with my solutions in haskell, I should dig into papers
10:50:22 <dminuoso> cads: The only general piece of advice I have:
10:50:28 <dminuoso> You cant have enough bindings.
10:51:41 <dminuoso> By creating more bindings, you can provide both smaller representations, as well as various semantic abstractions
10:55:32 × benin quits (~benin@183.82.26.68) (Ping timeout: 240 seconds)
10:55:39 <cads> Lol, there are no writings about how to remediate stinky haskell code. Every haskell coder knows their code reeks of pure roses. And may God help you if you say otherwise!
10:56:34 <dminuoso> Uh, I have written many poor lines of code.
10:57:29 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:91d4:d998:64f1:2e2f)
10:57:30 <cads> yeah, but do you want to clean them up?
10:58:33 <cads> I will keep compiling references on haskell code smells and how to remediate them. If you think of anything, let me know!
10:58:52 <dminuoso> Yes, sometimes I have the time to do it, othertimes I dont
11:00:32 <cads> dminuoso, here's an example of an article claiming /descriptive variable names/ are a code smell in haskell. I think you'll enjoy it for its zaniness, and I'd be curious if you agree with the final conclusion! file:///home/m/Zotero/storage/YI3V6P9L/insufficiently-polymorphic.html
11:00:35 <cads> oops
11:00:52 alx741 joins (~alx741@181.196.68.101)
11:00:56 <cads> https://degoes.net/articles/insufficiently-polymorphic
11:01:32 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:91d4:d998:64f1:2e2f) (Ping timeout: 240 seconds)
11:04:26 <dminuoso> cads: Im not really interested in discussing that article.
11:05:00 <cads> what's to discuss? It's wrong, lol.
11:05:13 <dminuoso> My issue with it is deeper than that
11:06:27 neurocyte0132889 joins (~neurocyte@212.232.89.58)
11:06:27 × neurocyte0132889 quits (~neurocyte@212.232.89.58) (Changing host)
11:06:27 neurocyte0132889 joins (~neurocyte@user/neurocyte)
11:08:20 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
11:10:26 <dminuoso> It's just one of those many typical blog articles people put out there for publicity. It's poorly written with non-motivating example, some random claims with poor reasoning..
11:11:03 <cads> yeah, I want to yell at john for the example being bullshit, but I am physically scared of him
11:12:45 lavaman joins (~lavaman@98.38.249.169)
11:14:07 <cads> I feel like the article would be good if the suggested refactoring - "Extract Monomorphism" - were really desribed with enough detail
11:15:55 <cads> this sort of "Problem -> Refactoring Method -> Solution" triples are really all we can hope for when learning about a code smell. Not universal principle, but a useful option in the toolbelt. I feel a dearth of that sort of support in haskell
11:16:25 <cads> but I guess I should be the solution I wanna see, and use haskell more
11:16:45 nschoe joins (~quassel@178.251.84.79)
11:18:02 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
11:18:10 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
11:19:06 max22- joins (~maxime@2a01cb088335980069e80be440b085a5.ipv6.abo.wanadoo.fr)
11:26:19 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 250 seconds)
11:29:01 tomku joins (~tomku@user/tomku)
11:30:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:39:17 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
11:40:34 × Inst quits (~Inst@2601:6c4:4080:3f80:d8ab:2e91:63f7:db6e) (Ping timeout: 268 seconds)
11:46:32 × chomwitt quits (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374) (Ping timeout: 240 seconds)
11:47:05 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
11:54:21 benin joins (~benin@183.82.26.68)
11:55:18 CiaoSen joins (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
11:56:14 v01d4lph4 joins (~v01d4lph4@223.190.93.72)
11:56:14 × v01d4lph4 quits (~v01d4lph4@223.190.93.72) (Changing host)
11:56:14 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
11:58:31 Cajun joins (~Cajun@user/cajun)
11:59:38 × nuh^ quits (~nuh@h50.174.139.63.static.ip.windstream.net) (Remote host closed the connection)
12:01:14 <maerwald> "Monomorphic code is much more likely to be incorrect than polymorphic code"
12:01:16 <maerwald> ahahaha
12:01:26 <maerwald> has he ever used lens?
12:01:57 <maerwald> the gap between "yeah, it compiles" and "yeah, it actually does what I think it does"
12:02:44 geekosaur thinks they're reaching for "properly typed code is much more likely to be correct" and missed by quite a margin
12:03:05 <geekosaur> but still this is not someone I want on my team
12:03:09 <maerwald> or classes so abstract that knowing their laws gives you zero help with understanding what they *actually do* in this context
12:03:59 × bah quits (~bah@l1.tel) (Ping timeout: 244 seconds)
12:04:27 <lortabac> I think his claim is true if we are only talking about parametric polymorphism
12:04:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
12:04:49 <cads> geekosaur, forget team. This is someone that you could have /as your CEO/.
12:05:14 <geekosaur> that's still my team in some sense. and I'd be looking for a way out
12:05:41 <cads> I would be lifting weights, because gains is the only way to earn a meathead's respect.
12:06:13 <cads> once you have greater gains you can tell them the idea is ludicrous
12:06:28 cads supposes that is still a toxic dynamic
12:06:28 <geekosaur> not interested in a meathead's respect tbh
12:07:03 <maerwald> why did this turn into ad hominem?
12:07:13 <cads> sorry
12:07:32 <maerwald> "Whether in OOP or FP, the effect is the same: making the code more polymorphic reduces the space of possible implementations."
12:07:39 <maerwald> that's not entirely false
12:08:04 <maerwald> but really hard to generalize
12:08:41 <maerwald> I'm writing a backend and I want my code actual things... you can't have all polymorphic functions. You need some data in the end.
12:11:50 <maerwald> "In other words, if your method only needs to know if a thing is a Shape, then don’t also require it to be a Hexagon (a subtype of Shape)."
12:12:11 <maerwald> seems like there's a small truth that was simply over-marketed with clickbait
12:12:52 <maerwald> your fairly standard blog post
12:13:01 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
12:16:33 AlexNoo_ is now known as AlexNoo
12:25:13 × benin quits (~benin@183.82.26.68) (Quit: The Lounge - https://thelounge.chat)
12:25:18 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
12:25:39 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Remote host closed the connection)
12:29:21 shriekingnoise joins (~shrieking@186.137.144.80)
12:29:35 × CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
12:30:32 CiaoSen joins (~Jura@p5dcc1a24.dip0.t-ipconnect.de)
12:30:48 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
12:31:21 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
12:31:58 benin joins (~benin@183.82.26.68)
12:32:53 × benin quits (~benin@183.82.26.68) (Client Quit)
12:33:54 × servytor quits (uid525486@id-525486.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
12:35:04 betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be)
12:43:01 × ubert quits (~Thunderbi@p200300ecdf4fca8de6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
12:43:29 chomwitt joins (~chomwitt@athedsl-32204.home.otenet.gr)
12:46:25 machinedgod joins (~machinedg@24.105.81.50)
12:50:07 mikoto-chan joins (~mikoto-ch@esm-84-240-99-143.netplaza.fi)
12:52:32 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 240 seconds)
12:53:02 × chomwitt quits (~chomwitt@athedsl-32204.home.otenet.gr) (Ping timeout: 240 seconds)
12:56:44 deadmarshal joins (~deadmarsh@95.38.112.170)
12:59:02 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:91d4:d998:64f1:2e2f)
12:59:02 ubert joins (~Thunderbi@ip5b405828.dynamic.kabel-deutschland.de)
12:59:25 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
13:01:27 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
13:03:26 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:91d4:d998:64f1:2e2f) (Ping timeout: 245 seconds)
13:03:49 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
13:04:02 × max22- quits (~maxime@2a01cb088335980069e80be440b085a5.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds)
13:10:47 chomwitt joins (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374)
13:13:02 lavaman joins (~lavaman@98.38.249.169)
13:17:15 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
13:17:33 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
13:21:12 × _xor quits (~xor@72.49.199.147) (Quit: brb)
13:24:24 favonia joins (~favonia@user/favonia)
13:27:30 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.3)
13:27:35 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
13:27:55 Sgeo joins (~Sgeo@user/sgeo)
13:28:04 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:30:05 × favonia quits (~favonia@user/favonia) (Ping timeout: 264 seconds)
13:31:51 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
13:33:05 × pbrisbin quits (~patrick@pool-173-49-152-45.phlapa.fios.verizon.net) (Quit: WeeChat 3.3)
13:38:32 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 240 seconds)
13:38:53 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
13:39:40 pbrisbin joins (~patrick@pool-173-49-152-45.phlapa.fios.verizon.net)
13:42:28 max22- joins (~maxime@2a01cb08833598001f1c158e8ac3c365.ipv6.abo.wanadoo.fr)
13:43:02 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
13:47:08 × chomwitt quits (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374) (Ping timeout: 246 seconds)
13:47:29 × max22- quits (~maxime@2a01cb08833598001f1c158e8ac3c365.ipv6.abo.wanadoo.fr) (Ping timeout: 246 seconds)
13:50:02 × CiaoSen quits (~Jura@p5dcc1a24.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
13:50:13 Guest60 joins (~Guest60@2401:4900:2182:6f84:1:2:1508:28d5)
13:51:19 zava joins (~zava@ip5f5bdf0f.dynamic.kabel-deutschland.de)
13:51:25 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 256 seconds)
13:51:32 <yin> why isn't `f \x -> y` parsed as `f (\x -> y` ?
13:51:49 <yin> why isn't `f \x -> y` parsed as `f (\x -> y)` ? *correction
13:52:24 <geekosaur> I think it is with BlockArguments?
13:52:44 <geekosaur> don't recall how it gets parsed without
13:53:11 <dminuoso> It doesn't get parsed at all
13:53:45 <yin> i don't see ambiguity
13:53:54 gaff joins (~gaff@49.207.215.230)
13:53:55 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
13:53:57 <dminuoso> yin: Look at the grammar difference in https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0090-block-arguments.rst
13:55:14 <dminuoso> That is: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0090-block-arguments.rst#proposed-change-specification
13:55:40 <yin> i see
13:56:11 <yin> what a mess
13:56:17 _xor joins (~xor@72.49.199.147)
13:57:30 <gaff> i have some code at https://paste.ofcode.org/DCiTkXtTH7YHPbcY97b5Bd
13:58:01 <gaff> i would like to know how `readsPrec` in the code works -- it seems to be infinitely recursive
13:58:15 × Guest60 quits (~Guest60@2401:4900:2182:6f84:1:2:1508:28d5) (Ping timeout: 256 seconds)
14:00:19 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:9800:a4d7:a74e:e38)
14:01:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
14:02:23 <geekosaur> note that the r in each case is different because of the lambda binding
14:02:46 <geekosaur> so readsPrec is polymorphically recursive and will eventually bottom out at a leaf
14:02:47 Farzad joins (~FarzadBek@178.131.31.143)
14:03:14 <geekosaur> (that code is kinda unfortunate, reusing bindings like that is fairly confusing)
14:03:56 v01d4lph4 joins (~v01d4lph4@223.190.93.72)
14:03:56 × v01d4lph4 quits (~v01d4lph4@223.190.93.72) (Changing host)
14:03:56 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
14:04:32 <geekosaur> so r is successively an entire tree node, then the left subtree, then the right subtree, the latter two captured by lambda bindings
14:04:48 <gaff> geekosaur: yeah, very confusing ... what do you mean by "reusing the binding"? i didn't understand ...
14:04:53 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9800:a4d7:a74e:e38) (Ping timeout: 264 seconds)
14:04:54 <yin> what's the reason for Control.Monad.State not exporting the State data constructor, and providing instead the functino state :: (s -> (a,s)) -> State s a ?
14:04:57 <geekosaur> calling them all "r"
14:05:07 <gaff> oh ok
14:05:21 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 250 seconds)
14:05:29 <geekosaur> yin, State is not a data constructor, it's an alias for StateT s Identity
14:05:41 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
14:06:11 <geekosaur> which can't be used to construct a new State, so we need the function state. or a bidirectional pattern binding, which I think is being considered for later releases?
14:06:27 <yin> ah i see. i was outdated
14:07:04 × ubert quits (~Thunderbi@ip5b405828.dynamic.kabel-deutschland.de) (Remote host closed the connection)
14:07:06 <geekosaur> yeh, the data constructor was form mtl1 days
14:07:10 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
14:07:13 <geekosaur> *from
14:09:50 deadmarshal joins (~deadmarsh@95.38.112.170)
14:09:52 utk joins (~utk@43.241.192.170)
14:09:58 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
14:11:40 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:11:43 <geekosaur> hm, actually I misspoke because they're all Tree nodes, so it's not polymorphic
14:11:53 <geekosaur> they're just different nodes
14:12:07 <geekosaur> it's still needlessly confusing
14:12:49 <yin> they're all what now?
14:13:06 <geekosaur> that was about gaff's question, not yours
14:13:14 <geekosaur> sorry
14:13:41 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
14:13:58 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
14:15:55 <gaff> geekosaur: yeah, i was wondering about what you said about being polymorphic
14:16:08 <yin> :)
14:16:23 <geekosaur> there should still be a polymorphic use since there are presumably values involved somewhere, not just tree nodes
14:16:32 <gaff> i think the recursion convergence happens in the application of `readParen`
14:16:35 <geekosaur> but those aren't polymorphic
14:17:14 chomwitt joins (~chomwitt@athedsl-32204.home.otenet.gr)
14:17:34 <gaff> my concern was -- how does `readsPrec` converge?
14:18:04 <gaff> i think that happens in the code for `readParen`
14:18:10 <geekosaur> each subsidiary use of readsPrec is reading a different thing, either another tree node or a value
14:19:01 <gaff> it is a very confusing code -- i wouldn't write it this way if i could
14:19:38 <gaff> the code for readParen is @ https://downloads.haskell.org/~ghc/8.4.2/docs/html/libraries/base-4.11.1.0/src/GHC.Read.html
14:19:42 <geekosaur> outer_r = [(] left_subtree_r :^: right_subtree_r [)]
14:19:49 <gaff> ok
14:20:21 <geekosaur> where left_subtree_r and right_subtree_r may be another split Tree node or a Leaf with a value attached, as I read it
14:20:41 <gaff> correct
14:20:47 <geekosaur> the code should really have used something like t, lt,k rt to distinguish instead of calling them all r
14:21:00 <geekosaur> s/lt,k/lt,/
14:22:19 <geekosaur> so eventually readsPrec will bottom out at a Leaf node and invoke itself one more time to read the value (this is the polymorphic one)
14:22:41 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 250 seconds)
14:23:07 <gaff> ok
14:23:08 <geekosaur> of course it may not actually bottom out there, since the values may be lists or even new Trees
14:23:23 <geekosaur> but eventually it will bottom out
14:23:33 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
14:23:39 <gaff> exactly, otherwise you couldn't define a Tree
14:23:49 <gaff> it has to bottom out
14:26:46 <geekosaur> it may be easier to follow what's going on by looking at how lists work, since it's only recursive once instead of twice
14:27:03 <geekosaur> each node of a [a] is (a : [a])
14:27:25 <gaff> geekosaur: yea, i know ... but this is the code given in the haskell report 2010, so i wanted to understand it
14:27:28 <geekosaur> and you bottom out when the value on the right of the (:) is []
14:27:29 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
14:28:12 <gaff> also, writing a custom `readsPrec` is not that easy, i think
14:28:39 <geekosaur> it's fairly mechanical, actually. just a fair amount of work, which is why we make the compiler do it for us
14:28:51 <gaff> ok
14:28:52 <geekosaur> deriving Read wouldn't work if it were actually hard
14:29:15 <gaff> just like `Show`, you mean?
14:29:53 f-a joins (f2a@f2a.jujube.ircnow.org)
14:29:55 <gaff> writing a custom showsPrec is not hard
14:30:10 <geekosaur> right
14:30:21 <gaff> of course, you can derive `Show` as well
14:30:24 <geekosaur> readsPrec is a little more work, but not that much more
14:30:29 × utk quits (~utk@43.241.192.170) (Quit: WeeChat 2.8)
14:30:30 <gaff> correct
14:31:04 <geekosaur> more fiddly but it's all mechanical to the point that the Report specifies how the compiler should do it (well, that the compiler should do something equivalent to it)
14:31:25 <gaff> yeah ...
14:31:38 × dmwit quits (~dmwit@pool-173-73-185-183.washdc.fios.verizon.net) (Ping timeout: 265 seconds)
14:31:44 <f-a> when I compile a program and run it on another machine I get: «error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory». Is there a way to catch this error? I would like if possible to print a more friendly version for people who are less used to such errors.
14:31:54 <gaff> geekosaur: how long have you been working with haskell? you seem to know a lot :)
14:32:32 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 240 seconds)
14:32:49 <geekosaur> 2007
14:33:06 <gaff> wow ... that's a really long time :)
14:33:40 <gaff> it's a beautiful language
14:34:04 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
14:34:16 <geekosaur> f-a, that's output by the shared object loader before your program even runs. there are some environment variables you can set to control what the loader does (see ld.so(8) on linux) but afaik the only way to catch them is a wrapper script
14:34:27 <gaff> and the people in it, unlike some of the other places, really come to haskell because of its beauty ... they just love it ... and i like that
14:35:25 <f-a> argh, that is less than optimal geekosaur (but better than nothing, I guess)
14:35:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
14:35:43 <geekosaur> (I'm oversimplifying a little bit, your program uses ld.so as its "interpreter", but no code you write can intercept what ld.so does)
14:35:53 <gaff> geekosaur: thanks a bunch. i will look into the code more with your ideas ... and if there some things unclear i will get back here
14:36:54 × gaff quits (~gaff@49.207.215.230) ()
14:39:32 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 240 seconds)
14:42:47 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
14:44:41 × wonko quits (~wjc@user/wonko) (Ping timeout: 256 seconds)
14:45:32 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 240 seconds)
14:45:48 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
14:46:59 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 246 seconds)
14:47:38 favonia joins (~favonia@user/favonia)
14:48:14 × turlando quits (~turlando@user/turlando) (Ping timeout: 260 seconds)
14:48:51 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
14:48:51 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
14:48:51 turlando joins (~turlando@user/turlando)
14:49:33 × chomwitt quits (~chomwitt@athedsl-32204.home.otenet.gr) (Ping timeout: 250 seconds)
14:53:50 nschoe joins (~quassel@178.251.84.79)
14:54:47 × nschoe quits (~quassel@178.251.84.79) (Client Quit)
14:55:45 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:55:45 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
14:55:45 wroathe joins (~wroathe@user/wroathe)
14:57:40 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
14:58:11 rtsn joins (~nstr@user/rtsn)
14:58:45 × favonia quits (~favonia@user/favonia) (Quit: Leaving)
14:59:07 hololeap joins (~hololeap@user/hololeap)
14:59:41 gaff joins (~gaff@49.207.215.230)
15:00:07 × gaff quits (~gaff@49.207.215.230) (Client Quit)
15:05:00 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 260 seconds)
15:05:20 tomku[m] joins (~tomkumozi@2001:470:69fc:105::1:2fcb)
15:05:36 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
15:05:57 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
15:06:23 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
15:06:56 × Farzad quits (~FarzadBek@178.131.31.143) (Ping timeout: 246 seconds)
15:08:03 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
15:08:11 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
15:11:08 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds)
15:13:45 jkaye joins (~jkaye@2601:281:8300:7530:49b1:9f67:bcbc:61f)
15:14:59 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
15:15:04 xkuru joins (~xkuru@user/xkuru)
15:17:11 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
15:21:37 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 250 seconds)
15:22:43 zmt00 joins (~zmt00@user/zmt00)
15:22:53 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds)
15:23:11 chomwitt joins (~chomwitt@athedsl-32204.home.otenet.gr)
15:23:17 × Xnuk quits (~xnuk@vultr.xnu.kr) (Remote host closed the connection)
15:24:49 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
15:29:51 asthasr joins (~asthasr@162.210.28.151)
15:30:29 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Remote host closed the connection)
15:42:12 max22- joins (~maxime@2a01cb0883359800c49e7f6f9540e9e4.ipv6.abo.wanadoo.fr)
15:42:21 <yin> i don't like transformers
15:42:36 cosimone` joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
15:42:57 <yin> /vent
15:49:29 <sshine> how do you transmit electric current between circuits, then?
15:50:05 lavaman joins (~lavaman@98.38.249.169)
15:50:29 f-a parts (f2a@f2a.jujube.ircnow.org) ()
15:50:36 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
15:51:15 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving)
15:52:43 slowButPresent joins (~slowButPr@user/slowbutpresent)
15:52:48 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
15:54:49 <dminuoso> With a pair of cables?
15:55:02 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 240 seconds)
15:55:32 CiaoSen joins (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
15:55:51 × cosimone` quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC (IRC client for Emacs 27.1))
15:56:11 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.3)
15:56:28 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
15:56:39 Farzad joins (~FarzadBek@185.131.125.102)
15:58:06 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
15:58:16 <kuribas> with copper traces.
15:58:46 × Farzad quits (~FarzadBek@185.131.125.102) (Client Quit)
15:58:59 <dminuoso> Also, you can use capacitors to achieve the same effect!
15:59:05 <dminuoso> (See capacitive power supplies)
15:59:27 <kuribas> transformers provide impedance matching
16:01:09 <maerwald> I also don't like them. They're clunky and have no precise semantics. You always reason about them operationally, from experience and pitfalls (e.g. MonadFail behavior in ExceptT).
16:01:28 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
16:02:47 <dsal> yin: there are lots of effect systems because everyone dislikes each of them.
16:03:25 <dsal> My least favorite is "all functions are in IO" which seems to be required in every other programming language.
16:03:43 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
16:04:15 <maerwald> effects systems just shift the problem to the interpreter... now you can't reason about anything, because you don't know what interpreter is run when looking at a function?
16:05:07 Sgeo_ joins (~Sgeo@user/sgeo)
16:05:11 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
16:05:50 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Quit: -)
16:06:05 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
16:07:32 chexum joins (~quassel@gateway/tor-sasl/chexum)
16:08:42 Guest42 joins (~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
16:11:43 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:e288:155f:c333:ecf4) (Quit: WeeChat 2.8)
16:11:48 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
16:12:17 deadmarshal joins (~deadmarsh@95.38.112.170)
16:13:09 <maerwald> imagine file system effects as a DSL... even something seemingly simple as 'copyFile' or 'deleteFile' can have 10 different implementations. Differences in atomicity, error handling, recursion (cp -r) etc etc
16:13:21 f-a joins (f2a@f2a.jujube.ircnow.org)
16:15:37 <dolio> "All functions are in IO" isn't even a good effect system.
16:15:52 <maerwald> it's honest though
16:16:39 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 250 seconds)
16:23:19 lavaman joins (~lavaman@98.38.249.169)
16:24:04 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
16:27:56 × mbuf quits (~Shakthi@136.185.69.244) (Quit: Leaving)
16:28:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
16:28:53 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 264 seconds)
16:31:20 bah joins (~bah@l1.tel)
16:33:50 × bliminse quits (~bliminse@host86-185-253-43.range86-185.btcentralplus.com) (Quit: leaving)
16:33:56 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:34:22 <monochrom> I am a formal methods person. I like precise semantics. But as much as I do that, I recognize that most programmers don't care.
16:35:02 <dolio> The problem isn't a lack of precision.
16:35:05 <monochrom> They use good-enough approximate models all the time. Not just for MonadState. For everything. For C. For jquery.
16:35:11 f-a parts (f2a@f2a.jujube.ircnow.org) ()
16:36:09 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:36:09 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
16:36:09 wroathe joins (~wroathe@user/wroathe)
16:36:43 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
16:36:54 <dolio> It's the same problem as the mindset of only thinking about types as catching errors.
16:37:25 <monochrom> I know how to give MonadState a precise semantics. There is already a paper doing that, to (MonadState s m) => ... alone. I know what it is missing, the usual frame problem of what happens if you have instead (MonadState s m, MonadWriter w m) => .... I know how to use the usual solutions to the frame problem to solve that. It can all be done.
16:37:53 <monochrom> But I don't anticipate that users will actually value that.
16:38:27 <maerwald> Well, here's the problem: not everything is precise (filesystems, networks, ...). I feel `IO` captures this pretty well, by saying "you have to apply operational reasoning right now". I wonder if we could make this distinction better somehow, but probably not
16:38:27 <dolio> Monads in Haskell, and other recent effect stuff aren't just more precisely dividing up which parts of the program use some pre-canned set of effects. The 'effects' are additional ways of structuring programs.
16:38:29 bliminse joins (~bliminse@host86-185-253-43.range86-185.btcentralplus.com)
16:38:38 × alzgh quits (~alzgh@user/alzgh) (Ping timeout: 256 seconds)
16:39:12 <monochrom> Yeah, the types are expressing interfaces.
16:40:10 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
16:40:10 × dajoer quits (~david@user/gvx) (Quit: leaving)
16:40:36 <maerwald> which is non-declarative, in a way
16:41:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
16:41:35 <maerwald> The only thing my mtl constraints tell me is what functions might be used further down in the callstack. It rarely helps with figuring out what's going on though.
16:42:16 <maerwald> but I have no idea how to make it better. I think there's a somewhat hard problem here though
16:44:39 <yushyin> every time I switch to this channel and read a bit, it's always the same discussions :D (and often the same people too)
16:44:49 × cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds)
16:45:12 cheater joins (~Username@user/cheater)
16:45:18 <monochrom> Don't worry, I try to give new information! Like this time. I had never said that thing before.
16:45:38 <yushyin> ;)
16:47:05 <monochrom> Even Haskell itself lacks a precise semantics. Not one that enjoys community consensus.
16:48:00 <monochrom> Javascript has a precise semantics but programmers don't actually use it; most don't even know that it exists.
16:48:31 <monochrom> And libraries. Most libraries don't have precise semantics. Any language.
16:49:24 <monochrom> I want you to meditate on how programmers still have the empirical success they have now, despite this.
16:52:25 <maerwald> can you propose precise semantics for a blockchain? xD
16:52:33 alzgh joins (alzgh@user/alzgh)
16:53:22 <maerwald> or... dependency resolution
16:53:35 × alzgh quits (alzgh@user/alzgh) (Remote host closed the connection)
16:55:20 jokleinn joins (~jokleinn@user/jokleinn)
16:55:22 gaff joins (~gaff@49.207.215.230)
16:55:31 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
16:55:34 × gaff quits (~gaff@49.207.215.230) (Client Quit)
16:55:35 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
16:55:39 × acidjnk_new3 quits (~acidjnk@p200300d0c7149f82889e7e27a4cfa8d6.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
16:55:51 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
16:57:23 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:9800:a4d7:a74e:e38)
16:57:55 lavaman joins (~lavaman@98.38.249.169)
16:58:46 lbseale joins (~lbseale@user/ep1ctetus)
16:59:38 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 246 seconds)
17:00:18 alzgh joins (~alzgh@user/alzgh)
17:00:32 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
17:01:03 emf joins (~emf@2620:10d:c090:400::5:b872)
17:02:09 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
17:02:29 × chomwitt quits (~chomwitt@athedsl-32204.home.otenet.gr) (Ping timeout: 264 seconds)
17:03:32 × rkrishnan quits (~user@122.167.19.65) (Ping timeout: 240 seconds)
17:03:32 × jokleinn quits (~jokleinn@user/jokleinn) (Quit: WeeChat 3.3)
17:05:30 servytor joins (uid525486@id-525486.hampstead.irccloud.com)
17:05:30 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
17:05:58 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
17:06:05 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
17:08:37 chomwitt joins (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374)
17:12:11 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
17:12:42 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
17:13:34 img joins (~img@user/img)
17:15:44 × CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
17:16:47 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds)
17:20:47 <yin> yushyin: repetition is good
17:21:55 <yin> and so is consistency
17:23:17 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
17:26:23 mmhat joins (~mmh@55d4bf19.access.ecotel.net)
17:29:04 × Skyfire quits (~pyon@user/pyon) (Quit: WeeChat 3.3)
17:29:05 waleee joins (~waleee@192.165.44.49)
17:29:17 Skyfire joins (~pyon@user/pyon)
17:30:26 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
17:30:44 ec joins (~ec@gateway/tor-sasl/ec)
17:35:15 psydurr joins (~psydurr@pool-141-152-27-2.rcmdva.fios.verizon.net)
17:40:46 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:9800:a4d7:a74e:e38) (Remote host closed the connection)
17:41:35 × nvmd quits (~nvmd@user/nvmd) (Quit: Later, nerds.)
17:44:36 × jamestmartin quits (james@jtmar.me) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
17:44:45 jamestmartin joins (~james@jtmar.me)
17:44:49 <dsal> I'm pretty annoyed by repetition. People genuinely arguing that copying and pasting stuff three times in a row is better than naming it, because, you know, if something has a name, you'd have to look it up. (then the thing is basically `fromRight` but with an error message and I'd expect anyone reading the code to just know what it did without even looking it up because there's only so much it *can* do).
17:45:32 <dminuoso> Third alternative, use `replicateM_ 3 foo`
17:45:53 <dminuoso> Sometimes the trick lies not in naming, but in picking the right tools.
17:46:23 lavaman joins (~lavaman@98.38.249.169)
17:48:09 zincy joins (~zincy@host86-181-60-139.range86-181.btcentralplus.com)
17:51:20 × psydurr quits (~psydurr@pool-141-152-27-2.rcmdva.fios.verizon.net) (Quit: Leaving)
17:52:28 <dsal> Heh. It's three different actions, but the arguments are similar. I'm in a strange world where people want to use haskell, but are deathly afraid of any abstraction.
17:52:29 × zincy quits (~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Ping timeout: 246 seconds)
17:53:05 psydurr joins (~psydurr@pool-141-152-27-2.rcmdva.fios.verizon.net)
17:53:14 × jamestmartin quits (~james@jtmar.me) (Remote host closed the connection)
17:54:08 deadmarshal joins (~deadmarsh@95.38.112.170)
17:54:10 <dsal> Now we want to copy and paste `TE.decodeUtf8With TE.lenientDecode` everywhere instead of just naming it somewhere and reusing it because something about making the decision every time or something. Except we don't, we use that one.
17:55:30 jamestmartin joins (james@2600:3c01::f03c:91ff:fefc:20b6)
17:59:16 <yin> what's that asterisk doing there? https://hackage.haskell.org/package/base-4.16.0.0/docs/Control-Applicative.html#v:liftA
17:59:49 <awpr> haddock markup mistake
18:00:01 × jamestmartin quits (james@2600:3c01::f03c:91ff:fefc:20b6) (Client Quit)
18:00:05 <dsal> liftA f a = pure f <*> a
18:00:07 <awpr> supposed to be `<*>`, but it looks like it got interpreted as URL syntax
18:00:10 jamestmartin joins (~james@2600:3c01:e000:41d::1)
18:00:16 <geekosaur> yeh, that's markup fail
18:00:36 nvmd joins (~nvmd@user/nvmd)
18:00:46 mc47 joins (~mc47@xmonad/TheMC47)
18:01:11 × oxytocat quits (~alloca@2a03:4000:f:7ca:7407:d1ff:fe34:8cd0) (Changing host)
18:01:11 oxytocat joins (~alloca@user/suppi)
18:02:18 × nvmd quits (~nvmd@user/nvmd) (Client Quit)
18:02:32 nvmd joins (~nvmd@user/nvmd)
18:03:22 <yin> another fail:
18:03:22 <yin> • The function ‘pure’ is applied to two arguments,
18:03:23 <yin> but its type ‘(a0 -> a0) -> m0 a1 -> a0 -> a0’ has only three
18:03:38 <yin> *only*
18:05:52 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
18:06:23 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f805:19de:1108:4b97)
18:06:40 <maerwald> dsal: deduplication isn't abstraction
18:07:13 <maerwald> sometimes, duplicating code is the right decision, because the implementations may diverge and coupling will cause bugs and confusion
18:07:47 <dsal> Sure, I understand the distinction (at least to a degree, it gets fuzzy at some point).
18:08:11 <maerwald> I start with duplication a lot, in fact... and after I'm done, I look at the overall code, and wonder if I can see an *actual* abstraction
18:08:33 <maerwald> but it's good to make a note "TODO: maybe factor out"
18:09:09 econo joins (uid147250@user/econo)
18:09:22 <maerwald> starting with the deduplication sends your code on an odd journey, sometimes
18:09:28 <dsal> The larger argument has been along the lines of "code should continually march off to the right in case statements" and I'm like, "Hey, this always does the same thing in `Left` and `Nothing` cases and you only really care about the end result of all the Rights/Justs. What if we *don't* have all that stuff?
18:09:36 <maerwald> introducing boolean flags to functions, for instance
18:09:52 <dsal> I do tend to start writing things that are less ideal in many cases. Gets me going at least.
18:10:11 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 250 seconds)
18:11:45 utk1 joins (~utk@43.241.192.170)
18:12:00 utk1 parts (~utk@43.241.192.170) ()
18:12:08 <maerwald> all good projects start with "I don't know what I'm doing"
18:12:22 <johnjay> maerwald: i think the assumption is you'll build a bunch of stuff on top of your code
18:12:31 <johnjay> so then you can't feasibly refactor it later to remove the duplication
18:12:50 <maerwald> that means there is no duplication
18:13:01 <maerwald> it just started with a similar structure
18:13:32 utk1 joins (~utk@43.241.192.170)
18:13:36 <johnjay> well if you define x to be 1 a hundred times that's a hundred things to unite under one abstraction
18:13:39 <yin> all good projects start with "i know what i'm *not* doing" i find
18:14:12 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
18:14:14 <maerwald> johnjay: I can't follow this example
18:14:41 <maerwald> I'm pretty sure you'll find a couple of hundred variables in big codebases (maybe even GHC RTS) that are just 1
18:14:50 <dsal> The argument here is the opposite. It's something along the lines of "If we make functions for things we do, we won't be able to understand what we're doing without understanding those functions!"
18:14:55 <johnjay> yes but that's not what i mean
18:15:23 <maerwald> and 1 here may be an index, length of a list, and a hundred other things
18:15:25 ec joins (~ec@gateway/tor-sasl/ec)
18:15:30 <geekosaur> dsal, I feel like they should go back to MS-BASIC
18:15:35 <maerwald> that are fine to name explicitly
18:15:39 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
18:15:39 <johnjay> ok how about a simple example. in every file you need an array of length 10
18:15:49 <johnjay> so you define it each time instead of one global array
18:16:15 <johnjay> whether that was a good idea can only be determined later. that's the problem
18:17:00 utk1 parts (~utk@43.241.192.170) (WeeChat 2.8)
18:17:08 <maerwald> I don't see the problem. You can always refactor later.
18:17:33 <dsal> geekosaur: Honestly, I can't tell what are actual arguments and what are strawman. I have code like `thing1 <- errLeft "can't getThing1" =<< getThing1` and they're like, "I can't know what this code does without going to read the definition of `errLeft`" I'm like... are you sure? Maybe it can use a better name, but `getThing1` returns an `Either err Thing1` and you're using a `Thing1` here.
18:18:43 <dsal> One of the pieces I suggested changing looks like this: https://usercontent.irccloud-cdn.com/file/QK1uEeLR/abstraction.png
18:19:13 <maerwald> the original looks like junior code
18:19:23 <dsal> They preferred #1 for readability, but were willing go with #3. I can almost understand that, but I'm having trouble understanding if there's a *real* concern.
18:19:31 <dsal> It *was* fairly junior code.
18:19:45 <awpr> even the JavaScript community hates the first option enough to add entire language features to avoid it
18:19:57 utk joins (~utk@2001:470:69fc:105::1:2fe0)
18:20:05 <maerwald> you mean nested promises vs await?
18:20:06 utk1 joins (~utk@43.241.192.170)
18:20:07 <dsal> I was like, "hey, that's harder to follow (it was much longer stuff that marched all the way off the screen)", how about this!? Senior person hated it and thought it made the code harder to read with no value.
18:20:08 <awpr> (in the case of promises with cascading nested functions -> async notation for promises)
18:20:10 <awpr> yeah
18:20:28 <geekosaur> senior person sounds very junior to me
18:20:31 <maerwald> I've written nested promises code a long time ago in angular 1 I think
18:20:44 <maerwald> sometimes you get your brackets wrong, like in clojure
18:20:48 <maerwald> stuff still runs
18:20:52 <maerwald> but does something else
18:21:08 <dsal> Senior person is very opinionated and has various credentials and stuff. Has some good ideas, but I'm having a difficult time just accepting them without buy-in.
18:21:21 yauhsien joins (~yauhsien@61-231-16-137.dynamic-ip.hinet.net)
18:21:34 <johnjay> isn't embedding implicit datastructures in nested case or for loops Always A Bad Idea?
18:22:01 <maerwald> dsal: I usually just give up then. The time arguing wastes more of my energy than just abiding by a couple of nonsense.
18:22:24 × jamestmartin quits (~james@2600:3c01:e000:41d::1) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
18:22:36 <johnjay> yes. you don't get to define reality, that's the project manager's job
18:22:47 <dsal> Yeah, I just didn't write any code yesterday because it's equivalent to writing code I think is an obvious improvement and then having it rejected for reasons I disagree with and can't be helped to understand.
18:22:57 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
18:23:18 <maerwald> e.g. when it's about code formatting, my stance is: "I'll do whatever you want, but please leave me alone with review comments about style, unless those are formalised rules"
18:23:46 <maerwald> and I don't want to be involved in any discussions about code formatting
18:24:01 <dsal> Right, there are formalized rules. It's a new project and I disagree with some of them, but don't get any say. I really dislike ormolu, but one of the tenants is that someone picks one and everyone has to use it and you can't discuss it.
18:24:06 <yin> and if they are formalised rules, just have a stiler do it
18:24:18 <maerwald> yin: yeah
18:24:21 <geekosaur> tenets?
18:24:29 <dsal> Sorry, yeah. heh
18:24:35 <maerwald> ormolu is odd, yes
18:24:43 <maerwald> forces me to squint
18:24:49 h187 joins (~coady@185.17.27.105)
18:24:55 <dsal> It's not universally terrible, but it does a few things that I think make things more difficult to read.
18:25:12 × mei3 quits (~mei@user/mei) (Read error: Connection reset by peer)
18:25:21 × cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds)
18:25:23 <maerwald> I like this as a style rule: everyone please do whatever the f*** they want.
18:25:36 <maerwald> This worked on a pretty large codebase, btw. The world didn't stop.
18:25:47 × yauhsien quits (~yauhsien@61-231-16-137.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
18:25:48 <geekosaur> I actually think consistent style is a good thing, especially in an indentation sensitive language
18:25:55 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
18:25:57 <yin> maerwald: problem is, there are infinite distinct ways of doing the same thing
18:25:59 <maerwald> I don't think consistent style serves any purpose
18:26:08 <maerwald> except helping some people with their OCD
18:26:09 <geekosaur> I don't always agree with the chosen style, but I''ll abide by it
18:26:46 <maerwald> yin: it's not a problem... it actually gives me information, because I can see from the style who touched the code (and how many) without even opening git blame
18:27:02 <yin> oh i don't mind alignment and such, that's the automatic formatters job
18:27:02 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 240 seconds)
18:27:03 <exarkun> maerwald: So ... it helps some people? :)
18:27:23 <maerwald> I mean, programmers have trained their brains to see patterns...
18:27:29 <yin> maerwald: lol
18:27:33 jakalx joins (~jakalx@base.jakalx.net)
18:27:44 utk1 parts (~utk@43.241.192.170) (WeeChat 2.8)
18:27:47 <yin> that's one reason i dont like vertical alignment
18:27:49 <dsal> ormolu specifically mutilates any alignment or indentation.
18:27:58 <maerwald> if you work with your team mates for 6+ months, you'll know every single weird code style they have
18:28:28 <dsal> It also really hates putting more than one thing on a line. So you end up with really tall code and reverse indentation.
18:28:58 mei3 joins (~mei@user/mei)
18:29:26 <yin> my brain is trained to read the body of a where clause at char x. vertically aligning stuff by the arbitrary number of characters that it took to define the function makes no sense
18:29:50 <dsal> I like having some alignment in my imports and relatively short pattern matching. You know, get the `=` and `->` lined up so you can easily tell the difference between the left side and right side across all cases.
18:30:04 <maerwald> oh, but what I believe in is this: use a lot of where clauses with cool names, so that the main function body really reads like prose
18:30:14 <yin> dsal: yes, that i consider helpful
18:30:23 gg joins (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2)
18:30:28 <yin> maerwald: yes!
18:30:44 <yin> and forget that if then else exists
18:30:58 <yin> and use let in sparingly
18:31:17 <johnjay> yeah code formatting is definitely one area you need a consistent standard
18:31:19 <dsal> elm folks thought that the most important thing in formatters was making sure that whatever diff tool they use shows the smallest diff for any change possible, so they built their canonical formatter around that. ormolu followed. Those with better tools ore other priorities are SOL.
18:31:25 <maerwald> it allows you to skip the details and get high-level understanding of what functions do
18:31:55 <dsal> yin: It probably wouldn't surprise you that these people prefer `let` over `where` most of the time.
18:32:17 <yin> who are these peple?
18:32:31 <yin> ^o
18:32:34 <johnjay> dsal's coworkers
18:32:37 <maerwald> yin: but one problem is that you can't have: 1. where-clauses where functions don't see each other and 2. where-clauses that don't have access to top-level arguments
18:32:39 jamestmartin joins (~james@jtmar.me)
18:32:44 <johnjay> what I want to know is who "they" are
18:32:48 <dsal> yin: one person who's relatively well-known and a bunch of people who are learning Haskell.
18:33:02 <maerwald> if there was a GHC extension with more restrictive `where`, I'd use that
18:33:12 <dsal> A lot of the arguments are "I, as someone learning Haskell don't understand this thing that you did at first glance."
18:33:17 <jkaye> More restrictive how?
18:33:26 <maerwald> see above
18:33:32 <johnjay> dsal: that's a legitimate argument though. if most of the team is like that
18:33:54 <johnjay> my take is you should put a comment saying this is tricky or advanced code
18:34:09 <johnjay> instead of punishing someone for using the features the language provides
18:34:21 <vaibhavsagar[m]> I will admit to liking `let` over `where`
18:34:21 <jkaye> Whoops
18:34:31 nineonine joins (~nineonine@2604:3d08:7780:cd00:94f7:1c4f:2fa7:9763)
18:34:33 <dsal> johnjay: In abstract, sure. But it degrades to never naming anything because someone won't immediately know what it means and will have to go look it up instead of just writing out lots of stuff all the time.
18:34:35 <yin> maerwald: use pattern guards?
18:34:56 <yin> (pattern guards are my guilty pleasure)
18:35:10 <johnjay> dsal: yeah i don't get that myself. there's nothing wrong with having a URL in the description pointing to some doc in pdf or html to consult
18:35:14 × jamestmartin quits (~james@jtmar.me) (Remote host closed the connection)
18:35:17 <johnjay> sometimes you have to look things up. that's life
18:35:40 <maerwald> vaibhavsagar[m]: I think I only use `let` in do notation
18:35:42 <geekosaur> shouldn't looking things up be the job of the editor tool (HLS)?
18:35:53 <maerwald> no, HLS job is to crash
18:35:55 <maerwald> xD
18:35:57 <maerwald> jk
18:36:14 <dsal> johnjay: Or like, lens is bad because someone saw `_Just` and didn't know what it meant and immediately went to haddock and couldn't understand traversals and blah blah, so I should write a 10 line function every time I need a thing instead of trying to learn something handy in this test. (Not that everyone should use lens all the time, but that's just not a good way to argue)
18:36:30 <maerwald> but that has been most of my experience with it
18:36:38 <vaibhavsagar[m]> maerwald: my current work codebase has a lot of stuff in `where` clauses and IMO it makes it hard to follow the flow of what's happening
18:36:57 <vaibhavsagar[m]> I have to keep jumping back and forth between the definitions and the function body
18:36:59 <maerwald> if those are recursive definitions yes
18:37:28 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f805:19de:1108:4b97) (Remote host closed the connection)
18:37:37 <johnjay> vaibhavsagar[m]: having 2 windows open can help a lot with that. i'm just starting to do multi-windows on my incredibly widescreen monitor
18:37:39 <dsal> vaibhavsagar[m]: In general, Haskell is declarative. You can write what you want done before you write all of the prerequisites. When it's done well, you only have to jump to those definitions when you need more.
18:37:44 <yin> vaibhavsagar[m]: just start by reading the where clauses if the function is not obvious enough (which is a separate problem)
18:37:47 <vaibhavsagar[m]> no, these aren't recursive
18:37:48 <vaibhavsagar[m]> but even in my own non-work code I like `let` clauses
18:38:02 × h187 quits (~coady@185.17.27.105) (Remote host closed the connection)
18:38:08 x6C697370 joins (~michael@2600:1700:7c02:3180::49)
18:38:17 <dsal> In practice, the difference is between looking up and looking down. Some people strongly want to look up (define all the steps first) and some people want to look down (define the high level goal first, the steps are just details).
18:38:26 <vaibhavsagar[m]> it's nice that we have both in Haskell though
18:39:10 <vaibhavsagar[m]> I would say I'm the former
18:39:10 <yin> ohhh that's where i disagree
18:39:16 <vaibhavsagar[m]> but it's also the case that this code doesn't make much sense to me
18:39:30 <dsal> There are plenty of reasons the code may not make sense. :)
18:39:31 <yin> i prefer having the least ammount of different ways to achieve the same thing, semantically
18:40:01 <dsal> Yeah, I agree. let and where are different, but when it doesn't matter, I prefer where. There are different kinds of cases where it matters.
18:40:19 <maerwald> could define a new keyword `there`, which disallows recursive definitions and can't access top-level function arguments and
18:40:45 <vaibhavsagar[m]> that's nice until the language removes both `let` and `where` since everything is functions anyway
18:40:47 <yin> s/semantic/syntactic
18:41:03 <yin> maerwald: lol
18:41:17 <yin> vaibhavsagar[m]: that sounds great actually
18:41:22 <sshine> maerwald, and a 'thine'
18:41:26 <vaibhavsagar[m]> https://mail.haskell.org/pipermail/haskell-cafe/2013-July/109116.html
18:41:46 <awpr> `heretofore xs = 2 : xs0`
18:41:53 <vaibhavsagar[m]> yin: I think it sounds better in theory than practice
18:42:16 <sshine> let x = 5. it is known.
18:42:20 <awpr> or `henceforth`
18:42:34 <vaibhavsagar[m]> it's fine to disagree, but I'm glad we're not working on the same codebase :)
18:42:36 <yin> who cares about practice?
18:42:40 <awpr> maybe it would implicitly insert its contents as `where` bindings whenever its free variables are in scope
18:42:47 <sshine> awpr, henceforth is nice because it wouldn't allow for recursive definitions. :)
18:43:33 <dsal> awpr: Ha, dude loves RecordWildCards, but thinks NamedFieldPuns is bad because it just adds extra syntax that's confusing.
18:44:00 <yin> i'm tongue in cheek, by the way. this are very minor annoyances, and completely acceptable divergences in _preference_
18:44:17 <dsal> He thinks the same about TupleSections which is extra weird to me because I'd think most people would discover that by assuming it works and being told to turn it on. That's how I did, anyway.
18:44:31 <yin> awpr: we already have 'otherwise'
18:44:45 <dsal> I should start using otherwise randomly.
18:44:46 × utk quits (~utk@2001:470:69fc:105::1:2fe0) (Quit: Reconnecting)
18:44:53 <vaibhavsagar[m]> good to know, I find it hard to read tone sometimes on IRC
18:44:54 <maerwald> RecordWildCards are awesome for writing code and terrible for reading it
18:45:00 utk joins (~utk@2001:470:69fc:105::1:2fe0)
18:45:12 <awpr> `f x = x * x despite y = 5`
18:45:35 <dsal> RecordWildCards is sometimes useful. I have a lot of code like let someField = 1; otherField = 2 in T{..}
18:46:11 <dsal> I was reading about "Plain English" yesterday. It sounds horrifying.
18:46:26 <yin> ?
18:46:48 <dsal> Plain English is a programming language where you write all your code in, you know, plain english.
18:47:12 <dsal> It sounds insane to me, but this guy seems serious about it: https://osmosianplainenglishprogramming.blog
18:47:21 <yin> i hate the philosphy that programming languages should emulate natural ones
18:47:35 <dsal> I don't understand it well enough to hate it.
18:48:09 <yin> i don't even infix my `on`s
18:48:29 <dsal> The idea is that some genius business guy has an idea, but he's frustrated that he has to hire programmers to get programmers to do it. Programmers are annoying and never understand him. If computers just understood plain english, he could be rich without having those annoying intermediates.
18:48:42 <dsal> Except like, programmers are compilers. And your specification is terrible.
18:49:03 <yin> unless
18:49:08 <dsal> unless is banned
18:49:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
18:49:20 <yin> ;)
18:49:27 <yin> unless: github copilot
18:49:48 <dsal> `when (not $ thing) $ doUnlessThing` is the preferred style.
18:49:58 <maerwald> dsal: I actually dislike unless as well
18:50:02 <maerwald> there's a great talk about it
18:50:49 <dsal> I'd like to hear a great talk about it. :) I mostly just get "X is confusing" for various things that aren't confusing to me and I don't understand how they're confusing to people.
18:52:13 <jkaye> I have no issues with unless, or RecordWildCards, or any of these things. Each person is different? Probably the real answer right there
18:52:57 <geekosaur> until one such person gets to force their own idiosyncrasies on a bunch of people who don't know any better
18:53:08 <monochrom> COBOL used to be the "w00t business types can now code too!" dream.
18:53:21 <dsal> RecordWildCards is mostly OK for introducing values into a small scope. I think it's usually terrible to gather bindings and create a value.
18:53:46 <maerwald> dsal: https://youtu.be/2mnYf7L7Amw?t=1282
18:53:48 <maerwald> there it is
18:53:50 <maerwald> hehe
18:53:59 <jkaye> geekosaur, Completely different problem there. That person could just as easily force you to use untyped js
18:54:10 <dsal> Writing `T { fieldA: something, fieldB: somethingElse }` as `let fieldA = something; fieldB = somethingElse in T{..}` is definitely bad.
18:54:17 <awpr> also good for cute tricks like `\T{..} -> T{ x = something, ..}`
18:54:54 <dsal> OMG, did you just invent lens?
18:54:56 <awpr> admittedly not necessary since you could just record update a variable
18:55:56 <awpr> hmm, that may actually be a slightly better way to implement a lens
18:57:13 <dsal> I usually just `\t v -> t{x = v}`
18:58:00 <monochrom> unless you want to do t{x=x+1}
18:58:19 <dsal> I think senior dude who's life work seems to be testing pushed a failing test and went to bed or something.
18:58:21 <awpr> if you use `field1 f x = f (field1 x) <&> \f1 -> x { field1 = f1 }`, the whole input record is retained in the closure
18:58:58 cheater joins (~Username@user/cheater)
18:59:14 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
18:59:35 <awpr> vs. `field1 f T{..} = f field1 <&> \f1 -> T{ field1 = f1, ..}`, that no longer retains the original `field1` value
18:59:58 <johnjay> monochrom: so the dream is it requires expertise and study to do X. Wouldn't it be great if we didn't need expertise to do X!?
19:00:20 <dsal> I think that's perfectly reasonable.
19:00:31 <dsal> The only problem is that people don't realize how bad they are at communicating in English.
19:00:38 <johnjay> ^
19:00:45 <johnjay> dunning-kruger is rela
19:00:59 <awpr> maybe Plain English is a good way to demonstrate to people that their plain English descriptions are nowhere near sufficiently precise
19:01:16 <monochrom> I'm cynical, I think the business-type dream is getting rid of all cost centres.
19:01:18 <dsal> People feel that they're really good at getting their points across. Someone recently came in here and had a huge wall of stuff nobody could understand and got mad at everyone because he was sure his presentation was perfect.
19:01:34 <johnjay> monochrom: i mean isn't that the entire point of automation and AI?
19:01:39 <monochrom> Me, I would take it one step further, why not keep humans out of the loop.
19:01:51 <dsal> maerwald: Thanks for the link. I think about ruby when I see `unless` so it's kind of funny it came up this way.
19:01:54 <johnjay> The arc of history bends toward Butlerian Jihad
19:02:22 × bitdex_ quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
19:02:23 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:03:04 <monochrom> I saw "unless" in Perl, which was long before Ruby existed. I think I also saw it in Racket.
19:03:41 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 264 seconds)
19:03:49 <dsal> I've managed to forget almost everything I knew about perl.
19:03:55 <maerwald> lol
19:04:09 <maerwald> I think it's better that way
19:04:09 <monochrom> And in Perl you have both "$x=1 unless $y>0" and "$x=1 if $y>0"
19:04:45 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816)
19:04:55 <dsal> I think unless at the beginning of a sentence is way less harmful.
19:04:57 <monochrom> But you know what, your point still stands. Perl has them precisely because Larry Wall admired plain English, too.
19:05:32 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 240 seconds)
19:06:04 <monochrom> And this is precisely why I say "so the programming profession attracts the religious delusional type, for example Larry Wall".
19:06:46 <monochrom> or rather s/attracts/is left with/
19:07:30 <yin> where do the 'lusional' people go?
19:07:48 <monochrom> Oh haha so let me repeat my complete analysis again.
19:09:10 <monochrom> If you are scientifically minded, e.g., you actually know how to formulate useful hypotheses and properly test them, you would have a more rewarding career as a scientist or a biochem drug researcher. So, the programming profession is deprived of people who actually know how to do testing.
19:09:51 <monochrom> If you are good with plain English, you would have a more rewarding career as a writer or even lawyer. So, the programming profession is deprived of people who can actually read/write docs.
19:10:05 <davean> monochrom: I think thats true for the masses, but I don't think its generally true
19:10:42 <monochrom> If you are good at math, you would have a more rewarding career as a mathematician or even a Wall-Street quant. So, the programming profession is deprived of people who are good at math.
19:10:51 <monochrom> So what do we have left?
19:11:25 <monochrom> Religious, delusional, bad at math, bad at natural languages. Just look at Larry Wall.
19:12:24 <yin> lol
19:12:43 <yin> what about logic
19:12:56 <davean> yin: humans are horrid at logic, look at the world
19:13:01 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
19:13:09 <yin> i want monochrom to answer
19:13:17 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
19:13:21 <maerwald> hmm... and what if you're bad at everything? Become a teacher? ;p
19:13:24 <monochrom> I still don't know how to spin that one.
19:13:26 <dsal> monochrom: If you're good at Haskell, you would have a more rewarding career as a Cryptocurrency quant.
19:13:39 <monochrom> For now I swipe it under the math rug.
19:13:49 <monochrom> swipe? shove?
19:14:08 <awpr> leave as an exercise for the reader
19:14:20 <yin> monochrom: shove? bind?
19:14:31 <[exa]> fold
19:14:45 <yin> i fold
19:14:52 <monochrom> Or, lawyers need logic greatly, too. I can put it there.
19:15:01 <davean> maerwald: Now now, teachers are good at ignoring student response
19:15:22 <davean> maerwald: I once found a classroom the teacher didn't realize the students spoke spanish, and none had full english proficiency
19:15:47 <davean> maerwald: They just declared them behavioral problems instead of noticing they litterly couldn't speak to them
19:15:48 <maerwald> xD
19:16:05 <monochrom> Knuth says that programming is an extreme special case of teaching.
19:16:07 <davean> ... 3 months into the school year and still hadn't figured it out
19:16:19 <davean> maerwald: This is seriously not a joke
19:16:37 <geekosaur> sweep
19:16:56 <monochrom> Oh haha imagine you're coding Haskell for 3 months but you're running the C compiler.
19:17:20 <davean> monochrom: only conclusion: Haskell is a horrid language its impossible to write a working program in
19:18:29 <davean> maerwald: I have to think tehy were a good complainer too, becaue the other teachers said approximately "they're a wonderful teacher who just is really unlucky and keeps being given the problem kids"
19:18:45 <carbolymer> I'm cancelling an async, can I get some kind of stacktrace where exception "has entered" that async?
19:18:48 dhmohrom^ joins (~dhmohrom@h50.174.139.63.static.ip.windstream.net)
19:18:52 <davean> maerwald: So you give teachers too much credit, some of them have things they're good at, and that makes it all the worse
19:20:31 <monochrom> Cancellation is internally done by throwing exceptions.
19:20:31 <carbolymer> I guess `callStack` will give stack trace at the call place, not where the exception entered the thread
19:20:39 <carbolymer> monochrom: yes
19:20:44 <geekosaur> davean, that sounds horribly familiar, only I encountered it in first grade
19:20:47 <monochrom> Ah then I don't know.
19:20:55 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 260 seconds)
19:21:45 <maerwald> davean: I only taught a full classroom once... and I could feel the disengagement of every single student... how they didn't understand what I just said, but didn't ask. Leaving you totally helpless. Should you continue or give up?
19:21:55 <maerwald> My conclusion: only tutoring works (with maybe 3-5 people)
19:22:07 <davean> maerwald: So we have people who specialized in classroom management
19:22:23 <davean> and even little things like saying every step seperately an waiting for it to be accomplished went a LONG way
19:22:26 <davean> and I mean every step
19:22:28 johnny_sitar joins (~artur@078088015209.bialystok.vectranet.pl)
19:22:29 <geekosaur> I think maybe 2-3 is considered best
19:22:31 <davean> "take out your pencils"
19:22:32 × deadmarshal quits (~deadmarsh@95.38.112.170) (Ping timeout: 240 seconds)
19:22:34 <maerwald> haha
19:22:35 <davean> "take out your notebooks"
19:22:41 <davean> standing at the front, facing them
19:22:45 <sm> Inst: installing globally: `cd; stack install foo`
19:22:54 <davean> not doign the standard "take out your pencils and notebook" and then turnign and startign writing on teh board
19:23:23 <davean> people speak up and explain themselves more when being waited on explicitely for one
19:23:30 <davean> anyway, this is barely Haskell
19:23:55 mark__ joins (~a@p200300ef973db1e34086f0a6a24fc4dd.dip0.t-ipconnect.de)
19:24:09 <davean> but if you want a classroom to respond, IMO, get a psych student who's good and who's only task is to get the classroom stuff done smoothly and they can go home when its done well
19:24:13 <davean> don't get a teacher
19:24:20 <davean> teacher's don't listen to advice
19:24:23 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
19:24:30 <davean> psych students who want to go home though?
19:24:33 <carbolymer> other related question: my thread gets stuck - can I get the stacktrace somehow from that thread? -prof is not an option here
19:24:34 <davean> they lit review on their own
19:25:35 × waleee quits (~waleee@192.165.44.49) (Ping timeout: 246 seconds)
19:26:51 gg_ joins (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2)
19:28:53 × gg quits (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2) (Ping timeout: 264 seconds)
19:29:43 <johnjay> monochrom: that is an incredible black pill. but maybe true
19:30:42 × gg_ quits (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2) (Read error: Connection reset by peer)
19:30:56 gg joins (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2)
19:35:51 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
19:36:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
19:36:32 × JimL quits (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 240 seconds)
19:37:13 × dhmohrom^ quits (~dhmohrom@h50.174.139.63.static.ip.windstream.net) (Remote host closed the connection)
19:38:05 <dsal> carbolymer: can you get event logs?
19:38:28 <dsal> Some builds can dump stacks, but none I've used. :)
19:39:43 JimL joins (~quassel@89-162-2-132.fiber.signal.no)
19:39:55 <johnjay> monochrom: also i guess if you consider perl to be a bad language that would make more sense
19:40:17 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 246 seconds)
19:40:31 <monochrom> I don't actually know whether Perl is a bad language. But certainly I don't like many aspects of it.
19:41:07 <maerwald> they say perl is for writing, not for reading
19:41:18 <dsal> I punished my children whenever brought up perl.
19:41:21 <monochrom> That I agree.
19:41:41 <monochrom> Along with LaTeX.
19:42:17 <mark__> dminuoso: You explained to me that "x = 42; seq x ()" does nothing unless the MMR is :set. I am wondering if this explanation is correct:
19:42:30 <mark__> If "42 :: Num a => a" is polymorphic then :sprint can't do anything because a constraint is converted to a simple function parameter in core which means that "42 :: Num a => a" is actually a function in core that is waiting for a dictionary. And a function that is not applied already is in WHNF and therefore "42 :: Num a => a" is in WHNF. It's impossible evaluate any further without the dictionary
19:42:31 <mark__> e.g. without knowing the concrete type of "a".
19:43:06 <yushyin> it was (is?) an okay glue language back in the days, and the first programming language I learned
19:43:24 <johnjay> apparently openssh requires perl to be built
19:43:33 <johnjay> lots of random packages you depend on require perl. Xd
19:43:57 <maerwald> yeah, often for build system and tests
19:43:57 <monochrom> GHC used to require Perl to be built, too. >:) Don't worry, that was a long bygone era.
19:43:59 <geekosaur> don't forget that it was only relatively recently that ghc stopped using a perl script when compiling programs (the evil mangler)
19:51:17 AlexNoo_ joins (~AlexNoo@178.34.163.82)
19:51:32 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds)
19:51:37 chele_ joins (~chele@user/chele)
19:51:40 Kaipi joins (~Kaiepi@156.34.44.192)
19:52:04 aristid_ joins (sid1599@id-1599.uxbridge.irccloud.com)
19:52:12 polux7 joins (~polux@51.15.169.172)
19:52:17 bollu2 joins (~bollu@139.59.46.74)
19:52:22 drdo6 joins (~drdo@roach0.drdo.eu)
19:52:26 skn2 joins (~znc@2001:19f0:5:701:5400:ff:fe7c:4e5c)
19:52:30 Flonk6 joins (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com)
19:52:31 aliosablack joins (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374)
19:52:32 × chomwitt quits (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374) (Ping timeout: 240 seconds)
19:52:34 skewerr joins (spoonm@inaba.spoonm.org)
19:52:42 bbhoss_ joins (sid18216@id-18216.tinside.irccloud.com)
19:52:43 shanemikel joins (~shanemike@desk.roadwar.net)
19:52:44 asthasr_ joins (~asthasr@162.210.28.151)
19:52:53 pepeiborra_ joins (sid443799@id-443799.ilkley.irccloud.com)
19:52:58 <dolio> You guys are too old.
19:52:59 dispater- joins (~dispater@user/brprice)
19:53:05 haskl[error] joins (~haskl@user/haskl)
19:53:10 loonycyborg_ joins (~loonycybo@chat.chantal.wesnoth.org)
19:53:11 rtpg_ joins (sid443069@id-443069.ilkley.irccloud.com)
19:53:15 nitrix_ joins (~nitrix@user/nitrix)
19:53:17 gonz____ joins (sid304396@id-304396.lymington.irccloud.com)
19:53:20 lemonsni- joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
19:53:21 dragestil_ joins (~znc@user/dragestil)
19:53:21 mcfrd joins (~mcfrdy@user/mcfrdy)
19:53:52 <dsal> I had a perl codebase in the millions of lines in the 90s
19:53:58 np joins (~nerdypepp@user/nerdypepper)
19:54:10 cheater1__ joins (~Username@user/cheater)
19:54:14 <dolio> It's probably been like 12 years since GHC used the evil mangler.
19:54:23 Ram-Z_ joins (~Ram-Z@li1814-254.members.linode.com)
19:54:56 qwedfg_ joins (~qwedfg@user/qwedfg)
19:55:12 shane_ joins (~shane@ana.rch.ist)
19:55:15 ski_ joins (~ski@remote12.chalmers.se)
19:55:17 PigDude_ joins (~PigDude@159.203.16.199)
19:55:20 Clint_ joins (~Clint@user/clint)
19:55:24 gentauro_ joins (~gentauro@185.107.12.141)
19:55:24 tomku|two joins (~tomku@user/tomku)
19:55:28 <monochrom> I am not old enough to have the honour of using 8-inch floppy diskettes or Fortran :)
19:55:40 ishutin_ joins (~ishutin@92-249-179-61.pool.digikabel.hu)
19:55:41 reda_ joins (~reda@user/reda)
19:55:42 mikoto-c1 joins (~mikoto-ch@esm-84-240-99-143.netplaza.fi)
19:55:45 aweinsto1k joins (~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com)
19:55:46 peutri_ joins (~peutri@ns317027.ip-94-23-46.eu)
19:55:51 hexeme joins (~hexeme@user/hexeme)
19:56:02 ezzieygu1wuf joins (~Unknown@user/ezzieyguywuf)
19:56:04 ridcully joins (~ridcully@p57b523cc.dip0.t-ipconnect.de)
19:56:05 <monochrom> When I started, it was already 5.25-inch, and BASIC.
19:56:09 jassob1 joins (~jassob@h-98-128-167-112.NA.cust.bahnhof.se)
19:56:12 <dolio> Don't get me wrong, I'm also too old, because it doesn't seem like that long ago to me, either.
19:56:57 burnsidesLlama joins (~burnsides@dhcp168-027.wadham.ox.ac.uk)
19:58:11 <monochrom> Oh and Lode Runner.
19:58:29 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
19:58:40 <monochrom> Anyone wanna reimplement Lode Runner in Haskell so it can't possibly run on an Apple II? >:)
19:59:14 edro joins (~edr@enlo.co)
19:59:15 × edro quits (~edr@enlo.co) (Changing host)
19:59:15 edro joins (~edr@user/edr)
19:59:30 orc joins (sid509852@user/orc)
19:59:51 adamCS_ joins (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com)
19:59:54 orc parts (sid509852@user/orc) ()
20:00:09 xlei_ joins (znc@pool-68-129-84-118.nycmny.fios.verizon.net)
20:00:45 × cheater quits (~Username@user/cheater) (*.net *.split)
20:00:46 × asthasr quits (~asthasr@162.210.28.151) (*.net *.split)
20:00:46 × mikoto-chan quits (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (*.net *.split)
20:00:46 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (*.net *.split)
20:00:46 × tomku quits (~tomku@user/tomku) (*.net *.split)
20:00:46 × alx741 quits (~alx741@181.196.68.101) (*.net *.split)
20:00:46 × drdo quits (~drdo@roach0.drdo.eu) (*.net *.split)
20:00:46 × chele quits (~chele@user/chele) (*.net *.split)
20:00:46 × jakalx quits (~jakalx@base.jakalx.net) (*.net *.split)
20:00:46 × haskl quits (~haskl@user/haskl) (*.net *.split)
20:00:46 × edr quits (~edr@user/edr) (*.net *.split)
20:00:46 × Flonk quits (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) (*.net *.split)
20:00:46 × AlexNoo quits (~AlexNoo@178.34.163.82) (*.net *.split)
20:00:46 × nerdypepper quits (~nerdypepp@user/nerdypepper) (*.net *.split)
20:00:46 × mcfrdy quits (~mcfrdy@user/mcfrdy) (*.net *.split)
20:00:46 × ldlework quits (~hexeme@user/hexeme) (*.net *.split)
20:00:46 × dragestil quits (~znc@user/dragestil) (*.net *.split)
20:00:46 × skn quits (~znc@sec.nimmagadda.net) (*.net *.split)
20:00:46 × loonycyborg quits (~loonycybo@wesnoth/developer/loonycyborg) (*.net *.split)
20:00:46 × spoonm quits (spoonm@inaba.spoonm.org) (*.net *.split)
20:00:46 × shane quits (~shane@ana.rch.ist) (*.net *.split)
20:00:46 × PigDude quits (~PigDude@159.203.16.199) (*.net *.split)
20:00:46 × Clint quits (~Clint@user/clint) (*.net *.split)
20:00:46 × dispater quits (~dispater@user/brprice) (*.net *.split)
20:00:46 × Putonlalla quits (~sapekiis@it-cyan.it.jyu.fi) (*.net *.split)
20:00:46 × reda quits (~reda@user/reda) (*.net *.split)
20:00:46 × pepeiborra quits (sid443799@ilkley.irccloud.com) (*.net *.split)
20:00:46 × rtpg quits (sid443069@ilkley.irccloud.com) (*.net *.split)
20:00:46 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (*.net *.split)
20:00:46 × bbhoss quits (sid18216@tinside.irccloud.com) (*.net *.split)
20:00:46 × aristid quits (sid1599@uxbridge.irccloud.com) (*.net *.split)
20:00:46 × gonz___ quits (sid304396@lymington.irccloud.com) (*.net *.split)
20:00:46 × jassob quits (~jassob@h-98-128-167-112.NA.cust.bahnhof.se) (*.net *.split)
20:00:46 × xlei quits (~akans@pool-68-129-84-118.nycmny.fios.verizon.net) (*.net *.split)
20:00:46 × Ram-Z quits (~Ram-Z@li1814-254.members.linode.com) (*.net *.split)
20:00:46 × smunix quits (~smunix@static.26.70.12.49.clients.your-server.de) (*.net *.split)
20:00:46 × Kaiepi quits (~Kaiepi@156.34.44.192) (*.net *.split)
20:00:46 × qwedfg quits (~qwedfg@user/qwedfg) (*.net *.split)
20:00:47 × ishutin quits (~ishutin@92-249-179-61.pool.digikabel.hu) (*.net *.split)
20:00:47 × koolazer quits (~koo@user/koolazer) (*.net *.split)
20:00:47 × shanemikel_ quits (~shanemike@desk.roadwar.net) (*.net *.split)
20:00:47 × peutri quits (~peutri@ns317027.ip-94-23-46.eu) (*.net *.split)
20:00:47 × adamCS quits (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (*.net *.split)
20:00:47 × ridcully_ quits (~ridcully@p57b523cc.dip0.t-ipconnect.de) (*.net *.split)
20:00:47 × bollu quits (~bollu@139.59.46.74) (*.net *.split)
20:00:47 × canta quits (~canta@user/canta) (*.net *.split)
20:00:47 × aweinstock quits (~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (*.net *.split)
20:00:47 × moerlitz quits (d9eb32b7ed@knopi.disroot.org) (*.net *.split)
20:00:47 × gentauro quits (~gentauro@user/gentauro) (*.net *.split)
20:00:47 × ski quits (~ski@remote12.chalmers.se) (*.net *.split)
20:00:47 × polux quits (~polux@51.15.169.172) (*.net *.split)
20:00:47 × nitrix quits (~nitrix@user/nitrix) (*.net *.split)
20:00:47 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (*.net *.split)
20:00:47 mcfrd is now known as mcfrdy
20:00:47 xlei_ is now known as xlei
20:00:47 nitrix_ is now known as nitrix
20:00:47 pepeiborra_ is now known as pepeiborra
20:00:47 dragestil_ is now known as dragestil
20:00:47 bollu2 is now known as bollu
20:00:47 Flonk6 is now known as Flonk
20:00:47 bbhoss_ is now known as bbhoss
20:00:47 drdo6 is now known as drdo
20:00:47 aristid_ is now known as aristid
20:00:47 adamCS_ is now known as adamCS
20:00:47 polux7 is now known as polux
20:00:47 rtpg_ is now known as rtpg
20:00:55 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
20:00:55 cheater1__ is now known as cheater
20:01:03 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
20:01:28 zebrag joins (~chris@user/zebrag)
20:01:31 jpds joins (~jpds@gateway/tor-sasl/jpds)
20:01:59 <geekosaur> [09 19:55:28] <monochrom> I am not old enough to have the honour of using 8-inch floppy diskettes or Fortran :)
20:02:02 aweinsto1k is now known as aweinstock
20:02:03 <geekosaur> lucky you
20:04:11 Clint_ is now known as Clint
20:05:00 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 244 seconds)
20:06:52 Topsi joins (~Tobias@dyndsl-095-033-024-160.ewe-ip-backbone.de)
20:07:11 koolazer joins (~koo@user/koolazer)
20:07:23 juhp joins (~juhp@128.106.188.220)
20:07:49 canta joins (~canta@user/canta)
20:08:46 alx741 joins (~alx741@181.196.68.101)
20:09:16 Putonlalla joins (~sapekiis@it-cyan.it.jyu.fi)
20:12:21 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816) (Remote host closed the connection)
20:12:25 <unit73e> lol I only used a 8-inch floppy disk once
20:13:28 <unit73e> 3 1/2 was already the norm, and it was the high density version
20:13:55 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816)
20:18:58 <unit73e> even 5 1/2 was dead already
20:19:53 <geekosaur> now I'm remembering SLS on 50 5¼ floppies
20:20:50 <sm> I want Lode Runner in haskell!
20:21:47 <carbolymer> dsal: what do you mean by event logs? those from SIGUSR2?
20:22:15 <dsal> carbolymer: sigquit, I think
20:22:19 <dsal> It'll tell you. :)
20:22:24 <geekosaur> -eventlog runtime parameter? which requires recompiling with eventlog support, so if profiling is out so may be that
20:22:41 <unit73e> sm, lol I am making SDL2 real world examples lol. Had some trouble loading a sprite sheet with spritesheepacker and loading the result with aeson but managed to do it. Lode Runner shouldn't be hard.
20:23:42 <dsal> carbolymer: I've traced that kind of issue with eventlog, which also had me have to name all of my threads so I knew what I was looking at. Then I wrote a custom eventlog regret l reader that would tell me my problem.
20:24:05 <unit73e> lazyfoo examples are not what a game dev would do. he did it while learning in college.
20:24:10 <dsal> It was rare... Like once a month on a relatively busy server. Bad connection where just wrong.
20:25:38 <carbolymer> dsal: same, in our case thread gets stuck also once in a month
20:26:25 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
20:26:26 <dsal> Neat. The stuff I did with eventlog was really helpful. I did have to name everything, though.
20:26:46 × emf quits (~emf@2620:10d:c090:400::5:b872) (Ping timeout: 245 seconds)
20:27:44 <dsal> I.e., I made a `namedAsync` and used it for all my calls so the threads had names telling me what was going on.
20:27:48 thedward[m] joins (~thedwardm@2001:470:69fc:105::f79)
20:28:02 <carbolymer> nice
20:28:10 <carbolymer> I'll look into that, thanks dsal
20:28:24 emf joins (~emf@2620:10d:c090:400::5:defd)
20:29:06 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
20:29:43 <geekosaur> I think my first "job" was doing backups on a machine with an 8" drive. boring as all get-out.
20:29:57 random-jellyfish joins (~random-je@user/random-jellyfish)
20:30:09 gehmehgeh joins (~user@user/gehmehgeh)
20:30:32 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 240 seconds)
20:31:11 <dsal> carbolymer: this is there commit where I did a bunch of that: https://github.com/dustin/mqtt-hs/commit/7668dcd8c2173f7703769e1b0044f80e0ae063a7
20:31:49 <carbolymer> dsal: that's suprisingly clean
20:32:02 <sm> oh now.. I bet an accurate Lode Runner is quite hard
20:32:08 <dsal> Looks like this was my bug fix: https://github.com/dustin/mqtt-hs/commit/50634bada037406bceba7ab13fd7632a97a2ff82
20:32:25 <dsal> Stuff was getting parked in stm when a disconnection happened at exactly the right time.
20:33:38 <dsal> The eventlog reader was a one off, but I think I still have it.
20:34:14 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
20:34:17 Lycurgus joins (~juan@98.4.112.204)
20:36:32 × mei3 quits (~mei@user/mei) (Ping timeout: 240 seconds)
20:37:04 <carbolymer> I wonder if in those GHC events I would be able to find out where my thread gets stuck, it seems that's mostly log of events (like the name suggests), not sure if there's an event for "HALP I'M STUCK HERE FOR 4 HRS" from a thread
20:37:38 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
20:38:29 hexeme is now known as ldlework
20:38:41 acidjnk_new3 joins (~acidjnk@p200300d0c7149f82889e7e27a4cfa8d6.dip0.t-ipconnect.de)
20:39:27 × emf quits (~emf@2620:10d:c090:400::5:defd) (Read error: Connection reset by peer)
20:39:29 emf_ joins (~emf@2620:10d:c090:400::5:defd)
20:39:51 neurocyte0132889 joins (~neurocyte@212.232.89.58)
20:39:51 × neurocyte0132889 quits (~neurocyte@212.232.89.58) (Changing host)
20:39:51 neurocyte0132889 joins (~neurocyte@user/neurocyte)
20:41:24 <dsal> I can't remember what my thing did but it answered my question quickly.
20:42:19 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:42:20 <dsal> You can add stuff like timeouts and extra info.
20:42:45 <dsal> In my case, I think it was "where did the currently running threads start?"
20:43:28 <dsal> Then I used my brain runtime to debug.
20:44:29 × emf_ quits (~emf@2620:10d:c090:400::5:defd) (Read error: Connection reset by peer)
20:44:42 emf joins (~emf@2620:10d:c090:400::5:defd)
20:47:11 × vysn quits (~vysn@user/vysn) (Ping timeout: 245 seconds)
20:47:21 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
20:48:35 acidjnk_new joins (~acidjnk@p200300d0c724a7710420fe3aa4fdb454.dip0.t-ipconnect.de)
20:49:33 × emf quits (~emf@2620:10d:c090:400::5:defd) (Read error: Connection reset by peer)
20:49:52 emf joins (~emf@2620:10d:c090:400::5:defd)
20:51:32 × acidjnk_new3 quits (~acidjnk@p200300d0c7149f82889e7e27a4cfa8d6.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
20:53:30 AlexNoo_ is now known as AlexNoo
20:58:42 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:00:12 SeungheonOh joins (~Thunderbi@2600:1700:5168:1400:7f33:b84f:d388:a0fc)
21:00:55 × gg quits (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2) (Read error: Connection reset by peer)
21:01:02 emf_ joins (~emf@163.114.130.1)
21:01:03 gg joins (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2)
21:02:11 × emf quits (~emf@2620:10d:c090:400::5:defd) (Ping timeout: 245 seconds)
21:02:17 <dsal> carbolymer: This was the hack I used to figure out what threads were running: https://gist.github.com/dustin/2ca9e66543c4e5c5158650f790454a99
21:02:58 <carbolymer> nice, thanks
21:04:44 dsal It's gross and I don't even know what it was supposed to do, but it did it. :)
21:06:06 x_kuru joins (~xkuru@user/xkuru)
21:06:49 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
21:07:45 × emf_ quits (~emf@163.114.130.1) (Ping timeout: 256 seconds)
21:07:47 emf joins (~emf@2620:10d:c090:400::5:defd)
21:08:17 × xkuru quits (~xkuru@user/xkuru) (Ping timeout: 250 seconds)
21:09:00 × kuribas quits (~user@ptr-25vy0i9fqz6dux8z18z.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
21:14:56 × emf quits (~emf@2620:10d:c090:400::5:defd) (Read error: Connection reset by peer)
21:14:57 emf_ joins (~emf@2620:10d:c090:400::5:defd)
21:16:31 × aliosablack quits (~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374) (Ping timeout: 250 seconds)
21:16:47 shapr attaches a debugger to his brain
21:18:51 × gg quits (~gg@2a01:e0a:819:1510:4c29:c873:f42e:2b2) (Ping timeout: 245 seconds)
21:20:01 × emf_ quits (~emf@2620:10d:c090:400::5:defd) (Read error: Connection reset by peer)
21:20:05 emf joins (~emf@163.114.132.5)
21:20:55 <dsal> There's some ugly stuff in there. Like, what's `\Event{evTime} -> evTime`
21:21:54 Pickchea joins (~private@user/pickchea)
21:22:36 lavaman joins (~lavaman@98.38.249.169)
21:25:25 emf_ joins (~emf@2620:10d:c090:400::5:4199)
21:26:46 × emf quits (~emf@163.114.132.5) (Ping timeout: 260 seconds)
21:27:14 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
21:27:38 × dolio quits (~dolio@130.44.130.54) (Ping timeout: 268 seconds)
21:27:49 dolio joins (~dolio@130.44.130.54)
21:29:05 cjb joins (~cjbayliss@user/cjb)
21:32:12 <[exa]> dsal: field pattern?
21:32:39 <[exa]> ah that was not a question. :D
21:34:22 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816) (Remote host closed the connection)
21:39:40 × Topsi quits (~Tobias@dyndsl-095-033-024-160.ewe-ip-backbone.de) (Read error: Connection reset by peer)
21:43:19 × SeungheonOh quits (~Thunderbi@2600:1700:5168:1400:7f33:b84f:d388:a0fc) (Quit: SeungheonOh)
21:45:17 <carbolymer> ;)
21:45:25 <carbolymer> dsal: but it works!
21:45:58 × cjb quits (~cjbayliss@user/cjb) ()
21:46:01 <carbolymer> when I was doing java, I missed Haskell's abstractions
21:46:09 <carbolymer> now I'm doing Haskell, I miss JVM instrumentation
21:46:16 pavonia joins (~user@user/siracusa)
21:47:13 <sm> ekg, any good ?
21:47:43 cjb joins (~cjbayliss@user/cjb)
21:48:03 <carbolymer> yeah, ekg is okayish
21:49:13 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
21:50:27 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:55:47 <maerwald> iohk-monitoring-framework uses it
21:56:16 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816)
21:57:24 <maerwald> https://github.com/input-output-hk/iohk-monitoring-framework/blob/master/plugins/backend-ekg/src/Cardano/BM/Backend/EKGView.lhs
21:59:34 <carbolymer> that looks impressive
21:59:49 <carbolymer> are they writing all their code as literate haskell?\
22:00:36 <maerwald> it's probably one of their worst libraries
22:00:38 <maerwald> :D
22:00:46 <carbolymer> haha
22:00:47 <carbolymer> why
22:00:56 <maerwald> well, try to use it and check the documentation
22:00:58 <carbolymer> I haven't figured out what it really does
22:00:59 <carbolymer> though
22:03:34 notzmv joins (~zmv@user/notzmv)
22:03:51 biberu joins (~biberu@user/biberu)
22:05:06 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:07:52 <dsal> carbolymer: When I started doing java, I missed squeak's instrumentation. heh
22:07:54 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816) (Remote host closed the connection)
22:07:59 × zebrag quits (~chris@user/zebrag) (Remote host closed the connection)
22:08:31 <dsal> This is some stuff I was doing in haskell a couple weeks ago: https://usercontent.irccloud-cdn.com/file/8saPPh6O/ping.png
22:09:12 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
22:09:28 <carbolymer> dsal: that's nice, realy informative
22:09:30 <dsal> I wrote some literate haskell in markdown at my last job. It was pretty neat since our source browser rendered markdown and also the flow diagrams I was using inside of the file and stuff.
22:10:20 <dsal> carbolymer: It's more than it appears at first! The little /\ is pointing to when a postgres lock was acquired. Understanding what the actual code is doing, you can tell exactly when a connection was acquired from a pool, what had it last, when it asked for a lock, when it got a lock, and how long each little piece of the transaction took.
22:10:59 <dsal> Also, this kind of thing: https://usercontent.irccloud-cdn.com/file/qpJ9Y6E1/query.png
22:11:19 <carbolymer> wow
22:11:55 <carbolymer> thats from output from event log, or -prof?
22:11:59 <dsal> eventlog
22:12:11 <carbolymer> that's a lot of data
22:12:11 <carbolymer> nice
22:12:13 zebrag joins (~chris@user/zebrag)
22:12:55 Inst joins (~Inst@2601:6c4:4080:3f80:c951:41b3:1b4a:c1f9)
22:13:21 <dsal> This is opentelemetry. It also covers distributed traces, though the viewing tool I was using can't actually show that. You could trace a new connection being made to the DB back to the function that issued the request in another process.
22:13:51 biberu joins (~biberu@user/biberu)
22:14:20 <dsal> Yeah, I didn't even get a screenshot of that because this tool couldn't do it.
22:14:45 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
22:19:56 <mark__> Still confused regarding WHNF. 1) Is a partially applied value constructor in WHNF, like (:) True ? 2) Is a lambda abstraction applied to an argument in WHNF, like (\x -> x) "A" ?
22:22:40 zincy joins (~zincy@host86-181-60-139.range86-181.btcentralplus.com)
22:24:46 <mark__> I think the expression in "x = \(x :: Int) -> x" is in WHNF. There is nothing that could be evaluated but "seq x (); :sprint x" returns "x = _". Is this because a lambda is not showable?
22:27:05 × zincy quits (~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Ping timeout: 256 seconds)
22:27:16 gg joins (~gg@2a01:e0a:819:1510:e434:efd5:edf7:7caa)
22:28:32 × johnny_sitar quits (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 240 seconds)
22:35:21 <lyxia> Yeah
22:35:27 <geekosaur> right, lambdas are in WHNF but there's nothing to show
22:35:33 <geekosaur> they have to be applied
22:39:44 sprout_ joins (~quassel@2a02:a467:ccd6:1:e1e5:75f2:6059:4431)
22:42:52 × sprout quits (~quassel@2a02:a467:ccd6:1:e9:abf1:b887:13fa) (Ping timeout: 268 seconds)
22:43:24 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:45:54 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving)
22:46:41 falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com)
22:47:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
22:48:17 mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
22:49:44 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:dcad:8023:d7ab:9816)
22:51:26 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:58:04 <monochrom> Partially applied value constructor is translated to lambda, e.g., "(:) True" means \y -> True : y
22:58:37 <byorgey> mark__: (1) yes, (2) no
22:58:55 <monochrom> In fact let's not fear 0. (:) = \x y -> x : y
23:00:41 × psydurr quits (~psydurr@pool-141-152-27-2.rcmdva.fios.verizon.net) (Ping timeout: 264 seconds)
23:02:14 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
23:03:28 <remexre> are there any circumstances where (traceM "foo" >> undefined) would error, but not print the traceM?
23:04:33 <mark__> So I never evaluate arguments unless I have to and i keep evaluating case expressions and applying my lambdas until I reach a value constructor or get "stuck" (too few arguments)?
23:06:42 <monochrom> remexre: Yes, I think Control.Monad.State.Lazy may do that.
23:09:47 vysn joins (~vysn@user/vysn)
23:12:07 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
23:13:27 <remexre> monochrom: how does that work? doesn't the trace need to get forced to tell if the LHS of >> is _|_ or not?
23:13:48 zincy joins (~zincy@host86-181-60-139.range86-181.btcentralplus.com)
23:14:08 × mark__ quits (~a@p200300ef973db1e34086f0a6a24fc4dd.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
23:16:45 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
23:17:01 <monochrom> Does >> of State.Lazy force the LHS of >> ?
23:17:15 <monochrom> Does it even care?
23:17:22 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 260 seconds)
23:18:17 × zincy quits (~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Ping timeout: 250 seconds)
23:18:41 × chele_ quits (~chele@user/chele) (Remote host closed the connection)
23:20:54 × Guest42 quits (~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
23:21:10 <danso> would an equivalent definition for Alternative be `(Applicative f, forall a . Monoid (f a)) => Applicative f` with no methods?
23:21:47 <danso> this requires QuantifiedConstraints, but i am not aware of any drawbacks to enabling it
23:22:36 <hpc> there might be overlapping Monoid instances that depend on knowledge of a
23:22:49 <remexre> monochrom: on phone so checking is slow, but it looks like it doesn't override it, and I think runStateT on the LHS should force it?
23:22:51 <hpc> and do a different but valid thing
23:22:56 <remexre> Which the (>>=) does
23:23:14 <hpc> but probably yes if this is just "am i understanding Alternative correctly"
23:23:28 <monochrom> Ugh phone is not a suitable medium for this kind of investigation.
23:23:49 <remexre> Yeah... Heading home from work /shrug
23:24:35 <monochrom> Pen and paper, however, is perfect for this kind of calculational work.
23:26:11 <monochrom> A simplified version of Lazy.State's >>= is: (State stf) >>= k = State (\s0 -> let (a, s1) = stf s0 in runState (k a) s1)
23:27:24 <remexre> Right, and the traceM should trace when it matches against the State stf, right?
23:27:32 <monochrom> If k = \_ -> undefined, calculate whether the above definition even cares what stf is.
23:28:12 <monochrom> And let me remind you the semantics of let:
23:28:22 <monochrom> > let (x,y) = undefined in 42
23:28:23 <lambdabot> 42
23:28:49 <monochrom> Even this:
23:28:55 <monochrom> > let Just x = Nothing in 42
23:28:57 <lambdabot> 42
23:29:00 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:30:13 <monochrom> Also, "(State stf)" is a newtype wrapper, "(State stf) >>= ..." is as though "stf >>= ..."
23:30:26 <remexre> Hm, okay...
23:30:36 <monochrom> So, who forces stf again?
23:30:48 <remexre> stf doesn't need to be forced
23:31:06 <remexre> traceM x = trace x (pure ())
23:31:16 <remexre> So to get the State it should force the trace
23:32:04 <monochrom> OK, name me your favourite newtype wrapper that's on lambdabot. I'll show you what it really does.
23:32:32 <remexre> Uh I do not know lambdabot well... Data.Functor.Identity.Identity?
23:32:41 <monochrom> OK!
23:32:53 <monochrom> > case undefined of Identity x -> 32
23:32:55 <lambdabot> 32
23:33:55 <remexre> Huh, I guess this kinda makes sense for newtypes...
23:34:31 <monochrom> After type erasure it's just "case undefined of x -> 32"
23:36:02 × michalz quits (~michalz@185.246.204.61) (Remote host closed the connection)
23:36:02 <monochrom> I ran into this once. My course material used to use newtype. One day I decided to s/newtype/data/ so I don't have to explain newtype to students. Then I got an unexpected bottom.
23:36:12 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:36:35 <remexre> Okay, I guess that all makes sense, thanks!
23:37:26 <yin> > case undefined of StateT x -> 32
23:37:28 <lambdabot> 32
23:37:29 <yin> oh no
23:37:43 biberu\ joins (~biberu@user/biberu)
23:37:47 <remexre> Oof
23:38:16 <danso> thanks hpc. with the overlapping instances, are you saying that for some `f`, `f Int` could have a difference Monoid instance than `f String` ?
23:38:29 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
23:38:37 <remexre> Also rip getting massive lag... Well, I'll check that my transformer stack has at least one strict monad in it when I'm back home, thanks
23:39:17 <monochrom> Yeah if you just say "Control.Monad.State" you get the Lazy one, for example.
23:39:25 × nineonine quits (~nineonine@2604:3d08:7780:cd00:94f7:1c4f:2fa7:9763) (Remote host closed the connection)
23:39:29 biberu- joins (~biberu@user/biberu)
23:40:28 <monochrom> In retrospect I think that that decision was as naïve as defining foldl.
23:41:27 × biberu quits (~biberu@user/biberu) (Ping timeout: 268 seconds)
23:42:32 × biberu\ quits (~biberu@user/biberu) (Ping timeout: 240 seconds)
23:44:43 × biberu- quits (~biberu@user/biberu) (Ping timeout: 250 seconds)
23:46:51 mark__ joins (~a@p200300ef973db1e34086f0a6a24fc4dd.dip0.t-ipconnect.de)
23:49:42 zincy joins (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
23:51:28 <yin> monochrom: what do you mean?
23:52:05 <Axman6> foldl is bad, lazy state by default is bad
23:52:25 <yin> nooo
23:53:26 <monochrom> Yeah, that.
23:53:56 <yin> i like having to be explicit when we want strictness
23:54:02 × zincy quits (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 240 seconds)
23:54:13 wennefer0 joins (~wennefer0@c-73-69-143-60.hsd1.ma.comcast.net)
23:54:22 <Axman6> there are definnitely times where strictness by default is the right choice, and both of those are good examples
23:54:46 <monochrom> What if I put it this way: For a long time, foldl' did not exist, that's the real naïvity.
23:54:47 <Axman6> there's no reason for foldl to not be strict except in very rare, usually contrived examples
23:55:12 <yin> i think defaults should be predictable
23:55:25 × wennefer0 quits (~wennefer0@c-73-69-143-60.hsd1.ma.comcast.net) (Remote host closed the connection)
23:55:41 <yin> if you know everything is lazy by default, you'll know when to require lazyness
23:55:58 <yin> if not, you are in the dark
23:56:12 <yin> s/lazyness/stricness
23:56:21 <yin> ^t
23:56:34 pennychase[m] joins (~pennychas@2001:470:69fc:105::1:3043)
23:56:48 biberu joins (~biberu@user/biberu)
23:56:51 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
23:57:38 <Axman6> if you cvan think of an example where lazy foldl is useful, I will be impressed. The current one leads to unexpected (and hence, unpredictable) behaviour, which is very difficult to debug if you don't know about foldl's behaviour. You end up with stack overflows in completely unrelated parts of your program
23:57:54 <monochrom> I can be talked into either having no defaults or having defaults aligning with majority use cases. But I am skeptical about having defaults aligning with ideology.
23:57:59 <Cajun> "if you know everything is lazy...lazyness" i disagree. you may know strictness may be necessary for some semblance of performance, but not necessarily know exactly when strictness should be made explicit
23:58:15 <Cajun> like "should i add bang patterns to this?"
23:58:32 <monochrom> The time-proved retrospective observation is that foldl and State.Lazy have much fewer use cases.
23:58:41 pennychase[m] parts (~pennychas@2001:470:69fc:105::1:3043) ()
23:58:48 <monochrom> Similarly Data.Map.Lazy for example.
23:59:10 wennefer0 joins (~wennefer0@c-73-69-143-60.hsd1.ma.comcast.net)
23:59:22 <Axman6> "Shoukd I add a bang pattern to this?" The answer is always "yes" :P
23:59:29 machinedgod joins (~machinedg@24.105.81.50)
23:59:39 × wennefer0 quits (~wennefer0@c-73-69-143-60.hsd1.ma.comcast.net) (Remote host closed the connection)

All times are in UTC on 2021-11-09.