Home liberachat/#haskell: Logs Calendar

Logs on 2023-08-24 (liberachat/#haskell)

00:01:16 artem joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
00:03:52 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
00:04:00 × ulysses4ever quits (~artem@2601:408:c405:84e:f474:e3f8:9806:671) (Ping timeout: 256 seconds)
00:08:13 × fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
00:10:52 × ph88 quits (~ph88@ip5b403cd4.dynamic.kabel-deutschland.de) (Quit: Leaving)
00:17:34 × cyphase_eviltwin quits (~cyphase@user/cyphase) (Ping timeout: 244 seconds)
00:19:10 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Quit: Leaving)
00:22:15 cyphase joins (~cyphase@user/cyphase)
00:29:27 × falafel quits (~falafel@216.68.6.51.dyn.plus.net) (Ping timeout: 246 seconds)
00:36:49 tabemann_ is now known as tabemann
00:37:10 × smalltalkman quits (uid545680@id-545680.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
00:45:28 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 244 seconds)
00:46:46 × jabuxas quits (~jabuxas@user/jabuxas) (Quit: Leaving.)
00:48:12 × mima quits (~mmh@62.216.211.151) (Ping timeout: 248 seconds)
00:50:41 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
00:51:27 cyphase joins (~cyphase@user/cyphase)
00:53:37 Guest54 joins (~Guest54@d-23-244-128-169.nh.cpe.atlanticbb.net)
00:54:25 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
00:54:56 <Guest54> everyone is quiet?
00:56:14 × Guest54 quits (~Guest54@d-23-244-128-169.nh.cpe.atlanticbb.net) (Client Quit)
00:57:53 <shapr> ha, we escaped
01:10:39 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:15:27 × td_ quits (~td@i5387092B.versanet.de) (Ping timeout: 252 seconds)
01:16:47 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:17:23 td_ joins (~td@i5387091F.versanet.de)
01:19:43 × artem quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
01:19:48 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
01:22:58 <erisco> \
01:23:49 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
01:27:45 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
01:29:09 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
01:29:36 razetime joins (~quassel@117.254.37.91)
01:34:04 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
01:43:42 × razetime quits (~quassel@117.254.37.91) (Ping timeout: 245 seconds)
01:44:17 razetime joins (~quassel@117.254.36.242)
01:50:31 × razetime quits (~quassel@117.254.36.242) (Ping timeout: 246 seconds)
01:50:55 razetime joins (~quassel@117.254.37.173)
01:58:22 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
01:58:56 jmcantrell joins (~weechat@user/jmcantrell)
01:59:10 × jmcantrell quits (~weechat@user/jmcantrell) (Client Quit)
02:01:24 jmcantrell joins (~weechat@user/jmcantrell)
02:04:16 ryanbooker joins (uid4340@id-4340.hampstead.irccloud.com)
02:04:50 × segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Remote host closed the connection)
02:07:42 × razetime quits (~quassel@117.254.37.173) (Ping timeout: 252 seconds)
02:08:06 razetime joins (~quassel@117.254.37.189)
02:08:43 artem joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
02:08:44 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
02:10:07 mud joins (~mud@user/kadoban)
02:12:31 hyvoid joins (~hyenavoid@222-0-178-69.static.gci.net)
02:17:24 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
02:25:16 × caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline)
02:26:49 × Volt_ quits (~Volt_@c-73-47-181-152.hsd1.ma.comcast.net) (Remote host closed the connection)
02:34:16 × xff0x quits (~xff0x@2405:6580:b080:900:ac2a:af6b:2973:1b48) (Ping timeout: 246 seconds)
02:37:57 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 252 seconds)
02:42:09 dibblego joins (~dibblego@116.255.1.151)
02:42:09 × dibblego quits (~dibblego@116.255.1.151) (Changing host)
02:42:09 dibblego joins (~dibblego@haskell/developer/dibblego)
02:46:08 × td_ quits (~td@i5387091F.versanet.de) (Ping timeout: 246 seconds)
02:47:59 td_ joins (~td@i53870930.versanet.de)
02:48:56 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 246 seconds)
02:50:24 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:50:24 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:50:24 finn_elija is now known as FinnElija
02:50:46 smalltalkman joins (uid545680@id-545680.hampstead.irccloud.com)
03:03:25 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
03:07:39 × ddellacosta quits (~ddellacos@146.70.168.100) (Ping timeout: 252 seconds)
03:08:00 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 245 seconds)
03:08:17 dibblego joins (~dibblego@116-255-1-151.ip4.superloop.au)
03:08:17 × dibblego quits (~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
03:08:17 dibblego joins (~dibblego@haskell/developer/dibblego)
03:10:22 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
03:10:35 ddellacosta joins (~ddellacos@146.70.171.100)
03:10:40 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
03:11:28 × ddellacosta quits (~ddellacos@146.70.171.100) (Client Quit)
03:13:11 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
03:17:56 ddellacosta joins (~ddellacos@146.70.165.10)
03:18:39 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
03:22:30 × Square2 quits (~Square4@user/square) (Ping timeout: 252 seconds)
03:24:15 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
03:36:45 × shapr quits (~user@2600:1700:c640:3100:a991:ffa8:c9bc:d5d1) (Ping timeout: 248 seconds)
03:39:01 × razetime quits (~quassel@117.254.37.189) (Ping timeout: 260 seconds)
03:46:09 × td_ quits (~td@i53870930.versanet.de) (Ping timeout: 252 seconds)
03:48:05 td_ joins (~td@i5387091E.versanet.de)
03:58:23 aforemny_ joins (~aforemny@i59F516DA.versanet.de)
03:58:50 × aforemny quits (~aforemny@2001:9e8:6cf2:c700:b41f:8d5e:8e07:ee66) (Ping timeout: 245 seconds)
03:59:56 × NewtonTrendy quits (~ubuntu@user/bopqod) (Quit: WeeChat 3.5)
03:59:57 × bliminse quits (~bliminse@user/bliminse) (Ping timeout: 245 seconds)
04:00:11 × powderhorn quits (~powderhor@207-153-12-54.static.fttp.usinternet.com) (Ping timeout: 246 seconds)
04:08:14 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
04:11:20 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
04:14:00 × ryanbooker quits (uid4340@id-4340.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
04:20:39 bliminse joins (~bliminse@user/bliminse)
04:23:05 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
04:23:05 × artem quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
04:27:33 ell7 joins (~ellie@user/ellie)
04:27:46 _xor1 joins (~xor@ip-50-5-233-250.dynamic.fuse.net)
04:27:53 beaky_ joins (~beaky@2a03:b0c0:0:1010::1e:a001)
04:27:55 lexi-lambda_ joins (sid92601@id-92601.hampstead.irccloud.com)
04:27:58 meooow joins (~meooow@165.232.184.169)
04:28:00 danso_o joins (~danso@user/danso)
04:28:00 T_S___ joins (sid501726@id-501726.uxbridge.irccloud.com)
04:28:06 aristid_ joins (sid1599@id-1599.uxbridge.irccloud.com)
04:28:07 agander_m_ joins (sid407952@id-407952.tinside.irccloud.com)
04:28:11 hamishmack_ joins (sid389057@id-389057.hampstead.irccloud.com)
04:28:22 NemesisD_ joins (sid24071@id-24071.lymington.irccloud.com)
04:28:29 Philonous joins (~Philonous@user/philonous)
04:28:31 codedmart_ joins (codedmart@2600:3c01::f03c:92ff:fefe:8511)
04:29:48 xnbya2 joins (~xnbya@2a01:4f8:c17:cbdd::1)
04:29:49 ladyfriday joins (~robert@what.i.hope.is.not.a.tabernaevagant.es)
04:29:59 piele joins (~piele@tbonesteak.creativeserver.net)
04:30:43 mal1 joins (~mal@ns2.wyrd.be)
04:30:45 stilgart_ joins (~Christoph@chezlefab.net)
04:30:46 maxfan8 joins (~max@2a01:4f8:192:5356::2)
04:30:52 s4msung joins (cDjJALwvGU@user/s4msung)
04:31:00 bah joins (~bah@l1.tel)
04:31:08 eugenrh_ joins (~eugenrh@2a01:4f9:c011:265::1)
04:31:12 int-e_ joins (~noone@int-e.eu)
04:31:14 kosmikus_ joins (~kosmikus@nullzig.kosmikus.org)
04:31:22 kawzeg_ joins (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34)
04:31:31 dyniec_ joins (~dyniec@mail.dybiec.info)
04:34:37 adamCS_ joins (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com)
04:35:30 × eugenrh quits (~eugenrh@2a01:4f9:c011:265::1) (*.net *.split)
04:35:30 × shailangsa_ quits (~shailangs@host86-186-196-224.range86-186.btcentralplus.com) (*.net *.split)
04:35:30 × _xor quits (~xor@ip-50-5-233-250.dynamic.fuse.net) (*.net *.split)
04:35:30 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (*.net *.split)
04:35:30 × dyniec quits (~dyniec@mail.dybiec.info) (*.net *.split)
04:35:30 × stilgart quits (~Christoph@chezlefab.net) (*.net *.split)
04:35:30 × maxfan8_ quits (~max@2a01:4f8:192:5356::2) (*.net *.split)
04:35:30 × mrmonday quits (~robert@what.i.hope.is.not.a.tabernaevagant.es) (*.net *.split)
04:35:30 × kosmikus quits (~kosmikus@nullzig.kosmikus.org) (*.net *.split)
04:35:30 × beaky quits (~beaky@2a03:b0c0:0:1010::1e:a001) (*.net *.split)
04:35:30 × hamishmack quits (sid389057@id-389057.hampstead.irccloud.com) (*.net *.split)
04:35:30 × agander_m quits (sid407952@id-407952.tinside.irccloud.com) (*.net *.split)
04:35:30 × lieven quits (~mal@ns2.wyrd.be) (*.net *.split)
04:35:30 × kawzeg quits (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) (*.net *.split)
04:35:30 × codedmart quits (codedmart@2600:3c01::f03c:92ff:fefe:8511) (*.net *.split)
04:35:30 × lexi-lambda quits (sid92601@id-92601.hampstead.irccloud.com) (*.net *.split)
04:35:30 × aristid quits (sid1599@id-1599.uxbridge.irccloud.com) (*.net *.split)
04:35:30 × T_S__ quits (sid501726@id-501726.uxbridge.irccloud.com) (*.net *.split)
04:35:30 × xnbya quits (~xnbya@2a01:4f8:c17:cbdd::1) (*.net *.split)
04:35:30 × Philonous_ quits (~Philonous@user/philonous) (*.net *.split)
04:35:30 × meooow_ quits (~meooow@165.232.184.169) (*.net *.split)
04:35:30 × piele_ quits (~piele@tbonesteak.creativeserver.net) (*.net *.split)
04:35:30 × adamCS quits (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (*.net *.split)
04:35:30 × bah_ quits (~bah@l1.tel) (*.net *.split)
04:35:30 × sviermsung quits (spxLkMy9HV@user/s4msung) (*.net *.split)
04:35:30 × NemesisD quits (sid24071@id-24071.lymington.irccloud.com) (*.net *.split)
04:35:30 × int-e quits (~noone@int-e.eu) (*.net *.split)
04:35:30 × danso quits (~danso@user/danso) (*.net *.split)
04:35:30 × ell quits (~ellie@user/ellie) (*.net *.split)
04:35:30 _xor1 is now known as _xor
04:35:30 adamCS_ is now known as adamCS
04:35:30 hamishmack_ is now known as hamishmack
04:35:31 aristid_ is now known as aristid
04:35:31 lexi-lambda_ is now known as lexi-lambda
04:35:31 agander_m_ is now known as agander_m
04:35:31 ell7 is now known as ell
04:35:32 NemesisD_ is now known as NemesisD
04:36:10 × danso_o quits (~danso@user/danso) (Quit: quittin time)
04:37:06 × mud quits (~mud@user/kadoban) (Quit: quit)
04:38:19 danso joins (~danso@user/danso)
04:38:59 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
04:39:48 × hueso quits (~root@user/hueso) (Read error: Connection reset by peer)
04:40:17 hueso joins (~root@user/hueso)
04:40:21 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
04:43:52 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
04:44:21 × hueso quits (~root@user/hueso) (Read error: Connection reset by peer)
04:44:57 hueso joins (~root@user/hueso)
04:50:57 jmcantrell joins (~weechat@user/jmcantrell)
04:55:03 × jmcantrell quits (~weechat@user/jmcantrell) (Client Quit)
04:55:23 jmcantrell joins (~weechat@user/jmcantrell)
04:59:46 razetime joins (~quassel@117.254.36.161)
05:01:07 kjak joins (~kjak@pool-108-28-157-148.washdc.fios.verizon.net)
05:02:14 × kjak_ quits (~kjak@pool-108-28-157-148.washdc.fios.verizon.net) (Ping timeout: 246 seconds)
05:04:20 phma_ joins (~phma@host-67-44-208-2.hnremote.net)
05:05:28 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
05:05:46 jmcantrell joins (~weechat@user/jmcantrell)
05:07:53 × phma quits (~phma@2001:5b0:210b:c518:a8f7:d156:9d38:8d0d) (Ping timeout: 246 seconds)
05:09:21 michalz joins (~michalz@185.246.207.203)
05:10:26 shailangsa joins (~shailangs@host86-186-196-224.range86-186.btcentralplus.com)
05:10:50 dobblego joins (~dibblego@116.255.1.151)
05:10:50 × dobblego quits (~dibblego@116.255.1.151) (Changing host)
05:10:50 dobblego joins (~dibblego@haskell/developer/dibblego)
05:11:08 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 256 seconds)
05:11:33 dobblego is now known as dibblego
05:12:21 phma joins (~phma@2001:5b0:210b:c518:9fdc:2c1a:1096:608b)
05:14:55 × phma_ quits (~phma@host-67-44-208-2.hnremote.net) (Ping timeout: 246 seconds)
05:15:24 × razetime quits (~quassel@117.254.36.161) (Ping timeout: 246 seconds)
05:15:34 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
05:15:44 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
05:15:58 phma_ joins (~phma@host-67-44-208-12.hnremote.net)
05:16:01 razetime joins (~quassel@117.254.36.19)
05:17:33 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
05:18:46 × phma quits (~phma@2001:5b0:210b:c518:9fdc:2c1a:1096:608b) (Ping timeout: 246 seconds)
05:20:12 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
05:28:13 × razetime quits (~quassel@117.254.36.19) (Ping timeout: 246 seconds)
05:28:42 razetime joins (~quassel@117.254.37.211)
05:31:02 troydm1 joins (~troydm@host-176-37-53-238.b025.la.net.ua)
05:32:35 × troydm quits (~troydm@user/troydm) (Ping timeout: 245 seconds)
05:32:54 × jbalint quits (~jbalint@2600:6c44:117f:e98a:816a:9488:fb1:7b7) (Ping timeout: 246 seconds)
05:34:36 × danso quits (~danso@user/danso) (Quit: quittin time)
05:35:09 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
05:41:42 akegalj joins (~akegalj@78-1-5-135.adsl.net.t-com.hr)
05:45:23 × razetime quits (~quassel@117.254.37.211) (Ping timeout: 250 seconds)
05:45:53 razetime joins (~quassel@117.254.36.96)
05:51:56 × razetime quits (~quassel@117.254.36.96) (Ping timeout: 256 seconds)
05:52:03 razetime joins (~quassel@117.254.36.71)
05:57:32 jonathan_ joins (~jonathan@193.203.13.99)
05:59:12 briandaed joins (~briandaed@185.234.210.211.r.toneticgroup.pl)
05:59:38 danso joins (~danso@user/danso)
06:00:54 × razetime quits (~quassel@117.254.36.71) (Ping timeout: 252 seconds)
06:02:58 razetime joins (~quassel@117.254.37.72)
06:07:43 × razetime quits (~quassel@117.254.37.72) (Remote host closed the connection)
06:08:36 phma_ is now known as phma
06:15:33 lortabac joins (~lortabac@2a01:e0a:541:b8f0:68c1:b14:aae3:ebd0)
06:15:57 Simikando joins (~Simikando@adsl-dyn1.91-127-51.t-com.sk)
06:16:33 × Simikando quits (~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Client Quit)
06:17:15 Simikando joins (~Simikando@91.127.51.1)
06:19:42 mdpete joins (~mdpete@46.143.114.151)
06:19:56 × td_ quits (~td@i5387091E.versanet.de) (Ping timeout: 245 seconds)
06:20:44 sm joins (~sm@plaintextaccounting/sm)
06:21:44 td_ joins (~td@i5387091D.versanet.de)
06:22:49 <mdpete> hi,I an absolute beginner to beautiful world of programming,I want to learn functional programming,I am reading Common LISP: A Gentle Introduction to Symbolic now,BUT my goal is learn Haskell
06:23:06 <mdpete> do you thing it is a good start?
06:23:20 <mdpete> I am planning to study scisp soon
06:23:28 acidjnk joins (~acidjnk@p200300d6e7072f45b92e9b7cc4c1bf67.dip0.t-ipconnect.de)
06:27:51 <Helle> mdpete: I mean probably, my experience with having people start programming that it is important to pick an achievable goal in terms what to write in the language (or what project to work on)
06:28:01 <Helle> learning without a goal in mind gets weird
06:30:40 <mdpete> i have just got familiar with working with conditionals ,I love ideas behind them,
06:31:16 <Helle> So I mean I would personally go straight to Haskell, but if you do learn something else first, C-LISP is honestly not bad
06:31:16 <mdpete> would please introduce me where i can find projects or meaning ful things to do via haskell
06:31:36 <Helle> I think most good programmers pick up languages quite readily once they get the general concepts
06:31:56 <Helle> yes, my Haskell is a bit messy due to mainly writing other languages, but I still love Haskell, so I don't really care
06:32:43 <[Leary]> mdpete: Common Lisp and Haskell are very different; I doubt one will prepare you for the other.
06:33:00 <Helle> [Leary]: it won't prepare you, but it will give you the flexibility if you learn both
06:33:24 <mdpete> please recommend a learning roadmap
06:33:48 <mdpete> i have no university degree
06:34:07 <mdpete> just finished highschool
06:34:20 <Helle> I have no idea, I am self taught and was part of a group trying to write a "introduction to programming" first year, first course university thing and well, we realised that there is NO single method for people to learn programming (also you where exactly our target group)
06:35:02 <Helle> the only consistent thing we found is that the most effective way is to start out having people in small groups solve problems in theory before writing code
06:35:13 <Helle> but on your own that is uh, not how it works
06:36:26 <[Leary]> @where cis194
06:36:26 <lambdabot> <https://github.com/byorgey/haskell-course>,<https://www.seas.upenn.edu/~cis194/spring13/lectures.html>
06:36:43 <[Leary]> mdpete: I learnt mostly by play, but enjoyed and benefited from this course. ^
06:36:46 <Helle> [Leary]: yeah, that is not the worst one
06:36:58 <Helle> I've read through that before :)
06:37:36 <Helle> but idk, it requires quite some feel for compsci and math concepts already, though not quite for programming
06:38:42 <Helle> it is actually genuinely an issue that learning how to program other then "by play" is unsolved
06:39:01 <mdpete> are functional programming concepts the same?
06:39:05 <Helle> yep
06:39:16 <Helle> functional vs imperative is the big split
06:39:38 <mdpete> i found more free scheme and clisp learning resources
06:39:38 <c_wraith> well, really learning how to program requires spending time developing.... taste, for lack of a better word.
06:39:47 <c_wraith> And that's not something you can get through drilling
06:40:07 <c_wraith> It *has* to involve some kind of experimentation and feedback loop
06:40:24 <Helle> c_wraith: yep, this has been the issue while we where trying to come up with a new course
06:40:31 <Helle> where having
06:40:57 <Helle> Like my feeling is that you have to treat students like they are in kindergarten in terms of how you let them learn
06:41:10 <Helle> which is uh, yeah, weird to do to 18 year olds :)
06:41:17 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
06:42:22 <[Leary]> mdpete: IMO, pure vs impure is a much more substantial difference than functional vs imperative, so no. Rather, without purity you don't really have "functional" (in my conception).
06:42:42 <Helle> [Leary]: agreed, but for me functional requires the purity as well
06:44:13 <Helle> I mean the project I work on right now would be far less useful if not for purity, as it gets us so much performance for "free"
06:45:30 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 245 seconds)
06:45:47 <mdpete> so learnig a pure functional prgrming language first really is a better strategy?
06:47:59 × Simikando quits (~Simikando@91.127.51.1) (Quit: Leaving)
06:49:39 <drewjose> mdpete ideally, yes, but if you have limited time and just want to get started with being some sort of programmer, maybe a language that is impure and imperative would serve you better, because those are used more widely. Most of them also have added more "functional" features over the years
06:50:03 <Helle> drewjose: in incredibly hackish ways
06:50:22 <Helle> mdpete: the problem with learning to program is finding small enough incremental goals that work for you
06:50:46 <drewjose> Helle of course, and if you use them in javascript you will be rewarded with awful performance
06:51:03 <Helle> drewjose: and in Python you hurt your brain due to syntax and single expression
06:51:51 <Helle> My Python ends up way to Lispy
06:52:16 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:52:17 <Helle> Erlang can be an interesting place, it has the Prolog/Haskell syntax, but also more imperative features
06:52:40 <mdpete> fortunately or unfortunately I started to learn functional programming first ,and I believe in finish a thing i have started
06:52:59 <Helle> hehe
06:54:05 <drewjose> awesome, it's not going to be that hard if you stick with Haskell (though laziness is not that common in other languages). My first functional programming language was scala and that wasn't a great experience
06:54:41 <drewjose> If you want to try scheme read sicp
06:54:55 <akegalj> would Racket be a good first language? Its a lisp like language with types (at least that's my intuition)
06:55:46 <drewjose> Racket isn't statically typed by default
06:55:52 <drewjose> You have to use Typed racket
06:56:01 <Helle> Scala feels so non-functional, plus the Scala bros oooof
06:56:25 <Helle> I'd rather deal with 30 academic Haskell men then 1 Scala bro
06:59:02 <mdpete> are haskell resources an absolute beginner friendly? which books or other resources you recommend me ?
06:59:11 <drewjose> https://haskellbook.com/
06:59:32 <drewjose> is the most beginner friendly one I've found
06:59:50 <drewjose> it's paid, though
07:01:28 <akegalj> http://www.learnyouahaskell.com/ is a free book that I think is a good first book. There are ilustrations which help to create intuition around some concepts
07:01:49 <akegalj> (some people don't think its a good first book though - but I like it)
07:02:20 <Helle> akegalj: mmmmm, idk as a programming from first principles book
07:02:27 <opqdonut> https://haskell.mooc.fi/ -- my course is simpler than haskellbook.com, but contains lots of exercises unlike LYAH
07:03:51 <drewjose> opqdonut looks great! you made this?
07:04:06 <opqdonut> yeah, mostly me
07:05:56 <akegalj> yep, looks great
07:06:09 <mdpete> i really appreciate it
07:08:21 <tdammers> I'm not a fan of LYAH, personally - too many didactic lies for my taste, makes it easy to develop wrong intuitions (like the "monads are boxes" thing, which can be thoroughly unhelpful once you meet Monad instances that don't behave like boxes, or ones where the box analogy simply leads you to the wrong conclusions, like with lists)
07:08:21 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
07:09:16 <drewjose> monads are burritos
07:10:48 <opqdonut> yeah I wanted to teach monads "properly", which unfortunately meant that I had to cover a lot of ground before them
07:11:01 <drewjose> I don't understand why the lyah site is http-only
07:11:09 <Helle> I had to 100% wrap my head around monads my own way
07:11:33 <Helle> could NOT follow any of the commonly given guides and even my lecturers went too hard on math for it
07:12:01 <opqdonut> yeah just playing around with IO is what made it click for me, originally
07:12:12 <Helle> yep
07:12:32 <Helle> Funny part is that I now get it better then the main maintainer of the project I tend to work on
07:12:42 <Helle> so this is going to be fun to explain
07:13:26 <Hecate> playing with Maybe and Either gave me my best intuition for monads
07:13:34 <Helle> Hecate: for me it was that mixed with IO
07:13:47 <Helle> and then rewriting the same code 5 times to get it to be somewhat reasonable
07:13:59 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:14:34 <drewjose> 🌐 Yet Another Haskell Tutorial
07:14:34 <drewjose> users.umiacs.umd.edu
07:14:34 <drewjose> › ~hal › docs › daume02yaht.pdf
07:14:34 <drewjose> PDF
07:14:43 <drewjose> does it pretty well I think
07:14:47 <drewjose> sorry for the formatting
07:15:14 <drewjose> even though it is dated (it's from 2006!) http://users.umiacs.umd.edu/~hal/docs/daume02yaht.pdf
07:15:14 <Helle> So the problem for monads is that there is definitely NOT one method to teach them
07:15:36 <Helle> but like probably at least a dozen and you need to find the one that clicks for you, as the concept is just that "weird"
07:16:10 <lortabac> I think Prelude should expose 'bindIO' and 'returnIO' so people can do IO without having to learn monads
07:16:44 <Helle> probably
07:16:56 <lortabac> then once they learn type-classes, they can learn that there is a class that unifies the ideas behind Maybe, Either, IO etc.
07:17:00 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
07:17:05 <tdammers> Maybe, Either, IO; and then throw lists into the gears to erase some incorrect assumptions that may have formed
07:17:08 <opqdonut> lortabac: yeah I think that's the best approach
07:17:24 <Helle> lortabac: that basically resembles what I did to learn myself
07:17:37 <Helle> and I have some wrong conceptions atleast remaining, but the code result is reasonable enough
07:18:15 <lortabac> in other languages you can do IO very easily, in Haskell you are obliged to learn monads prematurely
07:18:16 <tdammers> also, "eightfold path to monad satori"
07:19:06 <Helle> lortabac: yeah, that is a definite feeling I had, this is why the way I got into serious Haskell coding was by working on an existing code base, so the monadic stuff was already in place
07:21:29 <lortabac> people tend to think that monads are something "special" that gives you some kind of enlightenment, while (except the syntactic sugar) it's just an ordinary type-class
07:21:37 CiaoSen joins (~Jura@2a05:5800:29d:c900:664b:f0ff:fe37:9ef)
07:21:47 <Helle> yep, realising that was key
07:21:50 <lortabac> the only extraordinary thing about monads is that you have to learn them quickly to do IO
07:22:37 Guest16 joins (~Guest16@ec2-13-232-74-226.ap-south-1.compute.amazonaws.com)
07:22:42 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
07:23:48 × Guest16 quits (~Guest16@ec2-13-232-74-226.ap-south-1.compute.amazonaws.com) (Client Quit)
07:23:59 <drewjose> but it's weird, when learning java to write hello world we had to type incantations like public static void etc., with whoever teaching asking the students to be patient and that all this magic would be explained in due time. People do not give the same leeway to haskell
07:24:30 <dsal> The easiest way to learn monads is to stop trying to learn monads and write some code.
07:25:00 mima joins (~mmh@aftr-62-216-211-62.dynamic.mnet-online.de)
07:25:14 <dsal> I had like, three experiences today where I wrote a dumb obvious property test and found a bug in code that I was pretty sure was correct. Property tests are smarter than I am.
07:25:20 <Helle> dsal: yes and no, but eeeh
07:27:10 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 245 seconds)
07:27:48 × hgolden quits (~hgolden@2603:8000:9d00:3ed1:fc05:5499:f77c:fbe5) (Remote host closed the connection)
07:27:56 hgolden_ joins (~hgolden@2603-8000-9d00-3ed1-fc05-5499-f77c-fbe5.res6.spectrum.com)
07:31:35 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
07:32:16 beaky_ is now known as beaky
07:37:26 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
07:37:46 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
07:39:28 mrmr14 joins (~mrmr@user/mrmr)
07:40:21 × mrmr1 quits (~mrmr@user/mrmr) (Ping timeout: 244 seconds)
07:40:22 mrmr14 is now known as mrmr1
07:44:35 gmg joins (~user@user/gehmehgeh)
07:48:42 × aforemny_ quits (~aforemny@i59F516DA.versanet.de) (Ping timeout: 252 seconds)
07:51:33 × johnw quits (~johnw@69.62.242.138) (Read error: Connection reset by peer)
07:53:56 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
07:54:22 johnw joins (~johnw@69.62.242.138)
07:55:44 <dminuoso> lortabac │ the only extraordinary thing about monads is that you have to learn them quickly to do IO
07:55:53 ripspin joins (~chatzilla@1.145.130.147)
07:55:55 <dminuoso> I think this is a misconception that largely contributes to the perceived difficulty of Haskell and IO.
07:56:27 aforemny joins (~aforemny@2001:9e8:6ce0:5800:a750:a56:88c2:71f2)
07:56:35 <dminuoso> You dont really need to know anything about Monads in order to do IO. You just need to have a basic understanding of typeclasses, and understand how >>= and return at IO behave.
07:57:27 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
07:57:32 <lortabac> "You just need to have a basic understanding of typeclasses" -> that's exactly my point, type-classes are conceptually much harder than IO
07:57:55 <lortabac> people try to understand monads without knowing type-classes and get confused
07:58:45 <dminuoso> Im rather saying that learning IO has little to do with learning what Monad is about, its laws or what it abstracts over.
07:58:47 <dminuoso> Consider an analogy:
07:59:22 <dminuoso> You dont need to learn Monoid in order to add number, even though addition might (only) be captured by the typeclass called Monoid. Its easier to just tell people "Use <> and dont worry about the name Monoid"
08:00:07 <lortabac> I agree with you, but that's not what happens in practice with Monad
08:03:29 <drewjose> for what it's worth, I agree with dminuoso that for most people, getting IO done by example would be better than delving into how exactly category theory makes it possible in a pure language
08:03:51 <dminuoso> Perhaps we would have been better off a -fsimple kind of mode that loads a special prelude that exposes `thenIO :: IO a -> (a -> IO b) -> IO b` and `pureIO :: a -> IO a`, have `do expressions` be monormophic at IO.
08:04:07 <dminuoso> That would completely side step all the monad tutorials entirely.
08:07:53 <lortabac> this may already be possible, we can even have do notation with RebindableSyntax
08:08:54 × vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Remote host closed the connection)
08:09:06 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
08:09:16 vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua)
08:10:47 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
08:12:30 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
08:16:06 × mdpete quits (~mdpete@46.143.114.151) (Remote host closed the connection)
08:16:24 mdpete joins (~mdpete@46.143.114.151)
08:16:45 × mdpete quits (~mdpete@46.143.114.151) (Remote host closed the connection)
08:17:25 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
08:20:22 Nixkernal joins (~Nixkernal@119.4.193.178.dynamic.wline.res.cust.swisscom.ch)
08:20:32 jbalint joins (~jbalint@2600:6c44:117f:e98a:816a:9488:fb1:7b7)
08:21:35 × akegalj quits (~akegalj@78-1-5-135.adsl.net.t-com.hr) (Quit: leaving)
08:22:01 fendor joins (~fendor@2a02:8388:1640:be00:af83:ade1:cd40:fe7a)
08:29:32 mdpete joins (~mdpete@46.143.114.151)
08:29:54 × mdpete quits (~mdpete@46.143.114.151) (Remote host closed the connection)
08:33:18 × califax quits (~califax@user/califx) (Ping timeout: 246 seconds)
08:34:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:40:59 <tomsmeding> it might even suffice to use QualifiedDo and make some module (imported as "IO") that gives >>= and return clever types that use TypeError to tell the user what they did wrong in a better way than GHC normally does
08:41:22 <tomsmeding> avoids having to define a special prelude
08:42:45 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:44:28 Pickchea joins (~private@user/pickchea)
08:57:17 danse-nr3 joins (~francesco@151.35.254.168)
09:01:04 Guest|52 joins (~Guest|52@2.124.159.11)
09:01:39 × Guest|52 quits (~Guest|52@2.124.159.11) (Client Quit)
09:03:10 × Alex_test quits (~al_test@178.34.150.48) (Quit: ;-)
09:03:22 × AlexZenon quits (~alzenon@178.34.150.48) (Quit: ;-)
09:03:34 × AlexNoo quits (~AlexNoo@178.34.150.48) (Quit: Leaving)
09:04:45 __monty__ joins (~toonn@user/toonn)
09:08:32 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
09:08:56 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
09:09:56 × ft quits (~ft@p508db658.dip0.t-ipconnect.de) (Quit: leaving)
09:15:36 random-jellyfish joins (~random-je@user/random-jellyfish)
09:17:04 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
09:22:12 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
09:24:02 sm joins (~sm@plaintextaccounting/sm)
09:24:22 AlexNoo joins (~AlexNoo@178.34.150.48)
09:24:31 AlexZenon joins (~alzenon@178.34.150.48)
09:26:19 Alex_test joins (~al_test@178.34.150.48)
09:37:34 SegmentationFaul joins (~Segmentat@185.151.84.54)
09:42:38 cfricke joins (~cfricke@user/cfricke)
09:48:26 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
09:48:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
09:53:21 mc47 joins (~mc47@xmonad/TheMC47)
09:56:44 × ripspin quits (~chatzilla@1.145.130.147) (Remote host closed the connection)
09:58:06 <danse-nr3> good morning #haskell
09:58:59 jabuxas joins (~jabuxas@user/jabuxas)
09:59:36 × jabuxas quits (~jabuxas@user/jabuxas) (Client Quit)
10:00:01 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c) (Remote host closed the connection)
10:07:06 Simikando joins (~Simikando@adsl-dyn1.91-127-51.t-com.sk)
10:08:26 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
10:08:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
10:11:42 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
10:14:27 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 246 seconds)
10:17:56 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
10:18:15 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
10:25:26 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
10:25:38 × Simikando quits (~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Ping timeout: 256 seconds)
10:25:43 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
10:27:48 Inst joins (~liamzy@2601:6c4:4085:6d50::725c)
10:28:26 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
10:28:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
10:35:56 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
10:36:14 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
10:36:29 fweht joins (uid404746@id-404746.lymington.irccloud.com)
10:38:26 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Remote host closed the connection)
10:38:44 andrei_n joins (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47)
10:39:52 int-e_ is now known as int-e
10:46:42 × SegmentationFaul quits (~Segmentat@185.151.84.54) (Quit: Client closed)
10:46:52 SegmentationFaul joins (~Segmentat@185.151.84.54)
10:50:38 notzmv joins (~zmv@user/notzmv)
10:50:52 × CiaoSen quits (~Jura@2a05:5800:29d:c900:664b:f0ff:fe37:9ef) (Ping timeout: 248 seconds)
10:54:14 ripspin joins (~chatzilla@1.145.176.59)
11:00:49 × SegmentationFaul quits (~Segmentat@185.151.84.54) (Quit: Client closed)
11:00:54 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c)
11:01:01 SegmentationFaul joins (~Segmentat@185.151.84.54)
11:05:16 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c) (Ping timeout: 248 seconds)
11:08:48 <byorgey> danse-nr3: good morning!
11:11:53 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
11:14:34 xff0x joins (~xff0x@2405:6580:b080:900:37fd:a033:abd0:1c4f)
11:14:46 random-jellyfish joins (~random-je@user/random-jellyfish)
11:15:17 × foul_owl quits (~kerry@185.219.141.164) (Ping timeout: 244 seconds)
11:19:02 <lortabac> tomsmeding: good idea
11:24:05 × danse-nr3 quits (~francesco@151.35.254.168) (Remote host closed the connection)
11:24:10 Guest60 joins (~Guest60@2a00:1098:2f:2:b8d4:3ab9:d332:f00b)
11:24:28 danse-nr3 joins (~francesco@151.35.254.168)
11:24:37 × andrei_n quits (~andrei.n@2a02:a03f:c0bc:8400:384:e4db:8ddb:cd47) (Quit: Leaving)
11:28:49 <Guest60> Suppose I have types like this:
11:28:50 <Guest60> data T t = A t | B t
11:28:50 <Guest60> $(makePrisms ''T)
11:28:51 <Guest60> data Y = Y_A | Y_B
11:28:51 <Guest60> convert :: T () -> T Y
11:28:52 <Guest60> convert (A ()) = A Y_A
11:28:52 <Guest60> convert (B ()) = B Y_B
11:28:53 <Guest60> Is there a nice way to implement `convert` using optics? Like some way of using `_A .~ Y_A` and `_B .~ Y_B` simultaneously? (Neither can be used on their own)
11:29:22 foul_owl joins (~kerry@157.97.134.164)
11:34:58 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
11:35:30 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 245 seconds)
11:41:08 × Inst quits (~liamzy@2601:6c4:4085:6d50::725c) (Remote host closed the connection)
11:41:15 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
11:41:27 Inst joins (~liamzy@2601:6c4:4085:6d50::ce87)
11:41:36 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:44:06 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
11:44:39 × danse-nr3 quits (~francesco@151.35.254.168) (Ping timeout: 252 seconds)
11:45:45 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
11:46:33 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
11:46:33 artem joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
11:47:02 <ncf> undefined & outside _A ~. const Y_A & outside _B ~. const Y_B -- or something?
11:55:25 × jinsun quits (~jinsun@user/jinsun) (Ping timeout: 248 seconds)
11:59:30 <ncf> you could also probably do something clever with Adjunction T ((->) Y)
12:00:11 arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
12:01:32 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
12:02:04 <dminuoso> Guest60: You can use: _A `adjoin` _B
12:02:38 <dminuoso> This will give you a `Traversal' T Y`
12:03:10 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
12:03:13 <dminuoso> then you need an `unsafeSingular :: Traversal s t a b -> Lens s t a b` that you can trivially cook up yourself
12:03:16 <dminuoso> So you can write:
12:03:27 <dminuoso> Ah but hold on, that wont help you as much
12:03:38 <dminuoso> .Mmm
12:03:44 <ncf> you'd need an indexed traversal
12:04:30 <dminuoso> Yeah. This is a kind of twisted zip
12:04:52 <ncf> :t Data.Functor.Adjunction.duplicateL
12:04:53 <lambdabot> Data.Functor.Adjunction.Adjunction f u => f a -> f (f a)
12:05:18 <ncf> you could compose this with something that witnesses f () as the representation
12:06:39 × arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds)
12:11:26 × migas quits (~migas@astra4961.startdedicated.net) (Remote host closed the connection)
12:11:43 migas joins (~migas@astra4961.startdedicated.net)
12:11:59 <ncf> heh, duplicateL x is just x <$ x
12:12:01 danse-nr3 joins (~francesco@151.35.254.168)
12:12:41 <ncf> doesn't use the adjunction at all
12:13:37 <dminuoso> Guest60: Here is a dumb idea, but why not just say:
12:13:38 <ncf> i guess every strong functor has a duplicate
12:14:16 <dminuoso> (x & _A .~ Y_A) & _B .~ Y_B
12:14:23 <dminuoso> That seems... simple.
12:14:54 <Guest60> because the first part doesn't typecheck
12:14:56 <ncf> does it t-
12:15:10 <dminuoso> ohhh
12:15:12 <dminuoso> I see why
12:15:42 <Guest60> I think you need to convert it to some intermediate form which has two type parameters, one for the A constructor and one for the B constructor
12:15:43 <dminuoso> The unsafeSingular route smells so promising.
12:15:59 <dminuoso> But it loses information along the way
12:16:00 <Guest60> without _A _B maybe?
12:16:24 <dminuoso> The interface this looks like is just a simple profunctor.
12:16:25 <ncf> then you've reinvented Either
12:16:29 <ncf> what are you using this for?
12:16:31 <dminuoso> no a bifunctor.
12:16:50 <dminuoso> Guest60: I would say, use Bifunctor rather than optics.
12:17:03 <Guest60> Oops I guess this is an X-Y problem
12:17:31 <Guest60> What I really want is to essentially use the Traversable instance for T, but have the function behave differently in the different constructors
12:18:01 <Guest60> So if Y_A = Y_B then traverse (const Y_A) would work
12:18:08 <dminuoso> With optics you would have to do the indexed traversable route.
12:18:16 <dminuoso> Then using the index you could recover the path
12:18:57 <dminuoso> As long as you're constrained to just 2 fields, Bifunctor is a fine solution
12:19:11 <dminuoso> Since you can just write `bimap (const Y_A) (const Y_B)`
12:19:20 <Guest60> No this is a model, in reality T is an AST type with many branches
12:19:22 <dminuoso> But it doesnt elegantly generalize to n fields.
12:19:26 <dminuoso> Mmm
12:19:56 <dminuoso> Guest60: I have a feeling you would need indexed traversals and some form f generics (Data.Data.Data probably?)
12:20:25 <Guest60> I mean a basic pattern-matching implementation works fine if there isn't a neat way to do it
12:20:27 <dminuoso> With the indexed traversals you can recover the nths constructor, and with Data.Data.Data you can easily generate values of the nth constructor
12:20:28 <Guest60> I just thought there might be
12:24:04 × micro quits (~micro@user/micro) (Ping timeout: 256 seconds)
12:25:01 micro joins (~micro@user/micro)
12:29:36 sm joins (~sm@plaintextaccounting/sm)
12:29:44 Square2 joins (~Square4@user/square)
12:32:24 × Feuermagier quits (~Feuermagi@user/feuermagier) (Quit: Leaving)
12:39:39 L29Ah joins (~L29Ah@wikipedia/L29Ah)
12:55:47 danse-nr3_ joins (~francesco@151.57.235.234)
12:56:56 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection)
12:57:18 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
12:58:06 × danse-nr3 quits (~francesco@151.35.254.168) (Ping timeout: 246 seconds)
13:00:43 × Alex_test quits (~al_test@178.34.150.48) (Quit: ;-)
13:01:36 × AlexZenon quits (~alzenon@178.34.150.48) (Quit: ;-)
13:01:38 × AlexNoo quits (~AlexNoo@178.34.150.48) (Quit: Leaving)
13:16:05 × SegmentationFaul quits (~Segmentat@185.151.84.54) (Quit: Client closed)
13:16:16 × Guest60 quits (~Guest60@2a00:1098:2f:2:b8d4:3ab9:d332:f00b) (Quit: Client closed)
13:16:19 SegmentationFaul joins (~Segmentat@185.151.84.54)
13:18:48 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
13:20:31 shapr joins (~user@2600:1700:c640:3100:25dc:ef75:520:fb9d)
13:21:52 dh97 joins (~dh97@2405:201:d02b:48da:3de1:8f39:2df3:be9c)
13:21:59 ulysses4ever joins (~artem@2601:408:c405:45bb:f474:e3f8:9806:671)
13:23:00 AlexNoo joins (~AlexNoo@178.34.150.48)
13:24:12 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
13:24:22 AlexZenon joins (~alzenon@178.34.150.48)
13:24:42 × artem quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Ping timeout: 256 seconds)
13:27:38 × Inst quits (~liamzy@2601:6c4:4085:6d50::ce87) (Remote host closed the connection)
13:28:12 × ripspin quits (~chatzilla@1.145.176.59) (Ping timeout: 246 seconds)
13:28:18 Inst joins (~liamzy@2601:6c4:4085:6d50::725c)
13:29:45 × sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection)
13:29:47 ystael joins (~ystael@user/ystael)
13:30:21 × dh97 quits (~dh97@2405:201:d02b:48da:3de1:8f39:2df3:be9c) (Read error: Connection reset by peer)
13:30:31 sefidel joins (~sefidel@user/sefidel)
13:30:53 × ulysses4ever quits (~artem@2601:408:c405:45bb:f474:e3f8:9806:671) (Ping timeout: 248 seconds)
13:32:23 ulysses4ever joins (~artem@73.145.240.111)
13:33:13 Alex_test joins (~al_test@178.34.150.48)
13:33:48 × ulysses4ever quits (~artem@73.145.240.111) (Read error: Connection reset by peer)
13:34:06 ulysses4ever joins (~artem@73.145.240.111)
13:35:37 artem joins (~artem@73.145.240.111)
13:36:01 × ulysses4ever quits (~artem@73.145.240.111) (Read error: Connection reset by peer)
13:38:58 cafkafk joins (~cafkafk@fsf/member/cafkafk)
13:41:48 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
13:44:16 × hgolden_ quits (~hgolden@2603-8000-9d00-3ed1-fc05-5499-f77c-fbe5.res6.spectrum.com) (Remote host closed the connection)
13:49:57 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 245 seconds)
13:51:26 Guest60 joins (~Guest60@2a00:1098:2f:2:b8d4:3ab9:d332:f00b)
13:51:43 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:52:33 segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
13:53:57 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
13:54:15 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
13:56:35 gatekempt joins (~gatekempt@user/gatekempt)
13:56:36 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Quit: WeeChat 3.6)
14:00:17 mmhat joins (~mmh@p200300f1c7042765ee086bfffe095315.dip0.t-ipconnect.de)
14:00:56 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
14:03:56 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 248 seconds)
14:04:27 × mmhat quits (~mmh@p200300f1c7042765ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
14:07:15 ulysses4ever joins (~artem@2607:fb91:2fb8:4dc7:f474:e3f8:9806:671)
14:07:52 × artem quits (~artem@73.145.240.111) (Ping timeout: 240 seconds)
14:22:06 × [Leary] quits (~Leary]@user/Leary/x-0910699) (Ping timeout: 245 seconds)
14:24:19 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection)
14:24:43 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
14:24:52 artem joins (~artem@2601:249:4380:8950:f474:e3f8:9806:671)
14:28:28 × ulysses4ever quits (~artem@2607:fb91:2fb8:4dc7:f474:e3f8:9806:671) (Ping timeout: 248 seconds)
14:28:44 <Inst> oh wait, i think i realize my mistake
14:28:49 <Inst> `seq` doesn't have special rules, right?
14:29:10 <Inst> infixr 0 `seq`
14:29:26 <Inst> it's actually the operators that get called first in haskell, no?
14:29:51 <Inst> i was confused by a section in RWH, going through it for entertainment
14:30:03 <Inst> a `seq` b... shouldn't a and b get evaluated first?
14:30:20 <Inst> but if it's operators with lowest precedence that act first, then it makes sense
14:35:31 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
14:39:02 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
14:42:24 <EvanR> wat
14:42:51 <EvanR> precedence is a parsing thing not acting
14:44:24 <EvanR> `seq` acts like any other `name` operator
14:44:35 <EvanR> ~~acts~~ parses like
14:45:24 <drewjose> Inst what do you mean evaluated first, compared to what?
14:46:02 <EvanR> snd (undefined : undefined, 99)
14:46:23 ripspin joins (~chatzilla@1.145.208.15)
14:46:37 <EvanR> case undefined : undefined { [] -> "empty"; _:_ -> "full }
14:47:00 <EvanR> > case undefined : undefined { [] -> "empty"; _:_ -> "full" }
14:47:01 <lambdabot> <hint>:1:30: error: parse error on input ‘[’
14:47:08 <EvanR> > case undefined : undefined of { [] -> "empty"; _:_ -> "full" }
14:47:10 <lambdabot> "full"
14:48:40 <EvanR> precedence tells you where to put parentheses and parentheses tells you how to group expressions, way before any evaluation happens
14:53:29 <Guest60> Your confusion may be related to how operator precedence is taught in schools. Multiplication has higher precedence than addition, so in "3 * 4 + 5" you "do the multiplication first", i.e. pick out the "3 * 4" bit before you look at the addition. So this is telling you the order in which you group things with parentheses, but this is not the same
14:53:29 <Guest60> as evaluation order in code (even before you think about laziness and seq, which only muddy the waters). Evaluation order (which is what seq affects) is about when, in time, you compute something
14:54:02 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:68c1:b14:aae3:ebd0) (Quit: WeeChat 2.8)
14:56:08 <EvanR> they also tell you do "do parentheses first" which is ridiculous in this example 0 * (9999 + 9998 + ... + 1)
14:56:17 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
14:56:38 <dolio> That's what computers do. :þ
14:57:02 <EvanR> RIDICULOUS
14:59:18 <dolio> In the case of arithmetic, the parse sort of determines the evaluation, at least if you don't use algebra.
15:00:13 <dolio> But it's pretty important to understand the difference.
15:00:39 <Inst> wait, brb
15:00:47 <Inst> undefined `seq` error "404"
15:02:35 <Inst> so `seq` gets evaluated first, not error "404"
15:02:53 <Guest60> error "404" never gets evaluated
15:02:59 <glguy> It might
15:03:13 <glguy> Seq doesn't specify an ordering on its arguments
15:03:13 <Inst> the way i was assuming things went, i assumed non-operator expressions get evaluated first
15:03:21 <Inst> wait what?
15:03:36 <glguy> But in function application the function gets evaluated before it's arguments
15:04:05 <dolio> You're still conflating parsing with evaluation.
15:04:11 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c)
15:04:44 <glguy> Being an operator isn't relevant to evaluation
15:05:14 <Guest60> undefined `seq` error "404" is equivalent to   seq (undefined) (error "404")
15:05:29 <Guest60> in every single way
15:06:04 × SegmentationFaul quits (~Segmentat@185.151.84.54) (Quit: Client closed)
15:08:35 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c) (Ping timeout: 246 seconds)
15:10:40 × acidjnk quits (~acidjnk@p200300d6e7072f45b92e9b7cc4c1bf67.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
15:15:52 × briandaed quits (~briandaed@185.234.210.211.r.toneticgroup.pl) (Remote host closed the connection)
15:17:09 <Inst> i don't understand how I can not conflate parsing with evaluation, tbh
15:17:32 <Inst> also, undefined `seq` error "404" `seq` error "505"
15:17:40 <geekosaur> yet you are doing it
15:18:13 <geekosaur> that one invokes special rules, where ghc can determine that all of them throw exceptions and is free to pick one
15:18:13 × artem quits (~artem@2601:249:4380:8950:f474:e3f8:9806:671) (Read error: Connection reset by peer)
15:18:17 <Inst> *how i can not
15:18:22 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
15:18:57 <geekosaur> in a strict language you can determine evaluation from parsing; in a lazy language it's more independent
15:19:15 <Inst> still that implies errors if exception throwers exist
15:19:21 <dolio> Even in a strict language, parsing is not evaluation.
15:19:39 <geekosaur> it's not but it generally guides evaluation
15:19:57 <Inst> the term that gets evaluated first is the term with the lowest precedence, no?
15:20:06 <Inst> $ gets called first in an expression with $
15:20:13 <geekosaur> no
15:20:18 <dolio> No, precedence is about parsing.
15:20:32 <geekosaur> if anything it'd be highest precedence, but in any case it does not control evaluation
15:20:41 <Inst> foo $ bar is equivalent to ($) foo bar
15:20:41 <geekosaur> precedence inserts parentheses
15:20:44 <Inst> $ is outermost
15:20:54 <EvanR> i < 0 ? crashAndBurn() : 7 // C can parse this and not crash
15:21:08 <Inst> foo $ bar + baz; ($) foo (bar + baz)
15:21:27 lbseale joins (~quassel@user/ep1ctetus)
15:21:27 <EvanR> it can also evaluate it and not crash sometimes
15:22:25 <EvanR> downloadTheGibson() || crashAndBurn() # example from PHP
15:22:48 <Inst> for a brief moment i thought the Hackers references were built-ins in C
15:23:15 <EvanR> so you see treating every operator like strict + does not work
15:23:49 <EvanR> especially in haskell
15:23:57 × YuutaW quits (~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Ping timeout: 248 seconds)
15:27:04 YuutaW joins (~YuutaW@mail.yuuta.moe)
15:27:38 <Inst> i feel embarrassed because i still don't understand how this works :(
15:27:38 × Inst quits (~liamzy@2601:6c4:4085:6d50::725c) (Remote host closed the connection)
15:28:04 <EvanR> try evaluating more basic haskell expressions
15:28:19 Inst joins (~liamzy@2601:6c4:4085:6d50::ce87)
15:28:32 <EvanR> > const 9 (error "404")
15:28:33 <lambdabot> 9
15:28:41 <EvanR> why didn't it crash
15:29:00 × Guest60 quits (~Guest60@2a00:1098:2f:2:b8d4:3ab9:d332:f00b) (Quit: Client closed)
15:29:13 <Inst> didn't need to evaluate (error "404"
15:29:38 <EvanR> > 9 `const` error "404
15:29:39 <lambdabot> <hint>:1:21: error:
15:29:39 <lambdabot> lexical error in string/character literal at end of input
15:29:45 <EvanR> > 9 `const` (error "404)
15:29:46 <lambdabot> <hint>:1:23: error:
15:29:46 <lambdabot> lexical error in string/character literal at end of input
15:29:48 <EvanR> WHAT
15:30:06 <EvanR> Inst, chew on that one regardless
15:30:12 <Inst> you forgot the "
15:30:19 <Inst> > 9 'const' (error "404")
15:30:21 <lambdabot> error:
15:30:21 <lambdabot> • Syntax error on 'const'
15:30:21 <lambdabot> Perhaps you intended to use TemplateHaskell or TemplateHaskellQuotes
15:30:37 <Inst> > 9 `const` (error "404")
15:30:38 <lambdabot> 9
15:30:44 <EvanR> you don't need parens
15:30:46 <Inst> 9 `const` error "404"
15:30:57 <EvanR> anyway, what's the difference
15:31:48 <Inst> btw, it's a bit awkward that SPJ named his cat Haskell
15:31:56 <Inst> on a second-order level, i think
15:33:17 <Inst> "Haskell passed on"
15:34:57 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Ping timeout: 245 seconds)
15:35:03 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
15:35:03 allbery_b joins (~geekosaur@xmonad/geekosaur)
15:35:06 allbery_b is now known as geekosaur
15:36:03 × jonathan_ quits (~jonathan@193.203.13.99) (Quit: Leaving)
15:37:57 ph88 joins (~ph88@91.64.60.212)
15:38:14 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
15:39:13 <ph88> i have nanosecond since unix epoc and seconds of timezone offset from UTC. Which function can i use to convert to UTCTime ?
15:39:44 powderhorn joins (~powderhor@207-153-12-54.static.fttp.usinternet.com)
15:40:06 <EvanR> you can convert from unix time to UTCTime directly, it doesn't involve a time zone
15:40:49 <EvanR> posixSecondsToUTCTime :: POSIXTime -> UTCTime, so first divide by one billion
15:41:06 <ph88> and substract seconds of timezone ?
15:41:21 <EvanR> there's no timezone, unix time is already in UTC
15:41:56 <ph88> i have a integer indicating the timezone seconds from UTC
15:41:57 <EvanR> assuming you didn't mess up the unix time somewhere
15:42:07 <ph88> https://neo4j.com/docs/bolt/current/bolt/structure-semantics/#structure-legacy-datetime
15:42:26 <EvanR> timezones are only for convert to local time from UTC
15:42:42 <ph88> ah ok
15:42:45 <EvanR> unix time is the same for everyone
15:42:58 <ph88> how do i make a POSIXTime from Int ?
15:43:23 <EvanR> fromIntegral, but you said it's nanoseconds, so after that conversion divide by a billion
15:43:41 <ph88> i will drop the nanoseconds, it's in a second integer anyway
15:43:50 <ph88> thanks EvanR
15:43:50 <EvanR> ok then just fromIntegral
15:44:07 <dolio> Inst: If you're literally talking about evaluating the function value seq, then yes that theoretically happens first. But in reality it probably doesn't because GHC knows what well-defined value that is at compile time.
15:45:45 <Inst> i mean it should be able to optimize depending on whether seq's first argument is actually used, first
15:45:53 <Inst> it can be optimized away if seq's first argument isn't used
15:45:59 <dolio> Like, if you evaluate `1 + 3 * 5`, then (+) gets evaluated first, theoretically, but that evaluation completes almost immediately.
15:46:29 <Inst> (+) 1 (3 * 5), outermost evaluation
15:46:39 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
15:46:52 <EvanR> ph88, https://i.imgur.com/7ZucxfP.png take this map
15:48:05 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 258 seconds)
15:49:20 × stefan-_ quits (~cri@42dots.de) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
15:49:29 YuutaW joins (~YuutaW@mail.yuuta.moe)
15:50:04 stefan-_ joins (~cri@42dots.de)
15:50:33 <ph88> thx
15:50:36 <drewjose> seq isn't lazy in the first argument so it can't optimise its evaluation away can it
15:50:53 <dolio> No, seq is strict in both arguments.
15:51:21 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
15:51:56 <dolio> drewjose: What I mean is, you're right.
15:52:27 <drewjose> yes got that :) haskellers are naturally terse
15:54:46 jinsun joins (~jinsun@user/jinsun)
15:56:26 <EvanR> a function "strict in an argument" will bottom if the argument is bottom. Kneejerk conclusion is that it therefore evaluates that argument. Which is probably wrong, but I can just tell whoever thinks that to show the proof and offload the mental burden xD
15:56:32 <ph88> what's the difference between LocalTime and ZonedTime ?
15:57:08 × Inst quits (~liamzy@2601:6c4:4085:6d50::ce87) (Remote host closed the connection)
15:57:10 dhil joins (~dhil@78.45.150.83.ewm.ftth.as8758.net)
15:57:16 <EvanR> a ZonedTime is a LocalTime paired with a TimeZone, so it can be decomposed to a LocalTime or converted to UTCTime
15:57:25 Inst joins (~liamzy@2601:6c4:4085:6d50::1868)
15:58:00 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 246 seconds)
15:58:02 <EvanR> it's kind of lame because TimeZone is just an offset and not a TimeZoneSeries which is another package
15:58:38 × Inst quits (~liamzy@2601:6c4:4085:6d50::1868) (Remote host closed the connection)
15:59:59 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c)
16:00:15 <EvanR> LocalTime is like 1997/10/10 11:14:00 taken in isolation and no context
16:00:40 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 246 seconds)
16:01:10 × ripspin quits (~chatzilla@1.145.208.15) (Quit: ChatZilla 0.17 [SeaMonkey 2.53.17/20230727221859])
16:01:23 <EvanR> you see that a lot in SQL
16:01:37 <ph88> should i use TimeZoneSeries or ZonedTime ?\
16:01:42 <EvanR> for what?
16:03:50 <ph88> to keep times with timezones, main datetime data type in my app
16:03:51 YuutaW joins (~YuutaW@mail.yuuta.moe)
16:04:34 <EvanR> standard procedure I think is to have a column of LocalTime and a column specifying the "time zone" as a string, the complicated version
16:04:59 <EvanR> wait what am I saying no
16:04:59 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
16:05:08 <EvanR> you still didn't give enough info
16:05:32 <EvanR> the best course of action heavily depends on the application
16:07:34 <EvanR> e.g. a web app with a database often has all times in UTC and has timezones per user just for display. But a given application may have specialized requirements, like event planners don't care about the timezone because the event is in a known location. Hours of operation in local time naturally survive daylight savings time, etc
16:07:36 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
16:07:40 × ddellacosta quits (~ddellacos@146.70.165.10) (Ping timeout: 248 seconds)
16:09:58 ddellacosta joins (~ddellacos@143.244.47.89)
16:11:03 gentauro joins (~gentauro@user/gentauro)
16:19:21 mvk joins (~mvk@2607:fea8:5c9a:a600::1c6d)
16:21:25 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
16:22:08 chiselfuse joins (~chiselfus@user/chiselfuse)
16:29:36 razetime joins (~quassel@117.254.37.99)
16:31:47 × riatre quits (~quassel@2001:310:6000:f::5198:1) (Ping timeout: 246 seconds)
16:32:51 riatre joins (~quassel@2001:310:6000:f::5198:1)
16:32:51 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds)
16:39:35 acidjnk joins (~acidjnk@p200300d6e7072f45448198b239e9f563.dip0.t-ipconnect.de)
16:40:33 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Ping timeout: 252 seconds)
16:42:00 Simikando joins (~Simikando@adsl-dyn1.91-127-51.t-com.sk)
16:48:37 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
16:49:54 × danse-nr3_ quits (~francesco@151.57.235.234) (Ping timeout: 252 seconds)
16:50:05 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 245 seconds)
16:51:35 artem joins (~artem@2601:249:4380:8950:f474:e3f8:9806:671)
16:52:30 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
16:53:23 YuutaW joins (~YuutaW@mail.yuuta.moe)
16:54:07 × razetime quits (~quassel@117.254.37.99) (Ping timeout: 245 seconds)
16:54:47 razetime joins (~quassel@117.254.37.17)
16:56:46 random-jellyfish joins (~random-je@user/random-jellyfish)
16:57:57 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
17:00:24 jmcantrell joins (~weechat@user/jmcantrell)
17:00:31 × razetime quits (~quassel@117.254.37.17) (Ping timeout: 246 seconds)
17:01:58 razetime joins (~quassel@117.254.37.190)
17:03:02 <justsomeguy> What Haskell language features do I need to know to use this library? https://amazonka.brendanhay.nz/ I'm trying to launch an EC2 instance on AWS, but the examples seem impenetrable right now.
17:07:29 danza joins (~francesco@151.19.255.162)
17:10:15 × thegeekinside quits (~thegeekin@189.180.79.225) (Ping timeout: 252 seconds)
17:10:32 <juri_> when in doubt, find someone else who used it, and see what they did?
17:10:35 × fryguybob quits (~fryguybob@cpe-24-94-50-22.stny.res.rr.com) (Quit: leaving)
17:11:04 thegeekinside joins (~thegeekin@189.128.149.137)
17:12:51 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
17:13:12 jmcantrell joins (~weechat@user/jmcantrell)
17:13:42 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:14:57 mud joins (~mud@user/kadoban)
17:15:09 fryguybob joins (~fryguybob@cpe-24-94-50-22.stny.res.rr.com)
17:18:39 <justsomeguy> All the examples I found were for an older version of the library that used different imports and exposed diffferent functions. There are some examples in the repo, but they all use Conduit, language extensions, lens, monad transformers...
17:19:02 <justsomeguy> I don't see a forum, irc channel, or anything like that...
17:20:00 <justsomeguy> I suppose I can file a GitHub issue to add some newbie friendly examples.
17:20:34 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
17:21:21 razetime_ joins (~quassel@117.254.37.38)
17:21:37 × razetime quits (~quassel@117.254.37.190) (Ping timeout: 258 seconds)
17:25:13 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
17:25:56 jmcantrell joins (~weechat@user/jmcantrell)
17:26:12 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
17:27:06 × razetime_ quits (~quassel@117.254.37.38) (Ping timeout: 245 seconds)
17:30:01 razetime joins (~quassel@117.254.36.88)
17:32:04 × oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Quit: oo_miguel)
17:33:44 oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl)
17:36:04 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:36:06 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 252 seconds)
17:38:13 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
17:38:13 × artem quits (~artem@2601:249:4380:8950:f474:e3f8:9806:671) (Read error: Connection reset by peer)
17:38:34 Lycurgus joins (~juan@user/Lycurgus)
17:40:19 jinsun joins (~jinsun@user/jinsun)
17:42:10 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 246 seconds)
17:42:42 × razetime quits (~quassel@117.254.36.88) (Ping timeout: 252 seconds)
17:44:26 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.0.4)
17:44:46 jmcantrell joins (~weechat@user/jmcantrell)
17:45:33 YuutaW joins (~YuutaW@mail.yuuta.moe)
17:49:13 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:51:21 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c) (Remote host closed the connection)
17:59:19 CiaoSen joins (~Jura@2a05:5800:29d:c900:664b:f0ff:fe37:9ef)
18:01:57 × Square2 quits (~Square4@user/square) (Ping timeout: 252 seconds)
18:05:54 jabuxas joins (~jabuxas@user/jabuxas)
18:08:09 briandaed joins (~briandaed@185.234.210.211.r.toneticgroup.pl)
18:09:16 × Simikando quits (~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
18:11:56 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Tschüss)
18:22:04 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
18:22:37 × danza quits (~francesco@151.19.255.162) (Read error: Connection reset by peer)
18:22:44 × jabuxas quits (~jabuxas@user/jabuxas) (Quit: Leaving.)
18:23:52 danza joins (~francesco@151.37.224.108)
18:27:45 ft joins (~ft@80.141.182.88)
18:31:02 <dsal> justsomeguy: Mostly just generic lens. It's pretty eays.
18:31:05 <dsal> ez
18:31:25 <dsal> I use it for mostly s3 and a bit of sqs and lambda.
18:32:55 <[exa]> hey guys just checking, is this a thing with any consequences or was it a onetime scream? https://www.simplehaskell.org/
18:33:11 <dsal> It's not even a thing.
18:33:28 <dsal> I was working on a project that thought it was very important, but I couldn't find any two people who could agree on what it meant.
18:34:51 <dsal> If you dig into some of the pages, you'll find a few different people who've said what simple things they think are important. And then you do the venn diagram and you end up with regular Haskell.
18:35:06 <[exa]> yeah I kinda suspected.
18:36:23 <dsal> It ended up being a nightmare. Some of the things the Guy Who Cared demanded were on most of the lists of things to avoid, and some of the things he forbade were on most of the lists of things to use.
18:37:56 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
18:44:14 <danza> i saw a mention to that project in a post linked today in haskell weekly, but i found the principles listed in that post as vague as the concept of "simple haskell"
18:46:03 <danza> this is the post dev.to/zelenya/do-your-values-align-with-fp-values-48l9, for reference
18:48:12 <danza> i have several issues with it, besides writing about values in an handwavy way, but the vagueness relates to what you were chatting about
18:51:50 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c)
18:52:46 × hyvoid quits (~hyenavoid@222-0-178-69.static.gci.net) (Remote host closed the connection)
18:53:13 hyvoid joins (~hyenavoid@222-0-178-69.static.gci.net)
18:54:20 Pickchea joins (~private@user/pickchea)
18:56:05 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c) (Ping timeout: 246 seconds)
18:56:13 <[exa]> also lots of "man I wish ghc was simple" vibes.... :]
18:58:16 justsomeguy joins (~justsomeg@user/justsomeguy)
19:04:01 azimut joins (~azimut@gateway/tor-sasl/azimut)
19:04:07 × jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 245 seconds)
19:06:24 jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
19:09:25 myxos joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com)
19:09:42 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
19:10:07 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
19:16:13 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
19:16:30 azimut joins (~azimut@gateway/tor-sasl/azimut)
19:20:00 × td_ quits (~td@i5387091D.versanet.de) (Ping timeout: 256 seconds)
19:21:38 td_ joins (~td@i53870920.versanet.de)
19:23:25 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
19:24:01 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
19:29:43 caryhartline joins (~caryhartl@168.182.58.169)
19:30:46 <EvanR> simple haskell is one of the stages in the evolution of a haskell programmer
19:30:59 <EvanR> check that out to see simple haskell
19:32:27 <geekosaur> when we're talking about haskell, are we talking about haskell or are we talking about pseudo-idris?
19:39:11 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2)
19:46:10 <monochrom> Unpopular opinion: Once again programmers forget that the meaning of "simple" is "it depends".
19:48:01 <EvanR> "Industrial Haskell users are realizing that the key to delivering software on time and under budget is to keep it simple" wait a minute here. I haven't seen an industrial haskell thing yet that wasn't a monstrous complexity thing
19:48:13 <EvanR> so maybe this is aspirational
19:48:19 <EvanR> instead of empirical
19:49:11 <EvanR> in a haskell job interview I mentioned I like to keep my haskell code simple, I didn't get the job!
19:51:21 <monochrom> Have we seen an industrial haskell thing that is over time and/or over budget? :)
19:51:53 <monochrom> In fact, how do you define over budget in the first place?
19:53:30 <monochrom> The Chicago school of economics correct observe that everyone just complains "your product is overpriced, my product is underpriced" all the time anyway.
19:53:39 <geekosaur> s/industrial haskell thing/industrial software thing/
19:53:44 <EvanR> I've never heard of *under* budget. Only costs increase to meet the budget supplied
19:56:09 <monochrom> One more unpopular opinion: The key to on time and under budget is to aim for less. If anything needs to be simple, it should be the spec.
19:56:25 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:57:23 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
19:57:58 artem joins (~artem@2601:408:c408:6d23:f474:e3f8:9806:671)
19:58:19 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
19:58:25 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
20:01:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:01:28 × powderhorn quits (~powderhor@207-153-12-54.static.fttp.usinternet.com) (Quit: Client closed)
20:01:46 × artem quits (~artem@2601:408:c408:6d23:f474:e3f8:9806:671) (Read error: Connection reset by peer)
20:09:44 Guest24 joins (~Guest24@worthwhile.mesher.volia.net)
20:09:49 Guest_Artem joins (~Guest_Art@178.92.98.167)
20:10:17 Guest_Artem is now known as Artem
20:11:48 <ddellacosta> simple is so contextual, I don't see how anyone can identify some subset of Haskell that qualifies as "Simple"
20:13:01 × Nixkernal quits (~Nixkernal@119.4.193.178.dynamic.wline.res.cust.swisscom.ch) (Ping timeout: 260 seconds)
20:13:11 <dolio> Seems like marketing.
20:14:06 <dolio> 'I read some headlines/reddit comments that Haskell requires PhDs, but this group is keeping it simple.'
20:16:39 <EvanR> the K.I.S principle. Coined here and now
20:17:54 <tomsmeding> arguably the "stupid" part here would mean that the spec is simple
20:18:15 <tomsmeding> after all, what else would it mean for a program to be stupid than that it does just simple things
20:18:34 <tomsmeding> (apart from doing the wrong thing, but that's not what this "stupid" refers to)
20:19:59 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
20:21:33 <dsal> We go through so much stuff to avoid using lens. Because doing a lot of stuff is more simple than just using a lib.
20:21:38 × briandaed quits (~briandaed@185.234.210.211.r.toneticgroup.pl) (Remote host closed the connection)
20:22:22 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
20:23:15 pavonia joins (~user@user/siracusa)
20:23:23 <tomsmeding> I mean, when I encounter a particularly jargon- or notation-heavy (for me) piece of maths, I do sometimes expand the notation into simpler concepts first, then try to understand it that way
20:23:27 <tomsmeding> this is not always successful
20:24:07 <tomsmeding> but if the jargon/notation is halfway decent, getting past the initial hurdle will make the maths more understandable _with_ the notation
20:24:09 <Artem> ghci> [x | x<-[0..], x<5]
20:24:10 <Artem> 
20:24:10 <Artem> [0,1,2,3,4Interrupted.
20:24:11 <Artem> Are there any languages or extensions for haskell that can perform such reasonings.
20:24:31 <geekosaur> not for haskell, haskell is not mathematica
20:25:10 <geekosaur> it does not reason about your expressions, and laziness by itself cannot prove that `x<5` will never become `True` again
20:25:11 <tomsmeding> Artem: that kind of reasoning _is_ basically a theorem prover
20:25:27 <tomsmeding> because what if the "<5" was "satisfies some weird math theorem"
20:25:44 <dolio> Like the halting problem.
20:25:45 <monochrom> This is why I don't say "expand definition into simpler terms", I say "expand definition into more elementary terms".
20:25:51 <ncf> > takeWhile (< 5) [0..]
20:25:52 <lambdabot> [0,1,2,3,4]
20:26:02 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
20:26:22 <monochrom> Some of the advanced definitions and abstractions are there to simplify things. Elementary is not always simple.
20:26:39 <tomsmeding> Artem: hence you will find this kind of reasoning in theorem provers: mathematica can do very specialised reasoning about mostly analysis, but more general provers are e.g. SMT solver like Z3
20:26:49 <tomsmeding> monochrom++
20:27:36 <Artem> got it, thanks
20:28:15 <tomsmeding> anyway about the simple/elementary stuff, my point was that not wanting to use lens may be the same desire to reduce to elementary terms to avoid having to learn heavy notation
20:28:28 <dolio> Sometimes you have to do the opposite, though. Mathematicians have pre-expanded things into complicated 'elementary' terms because their idea is classically trivial. :)
20:28:32 <tomsmeding> but after the learning curve, applications that benefit significantly from lens are probable actually _more_ readable
20:28:33 <monochrom> Whenever you see a paper that says "an elementary proof of theorem foo" you know it is going to be a messy, precisely because sticking only to elementary backgrounds and "only the 500 most common English words that are 4 letters each or less" and that sort of things.
20:28:50 tomsmeding has never used lens in anger
20:29:08 × dhil quits (~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 256 seconds)
20:29:41 × Artem quits (~Guest_Art@178.92.98.167) (Quit: Client closed)
20:30:06 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
20:30:50 Guest_Artem joins (~Guest_Art@167-98-92-178.pool.ukrtel.net)
20:31:03 <dsal> tomsmeding: I've got a data structure that contains a list of two different types of items which have ~16 types of subitems each of which contains other type-specific types, though many of these different things have bits in common. I have to do things like add up all of the a.[b].[c].d's which would just be `sumOf (folded b . _Something . folded c . d) a` but that's hard to read, so just write a lot of code instead.
20:31:42 <tomsmeding> dsal: I'm not arguing against using lens
20:31:45 × Guest24 quits (~Guest24@worthwhile.mesher.volia.net) (Quit: Client closed)
20:31:49 <dsal> Nah, I just mean I have a really good use case. :)
20:31:53 <dsal> But it's "bad"
20:32:10 <dsal> We do use OverloadedRecordDot, which I dislike quite a bit, but am at least putting to _some_ good use in here.
20:32:10 × Guest_Artem quits (~Guest_Art@167-98-92-178.pool.ukrtel.net) (Client Quit)
20:32:16 <geekosaur> crazy. I mean, I can read that and I am no lens expert
20:32:20 <tomsmeding> I'm basically verbosely arguing that people that refuse to use lens are basically just unwilling to learn something with a steeper learning curve :p
20:32:25 <tomsmeding> in which case it's weird that they're in haskell
20:32:38 <tomsmeding> geekosaur: but can you write it
20:32:41 <dsal> They argue that they don't want _other people_ to have to learn to read something new.
20:32:45 <geekosaur> maybe
20:32:47 <dolio> I've been confused about that kind of thing for a long time.
20:32:55 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
20:32:56 <ddellacosta> I mean, I think lens is a perfect example of something that can make your code a lot simpler, or a lot more complex, depending on your use-case and how you use it. It's a perfect example of why I don't think you can pin down what "simple Haskell" is
20:33:04 <dsal> You can do some really weird things with lens. That's the bad part.
20:33:18 <ddellacosta> but I don't fault people for not wanting to learn it either, it's a lot
20:33:38 <dsal> I agree up until the part where we work very hard all the time to avoid it. heh
20:33:55 <ddellacosta> yeah I mean to be fair there are good reasons for that in general
20:34:16 <dsal> HasField is pretty handy for one very small use case, but it's the one I generally don't care all that much about.
20:34:26 jmdaemon joins (~jmdaemon@user/jmdaemon)
20:34:42 <dolio> I still structure things using ideas from lens even when not using lens much. Like, write a traversal over something and derive a bunch of other functions from it.
20:35:30 <dsal> Yeah, once it seeps into you, you do see how it simplifies a few patterns.
20:35:42 <dolio> That's the important part of lens, to me.
20:36:33 <dolio> Always write a traversal over something.
20:36:36 <dsal> I end up doing stuff like the above by translating my lens code to just manual folds and stuff and it's… not that bad. Just feels unnecessary.
20:36:59 <dolio> Otherwise you'll end up writing like 3 other functions that have the same structure eventually.
20:40:27 <dolio> Then lens has some nice stuff for deriving the other things from the traversals, instead of wrapping them manually.
20:40:44 <dolio> Also maybe auto-writing the traversals in the first place.
20:40:51 <dsal> Simple Haskell Guy would always put me against the least-motivated junior developer and compare a simple toListOf kind of thing vs. ~10 lines of code to compare them. I had written something in a test like `thing ^.. stuff . folded . otherStuff . folded . _Just . foo` and the guy just declared he couldn't understand that.
20:41:21 <tomsmeding> I mean I don't
20:41:23 <dsal> So I walk through it and when I got to _Just I handwaved it as "this is a maybe and we just want the Just value" and Simple Haskell Guy interrupts me to explain that this is actually a prism and to explain what a prism is and all that.
20:41:32 <tomsmeding> but that doesn't mean much because I've never actually used lens :D
20:41:59 mechap joins (~mechap@user/mechap)
20:42:25 Square2 joins (~Square4@user/square)
20:42:27 <dsal> Yeah, sure. I'm fine with people encountering stuff they don't immediately understand. I just don't think it makes sense to spend an hour arguing over a test assertion that I ended up having to spend another couple hours on writing in a way that Simple Haskell Guy thought was acceptable because Unmotivated Guy didn't immediately know what _Just meant.
20:43:06 × gatekempt quits (~gatekempt@user/gatekempt) (Ping timeout: 252 seconds)
20:43:14 <dsal> Simple Haskell Guy was a _huge_ test advocate who didn't test his code very well and seemed to be a little annoyed when I did.
20:45:12 <geekosaur> this sounds to me like a "bail now" moment in the making
20:45:49 <mauke> court later
20:46:23 <dsal> He also had this weird theory about how you should have separate config concepts for parameters and config files and runtime config. Unmotivated Guy followed that pattern and we basically had 2-3 structures that were roughly identical except for like, one field and a function that plucked each field from A to B every time you changed something. So I introduced a "type parameter" and a type changing record change for that one field.
20:47:10 <dsal> Unmotivated Guy thought that was way too complicated and we should just have pages of untested code with easily demonstrable bugs.
20:47:41 <dsal> Anyway, list of people I don't ever want to work with again ++
20:47:52 <tomsmeding> yeah that sounds like records 101
20:48:09 <tomsmeding> I'd call that a _low-tech_ trick
20:48:41 <dsal> I think to these people "simple haskell" means I can see everything that is happening. If you have to copy each field one at a time, then you can see the fields being copied.
20:48:56 <tomsmeding> maybe they were scarred by C++
20:49:37 <tomsmeding> also "seeing everything that is happening" is subjective, why expand _Just but not foldr
20:49:39 <dsal> I honestly couldn't understand any of their motivations. I work with some people now who do things I don't like that much, but I don't think they're _dumb_.
20:50:04 mikoto-chan joins (~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be)
20:50:39 <dsal> Someone pointed this out today: https://journal.infinitenegativeutility.com/leaving-haskell-behind
20:51:46 <dsal> There's a lot of "I did a thing once and it didn't work there so I'll never use this one thing again."
20:51:49 <tomsmeding> domain name says it all?
20:52:39 <dsal> It's fairly pro-haskell. Many of the negative bits aren't wrong.
20:53:01 <dsal> And they're not even necessarily bad. Like, sometimes your code doesn't build on newer ghc.
20:55:10 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:55:27 × fendor quits (~fendor@2a02:8388:1640:be00:af83:ade1:cd40:fe7a) (Remote host closed the connection)
20:55:30 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 244 seconds)
20:57:32 waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
20:59:24 × mvk quits (~mvk@2607:fea8:5c9a:a600::1c6d) (Ping timeout: 248 seconds)
21:01:43 <ph88> in ZonedTime why is the time part a LocalTime and not UTCTime ?
21:05:33 <glguy> So that it more directly matches the written representation without math
21:05:37 <glguy> I would assume
21:07:35 <ph88> should i store UTCTime or LocalTime in my database ?
21:07:54 <ph88> i want to store the timezone too so i know in which timezone it was entered
21:08:25 <glguy> If you intend to sort by UTC times, I'd store that
21:08:56 <monochrom> I recommend UTC time and timezone unless I know what your application really needs.
21:08:56 <ph88> yes
21:09:12 <ph88> is there a type that has UTCTime and TimeZone ?
21:09:26 <EvanR> local time + timezone(offset) can be converted to UTCTime
21:09:29 <glguy> No, that wouldn't generally be useful enough to have a name, I think
21:09:43 <EvanR> UTC *is* a time zone already
21:09:55 <EvanR> UTC+0
21:10:03 <glguy> Usually if you're storing time zones it's on the users record as a viewing preference, not the event
21:10:09 <monochrom> Yeah we mean time zone of the user.
21:10:53 <monochrom> This is the fundamental difficulty of giving advice without knowing what it's for.
21:11:05 <ph88> is there any scenario in which i would want to know the timezone in which the datetime was entered ?
21:11:09 <monochrom> For example everyone should just write in Haskell. :)
21:11:16 <ph88> it's just a calendar app
21:12:00 <monochrom> When the user demands to know "remind me which timezone I used back then"?
21:12:13 <EvanR> I'm on a plane going from new york to hawaii, and enter something into the calendar
21:12:17 <EvanR> what should the timezone be
21:12:27 <EvanR> and who cares lol
21:12:54 <monochrom> which brings back to what I said about if you want your software to be on time and under budget, aim for less, e.g., simply deny that kind of demands. :)
21:13:22 <EvanR> (in that case, if anyone cares, they're out of luck, it seems)
21:13:42 <ph88> it's a hobby project
21:13:46 <monochrom> Wait, isn't ZonedTime UTC+zone?
21:13:50 <EvanR> no
21:14:01 <EvanR> that doesn't make sense
21:14:21 <ph88> the database has a type like UTCTime + TimeZone https://neo4j.com/docs/bolt/current/bolt/structure-semantics/#structure-legacy-datetime
21:14:23 <monochrom> oh it's localtime+zone
21:14:42 <monochrom> Well, like you said, isomorphic. :)
21:15:10 <EvanR> yeah you will encounter many time libraries that make no sense so beware
21:15:49 <monochrom> Why not have utc+local+zone just for the sake of completeness and remove all hairsplitting :)
21:15:55 <monochrom> @quote monochrom polymorphic
21:15:55 <lambdabot> monochrom says: All pointless debates can be settled by going polymorphic.
21:16:11 <EvanR> plus absolute time, plus universal time
21:16:37 × CiaoSen quits (~Jura@2a05:5800:29d:c900:664b:f0ff:fe37:9ef) (Ping timeout: 245 seconds)
21:16:52 <ph88> i think i was wrong about the comment on the database now that i'm reading the example
21:17:54 <monochrom> hobby project => KISS => just UTC until you regret it
21:17:56 <EvanR> ph88, imagine that UTCTime values represent points in real time in real history, and LocalTime is just a Date + HH:MM:SS with no context. Both are useful for different things. And time zone (series) are the very complicated bridge between them, which you might not need for your app at all
21:18:18 <EvanR> and a Date is a square on a calendar
21:18:48 <ph88> i think utc all the way is a good idea, i'm just taking a moment to think about it
21:19:00 <geekosaur> if only time were that simple
21:20:13 <EvanR> if I were making a simple calendar app, it would just use Date and time of day. It wouldn't need to know anything about daylight savings time in my country
21:20:48 <EvanR> would work as long as my appointment isn't across state lines, esp arizona area where time is super messed up
21:22:18 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
21:22:25 <monochrom> Wait, I thought Illinois was messed up. :)
21:23:02 <geekosaur> actually I think illinois is the easy one, they just don't do daylight/summer time
21:23:10 <EvanR> northern arizona time doesn't correspond to california, utah, new mexico, or navajo time
21:23:39 × todi quits (~snuckls@p4fd1a580.dip0.t-ipconnect.de) (Remote host closed the connection)
21:24:08 <EvanR> the visitor center just puts those 4 clocks up and calls it a day
21:27:06 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
21:27:57 artem joins (~artem@2601:249:4380:8950:f474:e3f8:9806:671)
21:27:57 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
21:28:30 × michalz quits (~michalz@185.246.207.203) (Remote host closed the connection)
21:28:57 <ph88> Sat Sep 17 2112 23:53:47 GMT+0000 the moment where javascript can not accurately encode unix epoch in a 52bit mantissa of the floating point ^^
21:29:57 mvk joins (~mvk@2607:fea8:5c9a:a600::1c6d)
21:30:27 Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
21:30:36 <EvanR> interesting
21:30:44 <EvanR> I'll mark my calendar. In something other than javascript
21:30:53 <ph88> xD
21:39:14 <EvanR> hmm, localTimeToUTC utc (LocalTime (fromGregorian 2112 9 17) (TimeOfDay 23 53 47)) `diffUTCTime` posixSecondsToUTCTime 0 gives 4503599627s
21:39:19 <EvanR> are you sure that can't fit in a double
21:39:33 <EvanR> 52 is a lot of bits
21:40:38 <mauke> doesn't javascript use milliseconds?
21:41:31 <EvanR> after multiplying that number by 1000 and taking the log base 2 I get 42.0something
21:41:53 <monochrom> Y2.1K
21:42:08 <EvanR> ^
21:42:28 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Remote host closed the connection)
21:42:46 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
21:44:41 <hpc> > 2**52
21:44:43 <lambdabot> 4.503599627370496e15
21:45:19 <hpc> > 2**52 `div` 60 `div` 60 `div` 24 `div` 365
21:45:21 <lambdabot> error:
21:45:21 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M461004017431...
21:45:21 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
21:45:39 <hpc> > 2**52 / 60 / 60 / 24 / 365
21:45:41 <lambdabot> 1.4280820736207813e8
21:45:42 <mauke> > 2^52 `div` 60 `div` 60 `div` 24 `div` 365
21:45:43 <lambdabot> 142808207
21:45:49 <hpc> that's a lot of years
21:46:17 <EvanR> 4503599627... 4.503599627370496e15 ... probably just numerical coincidence as usual
21:48:04 <hpc> off by a factor of 1e6
21:50:21 × acidjnk quits (~acidjnk@p200300d6e7072f45448198b239e9f563.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
21:51:16 jabuxas joins (~jabuxas@user/jabuxas)
21:55:22 × artem quits (~artem@2601:249:4380:8950:f474:e3f8:9806:671) (Read error: Connection reset by peer)
21:55:26 ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net)
21:56:24 × mikoto-chan quits (~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be) (Ping timeout: 256 seconds)
21:59:56 × mvk quits (~mvk@2607:fea8:5c9a:a600::1c6d) (Ping timeout: 245 seconds)
22:02:59 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.0.4)
22:10:06 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
22:15:31 × zmt01 quits (~zmt00@user/zmt00) (Quit: Leaving)
22:18:13 mvk joins (~mvk@2607:fea8:5c9a:a600::1c6d)
22:18:44 zmt00 joins (~zmt00@user/zmt00)
22:19:33 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
22:20:05 chiselfuse joins (~chiselfus@user/chiselfuse)
22:25:02 danza_ joins (~francesco@151.43.233.134)
22:27:41 × danza quits (~francesco@151.37.224.108) (Ping timeout: 250 seconds)
22:34:18 hgolden joins (~hgolden@2603:8000:9d00:3ed1:fc05:5499:f77c:fbe5)
22:38:45 mikoto-chan joins (~mikoto-ch@85-76-17-199-nat.elisa-mobile.fi)
22:40:34 <ph88> https://stackoverflow.com/a/11526569/1833322
22:40:53 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:41:09 <ph88> don't know where they pull that extra bit from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
22:41:28 <ph88> i was using a website that did the date calculation other than i expected to the date i mentioned is bs
22:43:12 × mikoto-chan quits (~mikoto-ch@85-76-17-199-nat.elisa-mobile.fi) (Ping timeout: 240 seconds)
22:45:03 mikoto-chan joins (~mikoto-ch@85-76-17-199-nat.elisa-mobile.fi)
22:45:53 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:49:49 <shapr> Anyone going to ICFP this year?
22:54:16 <ph88> hi shapr how are you ?
22:55:35 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c)
22:55:37 <int-e> ph88: there's an implicit 1 in front of the mantissa in IEEE floats (except for denormals at the very low end), so you get a leading 1, followed by 52 more 1 bits, giving 2^53 - 1. (You also get 2^53 itself, but not 2^53 + 1)
22:55:38 texasmynsted joins (~username@99.96.221.112)
22:56:45 × mima quits (~mmh@aftr-62-216-211-62.dynamic.mnet-online.de) (Ping timeout: 252 seconds)
22:59:26 Axman6 joins (~Axman6@user/axman6)
22:59:39 <ph88> what is that implicit bit ?
22:59:56 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:4421:6684:8924:105c) (Ping timeout: 248 seconds)
23:01:42 × oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 252 seconds)
23:02:08 × xff0x quits (~xff0x@2405:6580:b080:900:37fd:a033:abd0:1c4f) (Ping timeout: 256 seconds)
23:04:00 xff0x joins (~xff0x@178.255.149.135)
23:04:37 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
23:06:00 <int-e> ph88: The normal case is that you start with 1., then append the 52 mantissa bits, and the multiply by 2^(e-1023), where e is the 11 exponent bits interpreted as an unsigned integer.
23:06:16 <int-e> So that '1.' part is the implicit 1 bit.
23:07:13 tomith joins (tomith@user/tomith)
23:08:02 <ph88> thanks int-e
23:08:03 <ph88> good thing we all moved to 64bits cpus :p
23:08:26 <int-e> The denormal case has e=0, and there you start with 0., then append the mantissae bits, and multiply be 2^-1022. In particular this gives you 0.
23:08:53 <int-e> And e = 2047 is used for infinities and NaNs, which are not relevant here.
23:09:13 <int-e> (And I've ignored the sign bit.)
23:09:31 wroathe joins (~wroathe@user/wroathe)
23:10:29 <shapr> ph88: I'm surviving, how are you?
23:12:03 <ph88> shapr, same not just dead yet
23:14:42 <shapr> glad to hear it
23:14:51 artem joins (~artem@73.145.241.47)
23:17:37 TheCatCollective parts (NyaaTheKit@user/calculuscat) (Meow Meow Meow Meow Meow Meow Meow Meow)
23:17:49 × ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Ping timeout: 246 seconds)
23:21:43 ulysses4ever joins (~artem@2601:408:c408:31c3:f474:e3f8:9806:671)
23:21:43 × artem quits (~artem@73.145.241.47) (Read error: Connection reset by peer)
23:23:06 artem joins (~artem@73.145.241.47)
23:23:06 × ulysses4ever quits (~artem@2601:408:c408:31c3:f474:e3f8:9806:671) (Read error: Connection reset by peer)
23:24:28 × mvk quits (~mvk@2607:fea8:5c9a:a600::1c6d) (Ping timeout: 248 seconds)
23:25:50 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
23:26:54 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:27:06 Sgeo joins (~Sgeo@user/sgeo)
23:27:33 × artem quits (~artem@73.145.241.47) (Ping timeout: 252 seconds)
23:28:59 ulysses4ever joins (~artem@c-73-161-6-146.hsd1.mi.comcast.net)
23:29:12 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
23:30:12 artem joins (~artem@73.145.240.136)
23:33:03 × Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
23:33:21 × ulysses4ever quits (~artem@c-73-161-6-146.hsd1.mi.comcast.net) (Ping timeout: 246 seconds)
23:34:16 × artem quits (~artem@73.145.240.136) (Ping timeout: 246 seconds)
23:34:42 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 252 seconds)
23:35:07 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
23:36:06 L29Ah joins (~L29Ah@wikipedia/L29Ah)
23:36:23 xff0x joins (~xff0x@2405:6580:b080:900:37fd:a033:abd0:1c4f)
23:36:59 ulysses4ever joins (~artem@73.145.240.45)
23:43:05 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
23:44:15 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
23:45:49 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
23:54:52 <EvanR> int-e, great explanation thanks.

All times are in UTC on 2023-08-24.